AI_ML

[Boostcamp AI Tech] 추천 시스템 Basic(1)

썬2 2022. 3. 30. 01:08

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

 

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

rating은 평균값을 사용하지만, 전체 review 개수에 따라 보정한다.review 개수가 아주 많으면 score는 평균 rating과 거의 유사해진다: 리뷰 수가 많다 -> -log 값 작아짐 -> score의 뒷항이 작아짐.

 

 

 

참고:

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