더 이상 tistory 블로그를 운영하지 않습니다. glanceyes.github.io에서 새롭게 시작합니다.

새소식

AI/추천 시스템

Top-K Ranking 문제에서 추천시스템을 평가하는 지표

  • -

 

 

추천 시스템을 평가하는 전반적인 지표는 아래의 포스트에서 확인할 수 있다.

https://glanceyes.tistory.com/entry/추천-시스템-추천-시스템과-평가-지표

 

추천 시스템 - 추천 시스템과 평가 지표

2022년 3월 7일(월)부터 11일(금)까지 네이버 부스트캠프(boostcamp) AI Tech 강의를 들으면서 중요하다고 생각되거나 짚고 넘어가야 할 핵심 내용들만 간단하게 메모한 내용입니다. 틀리거나 설명이 부

glanceyes.tistory.com

 

Top-K Ranking 추천시스템을 평가하는 지표

 

 

평점 예측 문제

 

평점 예측(Rating Prediction) 문제는 real-value로 이루어진 explicit feedback을 예측하는 태스크에 주로 사용되는데, explicit feedback은 영화의 별점과 같이 사용자의 선호에 대한 명시적인 정보를 제공한다.

사용자가 예측한 평점을 잘 맞추는지 아닌지만 평가하면 되므로 RMSE를 최적화하는 것 외의 크게 추천 시스템을 평가할 만한 대표적인 지표가 존재하지는 않는다.

 

 

Top-K Ranking 문제

 

가장 높은 K개의 ranking을 구하는 문제는 0과 1의 value로 이루어진 implicit feedback을 예측하는 태스크에서 주로 사용된다.

클릭, 구매 등의 implicit feedback은 사용자의 선호에 관한 암시적인 정보만을 제공한다.

 

Regression 또는 Classification 두 가지로 모두 풀 수 있는데, 각자의 방법으로 ranking을 수행한 후 Recall@K 또는 NDCG@K와 같은 Top-K metric을 활용해서 평가를 수행한다.

 

Top-K ranking 태스트에서는 $f(u, i)$의 예측이 rating prediction과 유사하게 이루어지지만, 여기서는 사용자에 대한 compatibility score를 계산하고 이를 ranking하여 추천 결과를 생성한다.

$$ rec(u) = \underset{i \in I \setminus I_u}{\arg \max} f(u,i) $$

주로 평가할 때는 상위 K개의 추천 중 몇 개가 유효한지를 구하는데, 대표적인 metric으로 Recall@K를 사용한다.

이는 상위 K개의 추천 결과 중 관련 있는 개수를 의미한다.

$$ \text{Recall@}K = \frac{1}{|U|} \sum_{u \in U} \frac{\{ i \in I_u | rank_u(i) \le K \}}{ |I_u| } $$
def precision_at_k(actual, predicted, k):
    act_set = set(atcual)
    pred_set = set(predicted[:k])
    result = len(act_set & pred_set)
    prec = result / float(k)
    # normalized_prec = result / float(min(len(act_set), k)) 정규화해줄 때 필요한 부분
    return prec

 

 

여기서 $rank_u(i)$는 사용자 $u$를 위한 추천 결과에서 아이템 $i$가 랭크된 위치를 뜻한다.

 

Precision@K에서는 Recall@K와는 다르게 분모 부분이 $K$로 변경된 것을 알 수 있다.

$$ \text{Precision@}K = \frac{1}{|U|} \sum_{u \in U} \frac{\{ i \in I_u | rank_u(i) \le K \}}{ |I_u| } $$

 

 

def recall_at_k(actual, predicted, k):
    act_set = set(atcual)
    pred_set = set(predicted[:k])
    result = len(act_set & pred_set)
    recall = result / float(len(act_set))
    return recall

 

이외에도 Mean rciprocal Rank(MPR), NDCG@K 등 보다 직접적으로 순위를 고려하는 metric들이 존재한다.

 

$$ MPR = \frac{1}{|U|} \sum_{u \in U } \frac{1}{rank_u(i_u)} $$

 

$$ \text{DCG@}K = \sum_{i \in \{ i | rank_u(i) \le K\}} \frac{y_{u,i}}{\log_2(rank_u(i) + 1)} $$

 

여기서 $y_{u,i}$는 아이템의 클릭 여부 등 binary label이 되거나 연관성 score가 될 수 있다.

 

 

출처
1. 네이버 커넥트재단 부스트캠프 AI Tech RecSys Track

 

Contents

글 주소를 복사했습니다

부족한 글 끝까지 읽어주셔서 감사합니다.
보충할 내용이 있으면 언제든지 댓글 남겨주세요.