소비자들이 소비하는 방법
1. search
- 의도가 담긴 ‘query’ 가 사용됨
- Pull : 사용자가 의도를 가지고 item을 검색해서 가져오는 방식
- keyword와 연관성이 높은 상품만 user에게 노출
2. recommend
- 사용자의 흥미, 의도를 고려해 사용자도 모르는 본인에 취향에 맞는 item을 추천
- 과거 : 유저가 접할 수 있는 상품, 컨텐츠가 제한적 현재 : 웹/모바일 환경이 다양한 상품, 컨텐츠 등장 -> 정보를 찾는 데 오래걸림
- 최근에는 정보를 찾는데 시간이 오래 걸림
- → 유저가 원하는 바를 어떤 키워드로 찾아야 하는지 모를 수 있음 : RS의 필요성
- threshold / 좋은 RS는 diversity를 추구해야 한다.
- 오른쪽으로 이동 시 recommendation diversity 증가 / RS가 지향하는 바
- 그러나 bad result 생성 가능성이 있음
- 사례
- 유튜브 동영상 추천
- 조회수 급상승 → 해당 영상과 관련이 있거나, 업로드 되어 있는 채널의 영상 추천
- SNS 친구 추천
- 수십억 유저들 사이에서 내가 알만한 사람들을 추천
- SNS 친구 추천
- 조회수 급상승 → 해당 영상과 관련이 있거나, 업로드 되어 있는 채널의 영상 추천
- 유튜브 동영상 추천
추천 시스템에서 사용하는 정보
- 유저 관련 정보 (성별, 나이, ...)
- User profiling
- 추천 대상 유저에 관련된 정보를 다양한 방법으로 구축하는 행위
- (서비스의 다양한 영역에서 같이 응용됨)
- identifier
- User profiling을 통해 생성되는 가장 기본적인 정보
- (회원가입을 통해 얻어지는 정보들, 광고 추천의 경우에는 ‘디바이스 ID’ 등을 사용)
- Demographic information
- 성별, 연령, 지역, 관심사 (유저로부터 직접 수집하는 것이 정확)
- 직접 얻기 어렵기 때문에, estimation 방식으로 얻기도 함
- User behavior information
- 페이지 방문 기록, 아이템 평가, 구매 등의 피드백 기록 등
- User profiling
- 아이템 관련 정보 (item 출신 연도, category, ...)
- 추천 아이템의 종류광고 / 커머스 : 광고 소재, 상품 추천
- 미디어 : 영화, 음악, 동영상 추천
- 포탈 : 뉴스, 블로그,웹툰 등 컨텐츠 추천
- ‘추천 아이템의 종류’에 따라 사용할 수 있는 정보가 달라짐 - item의 metadata
- 예시상품 : 상품 카테고리, 브랜드, 출시일, 상품 이미지 등
- 음악 : 아티스트, 작곡가, 장르, 음악 신호 자체
- 영화 : 장르, 출연 배우 및 감독, 영화 소개글, 개봉 년도 등
- 아이템 ID 외에는 추천 아이템마다 다르기 때문에, 공통으로 아이템 ID를 사용
- 유저 - 아이템 interaction 정보 (특정 유저 - 어떤 아이템 소비, ...)
- 유저가 오프라인 혹은 온라인에서 아이템과 상호작용 할 때 로그로 남음
- 추천 시스템을 학습하는 모델의 feedback data로 사용
- Explicit Feedback
- 유저에게 아이템에 대한 만족도를 직접 물어본 경우
- 영화에 대한 1~5점 사이의 평점
- Implicit Feedback
- 유저가 아이템을 클릭하거나 구매한 경우
- 쿠팡에서 유저가 상품을 구매 (Implicit Feedback = Y or 1로 저장)
- Explicit Feedback
- Implicit Feedback이 압도적으로 많아 이것을 주로 사용
추천 시스템의 목적
특정 유저에게 적합한 아이템을 추천 / 특정 아이템에게 적합한 유저를 추천
→ 유저 - 아이템 상호 작용을 평가할 Score가 필요하다
추천을 위한 score
추천 문제는 랭킹 또는 예측
- 랭킹(Ranking) : 유저에게 적합한 아이템 Top K개를 추천하는 문제
- Top K개를 선정하기 위한 기준(or score)이 필요
- 유저(X)가 아이템(Y)에 가지는 정확한 선호도를 구할 필요는 없음
- 유저의 1~5점 평가 점수를 이용해도, 1~100으로 scale을 변경해output을 내도 무방 (어차피 상위 K개를 고를 것)
- 평가 지표 : Precision@K, Recall@K, MAP@K, nDCG@K
- 예측(Prediction) : 유저가 아이템을 가질 선호도를 정확하게 예측 (평점 or 클릭/구매 확률)
- Explicit Feedback : 철수가 아이언맨에 대해 내릴 평점 값을 예측
- Implicit Feedback : 영희가 아이폰12를 조회하거나 구매할 확률 값을 예측
- 유저 - 아이템 행렬을 채우는 문제
- 평가 지표 : MAE, RMSE, AUC 등
추천 시스템의 평가 지표
- 비즈니스 / 서비스 관점
- 추천 시스템 적용으로 인해 매출 or PV(Page View)의 증가
- 추천 아이템으로 인해 유저의 CTR(클릭 수 / 노출 수)의 상승
- 품질 관점
- 연관성(Relevance) : 추천된 아이템이 유저에게 관련이 있는가?
- 40대 남자에게 생리대를 추천하는 건..
- 다양성(Diversity) : 추천된 Top-K 아이템에 얼마나 다양한 아이템에 추천되는가?
- 최근에 노트북 검색했다고 추천되는 아이템들이 주구장창 노트북만..
- 새로움(Novelty): 얼마나 새로운 아이템이 추천되고 있는가?
- 서비스 방문 후 바로 refresh했을 때 똑같은 아이템이 계속 추천되면 별로다
- 참신함(Serendipity): 유저가 기대하지 못한 뜻밖의 아이템이 추천되는가?
- Relevance와 충돌할 수 있음
- 연관성(Relevance) : 추천된 아이템이 유저에게 관련이 있는가?
Model Test method
1. Offline Test
- 새로운 추천 모델을 검증하기 위해 가장 우선적으로 수행되는 단계
- 이 test에서 좋은 성능을 보여야 online serving에 투입되지만, case by case
- Serving bias : online에서는 user의 log가 data로 쌓임
- → model을 재학습해 새로운 model로 추천 (model이 바뀜)
- 성능 지표
- 우리가 추천한 아이템 개수: 5(=K) 추천한 아이템 중 유저가 관심있는 아이템 개수: 2 유저가 관심있는 아이템의 전체 개수: 3 Precision@5 =2/5 Recall@5 = 2/3
랭킹 문제 (ML 문제에서의 metric과 동일)
- Precision@K
- 우리가 추천한 K개 아이템 가운데 실제 유저가 관심있는 아이템의 비율
- Recall@K
- 유저가 관심있는 전체 아이템 가운데 우리가 추천한 아이템의 비율
- MAP@K (Mean Average Precision)
- 모든 유저에 대한 Average Precision 값의 평균
- AP@KUnlike Precision@K, 관련 아이템을 더 높은 순위에 추천하면 점수가 상승
- Precision@1 부터 Presicion@K 까지의 평균값
- Hit Rate
- Hit / User
- 유저마다 Top-k recommendation에서 Hit한게 존재하면 Hit += 1
- NDCG@K
- 추천 시스템에 가장 많이 사용되는 지표 중 하나
- 원래는 검색(Information Retrieval)에서 등장한 지표
- Top K 리스트를 만들고, 유저가 선호하는 아이템을 비교
- 추천의 순서에 가중치를 두고 성능을 평가, 1에 가까울수록 좋음
- Unlike MAP, 연관성을 binary가 아닌 scalar로 사용 가능
- → 유저에게 얼마나 더 관련 있는 아이템을 상위로 노출시키는 지 알 수 있음
- 관련 식
- Cumulative Gain (CG) : 상위 K개 아이템에 대하여 관련도를 합한 것
- Discounted Cumulative Gain (DCG) : 순서에 따라 Cumulative Gain을 Discount함
- Ideal DCG (IDCG) : 이상적인 추천이 일어났을 때의 DCG값 / DCG 값중 가장 큼
- Normalized DCG (NDCG) : 추천 결과에 따라 구해진 DCG를 IDCG로 나눈 값
2. Online Test
- Online A/B test
- Offline Test에서 검증된 가설이나 모델을 이용해 실제 추천 결과를 serving하는 단계
- RS 변경 전후의 성능 비교가 아니라, 동시에 대조군과 실험군의 성능을 평가 → (실험 환경을 최대한 동일하게 / 시간도 동일하게 두기 위함)
- traffic을 반을 나눠 각 추천 시스템에 전달 → 얻어지는 결과로 의사결정
- 대부분 현업에서의 의사결정은, 모델 성능이 아닌 비즈니스/서비스 지표
인기도 기반 추천
- 인기도의 척도
- 조회수, 평균 평점, 리뷰 개수, 좋아요/싫어요 수 등
- 예시
- 네이버 쇼핑 랭킹 순, 다음 뉴스, 댓글 추천, 레딧 Hot 추천
- 인기도 기반 추천의 Score
- 조회수가 가장 많은 아이템을 추천 (Most Popular)
- → 뉴스 추천 등
// Simple formula
(upvote - downvote) - time_elasped # 좋아요, 싫어요, 시간 오래됨
= pageviews - time_elasped # 조회수, 시간 오래됨
But, 위와 같은 방식은 조회수가 높으면 1~2년이 지나도 글이 계속 Top Rank에 보임
1. Hacker News Formula - 뉴스 추천 서비스
뉴스의 가장 중요한 속성은 최신성
시간에 따라 줄어드는 score를 조정하기 위해 gravity(1.8)라는 상수를 사용
2. Reddit Formula
- 1st term : popularity, 좋아요 수가 폭발적으로 증가하는 것에 대한 penalty로 log 사용
- 2nd term : 글이 포스팅된 절대시간
- 평균 평점이 가장 높은 아이템을 추천 (Highly Rated) → 맛집 추천 등
이 방법은 신뢰할 수 있는 평점인 지, 평가의 개수가 충분한 지 검토 필요
1. Steam Rating Formula - steam에서 쓰는 인기도 기반 score
2. Steam Rating Formula → Movie Rating
- 영화 평점은 1 ~ 5 값으로 구성 / 가중 합으로 avg_rating을 구함
- 3.0을 빼주는 대신 모든 평점 데이터의 평균 값을 사용해도 됨