<평가지표 모음>
1. 추천시스템
추천시스템에서 사용되는 지표들을 정리한 글이며, 지속적으로 업데이트 중입니다.
last update - 2023.03.06
Cumulative Gain (CG)
이름부터 '무언가를 누적(cumulative)한 값'입니다.
CG=i∑nreli
CG를 수식으로 나타내면 위와 같습니다. rel은 사용자가 아이템을 얼마나 선호할 것인가를 의미합니다. 즉, CG는 relevance score(value)를 전부 합한 값입니다. 아이템에 대한 사용자의 총 선호도 수치... 정도로 요약할 수 있겠네요.
대표적인 예시로 Alternating Least Square (ALS)에서 rui값이 있으며, relevance가 의미하는 바는 맥락에 따라 바뀔 수 있습니다.
하지만 CG만으로 모델을 평가하기에는 문제가 있습니다.
A={2,4,3,1,5},B={5,1,3,2,4}
위와 같이 A와 B 두 모델이 각각 예측한 결과가 있다고 해봅시다. 두 모델의 CG 값은 15로 같습니다. 그렇다면 어느 모델이 더 좋은 걸까요? 첫 번째 추천만 사용할 경우 B 모델의 성능이 더 좋다고 볼 수 있지만, 두 번째 추천까지 사용한다면 A와 B 모두 1승 1패로 성능이 같다고 볼 수도 있습니다.
이처럼 CG는 순서를 구분하지 않기 때문에 선호도 랭킹을 제대로 반영하지 못합니다.
Discounted Cumulative Gain (DCG)
그래서 할인(Discounted) 개념을 도입한 DCG가 등장합니다. 더 선호하는 아이템을 먼저 추천하도록 추천한 순서에 따라 가중치를 매기는 것입니다. 경제학에서 말하는 감가상각과 비슷하죠. 수식으로 쓰면 다음과 같습니다.
DCG=i∑nlog2(i+1)reli
A와 B의 DCG값을 비교해 볼까요?
DCGA=log222+log234+log243+log251+log265≃12.10DCGB=log225+log231+log243+log252+log264≃13.76
DCGB 값이 조금 더 높으므로, 두 모델 다 잘 예측했지만 순서까지 따지면 B가 더 낫다고 할 수 있습니다. 하지만 DCG에도 한 가지 치명적인 단점이 있습니다. 예를 들어,
C={5,1,1,2,1,2,3,2,1}
새로운 모델 C가 들어왔습니다. 모델 C의 DCG값은 얼마일까요?
DCGC=log225+log231+log241+log252+log261+log272+log283+log292+log2101≃14.46
DCG 값만 보면 C가 B보다 더 좋은 모델입니다. 하지만 Top 3개의 아이템만 잘라서 비교하면 B 모델이 더 낫습니다. 이처럼 DCG는 추천하는 아이템의 개수에 따라 분별력이 변동한다는 문제가 있습니다.
Normalized Discounted Cumulative Gain (NDCG)
길이가 문제라면 길이를 정규화해주면 되겠죠? 이게 바로 NDCG입니다. 구체적인 식은 다음과 같습니다.
NDCG=IDCGDCG
IDCG는 Ideal DCG입니다. 이상적인 순서로 랭킹을 구했을 때의 DCG값이죠. 여기서 말하는 '이상적인 순서'란 가장 선호도가 높은 아이템부터 내림차순으로 정렬한 것을 말합니다. Ground truth ranking을 알 수는 없으므로 실제로는 모델의 예측을 정렬하여 계산합니다.
즉, NDCG는 주어진 모델이 최적화된 랭킹을 얼마나 재현했는가를 평가하는 지표입니다.
IDCGB=log225+log234+log243+log252+log261≃14.82IDCGC=log225+log233+log242+log252+log262+log271+log281+log291+log2101≃15.63NDCGB=14.8213.76≃0.9285NDCGC=15.6314.46≃0.9251
즉, 이 경우 B가 C보다 더 좋은 모델이라고 할 수 있습니다.
Cumulative Gain 계열의 metric을 이용할 때는 항상 rel 값이 맥락에 따라 바뀔 수 있다는 점에 주의해야 합니다. 즉, 동일한 데이터를 가지고 평가를 하더라도 모델에 따라 B모델보다 C모델의 성능이 좋다는 결과가 나올 수 있습니다.