내가 보려고 만든 블로그
추천시스템 Metric 정리 본문
추천시스템에서 등장하는 Metric 정리 .
Precision , Recall , NDCG , Coverage , Diversity , Novelty , Churn , Responsiveness, HR ( Hit Rate) , ARHR , CHR , rHR 까지
논문에 자주 보이던 Metric 뜻 알아보기
Precision & Recall
항상 헷갈리는 Precision 과 Recall 예시로 들어야 쉽다.
모델이 A ,B ,C ,D , E 라는 아이템을 추천했다고 했을때 User가 실제로 선호한 상품은 A,B,C,F 라고 하자.
이 때 Precision 은 전체 5개 상품중에 3개를 선호했으니 3/5 -> 0.6 이 된다
Recall 은 유저가 선호한 상품 4개(A,B,C,F) 에서 실제 모델이 추천한 상품 (A,B,C) = 0.75 가 된다.
NDCG
추천 관련 논문을 보면 가장 많이 보이는 척도. NDCG = DCG / IDCG 이다.
DCG => Actual Discounted Cumulative Gain
IDCG => Ideal Dicsounted Cumulative Gain
DCG와 IDCG는 위의 사진 처럼 구할 수 가 있다. n은 추천해주는 상품의 수 , i는 해당 순위 , rel_i 는 relevance 값으로 상황마다 다르겠지만 예시에서는 유저가 실제로 그 상품을 구매할경우 Yes -> 1 , No -> 0 과 같은 형태의 값을 가지도록 가정하였다.
사진대로 예시를 들자면 모델이 A,B,C의 순서대로 1,2,3 의 순위를 예측하였다고 하자. 하지만 실제로 유저는 1위 D ,2위 B , 3위 C 와 같이 랭킹을 부여했다 즉 , 2위와 3위의 상품만을 맞춘 것. 이때의 DCG는 오른쪽 밑과 같이 구해진다. 이와 다르게 IDCG는 이상적인 경우 , 즉, 가장 높은 점수를 얻을 수 있을 경우의 점수이다. 예시에서 D,B,C 순서대로 예측 했을 경우가 최선이므로 IDCG는 다음과 같이 구해지게 되고 최종적으로 그림에는 없지만 NDCG = DCG / IDCG 의 값을 구하면 된다.
Coverage
모델이 Train set을 통해 학습 후 상품 혹은 유저를 예측할때 얼마나 많은 상품, 유저를 커버하고 있느냐.
예를 들어 전체 10개의 상품(A~ J) 이 존재한다고 해보자. 모델이 예측한 상품들을 확인했더니 A,B,C,D,E,F 6개 존재하고 G,H,I,J 는 예측 결과에 포함되지 않는다고 했을때 Item Coverage는
6 / 10 = 0.6 이 되게된다.
Diversity
추천 결과가 다양성을 가지고 있느냐. 추천의 결과가 모두 비슷한 상품들만 포함하고 있으면 추천의 정확도를 높일 수 있을 수 있다고 하더라도 유저에게 다양한 상품을 노출시키고 새 상품을 접하게 될 기회가 줄게 됨.
추천 상품들의 다양성이므로 1 - SIM 형태로 표현될 수 있겠고 이때 보통 SIM으로는 Pair Wise 한 셋을 만든 후 구한다고 한다.
이건 패스...
Novelty
Popularity의 반대 개념 . 추천한 상품들이 얼마나 Non Poplular 한 상품들을 잘 추천하나를 측정.
Churn & Responsiveness
유저가 새로운 행동을 보였을 때 Recommendation System이 얼마나 이에 잘 반응하여 추천 아이템을 변경하는 지의 척도
Churn은 횟수와 관련된 척도라면 Responsiveness는 반응시간과 관련한 척도이다.
HR ( Hit Rate)
얼마나 많이 맞췄냐를 나타내는 척도. 다음과 같은 방법으로 구해진다.
1. leave-one-out cross validation을 통해 테스트 셋을 구축한다.
말 그대로 유저가 평가한 상품들중 하나씩을 마스킹하여 테스트 셋으로 구축한다.
2. 모델이 Top-N개의 상품을 추천후보로 뽑을때 이 마스킹한 상품이 포함되있는지를 체크한다. 있다면 Hit(1,0) 한 것이다.
3. 최종적으로 다음과 같은 형태가 되겠다.
각 유저별 hit 여부 의 총합
-----------------------
전체 유저의 수
추가로 논문을 보면 HR@5 , HR@10 등의 기호를 자주 볼 수 있는데 @N 은 N개의 상품을 추천했을때 라는 뜻이다.
ARHR
HR이 단순히 1,0 과 같은 형태로 hit 여부를 구하였다면 ARHR은 순위를 고려하여 성능을 측정한다.
예를 들어, 유저가 상품 A,B,C 에 대하여 A = 5점, B = 4점 C = 3점을 부여하였을 경우 A,B,C 각각에 대한 선호 순위는 1,2,3등 순으로 부여가 되겠다. 만일 모델이 예측한 상품이 A고 실제로 유저가 A를 보았다면 1/1 의 점수를 B를 예측했고 실제로 B를 봤다면 1/2 와 같이
1 / ranking 의 값을 부여한다. 즉, 상품을 보았나에서 1,2 등 과 같은 높은 선호도의 상품을 잘 맞췄는지를 척도로 가져가게 된다.
CHR
쓰레드 값을 정해 놓고 그 이상의 rating을 얻었을 때만 hit 이라고 인정해주는 방식. 예를 들어 ,threshold 값이 3일 경우
user가 상품 A를 보고 2점을 줬더라도 threshold 값을 넘지 못했으므로 hit 이라고 인정해주지 않게 된다.
rHR
각 actual rating별 Hit한 비율을 표현하는 척도이다. 예를 들면, 아래의 그림과 같다.
3.5점을 예시로 하면 , 유저가 실제로 3.5점이라고 예측한 상품이 100개라고 할때 그 중에 hit한 상품이 약 17개 인 것이다.
이 때 Hit 여부는 위에서 Hit Rate를 구하는 방식과 같음 (1,0 방식). 글로만 쓰면 조금 헷갈릴 수있을 것 같아 코드도 첨부.
'Recommendation > 모델링' 카테고리의 다른 글
<Recommendation> Matrix Factorization 부터 Deepmf , DCN, wide&deep 까지 (0) | 2022.09.13 |
---|---|
<Recommendation> BPR , Bayesian Personalized Ranking 구현 (0) | 2022.08.16 |
<Recommendation> MF , Biased_MF 구현 (0) | 2022.07.23 |
Collaborative Filtering (user) 구현 (0) | 2022.07.11 |
Surprise 모듈들 간단 정리 (0) | 2022.06.24 |