데이터사이언스 이론 공부

NDCG로 랭킹 추천모델 평가하기

soopy 2022. 9. 15. 23:14
728x90

 

NDCG는 추천 모델 중에서도 추천 받는 대상인 유저에게 있어 추천의 순서가 중요한 요소로 작용하는 랭킹 추천 모델에 대한 평가에 활용한다.

그래서 유저와 특정 상품 간의 연관성 또는 각 상품의 선호도 등을 점수로 환산한 뒤 1등부터 K등까지 나열한 결과가 가장 이상적인 추천이라는 가정하에 모델 평가를 진행한다. 쉽게 말해 유저 마음 속 1위에서 K위까지의 상품을 등수 순서에 맞춰 추천해주는 것이 중요하다는 의미이다.

여기서 점수 역할을 해야하는 연관성 또는 선호도를 어떻게 측정할 수 있을까? 웹사이트의 경우 특정 상품에 대한 각 유저의 클릭률, 체류시간 등을 지표로 삼을 수도 있고, 장바구니에 담았는지, 결제 단계까지 이르렀는지 등 유저 행동에 기반한 스코어링을 할 수도 있고, 각 상품에 매긴 평점이나 좋아요/싫어요 선택 비율 등을 통해서도 유저와 상품 간의 관계를 설명할 수도 있을 것이다.

이와 같이 실제 측정한 유저 행동 지표를 가지고 높은 점수 순으로 상위 K개의 상품을 나열한 결과와
추천모델을 통해 예측된 추천 상품  K개의 리스트를 서로 비교하는 방식으로 평가를 진행한다.

NDCG 평가 외에도 TOP-K, MAP와 같은 평가 방식도 있지만 제품 추천의 순서를 잘 맞추는 것이 중요한 모델에 대해서는 NDCG가 주요 평가 방식으로 채택되는데 그 이유는 순서에 따른 가중치 연산이 적용되어 있기 때문이다.

NDCG의 공식을 단계별로 살펴보며 이해해 보도록 하자

$CG_k = \sum_{i=1}^{k}rel_i$

먼저 $rel$은 relevance 즉 관련성을 뜻하며 위에서 말한 여러 기준에 의해 매겨진 점수를 의미한다.

여기서 다시 한 번 기억해야할 점은 유저와 상품과의 관계 점수를 평가 지표로서 다룬다는 점이다.

그래서 만약 k가 10이라면 10개의 제품에 대해서 매겨진 점수를 모두 합산한다는 것을 의미한다.

$DCG_k = rel_1 + \sum_{i=2}^{k}\frac{rel_i}{log_2i}$

알파벳 D가 추가되었는데 Discount를 의미한다.

해당 식에서 D가 하고싶은 말을 간단하게 정리하자면 “유저 마음 속 1등 상품을 잘 맞춘 것과 2등 상품을 잘 맞춘 것에 대한 배점이 달라야 한다.” 라고 말할 수 있겠다.

rel_1은 1등 상품에 대한 점수이다. 그리고 2등 상품부터 k등 상품까지는 sum으로 묶여 있는데 $i$에 2부터 k까지를 차근차근 넣어보면 분모가 점점 커지는 것을 알 수 있을 것이다. 즉 랭킹 수치가 점점 커질수록 결과값이 감소하도록 가중치를 적용하는 방식임을 알 수 있다.

결론적으로 k개의 점수를 모두 더한다는 사실에는 변함이 없지만 랭킹이 뒤로 밀릴수록 더해지는 결과값이 작아짐을 의미한다. 그렇게 되면 1~100등 중 1등을 잘 예측해낸 점수와 100등을 잘 예측해낸 점수의 배점이 달라지게 된다.

(자꾸 예측 이야기를 해서 예측 모델인가 라는 생각이 들 수도 있지만 어찌보면 잘 추천한다는 것이 고객의 마음을 잘 예측해서 상품을 추천하는 것에 목적이 있다보니 안쓸 수가 없다.)

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

여기서 N은 Normalize를 의미한다. IDCG에서 I는 Ideal(이상)을 뜻하며, 고객의 마음 속 베스트 추천 순위를 뜻한다. 다시 말해 (정말 베스트 추천일지는 알 수 없지만) 위에서 말한 클릭률, 평점 등 향후 측정한 데이터를 기반으로 각 상품에 점수를 매겼을 때 가장 높은 점수를 차지한 상품부터 내림차순 정렬한 상품 리스트를 DCG로 계산한 결과를 IDCG로 본다.

그리고 특정 추천 모델을 통해 뽑아낸 추천 상품 리스트를 DCG로 계산한 결과가 분자 자리에 위치한 그 DCG를 의미한다.

만약 DCG가 IDCG와 일치한다면 NDCG는 1이 될 것이고 거의 완벽히 순위를 맞춘 추천 리스트로 평가될 것이다. 그러므로 1에 가까운 결과가 나올 수록 “추천을 잘 했다.” 라고 평가하는 방식이다.

NDCG의 핵심은 평가지표를 유저 행동에 기반을 두고 있다는 점을 기억하자.

728x90
728x90