본문 바로가기

Study

추천 시스템 성능 평가 지표(Precision@k, Recall@k, Hit@k, MAP, MRR, nDCG)

추천 시스템이란 말 그대로 사용자가 좋아할만한 것들을 추천해주는 시스템이다.

추천 시스템은 단순히 사용자가 선호하는 아이템을 추천해주는 것 보다는 사용자가 가장 선호하는 아이템을 먼저 추천해주는 것이 더 좋은 추천 시스템이라고 볼 수 있다.

이번 글에서는 추천 시스템의 성능을 평가하는데 사용되는 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