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

Mineru·2022년 10월 4일
0

회귀 성능 평가 지표

Mean Absolute Error(MAE, 평균 절대 오차)

테스트 세트에 시험하고 싶은 n개의 평점이 있다고 해보자.
각각의 평점에 대해 평점 또는 시스템이 예측하는 것을 y, 그리고 사용자가 실제로 준 평점을 x로 놓을 수 있다.
그 평점 예측의 오차를 측정하기 위해서는 이 둘의 차이에 절댓값을 취하면 된다.

수식 그대도 예측된 평점과 실제 평점 사이의 차이이다.
우리의 테스트 세트의 모든 n개의 평점에 거친 이 오차들을 더하고, 평균을 구하기 위해 n으로 나눈다.
평균 절대 오차는 평점 예측에서의 각 오차의 절대 값들의 평균을 말한다.

점수가 낮을수록 좋음.

Root Mean Square Error(RMSE, 평균 제곱 오차의 제곱근)

정확도를 측정하기 위한 더욱 세련된 방법으로 RMSE가 있다.

차이점은 각각의 평점 예측 오차의 절댓값을 더하는 대신 평점 예측 오차를 제곱한 값을 더하는 것이다.

몇가지 이유로 MAE보다 더 많이 쓰이는 지표이다.

  1. RESE가 우리의 예상이 벗어났을 때 더 많이 패널티를 주고 우리가 상당히 근접하다면 패널티를 적게 준다는 것이다.
  2. 제곱 값을 취하게 됨으로써, 절댓값처럼 양수를 얻게 되고 이것은 더 큰 오차에 대한 패널티를 부풀린다. 제곱근을 취함으로써 되돌린 타당한 숫자를 얻어낸다.

MAE보다 더 많이 보게 되는 지표. 마찬가지로 점수가 낮을수록 좋음.

Average Reciprocal Hit Rate(ARHR, 평균 상호 적중률)

i=1n1rankiUsers\frac{\sum_{i=1}^n \frac{1}{\text{rank}_i} }{\text{Users}}
rankreciprocal rank
31/3
21/2
11

적중률과 동일하게 측정하고 적중이 나타나는 최상위 목록을 설명한다.
그래서 하위 슬롯보다 상위 슬롯에 있는 항목을 성공적으로 추천하는 데 관한 더 높은 신뢰를 얻게 된다.

유일한 차이점은 적중의 수를 더하는 것 대신에 각 적중의 상호 순위를 더하는 것이다.

cumulative Hit Rate(cHR, 누적 적중률)

hit rankpredicted rating
45.0
23.0
105.0
12.0

ARHR를 살짝 비틀어서 생각해보게 되면 cHR이 된다.

cHR은 예상한 평점이 어떤 한계치 아래에 있다면 해당 적중을 버리는 것이다.
cHR은 실제로 원하지 않을 것이라고 생각되는 사용자에게 항목을 추천하는 것에 관해 우리가 신뢰를 얻으면 안된다는 것이다.

목록에서 사용자가 찾아야 할 추천 사항이 너무 적은 상황에서는 "누적 적중률"을 기반으로 추천하는 하는 것이다.
예상되는 등급이 일부 임계 값 미만인 경우 적중을 버리는 것이 "누적 적중률"이다.

실제로 좋아하지 않을거라고 생각하는 사용자에게 해당 아이템을 추천하는 것은 신뢰를 얻지 못한다.
따라서 우리가 정한 기준에 미치지 못한 아이템들은 제거를 해야 한다.

rating Hit Rate(rHR, 등급 적중률)

ratinghit rate
5.00.0010
4.00.0040
3.00.0300
2.00.0010
1.00.0005

적중률을 보는 또 다른 방법은 예상 등급 별로 쪼개어 보는 것이다.
이말의 의미는 각 등급 별로 적중률을 표시하는 것을 말한다.

이상적으로 우리는 선호되는 영화를 추천하기를 원하고 등급별로 잘 쪼개어 살펴보는 것은 우리가 더욱 세부적으로 잘하고 있는지에 대한 감을 얻게 한다.

Leave-One-Out Cross Validation(Leave-One-Out 교차 검증)

품질 지표

  • 제공률(Coverage) : 추천 시스템이 제공할 수 있는 추천 데이터의 비율
  • 개인화(Personalization) : 얼마나 많은 사람이 이 아이템을 샀는지/클릭했는지를 측정하는 지표
  • 연관성(Relevance) : 추천된 아이템이 유저에게 관련이 있는가?
  • 다양성(Diversity) : 추천에서 얼마나 다양한 아이템이 추천되는가를 측정하는 지표
  • 인기도(Popularity) : 얼마나 많은 사람이 이 아이템을 샀는지/클릭했는지를 측정하는 지표
  • 참신함(Novelty) : 인기도와 반대되는 지표. 얼마나 새로운 아이템이 추천되고 있는가?
  • 민감도(Serendipity) : 얼마나 예측하지 않은 결과를 좋은 방향으로 내는지를 측정

성능 지표

Precision@K

추천한 K개 아이템 가운데 실제 유저가 관심있는 아이템의 비율

Precision=True PositiveTrue Positive+False PositiveTrue라고 ’예측’한 것들 가운데 실제 True인 비율\text{Precision} = \frac{\text{True Positive}}{\text{True Positive} + \text{False Positive}} → \text{True라고 '예측'한 것들 가운데 실제 True인 비율}

Recall@K

유저가 관심있는 전체 아이템 추천한 아이템의 비율

Recall=True PositiveTrue Positive+False Negative전체 True 가운데 True라고 ’예측’한 비율\text{Recall} = \frac{\text{True Positive}}{\text{True Positive} + \text{False Negative}} → \text{전체 True 가운데 True라고 '예측'한 비율}

Mean Average Precision(MAP)@K

Average Precision

AP@K=1mi=1KPrecision@i\text{AP@K} = \frac{1}{m} \textstyle \sum_{i=1}^K \text{Precision}@i
  • Precision@1부터 Precision@K 까지의 평균값을 의미
  • Precision@K와 다르게 연관성 있는 relevant 한 아이템을 더 높은 순위에 추천할 경우 점수가 상승

MAP

MAP@K=1Uu=1U(AP@K)uM \text{AP@K} = \frac{1}{|U|} \textstyle \sum_{u=1}^{|U|}(\text{AP@K})_u
  • 모든 유저에 대한 Average Precision 값의 평균 → 추천 시스템의 성능

Normailzed Discounted Cumulaitve Gain(NDCG)

  • 추천 시스템에서 가장 많이 사용되는 지표 중 하나로, 원조는 검색 Information Retrieval 에서 등장한 지표
  • Precision@K, MAP@K와 마찬가지로 Top-K 추천 리스트를 만들고 유저가 선호하는 아이템을 비교하여 값을 구함
  • MAP@K처럼 NDCG는 추천의 순서에 가중치를 더 많이 두어 성능을 평가하며 1에 가까울 수록 좋다.
  • MAP는 관련 여부를 이진값 형태로 평가하지만, NDCG는 연관도 값을 사용할 수 있기 때문에, 유저에게 더 연관있는 아이템 중 어떤 아이템이 상위로 노출되는지 알 수 있다.

Cumulative Gain

CGK=i=1Kreli{C}G_K = \textstyle \sum_{i=1}^K {rel}_i
  • 상위 p개 아이템에 대하여 관련도를 합한 것
  • 순서에 따라 Discount하지 않고 동일하게 더한 값

Discounted Culative Gain

DCGK=i=1Krelilog2(i+1){DC}G_K = \textstyle \sum_{i=1}^K \frac{{rel}_i}{ \log_2(i+1)}
  • 순서에 따라 log 값으로 나눠 Cumulative Gain을 Discount

Ideal DCG

IDCGK=i=1Krelioptlog2(i+1){IDC}G_K = \textstyle \sum_{i=1}^K \frac{{rel}_i^{opt}}{ \log_2(i+1)}
  • 이상적인 추천이 일어났을 때의 DCG 값
  • 가능한 DCG 값 중에 제일 큶

Normalized DCG

NDCG=DCGIDCG{N}{DC}{G} = \frac{{DCG}}{{IDCG}}
  • 추천 결과에 따라 구해진 DCG를 IDCG로 나눈 값 → 최대 값은 1이다.

NDCG@5

  • ideal order : [C(3), A(3), B(2), E(2), D(1)]
    • Relevance의 내림차순으로 정렬하여 추천하는 것이 이상적입니다.
  • Recommend Order: [E, A, C, D, B]
    DCG@5=2log2(1+1)3log2(2+1)3log2(3+1)1log2(4+1)2log2(5+1)=6.64IDCG@5=3log2(1+1)3log2(2+1)2log2(3+1)2log2(4+1)1log2(5+1)=7.14NDCG@5=DCGIDCG=6.647.14=0.93\begin{array}{lcl} DCG@5 & = & \frac{2}{\log_2(1 + 1)} \frac{3}{\log_2(2 + 1)} \frac{3}{\log_2(3 + 1)} \frac{1}{\log_2(4 + 1)} \frac{2}{\log_2(5 + 1)} = 6.64 \\ IDCG@5 & = & \frac{3}{\log_2(1 + 1)} \frac{3}{\log_2(2 + 1)} \frac{2}{\log_2(3 + 1)} \frac{2}{\log_2(4 + 1)} \frac{1}{\log_2(5 + 1)} = 7.14 \\ NDCG@5 & = & \frac{{DCG}}{{IDCG}} = \frac{6.64}{7.14} = 0.93 \end{array}

Hit Rate@K

Hit Rate=no. of hit userno. of user\text{Hit Rate} = \frac{\text{no. of hit user}}{\text{no. of user}}
  1. 특정 유저가 선호했거나 클릭했던 모든 아이템들을 가져온다.
  2. 모든 아이템 가운데 하나만 의도적으로 제거한다. → Leave-One-Out Cross-Validation
  3. 남은 아이템들을 가지고 추천 모델을 학습한 뒤, Top-K 추천 목록을 추출
  4. K개의 추천 목록 가운데 아까 제거한 아이템이 있다면 hit, 없다면 hit가 아니다.
profile
Daily Coding

0개의 댓글