번개장터는 상품 제목이 A락 입력되면 B 카테고리를 추천하라는 규칙을 모델에 학습시키기 위해 일정 기간동안 사용자가 등록한 상품의 제목과 해당 상품이 등록된 카테고리의 쌍으로 이뤄진 데이터를 수집하였습니다.
데이터 수집 고려 사항
추천에서 제외할 카테고리 선정
카테고리별 상품 개수 상한 설정
카테고리별 상품 개수가 특정 카테고리에 치우처져 있다면 편향된 학습이 일어날 수 있습니다(비인기인 카테고리에 대한 정확도를 희생하여 인기 카테고리에 대한 정확도를 개선시키게 됨). 번개장터는 아래 세 가지 전략들 중 하나를 정해 카테고리별 상품 개수를 제한한 데이터로 모델을 학습시켰습니다.
none: 카테고리별 상품 개수 상한을 정하지 않음(현상유지)
log: 상품 개수 상한을 카테고리별 상품 개수의 로그 값에 상수를 곱한 값으로 적용
uniform: 카테고리별 상품 개수 상한을 10,000개로 일괄 적용
(그림에서 까만 점선은 10,000을 의미)
번개장터는 Precision@k를 사용하여 모델의 성능을 검증하였습니다.
** Precision@k: 추천을 k개 제공했을 때의 추천 성공률
카테고리별 상품 개수에 대한 전처리를 사용하지 않는 none 전략으로 학습시킨 모델의 성능이 가장 좋은 것처럼 보이지만, 이를 박스플롯으로 분포를 비교하면 다른 인사이트를 얻을 수 있습니다.
: Uniform 방식을 사용했을 때 박스의 세로 길이가 가장 작음 → 균등하게 좋은 추천을 제공함
번개장터는 검증 결과 전처리 방법 선택과 관계 없이 GRU가 항상 좋은 성능을 보였기 때문에 GRU 아키텍처를 선택하였습니다.
카테고리 추천 성공 및 실패 정의
성능 평가 결과(a/b test)