추천화 시스템 04. 추천 시스템의 평가 지표

최지수·2021년 6월 18일
2

추천화 시스템

목록 보기
4/8

추천 시스템의 평가 지표

추천 시스템의 평가 지표에 대해 정리해 보겠습니당!

적용한 추천 시스템이나 모델의 성능 평가는 아래에 관점으로 진행합니당

비즈니스 / 서비스 관점

  • 추천 시스템 적용으로 인한 매출, PV의 증가
  • 새로운 추천 아이템으로 인한 유저의 CTR 상승

PV? CTR?

  • PVPage View : 사람들이 홈페이지 및 사이트에 몇번의 페이지를 둘러봤는지에 대한 수치이며, 10명이 방문하여 10개씩의 페이지를 둘러봤다면 PV100이 됩니당(feat. SNS).
  • CTRClick Through Rate : 쉽게 말해서 클릭류! 광고가 노출되었을 때 얼마나 클릭을 했느냐라는 수치를 나타냅니당. 일반적인 공식은 클릭수노출수100\frac{클릭 수}{노출 수} * 100 의 공식으로 구합니당
    (ex. 광고 100번 노출되었을 때 10번의 클릭이 일어났다면 CTR10%).

품질 관점

  • 연관성Relevance : 추천된 아이템이 유저에게 관련이 있는가?
  • 다양성Diversity : 추천된 Top-K 아이템에 얼마나 다양한 아이템에 추천되는가?
  • 새로움Novelty : 얼마나 새로운 아이템이 추천되고 있는가?
  • 참신함Serendipity : 유저가 기대하지 못한 뜻밖의 아이템이 추천되는가?

평가 과정

평가 지표를 파악했으니 이제 어떤 단계를 거치며 평가를 진행하는지 알아보겠습니당.

Offline Test

  • 새로운 추천 모델을 검증하기 위해 가장 먼저 필요한 단계
  • 유저로부터 이미 수집한 데이터를 Train/Valid/Test로 나누어 모델의 성능을 객관적인 지표로 평가
  • 보통 Offline Test에서 좋은 성능을 보여야 Online 서빙에 투입되지만, 실제 서비스 상황에선 다양한 양상을 보임Serving Bias

성능 지표

Precsion@K, Recalll@K, MAP, NDCG, Hit Rate, RMSE, MAE \to 논문이나 A/B Test에선 강조된 지표를 자주 사용합니당

Online A/B Test

  • Offline Test에서 검증된 가설이나 모델을 이용해 실제 추천 결과를 서빙하는 단계
  • 추천 시스템 변경 전후의 성능을 비교하는건이 아닌, 동시에 대조군A실험군B의 성능을 평가함 \to 단, 대조군실험군의 환경은 동일해야 함
  • 실제 서비스를 통해 얻어지는 결과를 통해 최종 의사결정이 이뤄짐
  • 대부분 현업에서 의사결정을 위해 사용하는 최종 지표는 모델 성능(RMSE, NDCG 등)이 아닌 매출, CTR 등의 비즈니스 / 서비스 지표 컴퓨터만 믿고 우기지 말라는거겠죠?

ML Engineer 직군 자격요건에서 자주 언급되던 분할-실행 테스트A/B Test입니당.

제가 이해한 것을 간략하게 말씀드리면 대조군A과 조금 다른 설정을 한 실험군B 두고 유입되는 고객을 임의로 배치하고 CTR를 비교하여 광고 연결률의 유의미한 차이를 테스트하는 것이라고 합니당.

2011년 기준 구글 갓글 에서 7,000가지가 넘는 분할-실행 테스트A/B Test를 수행한다고 하니 그만큼 효과가 입증된 성능 평가 방법이라고 할 수 있겠져.

참고 : https://statkclee.github.io/statistics/stat-ab-testing.html

성능 지표

다음은 성능 지표에 대해 자세히 알아봅니당.

Presion/Recall

  • 이진 분류Binary Classification의 Metric으로 사용되는 지표입니당.

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

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

Precision/Recall@K

  • Precision@K : 우리가 추천한 K개 아이템 가운데 실제 유저가 관심있는 아이템의 비율
  • Recall@K : 유저가 관심있는 전체 아이템 가운데 우리가 추천한 아이템의 비율

Example)

  • 우리가 추천한 아이템 개수 : K = 5
  • 추천한 아이템 중 유저가 관심있는 아이템 개수 : 2
  • 유저가 관심있는 아이템의 전체 개수 : 3
    \to Precision@5 = 25\frac{2}{5}, Recall@5 = 23\frac{2}{3}

Mean Average Precsion(MAP)@K

Average Precsion

AP@K=1mi=1KPrecision@iAP@K = \frac{1}{m}\sum_{i=1}^{K}Precision@i

  • Precision@1부터 Precision@K 까지의 평균값을 의미
  • Precision@K와 다르게 연관성 있는relevant한 아이템을 더 높은 순위에 추천할 경우 점수가 상승

MAP

MAP@K=1Uu=1U(AP@K)uMAP@K = \frac{1}{\lvert U \rvert}\sum_{u=1}^{\lvert U \rvert}(AP@K)_{u}

  • 모든 유저에 대한 Average Precision 값의 평균 \to 추천 시스템의 성능

Normailzed Discounted Cumulaitve Gain(NDCG)

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

Cumulative Gain

CGK=i=1KreliCG_{K} = \sum_{i=1}^{K} rel_{i}

  • 상위 p개 아이템에 대하여 관련도를 합한 것
  • 순서에 따라 Discount하지 않고 동일하게 더한 값

Discounted Culative Gain

DCGK=i=1Krelilog2(i+1)DCG_{K}=\sum_{i=1}^{K}\frac{rel_{i}}{log_{2}(i+1)}

  • 순서에 따라 log 값으로 나눠 Cumulative Gain을 Discount

Ideal DCG

IDCG=i=1Krelioptlog2(i+1)IDCG = \sum_{i=1}^{K}\frac{rel_{i}^{opt}}{log_{2}(i+1)}

  • 이상적인 추천이 일어났을 때의 DCG 값
  • 가능한 DCG 값 중에 제일 큶

Normalized DCG

NDCG=DCGIDCGNDCG = \frac{DCG}{IDCG}

  • 추천 결과에 따라 구해진 DCGIDCG로 나눈 값 \to 최대 값은 1이다.

Example)
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.93DCG@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

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. 특정 유저의 선호하거나 클릭했던 모든 Item을 가져옵니다.
  2. 모든 Item 가운데 하나만 의도적으로 제거한다. \to Leave-One-Out Cross-Validation
  3. 남은 Item들을 가지고 추천 모델을 학습한 뒤, Top K 추천 리스트를 추출
  4. K개의 추천 리스트 가운데 아까 제거한 Item이 있다면 hit, 아니면 hit가 아니다.

평점 예측 방법(Cost Function)

데이터feature와 실제 결과 데이터 값을 비교해서 오차Error의 정도를 표시하는 함수를 손실 함수Cost fuctions이라고 합니당.

Machine Learning에 필수적인 함수로 추천 시스템에선 아래의 과정을 거쳐 데이터feature를 수집하고, 이걸로 예측 값을 구해 실측 값을 비교하는 손실 함수Cost function을 통해 오차Error가 적은 환경을 찾아 모델을 완성시킵니당.

과정

  1. 유저가 아이템에 대해 Explicit / Implicit한 Feedback을 남긴다.
  2. Training Data를 통해 학습한 모델을 바탕으로 Test Data에 있는 Feedback 값을 얼마나 정확하게 예측하는지를 지표로 삼는다.
  3. 실측값과 예측값의 차이를 하나의 성능 지표로 표현Cost Function
    • MAEMean Absolute Error
    • RMSERoot Mean Square Error
  4. Error가 낮을 수록 추천 알고리즘의 성능이 좋다고 평가
    • 그러나 성능이 좋다고 해서 꼭 좋은 추천을 하는 것은 아니다.

Mean Absolute Error(MAE) & Root Mean Square Error(RMSE)

MAE=1R^r^uiR^ruir^uiMAE = \frac{1}{\lvert \hat{R} \rvert} \sum_{\hat{r}_{ui} \in \hat{R}} \lvert r_{ui} - \hat{r}_{ui} \rvert, RMSE=1R^r^uiR^(ruir^ui)2RMSE =\sqrt{\frac{1}{\lvert \hat{R} \rvert} \sum_{\hat{r}_{ui} \in \hat{R}} (r_{ui} - \hat{r}_{ui})^{2}}

  • RMSEMAE보다는 outlierbad prediction에 취약합니다.
  • RMSE는 절대값이 없기 때문에 수학적으로 간편 \to 대부분의 Machine Learning 모델은 RMSE를 손실함수cost function로 사용

Example)

MAE=(2+3+1+0)4=1.5MAE = \frac{(2 + 3 + 1 + 0)}{4} = 1.5

RMSE=4+9+1+04=1.87RMSE = \sqrt{\frac{4 + 9 + 1 + 0}{4}} = 1.87

RMSEMAE보다 항상 큽니다.

Github : https://github.com/pray92/recommendation_system

profile
#행복 #도전 #지속성

0개의 댓글