본문 바로가기
[기획자 시선]

Day6. (2) 무신사에서 VoC 대시보드 제작하기 by 검색플랫폼팀

by 수제팥앙금 2024. 5. 14.

안녕하세요, 기획자 팥씨입니다.

오늘은 어제에 이어 무신사에서 VoC 대시보드를 제작한 글에 대해 다뤘습니다.

 

총 2편으로 구성되어 있어 (1) UX 파트 (2) 검색플랫폼팀으로 다뤄보겠습니다.

 

Part1. UX 파트가 소개하는 VoC 자동화 분류의 필요성

 Part2. 검색플랫폼팀이 소개하는 VoC 대시보드 실제 구축 과정

 

 

 

고객의 목소리를 한 눈에 볼 수 있도록: 무신사의 VoC 대시보드 제작기 Part2. by 검색플랫폼팀

‘검색플랫폼팀’이 UX파트와 함께 무신사의 VoC를 자동분류하고 대시보드화 한 경험을 다룹니다. Part2인 이번 글에서는 AWS Comprehend를 사용하여 실제 대시보드를 구축한 과정을 소개합니다.

medium.com

좋은 글 공유해주신 무신사 검색플랫폼 팀 감사합니다.☺️

 

1탄의 글을 빌려와보자면, UX 파트의 요구사항은 다음과 같았습니다. 

2024.05.13 - [[기획자 시선]] - [30일 챌린지] Day5. (1) 무신사에서 VoC 대시보드 제작하기 by UX 파트

 

[30일 챌린지] Day5. (1) 무신사에서 VoC 대시보드 제작하기 by UX 파트

안녕하세요, 기획자 팥씨입니다. 오늘은 무신사에서 제품분석경험팀 UX 파트와 검색플랫폼팀이 무신사의 VoC를 자동분류한 내용입니다. 총 2편으로 구성되어 있어 (1) UX 파트 (2) 검색플랫폼팀으

yujinwhomakes-anko.tistory.com

 

요건 1. VoC 데이터의 자동 분류
- 담당자의 주관이 개입하지 않는 자동 분류 과정 필요
- 불필요한 작업시간 단축으로 데이터 효율적 관리 기대

요건 2. 누구나 손쉽게 조회 가능
- 사내 구성원 누구나 리서치 VoC 데이터에 쉽게 접근할 수 있도록

요건 3. 검색 및 분류별 필터링 등 필요한 최소 기능 정의
- 다량의 데이터를 효과적으로 시각화해 인사이트 파악을 돕는 기능
- 필요한 기준으로 찾을 수 있는 키워드 검색 기능
- 분류 항목별 필터링 기능
- CSV 다운로드 기능

 

[상황]

  • 1020의 사용자가 전체의 약 60%
    • VoC는 다양한 형태의 문장으로 수집되고 있음.
    • 수집된 VoC는 제품경험분석팀에서 28개의 카테고리로 분류 중
  • VoC의 핵심 키워드 (ex.'검색', '리뷰' 등)를 추출해 작업하기로 함. 
    • 문장이 뜻하는 카테고리로 분류하기 위해서는, 문장 전체의 내용보다는 구성하고 있는 키워드가 중요하다고 판단

 

문제 1 | 카테고리의 핵심키워드는 어떻게 정의할 수 있을까

 

카테고리별 문장들을 모두 모아 많이 사용된 단어를 뽑으면 될 것 같지만, 

단순히 많이 사용된 키워드라고 핵심 키워드로 보기는 어려움.

ㄴ ex. '무신사', '상품' 같은 단어는 빈번하게 사용되지만 핵심키워드는 아님.

 

해결 1 | ES - Significant terms aggregation

ex. 100건의 VoC 문장 중 '리뷰'라는 단어가 70건의 문장으로 후기 카테고리에,

10건의 문장으로 다른 카테고리에 있다면

--> 상대적으로 '리뷰' 단어는 후기 카테고리에 더 의미 있는 키워드라고 판단하는 방법.

--> '무신사' 처럼 모든 카테고리의 문장에 분포되어있는 키워드는 순위가 낮아 핵심키워드로 취급 X

--> Elastic Search 에 'Significant terms aggregation' 기능 통해 위 방법 제공 중

 

문제 2 | 카테고리의 핵심 키워드 간 중복

막상 키워드를 추출해보니, 카테고리의 핵심 키워드 간 중복이 있다는 것을 알게 됨.

쿠폰, 가격/세일 카테고리 모두 핵심 키워드로 '할인'이라는 키워드를 가지는 상황에서,

단순히 핵심 키워드만을 고려하여 카테고리 분류를 수행하기 어려움.

-> Significant terms aggregation에서 추출된 핵심 키워드 내 우선순위 분류 필요

 

해결 2 | 중요도를 기준으로 가중치 상/중/하 키워드 분리

 

핵심키워드처럼 의미있는 키워드를 세분화하여, 중요도를 기준으로 3단계로 키워드 분리

 

- 가중치 '상' : 가중치 '중'에 해당하는 키워드 중, 임의로 중요도가 높은 키워드들 선별

- 가중치 '중' : 가중치 '하'에 해당하는 키워드 중 임의로 중요도가 있는 키워드들 선별

- 가중치 '하' : 일반 Significant terms aggregation 에서 추출된 키워드

 

1. 핵심키워드가 중요키워드보다 우선되도록

2. 문장을 구성하는 키워드가 카테고리의 키워드 그룹과 더 많이 일치할수록 해당 카테고리와 연관이 있도록

 

ex."후기에 성별 필터가 갑자기 안 걸려요.. 성별+키로 조회하면 검색 가능한데
성별로만 조회하면 무조건 전체 검색결과가 나옵니다. 빠른 조치 부탁드려요..”

=> '후기' 카테고리에 1건, '검색/필터' 카테고리에 4건 일치되므로 '검색/필터' 에 속한다고 판단

 

 

문제 3 | 카테고리 분류를 자동화하기엔 낮은 정확도

 

- 현재까지의 과정을 거치며 50-60%의 정확도를 얻음.

  ㄴ 전체 문장 중 40%는 정확하게 분류하지 못함을 의미.

  ㄴ 카테고리 분류를 자동화하기엔 부족하다고 판단.

 

문제 1. 부족한 표본 데이터

    ㄴ 의미있는 키워드가 추출되려면 데이터의 양도 중요했음.

문제 2. 복합문장

   ㄴ 하나의 문장에 두가지 카테고리가 포함된 경우에는? 키워드 가중치 분류 프로세스만으로는 불충분

문제 3. 해석에 따라 달라지는 경우

   ㄴ 중의적인 표현들의 구분이 애매. 예를 들어 선호도의 '좋아요'와 무신사의 '좋아요' 기능 키워드만으로 분류 어렵

 

--> 검색엔진으로 모든 문맥을 이해하기에는 많은 규칙들이 필요할 것으로 예상

 

해결 3 | 머신러닝 AWS Comprehend 으로 카테고리 분류

 

머신러닝 도입 - AWS Comprehend 사용기

머신러닝 도입을 위해서는 환경 셋팅과 알고리즘 선택, 모델 실험 하는 등 많은 리소스가 필요.

그러한 과정 줄이기 위해 Amazon Comprehend 사용하기로 결정

 

장점 

  1. 별도의 어려운 머신러닝 환경 세팅을 하지 않아도 됩니다.
  2. 머신러닝 모델을 선택하고 해당 모델을 실험하여 최적의 모델을 찾는 것에 많은 시간과 리소스를 사용하지 않아도 됩니다.
  3. AWS Comprehend는 실시간 API방식와 비동기 배치방식으로 제공을하고 있습니다. 비동기 배치 방식을 사용하여 작업을 진행하였습니다.
🥮 실시간 API 방식? 비동기 배치 방식?

실시간 API 방식

- 실시간 API 방식은 데이터를 바로 입력하고 즉시 결과를 받는 방식입니다.
- 예를 들어, 웹사이트에 텍스트를 입력하면 AWS Comprehend가 즉시 분석을 해서 결과를 반환합니다.
- 이 방식은 빠르게 결과가 필요할 때 유용합니다.

비동기 배치 방식
- 비동기 배치 방식은 많은 양의 데이터를 한꺼번에 처리하는 방식입니다.
- 데이터를 모아서 AWS Comprehend에 보내고, 분석이 완료되기를 기다린 후 결과를 받습니다.
- 이 방식은 대량의 데이터를 처리할 때 유용하며, 결과가 즉시 필요하지 않은 경우에 사용됩니다.

비유를 들어 설명
- 실시간 API 방식은 패스트푸드 점에서 주문을 하고 즉시 음식을 받는 것과 같습니다. 바로 결과를 원할 때 사용합니다.
- 비동기 배치 방식은 우체국에서 소포를 보내는 것과 비슷합니다. 많은 양의 소포를 보내고, 도착하기를 기다렸다가 나중에 결과(도착 여부)를 받는 것이죠. 한꺼번에 많은 작업을 처리할 때 유용합니다.

 

-> AWS Comprehend 도입으로 92%라는 향상된 정답률 얻기 성공

 

남은 과제 | 제품경험분석팀에서 실무에 바로 활용할 수 있도록 하기

분석 전 데이터를 업로드하고, 결과를 내려받는 일련의 작업들이 필요

 

# 시도 1 : API 활용

- API를 제공하고, API 통해 정답셋 추가, VoC 문장의 카테고리 분류를 진행

- Swagger를 제공하여 API를 사용해서 언제든 VoC 분류를 진행할 수 있도록 함.

 

(내부환경) 가장 간단한 방법이지만, 이 작업을 담당할 개발자가 없음. 오히려 낯설고 비효율적인 방법으로 보여짐.

 

🥮 Swagger란 무엇인가?

Swagger는 소프트웨어 개발에서 API(애플리케이션 프로그래밍 인터페이스)를 쉽게 이해하고 사용할 수 있도록 도와주는 도구입니다. API는 다른 프로그램들이 서로 소통할 수 있게 해주는 규칙과 방법을 말합니다. 개발자들은 API를 통해 다른 소프트웨어나 서비스를 호출해서 특정 기능을 수행할 수 있습니다.

🥮 왜 Swagger가 중요한가?

1. 문서화: Swagger는 API의 사용 방법을 설명하는 문서를 자동으로 만들어줍니다. 이 문서에는 API를 호출하는 방법, 필요한 입력 데이터, 반환되는 결과 등이 포함됩니다. 쉽게 말해, 사용 설명서 같은 역할을 합니다.
2. 테스트: Swagger를 통해 API를 쉽게 테스트해볼 수 있습니다. 웹 브라우저에서 버튼을 클릭해서 API를 호출해보고, 결과를 확인할 수 있습니다. 개발자들은 이를 통해 API가 제대로 작동하는지 확인할 수 있습니다.

 

# 시도 2 : S3 활용

 

-  S3(Amazon Simple Storage Service)를 활용하여 엑셀 파일을 직접 업로드 하면 일괄적으로 분류 작업을 진행하도록

 

(비효율) 엑셀파일을 직접 업로드하고 다운로드 받는 등 (API를 대신해 사용) 5개의 절차를 거쳐야 한다는 점에서 커뮤니케이션 비용이 발생

 

# 시도 3. : 구글 시트 활용

 

구글 시트에 업데이트 후 분류 작업 진행 -> 구글 시트에 분류된 카테고리를 업데이트해주는 것.

(채택) 작업자도 실시간 업데이트를 통해 바로 결과를 확인할 수 있어 사용

 

기능 고도화 (시각화, 검색 등)

  1. 데이터 적재 및 표시 : VoC 분류를 위해 data들을 모두 Elasticsearch에 보관하고 있었기에 Elasticsearch API를 활용
  2. 대시보드 시각화 자료 : ES에 적재된 데이터를 Kibana 대비보드의 공유 기능을 활용해 iframe으로 그래프와 표 형태로 구현
  3. VoC 검색 기능 : API 개발을 통해 적재된 데이터를 활용한 검색 기능 개발
  4. UI 개발 : 프론트엔드 개발팀의 지원으로 API 연동 및 인터페이스 개
  5. 정보 보안 검토와 QA 작업을 마무리로, 'VoC 리포팅 페이지' 구축 완료.

 

VoC 대시보드 구축 작업의 의미

 

누구나 무신사를 이용하는 고객이 어떤 생각을 가지고 있는지,

어떤 불편함이 있는지 확인

-> 기획의 근거로 활용 가능!

 

PM의 한마디

필요한 작업이 있을 때 바로 개발을 시작해서 모델을 만드는 것도 중요하지만,

이미 마련되어 있는 도구와 라이브러리를 활용할 수 있도록 아이디어를 얻을 수 있는

다양한 커뮤니티 활동과 검색 활동도 못지않게 중요하다!