본문 바로가기

부스트캠프 AI Tech 3기/이론 : U-stage

[추천시스템] Precision@K, Recall@K, AP@K

정의부터 하고 살펴보자


Precision@K

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

 

Recall@K

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


예시를 들어 보자

여기서는 사용자도 item을 4개 선택했지만 사용자가 선택할 item의 갯수는 달라질 수 있다.

 

Precision@3은 (추천시스템과 사용자가 선택한 item 중 겹치는 것의 갯수) / (추천시스템이 추천한 item)이 되고,

Recall@3은 (추천시스템과 사용자가 선택한 item 중 겹치는 것의 갯수) / (사용자가 선택한 item)이 된다.

 


 

Precision@K, Recall@K은 순서를 신경쓰지 않지만 더 관심을 가질만한 아이템을 먼저 추천해주는 것이 중요하기 때문에 평가에 순서를 넣어서 AP@K와 MAP@K를 만들었다. 그래서 Precision@K와 달리 관련 아이템을 더 높은 순위에 추천할 수록 점수가 상승한다.


AP@K

Precision@1 ~ Precision@K까지의 평균값

$$AP@K=\frac{1}{m}\displaystyle\sum^{K}_{i=1}Precision@i$$

<sopplier usage>

 

$$AP@K=\frac{1}{m}\displaystyle\sum^{K}_{i=1}Precision@i\cdot rel(i)$$

<full formula>

 

차이는 $rel(k)$가 곱해져 있지 않다는 것인데, rel(k)는 relevance로 해당 아이템을 사용자가 좋아했는지 여부이다. 그래서 binary값인 0 또는 1의 값을 가진다. sopplier usage의 경우 k가 암시적으로 추천이 틀렸을 때는 0이라고 정의되어 있다고 생각하는 것이다.

 

relevance를 곱해주면 해당 순서에서 추천했을 때 영향을 주어 먼저 추천해주면 점수가 더 커지게 해준다.

 

m은 추천시스템이 추천한 갯수 k와 상관없이 사용자가 선택한 item의 갯수이다.

=전체 itemset에서 실제로 연관되었다고 생각되는 아이템의 개수 

=사용자가 아이템에 이벤트를 실행한 횟수(ex.클릭)

=실제로 사용자가 engage한 횟수

 

평균을 구하는데 왜 k가 아니라m으로 나누는지 의문이 들 수 있다.

m의 큰 역할은 AP@K의 값이 1을 넘지 않게 해주는데, relevance로 인해서 더해지는 Precision@K의 갯수가 조절된다.


예를 들어 보자

이 예시에서는 m>k이어서 k로 나누어도 상관없을 것 같지만, m<k인 상황에서는 k로 나눈다면 너무 값들이 작아지는 문제가 생긴다. m>k에서는 k로 나누어도 1은 넘지 않지만 대부분의 값들이 1에 가까운 값들이 나와버리게 된다. 그러니 상황에 따라 유동적으로 변하는 relevance에 대응하는 m을 사용한다고 생각한다.

 

여기서 다 맞췄다고 하면 (사용자가 A,C,D,E를 선택했다고 했을 때) 그래도 AP@3은 최대 3/4이다. 1을 넘지 못한다. k가 사용자가 선택한 item의 수m 보다 작기 때문이다. 확률로 보여서 최대한 1이 되는게 맞다고 생각했는데, 식의 설계상 불가능하다.


MAP@K

모든 유저에 대한 AP값의 평균

$$MAP@K=\frac{1}{|U|} \displaystyle\sum^{|U|}_{u=1} (AP@K)_{u}$$

※$|U|$ : 전체 유저의 수


MAP는 이런 AP들이 전체 유저들에 대해서 평균을 구한 것이다.

 

Reference : [추천시스템] 성능 평가 방법 - Precision, Recall, NDCG, Hit Rate, MAE, RMSE,

<Recsys> 추천시스템 평가 방법 Mean Average Precision(MAP) 이란?,
Mean Average Precision (MAP) For Recommender Systems