-
[RecSys] 2. 추천시스템 Basic - 평가지표와 인기도 기반 추천인공지능/부스트캠프 Ai Tech 2022. 3. 10. 14:03728x90In [1]:
from IPython.core.display import display, HTML display(HTML("<style>.container { width:90% !important; }</style>"))
추천 시스템의 평가 지표¶
새로 적용한 추천 시스템/모델의 성능 평가는 어떻게 해야하는가?
비즈니스 / 서비스 관점¶
- 추천 시스템 적용으로 인해 매출, PV(Page View)의 증가
- 추천 아이템으로 유저의 CTR 상승
품질 관점¶
- 연관성(Relevance) : 추천된 아이템이 유저에게 관련이 있는가?
- 다양성(Diversity) : 추천된 Top-K 아이템에 얼마나 다양한 아이템이 추천되는가?
- 새로움(Novelty) : 얼마나 새로운 아이템이 추천되고 있는가?
- 참신함(Serendipity) : 유저가 기대하지 못한 뜻밖의 아이템이 추천되는가?
Offline Test¶
새로운 추천 모델을 검증하기 위해 가장 우선적으로 수행되는 단계
- 유저로부터 수집한 데이터를 train/valid/test로 나누어 모델의 성능을 객관적인 지표로 평가(ML에서 동일한 방식)
- 보통 offline test에서 좋은 성능을 보여야 online 서빙에 투입되지만, 실제 서비스 상황에서는 다양한 양상을 보인다. (serving bias존재)Serving bias : Offline 에서는 주어진 데이터만 가지고 유저에게 추천해주지만, Online에서는 유저의 실시간 상호작용 로그 데이터도 들어오면서 로그에 대한 학습이 함께 이루어져야 한다.
Offline Test의 평가 지표¶
- 랭킹 문제 : Precision@K , Recall@K, MAP@K, NDCG@K, Hit Rate
- 예측 문제 : RMSE, MAE
Precision/Recall @K¶
- Precision@K : 우리가 추천한 K개 아이템 가운데 실제 유저가 관심있는 아이템의 비율
- Recall@K : 유저가 관심있는 전체 아이템 가운데 우리가 추천한 아이템의 비율
우리가 추천한 아이템 개수 : 5(=K)
추천한 아이템 중 유저가 관심있는 아이템 개수 : 2
유저가 관심있는 아이템의 전체 개수 : 3
Precision@5 = 2/5 , Recall@5 = 2/3
Mean Average Precision(MAP) @K¶
- AP@K : 한 유저에 대해 Precision@1 부터 Precision@K 까지의 평균값, Precision@K와 달리 관련 아이템을 더 높은 순위에 추천할수록 점수가 상승한다.
- MAP@K : 모든 유저에 대한 Average Precsion 값의 평균
- ${ \left|U \right|}$ : 전체 유저의 갯수
Normalized Discounted Cumulative Gain(NDCG)¶
검색(Information Retrieval)에서 등장한 지표로 추천시스템에서 가장 많이 사용되는 지표중 하나
Precisio@K, MAP@K와 마찬가지로 Top K 리스트를 만들고 유저가 선호하는 아이템을 비교하여 값을 구한다.
MAP@K와 마찬가지로 추천의 순서에 가중치를 더 많이 두어 성능을 평가하며 1에 가까울수록 좋다.
또한 MAP와는 달리, 연관성을 가진 이진(binaray)값이 아닌 수치로도 사용할 수 있기 때문에 유저에게 얼마나 더 관련 있는 아이템을 상위로 노출시키는지 알 수 있다.
NDCG Formula¶
- Cumulative Gain : 상위 K개 아이템에 대하여 관련도를 합한 것, 순서에 따라 Discount하지 않고 동일하게 더한 값
- Discounted Cumulative Gain : 순서에 따라 Cumulative Gain을 Discount함
- Ideal DCG : 이상적인 추천이 일어났을 때의 DCG값, 가능한 DCG 값중에 제일 크다.
- Normalized DCG : 추천 결과에 따라 구해진 DCG를 IDCG로 나눈 값
인기도 기반 추천¶
ML이 아닌 통계적으로 모든 사용자에게 좋은 피드백을 받은 아이템을 추천해주는 시스템, ML기반 추천시스템을 구축하기에는 오래 걸리므로 서비스 초기에 많이 사용하는 방식이다.
- 인기도의 척도? 조회수, 평균 평점, 리뷰 개수, 좋아요/싫어요 수
- 예시 : 네이버 쇼핑 랭킹 순, 다음 뉴스, 댓글 추천
어떻게 스코어를 만들어야 하나?¶
- 조회수가 가장 많은 아이템 추천(Most Popular) : 뉴스 추천, 유저들은 다른 유저들의 많은 관심사가 있는 이슈를 보고 싶어한다.
- 평균 평점이 가장 높은 아이템(Highly Rated) : 맛집 추천, 평점이 높은 맛집일수록 맛있는 음식을 제공하는 레스토랑이라고 기대
Most Popular¶
가장 많이 조회된 뉴스를 추천 하거나 좋아요가 가장 많은 게시글을 추천
- 뉴스의 경우 가장 중요한 속성은 최신성
$${score = f(popularity, age)}$$
score = (upvote - downvote) - time_elasped = pageviews - time_elasped
- up/downvote : 좋아요, 싫어요
- time_elasped : 시간
예시)
- 10 pageviews, 6 hours ago ... 10 - 6 / 4 = 8.5
- 25 pageviews, 24 hours ago ... 25 - 24 / 4 = 21
다만 위와같은 방식은 pageview가 기하급수적으로 빠르게 늘어날 경우, 1~2년이 지나도 같은 글이 계속 Top Rank에 보일 수 있다. 이를 방지하기 위해 여러가지 스코어 방식이 있다.
Hacker News Formula¶
$${score = {pagesviews - 1 \over \left (age +2 \right)^{gravity}}}$$시간이 지날수록 age가 점점 증가하므로(분모가) 결국 score는 0에 가까워진다.
- gravity = 1.8 , 시간에 따라 줄어드는 score를 조정하기 위해 gravity라는 상수를 적용
Reddit Formula¶
$${score = \log_{10}(ups-downs) + {sign(ups-downs) \cdot seconds \over 45000}}$$- 첫번째 term은 인기도(popularity), 두번째 term은 포스팅이 게시된 절대 시간(나중에 게시된 포스팅일수록 절대 시간이 크기에 더 높은 score를 갖는다)
- 첫번째 vote에 대해서 가장 높은 가치를 부여하고, log함수를 씌워 vote가 늘어날 수록 score의 증가 폭이 작아진다.
- 오래된 포스팅일 수록 상대적으로 많은 vote가 있어야 높은 score를 갖는다.
High Rated¶
가장 높은 평점을 받은 영화 혹은 맛집을 추천
- 신뢰할 수 있는 평점 인지? 평가의 개수가 충분할까?
score = f(rating, # of ratings)
Steam Rating Formula¶
- rating은 평균값을 사용하되, 전체 review 개수에 따라 rating을 보정
- review의 개수가 너무 적을때... 0.5보다 socre가 낮을(높을) 경우 조금 높게(낮게) 보정한다.
- review의 개수가 아주 많을 경우 2^-log의 값이 0에 가까워지므로 score는 평균 rating과 거의 유사해진다.
Steam Rating Formula -> Movie rating¶
영화 평점은 positive, negative가 아닌 1.0 ~ 5.0의 rating을 사용
- 위의 수식은 1.0 ~ 5.0 사이의 중앙값인 3.0을 사용
- 3.0 대신 모든 평점 데이터의 평균 값을 사용해도 된다
- 마찬가지로 전체 review 수가 많아질수록 score는 평균 rating에 가까워진다.
'인공지능 > 부스트캠프 Ai Tech' 카테고리의 다른 글
[RecSys] 3-2. 추천 시스템 Basic - TF-IDF (0) 2022.03.11 [RecSys] 3-1. 추천 시스템 Basic - 추천 시스템 기법과 연관분석 (0) 2022.03.10 [RecSys] 1. 추천시스템 Basic - 추천시스템이란 (0) 2022.03.10 [Ai-Services] Docker (0) 2022.02.21 [Ai-Services] Linux (0) 2022.02.21