추천 시스템의 평가 지표 시리즈를 들어가며
그래서 이 추천 시스템은 성능이 좋은가요?
그래서 이 추천 시스템은 성능이 좋은가요?
추천 시스템을 구축하면서 꼭 받는 질문입니다. 단순한 질문처럼 보이지만, 이 질문에 대해 적절한 답변을 하는 것은 꽤 어려운 일입니다.
분류 문제처럼 정답을 맞췄는지, 틀렸는지만 보면 되는 것도 아니고, 회귀 문제처럼 정답값을 얼마나 가깝게 맞춰는지만 보면 되는 것도 아닙니다.
추천 시스템에서 “좋은 성능” 이라는 것을 정의할 때에는, 다음과 같은 질문들이 필요합니다.
- 사용자가 좋아할 만한 아이템을 얼마나 많이 추천했는가
- 그런 아이템들이 얼마나 앞쪽에(빠르게) 추천이 되었는가
- 여러 개의 정답이 있다면, 얼마나 잘 고르게 맞췄는가
- 도메인 관점에서 통상적으로 예상되는 사용자의 행동패턴이 보이는가
그리고 이러한 질문들에 따라 “좋은 성능”이라는 정의는 완전히 달라지게 됩니다.
추천 성능을 평가하는 지표들은 다양하다
추천 결과는, 하나의 지표만으로 그 품질을 설명할 수 없습니다. 하지만 그냥 단순히 생각해보면, “정답을 많이 맞추면 좋은 추천 아닌가요?”라고 생각할 수도 있습니다. 이 질문을 염두에 두고, 아래 두 가지 추천 결과를 비교해보겠습니다.
1
2
3
사용자에게 영화 10개를 추천합니다.
- 추천 A : 정답 1개를 1등에 배치함. 나머지 9개는 사용자가 선호하지 않는 영화임.
- 추천 B : 정답 3개를 5등, 6등, 7등에 배치함.
어느 쪽이 더 좋은 추천일까요? 검색 결과나 컨텐츠 추천은 A가 훨씬 좋을 수도 있고, 쇼핑 추천이라면 B가 더 의미 있는 추천일 수도 있습니다. 즉, 서비스의 목적에 따라 평가 기준이 달라져야 하는 것입니다.
그래서 추천 시스템에서는 단 하나의 지표가 아니라, 서로 다른 관점을 가진 여러 평가 지표를 함께 사용합니다.
시리즈에서 다룰 평가 지표들
이 포스팅 시리즈에서는 추천 시스템에서 사용되는 평가 지표들을 개념, 수식, 코드, 특징, 언제 활용하는지 전반 내용을 정리합니다. 시리즈에서 다룰 평가 지표들은 다음과 같습니다.
| No | 평가지표 | 설명 |
|---|---|---|
| 1 | Precision | 얼마나 정확하게(정밀하게) 맞췄는가 |
| 2 | Recall | 얼마나 빠짐없이(재현성 좋게) 맞췄는가 |
| 3 | RR / MRR | 정답을 얼마나 빨리 맞췄는가 |
| 4 | AP / MAP | 전반적으로 정답을 얼마나 빨리 고르게 맞췄는가 |
| 5 | DCG / NDCG | 추천 순위와 관련성을 동시에 고려하면 품질은 어떠한가 |
평가지표는 추가될 수 있음
추천 품질을 평가할 때, 위 지표들은 서로 상호 보완적으로 여러 개를 섞어서 사용합니다. 서로 대체 관계가 아닌, 보완 관계인 것입니다. 그리고 꼭 염두에 둘 점! 지표들 중 “좋은” 지표는 없습니다. 문제에 따라 적절한 지표가 있을 뿐입니다.
이 글을 어떻게 읽으면 좋을까
- 각 지표에 대해 개념→특징→활용→수식→코드 순으로 설명합니다.
- 추천 시스템을 도입해야 하는 담당자, 서비스를 개발해야하는 개발자 분들에게 추천합니다.
- 이 글은 개인적으로 공부한 내용을 정리한 글입니다. 다소 맞지 않거나 개인적인 견해가 있을 수 있습니다.
- 오류가 있는 경우 댓글로 알려주시면 감사하겠습니다.
- 직관과 실무에서의 경험을 우선했으나, 엄밀함도 최대한 유지하며 작성하려 노력했습니다.
다음 글 예고
다음 글에서는 가장 기본적이지만, 가장 많이 오해받는 지표인 Precision, 그리고 이어서 Recall을 살펴보겠습니다.
Comments