1. 추천시스템이란?
- Search: 사용자가 검색을 통해 item을 소비하는 방식이라면,
- Recommend: 사용자가 의도를 가진 키워드를 명목적으로 제공하지않더라도 상품을 유저에게 노출.
2. 추천 시스템에서 사용하는 정보
- 유저 관련 정보
- 유저 프로파일링
- 식별자: 유저 ID, 디바이스 ID 등
- 데모그래픽 정보: 성별, 연령, 지역, 관심사
- 유저 행동 정보: 페이지 방문 기록, 아이템 평가, 구매 등의 피드백 기록
- 아이템 관련 정보
- 추천 아이템의 종류: 포탈, 미디어, 광고/커머스
- 아이템 프로파일링: 아이템 ID, 아이템의 고유 정보
- 유저-아이템 상호 작용 정보
- Explicit Feedback: 유저에게 아이템에 대한 만족도를 직접 물어볼 때
- Implicit Feedback: 유저가 아이템을 클릭하거나 구매한 경우
3. 추천 시스템 문제 정의
- 목적은 특정 유저에게 적합한 아이템을 추천해주거나 특정 아이템에게 적합한 유저를 추천해줌으로, 유저-아이템 상호 작용을 평가할 score 값이 필요하다. -> 추천을 위한 score를 알 필요가 있다.
- 추천 문제: 랭킹 또는 예측
- 랭킹: 유저에게 적합한 아이템 Top K개를 추천
- 정확한 선호도를 구할 필요가 없다.
- 평가 지표: Precision@K, Recall@K, MAP@K, nDCG@K
- 예측: 유저가 아이템을 가질 선호도를 정확하게 예측 (평점 or 클릭/구매 확률)
- 유저-아이템 행렬을 채우는 문제
- 평가 지표: MAE, RMSE, AUC
- 랭킹: 유저에게 적합한 아이템 Top K개를 추천
4. 평가 지표
- 추천 시스템을 실제 서비스에 적용하기 위해 Offline Test와 Online A/B test를 한다.
Offline Test: 새로운 추천 모델을 검증하기 위해 가장 우선적으로 수행되는 단계
- 데이터를 train/valid/test로 나누어서 모델의 성능을 객관적으로 파악한다.
- 보통 좋은 성능을 보이면 online 서빙에 넣는다고 생각하지만, 실제 서비스시에는 bias나 latency 문제 때문에 실험과 다른 성능을 보일 수 있다.
- 평가 지표
- Precision@K: (실제 유저가 관심있는 아이템 수) / (우리가 추천한 K개 아이템 수)
- Recall@K: (유저가 관심 있는 아이템 중 추천한 아이템의 수) / (유저가 관심있는 전체 아이템 개수)
- AP@K: Precision@1부터 Precision@K까지의 평균값 +관련 아이템이 더 높은 순위에 추천될 수록 점수가 상승한다.
- MAP@K: 모든 유저에 대한 Average Precision 값의 평균.
- nDCG@K: 유저에게 얼마나 더 관련 있는 아이템을 상위로 노출 시키는지 알 수 있음. 추천 시스템에 많이 쓰이는 지표이다.
- 추천의 순서에 가중치를 더 많이 두고, 1에 가까울수록 좋다. (연관성을 binary가 아닌 수치로도 사용 가능)
Online A/B Test: offline test에서 검증된 가설이나 모델을 이용해서 실제 추천 결과를 서빙하는 단계.
- 추천 시스템 변경 전후의 성능 비교가 아닌, 동시에 대조군(A)와 실험군(B)의 성능을 평가한다.
- p.s) 보통 현업에서의 의사결정 시 최종 지표는 모델 성능이 아닌 매출, CTR 등의 비즈니스 및 서비스 지표이다.
잠깐, nDCG를 더 자세히 알아보자.
1. CG (Cumulative Gain): 상위 p개의 추천 결과들의 관련성(rel, relevance)를 합한 누적값.
추천 결과 순서에 상관없이 동일한 비중으로 계산한 값.
2. DCG (Discounted Cumulative Gain): 순서에 따라 CG를 discount하게 계산하는 방법
랭킹 순서에 대한 로그 함수를 분모에 둠으로써, 뒷순서일수록 로그값이 커져서 rel 대비 작은 DCG 값이 반영된다. -> 하위권에 패널티.
3. Ideal DCG: 이상적인 추천이 일어났을 때의 DCG 값. (가능한 DCG 값중에 제일 큰 값)
rel이 큰 순서대로 재배열한 후 상위 p개를 선택했을 때.
4. nDCG (Normalized DCG): 추천 결과에 따라 구해진 DCG를 IDCG로 나누 값.
DCG는 p가 클수록 누적합인 DCG가 켜저서 정규화할 필요가 있다. -> IDCGfh sksnrl.
5. 인기도 기반 추천: 추천 시스템의 가장 단순한 형태
'인기있다'의 기준은?: 조회수, 평균 평점, 리뷰 개수, 좋아요/싫어요 수 등
그렇다면 스코어를 어떻게 만들어야할까?
1) 조회수가 가장 많은 아이템에서의 Score
e.g) 뉴스 추천일 때:
가장 많이 조회되거나 좋아요가 가장 많은 뉴스를 추천하면 된다.
..하지만 뉴스의 경우, 아무리 많이 보고 인기가 있어도 오래된 기사를 추천할 수 없다.
> Hacker News Formula
- 시간이 지날수록 age가 증가해서 score는 작아진다. (시간에 따라 줄어드는 score 조정하기 위해 gravity라는 상수 사용.)
> Reddit Formula
- popularity + 글이 포스팅이 게시된 절대 시간(나중에 게시된 포스팅일수록 절대시간이 커서 더 높은 score가 생긴다.)
2) rating이 가장 높은 아이템에서의 Score
e.g) 영화나 맛집 추천일때 신뢰할 수 있는 평점인지 의문이 든다.
> Steam Rating Formula
참고:
https://joyae.github.io/2020-09-02-nDCG/
추천시스템 Metric - nDCG
normalized Discounted Cumulative Gain
joyae.github.io
'AI_ML' 카테고리의 다른 글
[Boostcamp AI Tech] Collaborative Filtering (0) | 2022.04.03 |
---|---|
[Boostcamp AI Tech] 추천 시스템 Basic(2) (0) | 2022.03.31 |
VAE 기초 다지기_1 (0) | 2021.09.30 |
Hello 파이토치 (0) | 2021.08.20 |
Notation ambiguity: Y = np.dot(X, W) vs np.dot(W.T, X) (0) | 2021.08.11 |