본 글은 Recommender Systems(Charu C. Aggarwal)라는 책과 다양한 블로그를 참고하여 정리한 내용들을 바탕으로 작성한 글입니다.
데이터 형태
요즘 다양한 분야에서 추천시스템이 활용되면서 다양한 알고리즘들이 생겨나고 적용되고있다.
추천시스템의 대표적인 알고리즘 전에 추천시스템에 활용되는 데이터의 형태와 평가지표를 먼저 정리해보고자 한다.
Explicit Data vs Implicit Data
추천시스템에 활용되는 데이터 형태를 크게 다음과 같이 나눌 수 있다.
Explicit Data
- 유저가 자신의 선호도를 직접(Explicit) 표현한 Data
- 유저의 호불호를 명백히 알 수 있기 때문에 강력하지만 데이터를 얻기 힘듬
- ex) 평점, 영화 리뷰, 구독, 차단 데이터 등
Implicit Data
- 유저가 간접적(Implicit)으로 선호, 취향을 나타내는 데이터를 의미
- 이런 데이터는 일단 유저가 개인정보제공에 동의만 한다면 자동적으로 수집되기 때문에 수집의 난이도 낮고 활용할 수 있는 데이터량이 많음
- ex) 구매 내역, 검색 기록, 방문 페이지, 마우스 움직임
평가지표
추천시스템의 모델을 생성하고 해당 모델이 얼마나 잘 추천하고 있는지에 대해서 평가를 도와주는 함수이다.
도메인이나 목적에 따라 다른 평가 함수를 도입해서 얼마나 잘 추천이 되는지 평가하는게 중요하다.
예를 들어, 영화평점의 경우에서는 두가지 형태로 평가를 할 수 있을 것이다.
- 내가 추천해준 영화를 고객이 봤나?
- 내가 추천해준 영화를 고객이 높은 점수로 평점을 줬나?
1번의 경우 단순히 보기만하면 추천에 성공했다고 하지만, 실제 고객의 만족도는 낮을 수 있다.
반대로 2의 경우는 고객의 만족도까지 고려해서 평가를 한 것이다.
이러한 성질들은 추천을 진행할때에도 차이가 생기므로 정확히 하여 시스템을 평가할 필요가 있다.
Accuracy
$$ accuracy(y, \hat{y}) = \frac{1}{n_{samples}}\sum^{n_{samples}-1}_{i=0}I(\hat{y_i}=y_i) $$
예를 들어, 내가 추천해준 영화를 고객이 봤나? vs 보지 않았나? 라 생각하면 된다.
내가 추천해주는 영화를 많이 볼수록 상승하고, 추천하지 않은 영화를 보지 않을수록 정확도는 상승한다.
하지만, 추천하지 않은 영화의 수는 추천한 영화의 수에 비해 굉장히 많고 편향된 결과를 얻을 수 있다.
그렇기에 추천해준 영화 중 본 영화로만 평가를 매겨줘야 하는게 맞다.
근데, 이렇게 하면 모든 상품을 추천해주면 정확도는 무조건 1이 나오게 된다.
그러므로 정확도를 평가지표로 사용할 경우,
상위 n개의 상품만 추천한다고 했을 때 어느 정도의 정확도를 얻는지 판단하는게 제일 정확한 값을 얻을 수 있다.
MAP (Mean Average Precision)
추천시스템에서 랭킹 추천 분야에 많이 쓰이는 평가지표이다.
$$ Precision = \frac{True Positive}{True Positive + False Positive} $$
$$ AP@k = \frac{1}{m}\sum^k_{i=1}(p(k) if k^{th}item was relevant) $$
k의 의미는 추천리스트의 어디까지만 평가할 것인가 결정하는 index이다.
위의 예시에서 추천된 아이템을 사용자가 많이 선택할 수록 AP가 높아지는 걸 확인할 수 있다.
위의 예시에서는 추천된 아이템 중에서 동일하게 1개의 아이템만 선택했지만 순서가 달라지면 앞쪽에 배치될수록 높은 점수가 나오는 것을 확인할 수 있다.
$$ MAP = \frac{\sum^Q_{q=1}AveP(q)}{Q} $$
전체 사용자 Q명에 대한 평가이므로 평균을 내면 MAP가 구해진다.
MAP의 경우 추천의 순서에 따라서 값이 차이가 난다.
또한, 상위 k개의 추천에 대해서만 평가하기에 k를 바꿔가면서 상위 몇 개를 추천하는게 좋을지도 결정할 수 있다.
NDCG (Normalized Discounted Cumulative Gain)
MAP와 동일하게 추천시스템에서 랭킹 추천 분야에 많이 쓰이는 평가지표이다.
특히 상위의 랭킹 리스트가 하위 랭킹 리스트보다 확연하게 중요한 도메인에서는 유용한 평가지표이다.
$$ CG = \sum^n_{i=1}relevance_i $$
Cumulative Gain의 relavance scores(관련성 점수)는 사용자가 추천된 각 아이템을 얼마나 선호하는지를 나타내는 점수이다. 보통 raw_data의 rating 값이 많이 사용된다.
만약 높은 관련성 점수를 지닌 아이템이 낮게 랭크됐을 때 더욱 페널티를 적용하고 싶으면 관련성 점수의 지수함수 형태를 활용하면 된다. 도메인에 맞게 적용하면 된다.
$$ DCG = \sum^n_{i=1}\frac{relevance_i}{log_2(i+1)} $$
Discount가 도입된 DCG의 식을 보게 되면 랭킹이 뒤로 갈수록 분모가 커지므로 랭킹이 낮은 아이템은 평가지표에 미치는 영향이 줄어들게 된다.
즉, 1위와 2위의 아이템을 잘 추천해주는 것이 10위, 11위 등의 아이템을 잘 추천해주는 것보다 평가에 중요한 요소가 된다.
DCG느 모든 아이템에 적용되기 보다는 특정 갯수의 추천리스트에서 계산되는 것이 추천된다.
$$ NDCG = \frac{DCG}{iDCG} $$
마지막으로 IDCG(Ideal Discounted Culmulative gain)으로 나눠주면 Normalized된 NDCG를 얻게 된다.
IDCG는 결과를 관련성 점수가 큰 순서대로 정렬한 후 DCG를 계산 해준 값이다. 즉, 이상적인 순서를 고려하여 DCG를 산출한 값이라 할 수 있다.
NDCG는 0~1 사이의 값을 갖게 되는데 1과 가까울수록 우수한 성능을 지닌 추천시스템이라 할 수 있다.
Reference
http://manishbarnwal.com/blog/2018/09/27/types_data_recommender_system/
https://neptune.ai/blog/recommender-systems-metrics
https://towardsdatascience.com/evaluate-your-recommendation-engine-using-ndcg-759a851452d1
Representative Image Credits: hobbit (opens in a new window)/ Shutterstock
https://wannabenice.tistory.com/42
'Data Science > Recommendation System' 카테고리의 다른 글
[Recsys] 추천시스템 알고리즘 - 하이브리드 시스템, 연관성 분석 (0) | 2023.01.15 |
---|---|
[Recsys] 추천시스템 알고리즘 - 협업 필터링(Collaborative filtering) (0) | 2022.12.22 |
[Recsys] 추천시스템 알고리즘 - 콘텐츠 기반(Content-based) (0) | 2022.12.19 |
[Recsys] 추천시스템이란? (2) | 2022.12.12 |
댓글