추천 시스템이란 말 그대로 사용자가 좋아할만한 것들을 추천해주는 시스템이다.
추천 시스템은 단순히 사용자가 선호하는 아이템을 추천해주는 것 보다는 사용자가 가장 선호하는 아이템을 먼저 추천해주는 것이 더 좋은 추천 시스템이라고 볼 수 있다.
이번 글에서는 추천 시스템의 성능을 평가하는데 사용되는 metrics를 소개한다.
Precision@k
k개의 추천 중 선호 아이템이 얼마나 존재하는지를 측정한다.
선호 순서(rank)는 고려되지 않는다.
$$
Precision@k = \frac{\sharp \ of \ recommended \ items \ @k \ that \ are \ relevant}{\sharp \ of \ recommended \ items \ @k}
$$
Recall@k
전체 선호 아이템 중 추천된 아이템이 얼마나 존재하는지를 측정한다.
선호 순서(rank)는 고려되지 않는다.
$$
Recall@k = \frac{\sharp \ of \ recommended \ items \ @k \ that \ are \ relevant}{total \ \sharp \ of \ relevant \ items}
$$
Hit@k
k개의 추천 중 선호 아이템이 있는지 측정한다.
전체 사용자들의 추천 결과에 대해서 상위 k 안에 선호 아이템이 있는 추천 결과 개수를 전체 사용자의 수로 나누어 평균을 계산한다.
선호 순서(rank)는 고려되지 않는다.
MAP(Mean Average Precision)
MAP를 이해하기 위해서 AP에 대한 이해가 필요하다.
AP(Average Precision)
Precision@1부터 Precision@k까지의 평균을 구한다.
결과적으로 순위가 높은 아이템이 큰 가중치를 가지게 된다.
아래 수식에서 $rel(k)$는 k번째 아이템이 선호 아이템인지(1) 아닌지(0)를 나타내는 값이다.
$$
AP@k = \frac{1}{m}\sum_{i=1}^{k}Precision@i \cdot rel(k)
$$
AP가 한 사람에게 추천한 결과를 평가한 것이라면, MAP는 모든 사용자들(U)에게 취한 결과들을 평가하는 것이다.
$$
MAP@k = \frac{1}{|U|} \sum_{u=1}^{|U|}(AP@k)_{u}
$$
MRR(Mean Reciprocal Rank)
처음으로 등장하는 선호 아이템이 몇 번째에 위치하는지를 나타낸다.
하지만 몇 번째인지를 그대로 사용하게 되면 뒤에 위치할수록 높은 값을 가지게 되므로 역수를 취해서 계산한다.
$$
MRR = \frac{1}{|U|} \sum_{u=1}^{|U|} \frac{1}{k_{u}}
$$
nDCG(normalized Discounted Cumulative Gain)
nDCG를 설명하기 전에 CG, DCG, IDCG에 대한 이해가 필요하다.
CG(Cumulative Gain)
상위 k개의 결과들의 relevance score를 모두 더한다.
relevance score는 아래 수식에서 $rel_i$에 해당하며, 선호 여부에 따라 0 또는 1을 가지거나 문제에 따라 세분화된 값을 가질 수 있다.
선호 순서(rank)는 고려되지 않는다.
$$
CG_{k} = \sum_{i=1}^{k}rel_{i}
$$
DCG(Discounted Cumulative Gain)
CG에서 선호 순서에 따라 점점 비중을 줄여 계산한다.
선호 순서(rank)가 반영되며 하위권 결과에 패널티를 줄 수 있다.
$$
(1) \ DCG_k = \sum_{i=1}^{k}\frac{rel_i}{log_{2}(i+1)}
$$
$$
(2) \ DCG_k = \sum_{i=1}^{k}\frac{2^{rel_i} - 1}{log_{2}(i+1)}
$$
(1)은 standard 방식이고, (2)는 relevance score에 더 비중을 주고싶은 경우에 사용하는 방식이다.
만약 relevance score가 0 또는 1 값을 가지면 (1)과 (2)는 동일하다.
IDCG(Ideal Discounted Cumulative Gain)
상위 k개의 결과를 relevance score가 높은 순으로 정렬하여 DCG를 계산한다.
상위 k개의 결과로 가질 수 있는 가장 큰 DCG 값을 구할 수 있다.
아래 수식에서 $rel_{i}^{opt}$가 상위 k개의 결과를 relevance score가 높은 순으로 정렬한 것이다.
$$
IDCG_ = \sum_{i=1}^{p}\frac{rel_{i}^{opt}}{log_{2}(i+1)}
$$
nDCG는 k개의 결과에 대한 DCG 값을 k개의 결과로 가질 수 있는 가장 큰 DCG(=IDCG) 값으로 나누는 것이다.
따라서 DCG 값과 IDCG 값이 같으면 nDCG는 1을 갖게 되고, DCG와 IDCG의 차이가 커질수록 nDCG는 0에 가까워진다.
이렇게 nDCG는 0~1 사이의 값으로 nomalize가 된 값으로 표현된다.
$$
nDCG = \frac{DCG}{IDCG}
$$
Reference
- https://zzaebok.github.io/recommender_system/metrics/rec_metrics/
- https://medium.com/@m_n_malaeb/recall-and-precision-at-k-for-recommender-systems-618483226c54
- https://danthetech.netlify.app/DataScience/evaluation-metrics-for-recommendation-system
- https://checkwhoiam.tistory.com/35
- https://sungkee-book.tistory.com/11
- https://ride-or-die.info/normalized-discounted-cumulative-gain/
'Study' 카테고리의 다른 글
[논문] BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding (0) | 2022.01.22 |
---|---|
[논문] Attention Is All You Need | Transformer (0) | 2022.01.10 |
회귀 모델 성능 평가 지표(MAE, MSE, RMSE, MAPE 등) (1) | 2022.01.07 |
분류 모델 성능 평가 지표(Accuracy, Precision, Recall, F1 score 등) (2) | 2022.01.02 |
BM25 (0) | 2021.12.13 |