[추천시스템] 평가 지표

Ethan·2023년 3월 6일
0

딥러닝 이론

목록 보기
3/6

<평가지표 모음>

1. 추천시스템

추천시스템에서 사용되는 지표들을 정리한 글이며, 지속적으로 업데이트 중입니다.
last update - 2023.03.06


Cumulative Gain (CG)

NDCG의 핵심은 Cumulative Gain(CG) 입니다. 이름부터 무언가를 누적한 값이죠?

CG=inreliCG=\sum_i^n\mathrm{rel}_i

CG를 수식으로 나타내면 위와 같습니다. rel은 relevance의 약자로, 사용자가 아이템을 얼마나 선호할 것인가를 의미합니다. 즉, CG는 relevance score(value)를 전부 합한 값입니다. 대표적으로 Alternating Least Square (ALS)에서의 ruir_{ui}값이 relevance에 해당합니다. relevance는 맥락에 따라 바뀔 수 있습니다.

그런데 CG만으로 모델을 평가하기에는 문제가 있습니다. 예를 들면,

A={2,4,3,1,5}B={5,1,3,2,4}A = \{2, 4, 3, 1, 5\}\\ \quad\\ B=\{5,1,3,2,4\}

위와 같은 두 모델을 CG로 평가하면 다음과 같습니다.

CGA=2+4+3+1+5=15CGB=5+1+3+2+4=15CG_A=2+4+3+1+5=15\\ \quad\\ CG_B=5+1+3+2+4=15

두 모델의 CG값은 같지만, 랭킹의 우선순위를 고려하면 B모델의 성능이 더 좋다고 볼 수 있습니다(상위 랭킹에 더 높은 선호도를 가진 아이템을 선별했으므로). 즉, CG는 랭킹을 온전히 반영하지 못합니다.

Discounted Cumulative Gain (DCG)

그래서 할인(Discounted) 개념을 도입한 DCG가 등장합니다. 여기서 말하는 할인은 경제학에서 말하는 감가상각과 비슷합니다. 경제학의 감가상각이 가치의 감소라면, 여기서 할인되는 것은 가치에 해당하는 rel값이 아니라 순서에 따른 중요도입니다. 즉, 순위에 따른 계수가 감소한다는 의미입니다. 수식을 보겠습니다.

DCG=inrelilog2(i+1)DCG=\sum_i^n{\mathrm{rel}_i \over \log_2(i+1)}

A와 B의 DCG값을 비교해 볼까요?

DCGA=2log22+4log23+3log24+1log25+5log2612.10DCGB=5log22+1log23+3log24+2log25+4log2613.76DCG_A={2\over \log_2 2}+{4\over \log_2 3}+{3\over \log_2 4}+{1 \over \log_2 5}+{5\over\log_2 6}\simeq 12.10\\ \quad\\ DCG_B={5\over \log_2 2}+{1\over \log_2 3}+{3\over \log_2 4}+{2\over \log_2 5}+{4\over\log_2 6}\simeq 13.76

정상적으로 B모델의 성능이 높게 평가되는 것을 확인할 수 있습니다.

그런데 DCG에도 문제가 있습니다. 바로 랭킹의 길이가 다를 때입니다. 길이가 길수록 DCG값은 상승하게 될 것입니다. 예를 들어 보죠.

C={5,1,1,2,1,2,3,2,1}C=\{5, 1, 1, 2, 1, 2, 3, 2, 1\}

새로운 모델 C가 들어왔습니다. 모델 C의 DCG값은 얼마일까요?

DCGC=5log22+1log23+1log24+2log25+1log26+2log27+3log28+2log29+1log21014.46DCG_C={5\over \log_2 2}+{1\over \log_2 3}+{1\over \log_2 4}+{2\over \log_2 5}+{1\over\log_2 6}+{2\over \log_2 7}+{3\over \log_2 8}+{2\over \log_2 9}+{1\over \log_2 10}\simeq 14.46

DCG 값만 보면 C모델이 더 나은 모델입니다. 하지만 top3를 놓고 보면 B의 CG/DCG 값이 C보다 높습니다. top5를 기준으로 해도 마찬가지입니다.

Normalized Discounted Cumulative Gain (NDCG)

길이가 문제라면 길이를 정규화해주면 되겠죠? 이게 바로 NDCG입니다. 구체적인 식은 다음과 같습니다.

NDCG=DCGIDCGNDCG= {DCG\over IDCG}

IDCG는 Ideal DCG입니다. 이상적인 순서로 랭킹을 구했을 때의 DCG값이죠. 즉, NDCG는 주어진 모델이 최적화된 랭킹을 얼마나 재현했는가를 평가하는 지표입니다. Recall과 비슷한 맥락이죠.

모델 B와 C를 NDCG로 비교해 보겠습니다.

IDCGB=5log22+4log23+3log24+2log25+1log2614.82IDCGC=5log22+3log23+2log24+2log25+2log26+1log27+1log28+1log29+1log21015.63NDCGB=13.7614.820.9285NDCGC=14.4615.630.9251IDCG_B={5\over \log_2 2}+{4\over \log_2 3}+{3\over \log_2 4}+{2\over \log_2 5}+{1\over\log_2 6}\simeq 14.82\\ \quad\\ IDCG_C={5\over \log_2 2}+{3\over \log_2 3}+{2\over \log_2 4}+{2\over \log_2 5}+{2\over\log_2 6}+{1\over \log_2 7}+{1\over \log_2 8}+{1\over \log_2 9}+{1\over \log_2 10}\simeq 15.63\\ \quad\\ NDCG_B={13.76\over14.82}\simeq0.9285\\ \quad\\ NDCG_C={14.46\over15.63}\simeq0.9251

결론적으로 모델 B가 C보다 더 좋은 모델이라고 평가할 수 있습니다.

profile
재미있게 살고 싶은 대학원생

0개의 댓글