포스팅 개요
이번 포스팅은 추천 시스템 평가(Evaluation Metrics for recommender system)에 대해서 지극히 '개인적인' 생각을 정리한 포스팅입니다.
'추천 시스템 평가는 어떻게 하면 좋을까?' 이 부분을 추천 시스템 프로젝트를 하면서 그리고 추천 시스템 스터디를 진행하면서 정말 많이 생각했었습니다. 그래서 제가 리딩을 했던 추천 시스템 스터디 마지막 날에 이 주제를 가지고 제가 발표를 했었고 그 내용을 이번 포스팅에 정리해보고자 합니다.
참고한 자료는 아래와 같습니다.
- towardsdatascience.com/an-exhaustive-list-of-methods-to-evaluate-recommender-systems-a70c05e121de
- medium.com/@cfpinela/how-to-evaluate-recommender-systems-874a313d7724
- sdsawtelle.github.io/blog/output/mean-average-precision-MAP-for-recommender-systems.html
포스팅 본문
좋은 추천 시스템이란 무엇일까?
과연 좋은 추천 시스템이란 무엇일까? 그리고 이 추천 시스템의 궁극적인 목표가 무엇일까? 저는 조그마한 경험이지만 추천 시스템 프로젝트를 진행하면서 이 2가지 고민을 굉장히 많이 했습니다. 사실, 처음 추천 시스템 프로젝트를 시작할 때는 이 질문에 금방 답을 내놓을 수 있었습니다. 하지만, 시간이 갈수록 저 질문에 대해서 굉장히 깊게 고민하게 되었고 그 이후에는 쉽게 답을 할 수 없었습니다. ( 하나의 답이 아닌 굉장히 여러 가지 답이 조합돼서 나오더라구요)
왜 그랬을까?를 돌이켜 생각해보니 이러한 질문에 다다르게 되더군요
과연 추천 시스템을 잘 평가할 수 있는 방법이 있을까? 추천 시스템엔 정답이라는 것이 있을까? 에 대한 고민을 계속했던 것 같습니다. 단순히 강아지, 고양이 분류와 같은 이진 분류 등의 문제에서는 Accuracy와 같은 것으로 '정답' 개념을 맞출 수 있는데 과연 이게 추천 시스템에서 가능한 요소일까? 에 대한 고민이 들더군요.
그렇게 시간이 흘러 한 2달 정도? 천천히 고민해본 것 같습니다.
- 비록 짧지만, 그 짧은 시간 고민을 해보면서
- 엄청난 추천 시스템을 개발한 것은 아니지만 그래도 실무 프로젝트를 해보면서
- 다른 도메인의 추천 시스템의 자료나 6개월에 걸친 스터디에서 각종 이야기를 보고 들으면서
제가 내린 결론은 아래와 같았습니다.
추천 시스템을 명확하게 평가할 수 있는 '(통합) 평가 메트릭스 정답지'는 없다
다시 한번 강조하지만, 이것은 지극히 제 개인적인 생각입니다. 그리고 왜 이렇게 생각하게 되었는지 조금씩 설명을 작성해보겠습니다.
제가 추천 시스템을 명확하게 평가할 수 있는 '(통합) 평가 메트릭스 정답지'가 없다고 생각한 이유는 아래와 같습니다.
- 도메인 혹은 서비스마다 다르다
- 같은 도메인 혹은 서비스여도 목적성(KPI 등)에 따라 다르다
- 매우 사용자 주관적이다
- 물론! 어느 정도의 정량적 평가(수치화된 평가)는 할 수 있을 것이다. 하지만, 이것을 '정답'이라고 생각하면 안 된다.
1. 사용자 주관적이다
추천 시스템을 통해 콘텐츠를 제공받은 사용자는 굉장히 주관적입니다. 그래서 일종의 예외? 케이스가 많은 것을 느낄 수 있었습니다.
예를 들어서 같은 군집 특성이 보인 사용자들에게 A, B, C를 추천했는데 User1은 A만 좋아하고 누구는 B, C를 좋아하고 누구는 C만 좋아하더라고요. (결국 추천한 것은 좋아하긴 합니다 ㅎㅎ) 이렇듯 사용자 개개인의 주관적인 특성과 사용자들이 현재 처해있는 상황을 예측할 수 없기 때문에 이것을 통합해서 평가할 수 있는 Metric이 있을까? 에 대한 질문에 물음표가 찍히더라고요. (군집마다 다르게 평가해야 하나?라는 생각도 했었습니다.)
2. '도메인 혹은 서비스마다 다르다' 그리고 '같은 도메인 혹은 서비스여도 목적성(KPI 등)'에 따라 다르다
이건 어찌 보면 당연합니다. 배달 도메인이면 음식 추천이어야 하고, 웹툰이면 웹툰 추천, 음악이면 노래 추천(혹은 가수 추천) 등 각각 도메인과 그 도메인에서 제공해주는 서비스 형태에 따라 추천 시스템이 다르게 노출될 것입니다.
또한, 어떤 서비스에서는 사용자 피드백 등을 볼 수 있지만 또 어떤 서비스에서는 그게 불가능할 때도 있습니다. 어떤 도메인에선 Explicit data를 중요하게 보고 어디서는 Implicit data를 중요하게 보기도 하구요.
더 나아가 같은 도메인이어도 A회사는 CTR이 중요하고 B회사는 매출이 더 중요하고 C회사는 retention이 더 중요합니다.
즉 이렇게 세부적으로 특성이 다르기 때문에 각각 추천 알고리즘과 목적성(왜 추천 시스템을 개발하였는가?)이 다르게 됩니다. 특히, 이 목적성이 다르면 추천 시스템 평가 자체가 완전 다른 경우가 발생하기도 하는 모습을 특히 스터디에서 많이 보았습니다.
3. 정량적인 평가가 가능하겠지만, '정답'이라고 믿으면 안 된다
그래도 저런 경우의 정량적인 평가가 어느 정도 가능하기는 합니다. MAP(Mean Average Precision)이나 Recall@K와 같은 offline metric 등으로 정량적인 평가가 가능할 것입니다. 하지만, 이를 완전히 신뢰해선 안 된다고 생각합니다. 기존 모델과 비교해서 '아~ 기존 모델과 이 metric 부분에서 이렇게 차이가 나는구나~'라고 생각하는 정도여야지 MAP가 얼마나 올랐으니 이게 더 좋다 나쁘다 라고 단정 지으면 안 된다는 것을 생각하게 되었습니다.
그럼 추천 시스템은 어떻게 평가하면 좋을까요?
그럼 추천 시스템은 어떻게 평가하면 좋을까?
짧은 경험을 하면서도 추천 시스템에는 생각보다 고려할 것이 많았습니다. 그래서 하나의 Metric으로 좋다, 나쁘다를 평가할 수 없겠구나 싶었습니다.
저는 개인적으로 추천 시스템을 평가할 때 아래와 같은 요소들을 봐야 한다고 생각하게 되었습니다.
( 이들 중 하나만 보는 것이 아닌 여러 개를 동시에 보는 것입니다. )
- 정보 검색(Information Retrieval)과 차이가 나는가?
- 필터 버블(Filter bubble) 문제는 발생하지 않는가?
- 비즈니스 관점으로 생각할 요소들
- CTR이 증가했는가?
- 매출이 증가했는가?
- 구독자가 늘어났는가?
- 등등
- 단순 서비스 운영의 관점
- 기존 결과보다 콘텐츠가 사용자에게 더 다양하게 노출되고 있는가?
- 사용자와 관련성 있는(개인화) 추천이 되고 있는가?
- 등등
- Offline metric
- MAP(Mean Average Precision)
- Recall@K
- Precision@K
- NGCG
- 등등
더 다양한 것들이 있겠지만, 저의 짧은 경험상 저 정도가 생각이 나는 것 같습니다. 그리고 저렇게 다양한 관점으로 평가를 하는 것은 비단 추천 시스템에서만 적용되는 것이 아니라 Data 기반 프로젝트(딥러닝, 머신러닝 프로젝트 등)에서도 사용하고 있다고 들었었습니다.
Offline Metric 평가
offline metric 평가는 흔히 말하는 test set으로 평가하는 방법입니다. RMSE, Recall, Precision, Accuracy 등과 평가 지표들이 여기에 해당되죠. 이 평가 지표로도 추천 시스템 모델 등을 평가할 수 있습니다. 다만 약간의 단점(?) 문제점? 이 있습니다.
- 데이터 셋 구성이 매우매우 잘 되어 있어야 한다. ( 이게 생각보다 쉽지 않습니다 )
- 데이터 셋이 과거의 데이터면 조금씩 문제가 발생한다.(현재 시점의 현실의 사용자와 다를 수 있습니다)
그래서 Offline Metric 평가를 하는 것은 물론 좋지만, 이 지표를 100% 신뢰하면 위험할 수도 있습니다. 다만, '쉽고 빠르게' 어느 정도 성능이 나온다~라고 평가할 수 있는 것이 매우 큰 장점이죠.
비즈니스 관점
사실 회사 입장에서는 이게 제일 중요한 요소일 것 같습니다. CTR이 증가했는지, 매출이 늘었는지 등등을 봐야 하는 것이죠. 각 회사의 상황마다 그리고 도메인마다, Application 마다 어떤 요소가 중요할지는 다릅니다. 그 회사 BM에 맞추어서 중요한 요소가 뽑아지게 되겠죠.
보통 이때 Multi Armed Bandit(MAB)를 많이 사용합니다. 그중에서도 톰슨 샘플링(Thompson Sampling)을 기반으로 A/B Test를 하면서 어떤 추천 모델이 더 효과적으로 매출 증가나, CTR 증가의 효과가 나오는가?를 측정할 수 있습니다. 보통 이 평가 방법을 Online Metric 이라고도 부릅니다. 이 Online metric을 사용하면 실제 사용자의 피드백을 볼 수 있기 때문에 정말 좋은 지표(중요한 지표)라고 생각합니다.
단순 운영의 관점
이 운영의 관점은 기획자, 개발자와 같은 현업자 분들이 주로 보는 지표이었습니다. 사용자와 관련 있는 개인화가 적절하게 도출되는가? 사용자 특성에 맞는 category가 추천되고 있는가? 다양한 item이 추천되고 있는가? 등 다양한 서비스 운영적 관점에서 볼 수 있는 지표입니다.
이 또한 마찬가지로 각 팀이 생각하는 것과 맞물려 BM, KPI 등의 요소로 각기 다를 수 있습니다.
정보 검색(Information Retrieval)과의 차이
이 부분은 컨퍼런스를 갔다가 우연히 들었던 내용입니다. 그리고 구글링을 하면서 조사해보니 생각보다 중요한 문제로 보고 있었습니다.
사용자가 '검색'을 한다는 것은 원하는 정보를 찾는 것입니다. 즉, 검색한 결과가 사용자가 원하는 것이 잘 나와야 하고 검색 결과 중에서 사용자가 '선택'하는 과정을 거칩니다.
하지만 추천 시스템은 사용자가 검색을 하지 않고 나옵니다. 개인화 등으로 제공된 리스트에서 사용자가 선택을 하는 과정이죠.
이것을 어떻게 평가할 수 있을까? 는 솔직히 지금의 저로써는 잘 모르겠습니다. 다만, 이 문제도 추천 시스템 평가로써 많이 이야기되고 있는 부분이라는 것을 적어두고 싶었습니다.
필터 버블(Filter Bubble) 문제
이 문제는 추천 시스템 스터디를 하다가 저희 훌륭하신 스터디원 한 분께서 보여주었던 자료에서 나온 주제였습니다. 당시 저는 필터 버블이라는 것을 처음 보았고 이게 뭐지? 하면서 역시나 구글링으로 찾아보았었는데요. 이것도 위의 정보 검색과 마찬가지로 추천 시스템에서 중요한 이슈 중 하나였습니다.
필터 버블(Filter Bubble)이란 아래와 같은 정의(?)로 이야기가 되고 있습니다.
- 사용자가 모든 정보를 볼 기회를 박탈할 수 있는 문제
- 정보의 비대칭이 일어날 수 있는 문제
- 사용자 간의 양극화 현상이 일어날 수 있음
즉, 정보의 비대칭을 사용자가 경험하게 함으로써 사용자가 다양한 관점과 다양한 주제를 볼 기회를 박탈하게 한다는 것입니다.
이렇듯, 추천 시스템의 평가는 여러 가지 고려해야 할 것이 많다고 생각되었습니다.
저도 회사에서 프로젝트를 할 때 3~4개 정도 되는 지표를 같이 보면서 과거의 지표와 현재 모델에서 나오는 지표가 어떻게 다른지 평가하면서 연구와 개발을 진행했었습니다.
무엇보다 Why와 What이 정말 중요하다는 것을 배우게 되었습니다.
마무리를 지으면서
이번 포스팅은 추천 시스템을 어떻게 평가할 수 있을까? 추천 시스템의 평가 방법에 대해서 개인적인 생각으로 정리를 해보았습니다. 이 포스팅에 적어놓은 것들이 정답은 아닙니다. 당연히 그렇게 생각합니다. 단순히 저의 짧은 경험에서 나온 글이니까요.
그래서 물어보고 싶습니다.
여러분들의 생각은 어떠한가요?
댓글로 여러분들의 생각도 알려주시면 정말 좋을 것 같습니다.
그럼 읽어주셔서 감사합니다.