주제 1: CTR 상승을 위한 홈 화면 추천 시스템 구축
(1) 추천 알고리즘 후보군 선정
후보 1: 자카드 유사도를 이용한 CF
레퍼런스 탐색 과정에서 찾은 자카드 유사도를 이용하여 유저 간의 유사도를 계산하는 방법으로 이용하였습니다. 자카드 유사도의 장점은 계산이 빠르다는 점, 비교대상 리스트의 길이가 달라도 일관적인 유사도를 도출할 수 있다는 점입니다. 유저 액션이 있던 상품의 리스트로 유저 간의 자카드 유사도를 구하고, 구해진 유저들로 유저-아이템 매트릭스를 구성한 뒤 MF 방식으로 빈칸을 채워 추천 대상 유저의 다음 클릭률을 추정하였습니다. 실 추천에선, 전체 유저가 수십만 명에 달하므로, 유저간 자카드 유사도를 계산할 때 전체 유저 중 500명에 대해서만 랜덤 샘플링을 하여 자카드 유사도를 계산하여 유사한 유저를 추출하였습니다.
후보 2: NLP 기반 CBF
CBF 에서는 상품의 의미론적 유사도를 추출하기 위해 상품의 내용, 제목, 카테고리에 LM(Language Model)을 이용하였습니다. 내용은 LLM을 이용하여 요약한 뒤 sentence embedding 을, title은 keyBert 를 이용하여 키워드를 추출한 뒤 sentence embedding 을, 카테고리는 카테고리 이름에 word embedding을, 그 외 feature는 개수에 따라 label encoding 과 one-hot encoding을 이용하여 코사인 유사도를 구했습니다. NLP 를 하지 않은 feature 에는 지역, 상품의 종류 등과, 만남의 목적이 있는지에 대해 engineering을 한 feature 등이 들어갔습니다. 매일 밤에 상품 데이터가 update 된 것들을 대상으로 유사도를 다시 구하는 방식으로 실 추천을 진행했습니다.
후보 3: SASRec을 이용한 CF
자카드 유사도는 순서를 반영하지 못하는 반면, 구매에는 순서가 중요한 요인으로 작동할 수 있으므로 순서에 기반한 attention mechanism을 사용한 SASRec을 이용하였습니다. Embedding이 없는 상품이 들어오는 경우와 같은 코너 케이스를 처리하는 함수와, 원하는 개수의 output을 추출하는 함수를 제작하였습니다.
후보 4: LightGCN을 이용한 CF
유저와 프로덕트를 노드로 하고, 유저가 프로덕트에 대해 액션을 하면 둘 사이의 edge의 숫자가 커지는 그래프를 제작하였습니다. 유저와 프로덕트 embedding이 같은 차원으로 가능하고, 유저와 프로덕트의 코사인 유사도로 유저가 클릭할만한 프로덕트를 구할 수 있습니다. 유저와 프로덕트 embedding을 할 때 전체 유저의 전체 프로덕트에 대한 액션을 기반으로 각 노드 간의 연결된 숫자를 embedding vector로 나타내기 때문에 최소 전체 유저 수 x 전체 프로덕트 수만큼의 파라미터가 필요하게 됩니다. 그 결과 학습에 긴 시간이 걸렸고, 추론 시에도 대상 유저와 프로덕트 간의 내적 연산을 전체 프로덕트에 대해 하므로 시간이 오래 걸렸습니다. 이러한 이유로 실 추천에서는 배제되었습니다.
(2) 지역 가중 가중합 랭킹
기존에 노출되었던 상품들에 대한 bias를 최대한 반영하지 않기 위하여 각 후보 모델에서 생성된 점수의 가중합을 하기로 결정하였고, 가중치에 따라 A, B 를 나누어 테스트하기로 하였습니다. 유저는 본인 지역 근처가 아니어도 상품을 클릭하지만 실 결제는 해당 지역 근처에서 일어날 가능성이 높으므로 이를 고려하기 위해 유저가 최근에 한 번 이라도 클릭한 지역의 상품에만 점수에 가중치를 곱하는 방식으로 약하게 반영하였습니다.
(3) Cold-start 문제 정의와 해결
클릭 데이터가 너무 적다면 특정 주제로 쏠리는 현상이 발생하게 되며, 최초 가입 시에 태그를 선택하며 연관된 상품을 볼 것이라는 기대가 작용할 것이라 생각하였습니다. 따라서 클릭 수가 5 개 이하인 경우는 유저가 가입할 때 선택한 tag 를 기반으로 카테고리를 연결하여 각 카테고리에 해당하는 상품을 추천하였습니다.
(4) 모듈화
제작한 함수들을 실 서비스에 올리기 위해 사측과 github과 slack을 통해 빠르게 소통하며 ABTest까지 진행하였습니다. 추가적인 테스트를 위해 신규 프립에 대한 가중치와 지역에 대한 가중치를 세부적으로 조절할 수 있는 형식으로 최종 모듈을 전달하였습니다.
주제 2: 구매 전환율 상승을 위한 찜 화면 추천 시스템 구축
상품을 선택한 유저의 교집합과 합집합을 기반으로 프로덕트의 자카드 유사도를 계산하여, 찜한 상품과 유사도가 높은 상품을 추천하였습니다. 이때 유사도가 계산되지 않는 상품에 대해 자카드 유사도와 관련이 적은 feature를 input data로 하여 머신러닝으로 두 프로덕트의 자카드 유사도를 구하는 모델을 제작하였습니다.
주제 3: 구매 전환율 상승 및 CRM 자동화를 위한 유저 클러스터링
클러스터링을 기반으로 유저의 다음 구매할 확률이 높은 상품과 카테고리를 추천하였습니다. 상품의 카테고리를 통해 상품을 여러 개의 분류로 나누었습니다. 각 유저의 구매 데이터와 상품군 별 구매 비율을 통해 유저의 프로덕트 클러스터 별 선호도를 계산하였습니다. 증명 결과, 다음에도 선호도대로 구매한 비율이 충분히 높게 나타났습니다.