프립 | Frip
 
(1) CTR 상승을 위한 홈 화면 추천 시스템 구축
(2) 구매 전환율 상승을 위한 찜 화면 추천 시스템 구축
(3) 구매 전환율 상승 및 CRM 자동화를 위한 유저 클러스터링

프로젝트 소개

현재 프립의 어플리케이션에는 다양한 추천이 존재하지만 유저 개인을 위한 추천은 존재하지 않습니다. MD가 시즌 혹은 유행에 맞추어서 상품 기획전을 만들어서 제공하고 있었고 이는 모든 유저에게 동일하게 추천이 진행됩니다. 그렇기에 그로스 해커스는 클릭률 상승을 위해 홈 화면에 유저가 가장 클릭할 것 같은 상품 15개를 유저 개인의 취향에 맞추어서 추천하는 추천 시스템을 구축하였습니다.
​
 
세부 목표:
1. CTR 상승을 위한 홈 화면 추천 시스템 구축
2. 구매 전환율 상승을 위한 찜 화면 추천 시스템 구축
3. 구매 전환율 상승 및 CRM 자동화를 위한 유저 클러스터링
​
진행 프로세스

주제 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 자동화를 위한 유저 클러스터링
​
클러스터링을 기반으로 유저의 다음 구매할 확률이 높은 상품과 카테고리를 추천하였습니다. 상품의 카테고리를 통해 상품을 여러 개의 분류로 나누었습니다. 각 유저의 구매 데이터와 상품군 별 구매 비율을 통해 유저의 프로덕트 클러스터 별 선호도를 계산하였습니다. 증명 결과, 다음에도 선호도대로 구매한 비율이 충분히 높게 나타났습니다.

성과 및 인사이트
​
주제 1 - 프로세스 전체
​
image.webp
 
작성한 모듈을 실 서비스에 올려 AB TEST를 진행하였고, 이를 바탕으로 평가 지표 산출 코드를 모듈화하여 최종 전달드렸습니다.
참고문헌
​
[2] He, X., Deng, K., Wang, X., Li, Y., Zhang, Y., & Wang, M. (2020). LightGCN: Simplifying and Powering Graph Convolution Network for Recommendation. Proceedings of the 43rd International ACM SIGIR Conference on Research and Development in Information Retrieval, 639-648.
[3] Gazaya, Masahiro, Iizuka, Kojiro, & Matsumura, Yuya. (2023). Introduction to Recommender Systems: From Design to Evaluation. Translated by Kim Mose. Hanbit Media.
[4] Aggarwal, Charu C. (2022). Recommender Systems: The Textbook. Translated by Park Hee-won, Lee Ju-hee, & Lee Jin-hyung. Acon Publishing.

PM 소회

 프립과 프로젝트를 진행하며 좋았던 점은 무엇인가요?

 • 추천 시스템을 접할 수 있다는 점이 좋았습니다. 또한 저희의 활동이 실제 앱에 올라간다는 점이 좋았습니다. 슬랙을 통한 사측과의 소통이 매우 빨랐다는 것이 큰 장점이었습니다.
​
 프로젝트 진행 중 겪었던 가장 큰 어려움은 무엇이었나요? 이를 어떻게 해결했나요?
 • 저희 학회가 개발 학회는 아니기 때문에 저희가 제작한 파이썬 모델이 어떻게 앱에서 활용이 되는지에 대한 사전 지식이 부족했습니다. 따라서 앱에 올라가기 위해 고려되어야 하는 사항들을 반영하는 것이 어려웠습니다. 그러나 사측과의 지속적인 소통을 통해 코드를 수정하여 결국 저희의 모델을 앱에 활용하여 AB Test를 진행할 수 있었습니다.
​

 이번 경험을 통해 어떤 인사이트나 역량을 얻으셨나요?

 • Feature Engineering의 중요성
: 기말발표 때에도 사람과의 만남 등의 피쳐들이 있는데 찾기가 어렵다 하는 대표님의 언급이 있었습니다. 또한, 설명 가능한 유저 clustering이 데이터를 잘 접하지 않은 사람들에게 쉽게 이해시킬 수 있는 방법론이라는 점을 알게 된 것도 좋았습니다. 다음 데이터 분석 시에 유용하게 찾아볼 만한 인사이트라고 생각합니다.

 • 실제 앱을 구하는 단계에서는 현실적으로 (연산량, 업데이트 시간 등) 고려할 사항이 많다는 것을 알게 되어서 좋았습니다.
​
 향후 유사한 프로젝트를 진행할 학회원들에게 전하고 싶은 조언이 있나요?
 • 요즘은 추천시스템이 쓰이지 않는 곳을 찾기가 더 어렵지만 추천 시스템을 잘 만들기란 쉽지 않습니다. 오염되지 않은 평가지표를 얻기 어려울 뿐더러, 발전시키기 위해서는 많은 실험이 필요한 주제입니다. 그렇기에 추천 시스템 제작 과정에서 어렵고 복잡한 모델 사용을 지양하고, 데이터 분석에 기반하여 빠른 속도로 추천할 수 있는 방법론들을 찾아 반복 실행해보며 어떻게 데이터가 나오는 지 등을 보면서 점점 성능을 향상시키면 좋을 것 같습니다.
​
 • 실제 추천 결과를 반영하는 것도 좋지만, 어느정도 사측의 니즈를 만족시킬 수 있는, 직관이 반영된 특정 파라미터를 추가하는 것도 좋은 방향이라고 생각합니다.
​
 • 사측과 RNR을 정확하고 꼼꼼하게 정하여 개발적인 부분을 최소화하면 데이터 분석에 보다 더 많은 시간을 쏟을 수 있을 것 같습니다. 혹시 개발이 많은 프로젝트를 하게 된다면, 코드 컨벤션이나 변수명, 주석을 얼마나 달 지 등에 대해 논의도 필수적으로 이루어져야 합니다. 또한 코드 전달 전에 다양한 케이스에 대해 반복문으로 돌려보며 원하는 결과가 꾸준히 나오는지 확인한 뒤 전달드려야 소요가 적은 것 같습니다.