비슷한 상품 추천 시스템
사용자가 클릭한 상품과 비슷한 상품들을 다양한 추천 지면들에 실시간으로 노출시키는 시스템 개발에 참여했습니다. 홈 지면 추천 영역, 상품 상세 지면 추천 영역에서 발생한 전체 클릭 수를 각각 13%, 9% 증가시킨 시스템 개발 과정을 설명합니다.
Situation
상품 상세 화면 내 추천 지면에서 유저들의 반응이 기대보다 저조했고, 그 원인으로 기존 추천 영역에 적용되어 있던 협업 필터링 기반 알고리즘이 지목되었습니다. "다른 사용자들이 함께 본 상품"을 추천하는 협업 필터링 알고리즘의 로직은 "사고 싶은 상품이 명확한 상태에서 비슷한 조건의 대안을 비교하며 구매한다"는 번개장터 사용자의 행동 패턴과 잘 부합하지 않았기 때문에, 사용자가 클릭한 상품과 속성이 유사한 상품을 콘텐츠 기반으로 추천하는 알고리즘이 필요했습니다.
Task
- 상품 벡터 정의 : 이 알고리즘의 핵심은 "사용자가 클릭한 상품과 유사한 상품"을 찾는 것이므로, 카테고리·브랜드· 가격·상품 제목 텍스트 등 상품의 다차원 속성을 의미적으로 가까운 상품끼리 가까이 위치하는 단일 벡터 공간으로 통합 표현할 수 있어야 했습니다.
- 도메인 적합성 : 공개 사전학습 텍스트 인코더는 번개장터 도메인의 어휘 분포를 반영하지 못한 데이터로 학습되었기 때문에, 어차피 도메인 데이터를 추가학습시켜야 했습니다. 이에 더해, 공개 인코더는 백본 모델 사이즈가 그대로 운영 비용의 하한을 결정하기 때문에, 처음부터 도메인·태스크에 맞춰 설계된 경량 인코더를 구축했습니다.
- 운영 비용 : 추천 추론은 24/7 상시 운영되는 호출량 높은 구성요소이므로, 비용 부담을 줄이기 위해 적은 CPU 리소스만으로도 안정적으로 구축할 수 있는 시스템이 선호되었습니다.
Action
Result
구현한 알고리즘은 상품 상세 화면 하단 추천 영역의 첫 번째 컨테이너에 최초 도입되었습니다. 기존에는 해당 자리에 협업 필터링 알고리즘으로 상품 벡터들을 미리 학습해 유사 상품을 추천하는 시스템이 운영되고 있었습니다. 이 방식은 신규 등록 상품처럼 벡터가 아직 학습되지 않은 상품에 대해서는 추천을 제공할 수 없어, 성능이 낮은 fallback 알고리즘이 노출되는 경우가 자주 발생했습니다.
반면, 구현한 알고리즘은 상품 단위 벡터를 미리 학습하는 대신, 상품 제목·카테고리·브랜드·가격·사이즈 같은 상품 속성을 입력으로 받아 추론 시점에 벡터를 생성합니다. 따라서 신규 등록 상품도 학습 없이 즉시 벡터화되어 추천 대상으로 활용될 수 있어, 기존 알고리즘의 cold start 한계를 해소할 수 있었습니다.
기존 알고리즘과의 A/B 테스트 결과 일평균 CTR이 기존 알고리즘 대비 30% 높아 기존 알고리즘을 대체했습니다. 그 결과, 해당 추천 영역에서 발생하는 상품 클릭 수가 크게 증가했고, 상품상세 페이지 전체에서 발생하는 인당 상품 클릭 수를 기존 대비 6% 가량 증가시켰습니다. 이 성과를 근거로 현재는 동일 알고리즘이 홈 추천 영역에서 최근 클릭한 상품과 비슷한 상품을 추천하는 슬롯으로 확장 적용되어 사용되고 있습니다.
이후 임베딩 품질을 저하시키고 있던 버그를 수정하며 텍스트 인코더를 재설계했고, 그 결과 홈, 상품상세 추천 지면의 사용자 engagement 지표 변화가 다음과 같이 관측되었습니다.
- 홈 추천 영역: 기존 대비 추천 영역 전체 클릭 수 13% 증가해 CTR 10.2% 증가, 추천 영역 클릭 사용자 비율 10.4% 증가
- 상품 상세 추천 영역: 기존 대비 추천 영역 전체 클릭 수 9% 증가해 CTR 4.1% 증가, 추천 영역 클릭 사용자 비율 3.6% 증가