Data & Research

[Recommender System] 추천시스템의 평가지표

물박사의 저장공간 2025. 5. 10. 09:55

2025.06.01 - [Data & Research] - [Recommender System] Table of Contents


일반적인 회귀/분류 문제라면 RMSE, cross entropy 등을 평가 지표로 사용할텐데요, 추천시스템에서는 조금 다른 평가지표를 사용합니다. 왜냐면 서빙하는 결과물이나 환경이 다르기 때문인데요. 예를 들어 영화를 5개 추천했다면 추천한 5개 중에 사용자가 만족할만한 영화가 몇 개였냐는 식으로 평가를 할 수도 있겠죠. 이 기준에서는 아무리 '매우 만족'스러운 영화 1개를 추천했어도 나머지 4개가 만족스럽지 않았다면 평가 지표는 낮을 겁니다. 

한 가지 예시를 들었지만 추천시스템의 목표와 서비스의 특성에 따라 평가지표도 다양하게 활용합니다. 추천의 정확성, 순위 품질, 다양성, 참신성, 커버리지 등이 그 기준이 될 수 있습니다. 

 

1. Precision at K (P@K)

사용자가 실제로 선호하는 아이템이 추천된 상위 K개 아이템 목록에 얼마나 많이 포함되어 있는지를 측정하는 지표입니다.

$$ P@K = \frac{\text{Number of relevant items in top K}}{\text{K}} $$

예를 들어, 사용자가 실제로 5개의 선호 아이템을 가지고 있고, 추천 시스템이 제공한 상위 3개 추천 중 2개가 사용자의 선호 아이템이라면 P@3 = 2/3 ≈ 0.67 입니다.

 

2. Recall at K (R@K)

사용자가 실제로 선호하는 모든 아이템 중에서 추천된 상위 K개 아이템 목록에 얼마나 많은 아이템이 포함되어 있는지를 측정하는 지표입니다. (분류 문제에서도 Precision, Recall... 과 같은 여러 각도에서의 평가지표가 있었던 것처럼 추천시스템에서도 마찬가지겠죠? 이 지표는 결국 사용자의 선호를 "얼마나 놓치지 않느냐" 판단하는 지표라고 생각하시면 됩니다)
$$ R@K = \frac{\text{Number of relevant items in top K}}{\text{Total number of relevant items}} $$

예를 들어, 사용자가 총 5개의 선호 아이템을 가지고 있고, 추천 시스템이 제공한 상위 3개 추천 중 2개가 사용자의 선호 아이템이라면 R@3 = 2/5 = 0.4 입니다.

 

3. Mean Average Precision (MAP)

각 사용자에 대한 Average Precision (AP)을 계산한 후, 모든 사용자의 AP 값의 평균을 구한 지표입니다. AP는 관련 아이템이 추천된 순위를 고려하여 정밀도를 평균낸 값입니다. 두 단계에 걸쳐 계산하는 지표인데요

먼저 각 사용자 \(u\)에 대한 Average Precision은 다음과 같이 계산됩니다.
$$ AP_u = \frac{\sum_{k=1}^{K} P@k \times rel(k)}{\text{Number of relevant items for user } u} $$

\( rel(k) \)는 일반적으로 \(k\)번째 추천된 아이템이 관련이 있으면 1, 아니면 0입니다. (사용하기에 따라서 더 구체화된 점수를 사용할 수도 있을겁니다)

그리고 위 사용자에 대한 metric을 모든 사용자에 대해서 평균내면 MAP가 됩니다. 

$$ MAP = \frac{\sum_{u=1}^{|U|} AP_u}{|U|} $$

 

예를 들어,

사용자 A의 관련 아이템이 [아이템2, 아이템5]이고

추천이 [아이템1, 아이템2, 아이템3, 아이템4, 아이템5]일 때
\( P@1 \) = 0/1 = 0
\( P@2 \)  = 1/2 = 0.5, rel(2) = 1
\( P@3 \)  = 1/3 ≈ 0.33, rel(3) = 0
\( P@4 \)  = 1/4 = 0.25, rel(4) = 0
\( P@5 \)  = 2/5 = 0.4, rel(5) = 1

사용자 A의 average precision은 아래와 같이 계산할 수 있습니다. 
\(AP_A\) = (0 * 0 + 0.5 * 1 + 0.33 * 0 + 0.25 * 0 + 0.4 * 1) / 2 = (0.5 + 0.4) / 2 = 0.45
다른 사용자들의 AP를 계산하고, 모든 사용자의 average precision 평균을 내면 MAP를 얻을 수 있습니다.


결국 MAP는 관련 아이템이 높은 순위에 추천되는 것을 중요하게 생각하며, 사용자별 성능을 종합적으로 평가하는 지표라고 할 수 있는데요, 주의할 점은 특정 item이 biased된 경우에는(이미 잘 알려져 있거나 유명한 경우 혹은 단 한 사람이 평가한 경우 등) 적절하지 않은 지표라는 점입니다. 

 

4. Normalized Discounted Cumulative Gain (NDCG)

추천된 아이템의 순위를 고려하여 관련성이 높은 아이템이 상위에 랭크될수록 높은 점수를 부여하는 지표입니다. DCG (Discounted Cumulative Gain)를 이상적인 DCG (IDCG)로 정규화한 값입니다. 역시 여러 단계에 걸쳐 계산할 수 있는데 먼저 Cumulative Gain (CG)는 다음과 같습니다. $$ CG_k = \sum_{i=1}^{k} rel(i) $$

Discounted Cumulative Gain (DCG)는 순위에 따라 할인율을 적용합니다(채권가격 계산할 때 더 먼 미래일 수록 더 많이 할인되는 걸 생각해보셔도 되고, 강화학습에서도 discount factor가 있었던 걸 떠올리셔도 될 것 같네요). 

$$ DCG_k = rel(1) + \sum_{i=2}^{k} \frac{rel(i)}{\log_2(i)} $$

Ideal DCG (IDCG)는 주어진 사용자에 대해 가능한 가장 이상적인 순서로 아이템이 추천되었을 때의 DCG 값입니다.

Normalized DCG (NDCG)는 DCG를 IDCG로 정규화합니다.

$$ NDCG_k = \frac{DCG_k}{IDCG_k} $$

 

예를 들어 볼까요?

  • 한 사용자가 관심을 가질 만한 영화는 총 3편이라고 가정합니다. (관련성 점수: 1)
  • 추천 시스템이 해당 사용자에게 5편의 영화를 추천했습니다.
  • 각 추천 영화의 실제 관련성 점수는 다음과 같습니다. (1: 관련 있음, 0: 관련 없음)
    • 추천 1: 관련 있음 (점수 1)
    • 추천 2: 관련 없음 (점수 0)
    • 추천 3: 관련 있음 (점수 1)
    • 추천 4: 관련 없음 (점수 0)
    • 추천 5: 관련 없음 (점수 0)

K = 3일 때 NDCG 계산:

  1. DCG@3 계산:
  2. IDCG@3 계산:
    IDCG는 관련 있는 아이템이 가장 높은 순위에 추천되었을 때의 DCG입니다. 이 사용자의 경우 관련 있는 영화는 3편이므로, 상위 3개 추천이 모두 관련 있는 경우의 DCG를 계산합니다.
  3. NDCG@3 계산:

K = 5일 때 NDCG 계산:

  1. DCG@5 계산:
  2. IDCG@5 계산:
    관련 있는 영화는 3편이므로, 이상적인 상위 5개 추천은 [관련, 관련, 관련, 관련 없음, 관련 없음] 순서가 됩니다. 따라서 IDCG@5는 상위 3개까지의 DCG와 동일합니다.
  3.  NDCG@5 계산:

NDCG 값은 0과 1 사이의 값을 가지며, 1에 가까울수록 추천된 아이템의 순위가 이상적인 순위와 유사하다는 것을 의미합니다. K 값이 증가해도 관련 없는 아이템이 계속 추천 목록에 포함되어 있다면 NDCG 값은 크게 증가하지 않을 수 있습니다.