본문 바로가기

부스트캠프 AI Tech 3기/이론 : U-stage

[Day31] 추천 시스템 Basic 1-2 추천시스템의 평가 지표와 인기도 기반 추천

추천시스템의 평가지표

비즈니스 / 서비스 관점

  • 추천 시스템을 적용했을 때 매출인 PV(page view)가 증가했느냐
  • 추천 아이템으로 인해 유저의 CTR(Click Through Rate:노출 대비 클릭)이 증가했느냐

품질 관점

  • 연관성 Relevance
    ex) 40대 남성에게 화장품이 추천되는 상황
  • 다양성 Diversity
    ex)너무 머그컵만 추천하는 상황
  • 새로움 Novelty
    ex) 창을 새로고침 할 때 마다 같은 아이템만 추천되는 상황
  • 참신함 Serendipity
    품질평가에서의 주요 특징보단 재미요소이다.
    연관성과 충돌할 수 있다.

 

Offline Test

: 추천 모델을 검증하기 위해 가장 우선적으로 수행되는 단계

 

데이터를 train/valid/test로 나누어 객관적인 지표로 평가한다. offline test에서 좋은 성능을 보여야 online test를 한다.

하지만 offline test와 다른 결과가 나오기도 한다.

 

Serving bias

offline test는 이미 data가 구성되어 있고 바뀌지 않지만, online test는 user가 소비한 데이터가 추가되고 모델도 추가된 데이터를 학습하는 과정을 반복하게 된다.

 

  • Precision@K
    랭킹문제에서 사용하는데 원래 Precision은 classification에서 사용하는 평가지표이다.
    :우리가 추천한 K개의 아이템 가운데 실제 유저가 관심있는 아이템의 비율
    아이템의 순서에 상관없이 K개만을 뽑아서 평가
  • Recall@K
    :유저가 관심있는 전체 아이템 가운데 추천한 아이템이 얼마나 속해있는지에 대한 비율
  • AP@K : Average Precision
    Precision@K가 발전한 것
    추천된 K개의 아이템의 순서에 따라서 지표가 달라진다.
    Precision@1~K까지의 평균값이다.
    $$AP@K=\frac{1}{m}\displaystyle\sum^{K}_{i=1}Precision@i$$
    관련 아이템을 더 높은 순위에 추천할수록 점수가 상승한다.
  • MAP@K : Mean Average Precision
    :한 명에 대한 AP값을 전체 유저로 넓혀서 계산하고 그 평균을 구한 것
    $$MAP@K=\frac{1}{|U|} \displaystyle\sum^{|U|}_{u=1} (AP@K)_{u}$$
    ※$|U|$ : 전체 유저의 수
  •  NDCG : Normalized Discounted Cumulative Gain
    원래는 검색에서 등장한 지표이지만 지금은 추천 시스템에서 가장 많이 사용하는 지표 중 하나이다.
    Top K 리스트를 만들고, 순서도 고려하여 좋은 아이템이 앞서 추천될수록 성능이 좋다고 평가된다.
    연관성을 0,1과 같이 이진값이 아닌 수치로 표현하기 때문에 얼마나 더 관련있는지를 알 수 있다.
    • Cumulative Gain
      상위 K개의 아이템에 대하여 관련도를 합한 것
      $$CG_{K} = \displaystyle\sum^{K}_{i=1}rel_{i}$$
    • DCG : Discounted Cumulative Gain
      Cumulativ Gain 에서관련도를 순서에 따라 discount한 것
      $$DCG_{K}=\displaystyle\sum^{K}_{i=1}\frac{rel_{i}}{log_{2}(i+1)}$$
    • Ideal DCG
      가능한 DCG 값 중에 가장 큰 값
    • Normalized DCG
      $$NDCG=\frac{DCG}{IDCG}$$

AP에 대해 좀 더 자세히 적은 글입니다 ↓

2022.03.08 - [부스트캠프 AI Tech 3기/이론 : U-stage] - [추천시스템] Precision@K, Recall@K, AP@K

 

Online Test

실제 추천결과를 serving해서 test한다.

추천 시스템 변경 전후의 성능비교가 아니라, 최대한 동일한 환경의 대조군과 실험군의 성능을 평가한다.

현업에서 최종 의사결정 지표는 모델 성능이 아니라 매출이나 서비스 지표를 선택하게 된다.

 


인기도 기반 추천

통계적으로 사용자에게 좋은 feedback을 받은 아이템을 추천한다.

처음에 데이터 구축전에 많이 사용한다. 

 

인기도의 척도

조회수, 좋아요 수, 평점, 리뷰 갯수

 

  • Most Popular
    조회수가 많은 아이템을 추천
    ex) 뉴스
    • Hacker News Formula
      최신성과 조회수를 둘 다 고려한 평가지표
      뉴스를 추천하는 formula
      많은 사람들이 봤던 뉴스를 추천해주되, 시간이 오래될수록(age) 점수를 빠르게 깎는다
      $$score=\frac{pageviews-1}{(age+2)^{gravity}}$$
      시간에 따라 줄어드는 score를 조정하기 위해서 gravity를 사용한다. 그래서 pageview가 상승하는 속도보다 age가 상승하는 속도가 점점 커지게 된다.

    • Reddit Formula
      최근에 포스팅된 글에 더 높은 점수 부여
      $$score=log_{10}(ups-downs) + \frac{sign(ups-downs)\cdot seconds}{45000}$$
      $log_{10}{ups-downs}$은 popularity값을 나타낸다. 이 값이 커지면 score도 올라간다. 로그를 사용해서 초반 vote에는 높은 가치를 두지만 나중의 vote는 큰 가치를 두지 않는다.
      $frac{sign(ups-downs)\cdot seconds}{45000}$은 포스팅이 게시된 절대시간$seconds$을 나타낸다. 최근에 게시된 포스팅일수록 절대시간이 크기 때문에 더 높은 score를 가지게 된다.
  • Highly Rated
    평균 평점이 높은 아이템을 추천
    ex) 맛집 추천
    평가가 신뢰할 수 있고 그 평점의 갯수가 충분한가를 따져보아야 한다.
    • Steam Rating Formula
      게임을 인기도 기반으로 scoring할 때 사용한다.
      review는 좋아요나 싫어요로 구성되어 있는데, 좋아요를 한 리뷰가 평균 평점이 된다.
      $$avg\;rating=\frac{num\;of\;positive\;reviews}{num\;of\;reviews}$$
      $$score=avg\;rating-(avg\;rating-0.5)\cdot 2^{-log(num\;of\;reviews)}$$
      review의 갯수가 너무 적을 경우 = avg rating-0.5가 음수가 될 때 는 조금 높게 보정해준다.
      review 갯수가 아주 많을 경우는 score가 avg rating이 거의 유사해진다.
    • Movie Rating
      1~5점의 평점으로 평균을 구하게 된다
      $$avg\;rating=\frac{sum(rating)}{num\;of\;reviews}$$
      $$score=avg\;rating-(avg\;rating-3.0)\cdot2^{-log(num\;of\;reviews)}$$
      중앙값인 3.0을 사용해서 보정해준다. 3.0 대신 모든 평점의 평균값으로 대신해도 된다.
      steam rating 과 같이 review 수가 많아질수록 score과 평균 rating이 비슷해진다.