Precision, Recall 기반의 평가 방법의 한계

앞서 다루었던 MAP(Mean Average Precision)과 같은 추천시스템 평가 지표는 Precision, Recall을 기반으로 우선순위를 반영한 성능 평가 방법을 제시했다. MAP는 추천된 리스트 중 상위 K개에 대한 관련 여부가 명확하게 주어졌을 때 평가 지표로 사용될 수 있다. 하지만 관련(relevence) 여부가 명확하지 않거나, 관련 여부를 이분법으로 표현하지 않는 경우에는 적절하지 않다.

당장 떠오르는 예로는 넷플릭스와 왓챠가 생각이 난다. 넷플릭스의 경우 사용자가 컨텐츠에 대해 [좋다 vs 안좋다]로 평가를 내릴 수 있지만, 왓챠의 경우에는 유자가 0.5 ~ 5점 사이로 평가를 내릴 수 있다. 넷플릭스에서 보유한 사용자 평가 데이터에는 MAP가 사용될 수 있지만, 왓챠에서는 MAP가 적절하지 않을 것으로 생각된다.

반면에 nDCG(Normalized Discounted Cumulative Gain)의 경우 복수의 컨텐츠가 relevance를 가지고 있다고 하더라도, 그 정도(점수)에 따라 어떠한 컨텐츠가 더 관련있고, 덜 관련 있는지를 평가할 수 있다. 대부분의 검색과 추천시스템의 경우 다수의 사용자들은 1, 2페이지 또는 상위의 리스트만 참조할 것이기 때문에 상위 리스트 사이에서 변별력을 갖춰야 하는 경우 nDCG를 통한 평가가 설득력을 얻는다.

 

Cumulative Gain (CG)

nDCG에서는 우선 CG이란 개념이 등장한다. CG는 Cumulative Gain 이라는 이름에서도 알 수 있듯, 전체 추천된 리스트에 대하여 gain의 총 합을 구한 것이다.

$$CP_{p} = \sum_{i=1}^{p} rel_{i}$$

  • \(p\) : 추천된 아이템
  • \(rel_{i}\) : i번 째 아이템의 relevance 정도. Gain 이라고 한다.

예시) 추천시스템의 결과와 Relevance

RankRelevance
13
23
33
44
52
62

$$CG = 17$$

 

Discounted Cumulateive Gain (DCG)

DCG 에서는 각 추천된 아이템의 relevance를 log함수로 나누어 값을 구한다. log 함수로 나누어주는 부분은, 랭킹의 위치에 따른 페널티를 주는 효과를 가진다. 순위의 값이 클 수록(즉, 순위가 낮을 수록) DCG의 값은 작아진다. 하지만, 높은 순위의 경우 간격이 크고, 낮은 순위의 경우 실제 체감하는 차이는 낮다.

$$DCG_{p} = \sum_{i=1}^p \frac{rel_i}{log_2(i+1)} = rel_1 + \sum_{i=2}^p \frac{rel_i}{log_2i}$$

예시) 각 추천된 컨텐츠 당 Discounted Gain

RankRelevanceDiscounted Gain
13\(3 / \log_2(1+1) = 3\)
23\(3 / \log_2(2+1) = 1.89\)
33\(3 / \log_2(3+1) = 1.5\)
44\(4 / \log_2(4+1) = 1.72\)
52\(2 / \log_2(5+1) = 0.77\)
62\(2 / \log_2(6+1) = 0.71\)

$$DCG = 9.59$$

 

Normalized DCG (nDCG)

DCG는 현재 추천시스템이 추천한 결과에 대한 상태를 보여주는데, DCG만 놓고 볼 경우 추천된 아이템의 갯수에 따라 DCG가 다를 수 있으므로, 이를 0~1사이의 값으로 정규화 해줄 필요성이 있다. 따라서 현재 추천된 리스트의 결과에 기반한 DCG를 현재 추천된 결과의 가장 이상적인 형태를 가정했을 때의 DCG(ideal DCG, iDCG)로 나누어서 정규화한다.

사용자가 컨텐츠를 평가하지 않은 경우와, 관련성이 아예 없는 경우 manual적으로 값을 0으로 설정하거나, 적절하게 imputation을 취해주어야 한다는 취약점이 있다. 하지만, nDCG는 relevance가 등급이나 범위로 매겨지거나(graded relevance), 이분법적인 경우(binary relevance) 둘 다 평가가 가능하다. 또한 log함수를 통해 순서에 대한 가중치가 주어지므로 추천시스템에 적용하기 매우 적절한 평가지표라고 할 수 있다.

$$IDCG_p = \sum_{i=1}^{|REL_p|} \frac{2^{rel_i} - 1}{log_2(i+1)}$$

$$nDCG_p = \frac{DCG_p}{IDCG_p}$$

예시) Ideal Relevance와 Discounted Gain

RankRelevanceDiscounted GainIdeal RelevanceIdeal Discounted Gain
13\(3 / \log_2(1+1) = 3\)44
23\(3 / \log_2(2+1) = 1.89\)31.89
33\(3 / \log_2(3+1) = 1.5\)31.5
44\(4 / \log_2(4+1) = 1.72\)31.16
62\(2 / \log_2(6+1) = 0.71\)20.71
52\(2 / \log_2(5+1) = 0.77\)20.77

$$ nDCG_p = \frac{DCG_p}{IDCG_p} = \frac{9.59}{10.03} = 0.95 $$

Reference