지난 글들에서 CF 알고리즘과 CF에서 가장 중요한 유사도를 구하는 방식에 대해서 간략히 설명을 드렸습니다. 이번에는 그런 추천 알고리즘들이 잘 개발되었는지를 측정하는 성능지표에 대해서 다루겠습니다. 평가지표에 더해서 추천 시스템을 개발할 때 고려해야할 사항도 함께 적겠습니다.
다른 대부분의 데이터마이닝 기술들이 그렇듯이 첫번째 성능지표는 정확도입니다. 제안된 방법이 얼마나 사용자의 선호도를 잘 예측해서 레이팅값을 제대로 예측하느냐 또는 추천된 아이템을 선택할/좋아할 가능성이 높은가를 측정합니다. 정확도는 보통 두가지 방법으로 계산됩니다. 가장 흔히 사용하는 방식은 예측된 레이팅과 실제 레이팅 사이의 차이, 즉 Error 텀을 측정하는 것입니다. MAE (Mean Absolute Error)와 RMSE (Root Mean Square Error)가 가장 흔히 사용되는 지표입니다. Netflix Prize에서도 RMSE를 기존의 것보다 10% 개선하는 것이 목표였습니다. 두번째 방법은 예측값과 실측치의 Correlation을 측정하는 것입니다. MAE 등이 값의 차이를 구했다면, Correlation은 값의 변화 경향을 측정합니다. 유사도 글에서 언급되었던 Pearson correlation coefficient가 가장 흔한 방법입니다. ROC (Receiver Operating Characteristic) Curve도 자주 활용되는데, 제가 잘 모르는 분야라서 설명은 생략합니다. (ROC 위키페이지)
제가 처음 추천시스템을 접했던 2006년 2007년까지만 하더라도 대부분의 논문들이 정확도를 측정하는 것이 주요 목표였고, 제안된 방법이 기존 것보다 정확도가 조금이라도 높아지면 대단한 성과인양 논문을 쓰고 제출했던 것같습니다. 당시만 하더라도 대규모 자동화된 추천 시스템이 흔치 않았기 때문에 정확도만으로도 충분했던 것같습니다. 그런데 최근에 다시 추천 논문을 읽어보니 정확도 이외에 다른 요소들을 더 내세우는 경향이 짙었습니다. 어떤 측면에서 보면 정확도 개선은 더이상의 여지가 거의 없기 때문에 다른 측면을 강조하는 것일 수도 있습니다.
그래서 최근에 등장하는 논문이나 시스템들은 정확도 뿐만 아니라, 사용자 만족도 또는 사용자 경험에 많은 중점을 두고 있습니다. 추천 시스템은 사용자들과 접점이 많은 매우 실용적인 것입니다. 그렇기 때문에 단순히 사용자의 선호도를 예측하는 것 이상으로, 사용자들이 실제 추천된 아이템을 만족하느냐는 중요한 이슈입니다. 예를들어, A라는 사용자가 a 제품에 대한 레이팅을 4점으로 했을 때, 어떤 추천 알고리즘은 3점을 예측하고, 다른 추천 알고리즘은 5점으로 예측했다면 MAE (정확도) 관점에서 보면 둘다 에러가 1로 동일합니다. 그렇지만 이 두 추천 시스템의 성능을 같다고 볼 수 없습니다. 사용자가 만약 4점 이상 예측된 아이템만 보겠다라는 규칙이 있다면, 첫번째 추천 시스템은 a 제품을 추천해주지 못하는 현상이 발생합니다. 다른 경우를 생각해보면, 어떤 추천 시스템이 5점으로 예측해서 영화를 추천해줬는데 (물론 사용자가 그 영화를 봤을 때 5점으로 레이팅한다는 가정 하에), 해당 영화가 19금 영화이고 사용자는 미성년자였다면 이 또한 제대로된 추천이 아닙니다. 그래서 최근 연구/시스템들은 정확도 이상의 것 -- 러프하게 말해서 '사용자 만족도' -- 을 요구하고, 지표화하고 있습니다.
사용자 만족도는 정확도만큼 깔끔하게 지표화하기 어렵습니다. 만족도라는 것이 정성적인 부분이라서 이를 정량화하는 것이 매우 어렵습니다. 그래도 시스템에서는 다양한 방법으로 사용자의 만족도를 예측하고 있습니다. 대표적인 방법이 추천된 상품이 조회/구매되는 비율, 즉 CTR을 구하는 경우가 많습니다. CTR이 높다는 것은 사용자가 추천된 아이템에 흥미를 느꼈다는 증거가 됩니다. 그런데 CTR만으로도 만족도를 충분히 설명할 수 없습니다. 오히려 추천이 제대로 이뤄졌다면 클릭회수 또는 CTR이 감소할 수도 있습니다. 그래서, 추천된 아이템을 즐기는 시간 (예를들어, 영화를 조금 보다가 그만 뒀다면 만족도가 낮은 것이고, 끝까지 봤다면 만족도가 높은 것입니다)을 측정하기도 하고 (Duration Time), 웹사이트의 경우 재방문률 retention rate를 구하기도 합니다. 클릭회수나 CTR보다는 Duration Time이나 Retention Rate의 변화를 측정하는 것이 조금 더 장기적이로 이뤄질 가능성이 높습니다. 이 말은 사용자 만족도라는 것을 단기적으로 파악하는 것이 어렵다는 의미이기도 합니다. 새로운 방법론을 적용했을 때, 너무 조급하게 결과가 나올 것을 기대하는 것은 경계해야 합니다.
그리고 최근 추천 논문에는 Serendipity (Serendipitous recommendation)라는 용어가 자주 등장합니다. 즉, 우연 또는 우연적 발견이라는 의미입니다. 추천 알고리즘들이 개인화되었다고는 하지만, 그래도 아이템의 인기도에 크게 의존을 합니다. 그렇기 때문에 많은 사용자들이 좋아하는 일반적인 아이템은 자주 추천이 됩니다. 일반적인 아이템이 추천이 되면 너무 뻔해서 만족도가 떨어집니다. 그래서 연관성은 있지만 (관심을 가질 법 한 범위 내에서) 그래도 새로운/신선한 것을 추천해주도록 추천 시스템들이 진화하고 있습니다. 그런 측면에서 추천 시스템은 Recommendation Engine에서 Discovery Engine으로 발전하고 있습니다. 우연성을 너무 강조해서 너무 생뚱맞은 것을 추천해주면 또 곤란합니다. 어려운 문제입니다. 추천 점수에서 상위 1~2개 정도의 아이템만 추천해주는 경우에는 뻔하지만 연관성이 높은 아이템을 추천해줄 때 사용자들의 만족도가 높아지고, 다수의 아이템을 동시에 추천해주는 경우 (Top 10 등)에는 다양한 아이템들이 추천될 때 사용자 만족도가 증가한다고 알려져있습니다. 그리고, 초보 서비스 이용자들에게는 연관성이 높은 아이템들을, 헤비 유저에게는 우연성이 높은 아이템들을 추천해주는 것도 대부분의 사용자를 만족시키는 한 방안입니다.
그리고, 특히 헤비 유저들에게는 자유도 user control를 제공해줄 필요가 있습니다. 기계적으로 아이템들을 추천해주는 것이 아니라, 사용자들에게 자신이 추천 방식을 변경시켜주는 것입니다. '나는 최신 상품을 우선으로 보겠다' 아니면 '평점이 높은 것 위주로 보겠다' 등과 같은 옵션을 제공해줌으로써, 시스템의 단점도 보완하면서 사용자들에게 자유도를 제공해줄 수 있습니다. (글을 적고 보니 user control은 평가지표는 아니네요.) 유저 컨트롤 못지 않게 중요한 것이 추천 신뢰도입니다. 유저들은 가끔 왜 이 아이템이 추천되었는지?를 궁금해합니다. 그렇기 때문에, '네가 이러이런한 상품을 구입했고, 그런 상품을 구입한 다른 사용자들이 이런 상품을 좋아했다' 또는 '네 친구 XX가 이 상품을 좋아했다' 등과 같은 설명 또는 추천의 근거를 제공해주는 것도 매우 중요합니다. 이전 글에서도 적었는데, 소셜 데이터를 사용함으로써 추천 시스템 자체의 (수치화/지표화된) 품질은 별로 개선시키지 않았지만, 추천의 이유를 설명해줌으로써 추천 신뢰도는 높였다는 연구결과도 있습니다.
그리고, 뉴스 기사를 추천해주는 경우에 중요한 요소가 하나 더 있습니다. 바로 공정성입니다. 정치 경제 사회 문제에 대해서 특정 견해를 가진 이들에게 비슷한 견해의 다른 기사들을 추천해주면 만족도는 증가합니다. (사용자가 추천 시스템(의 작동)을 인지하지 못한 상황에서) 특정 견해의 뉴스만을 제공해주면, 편향된 시각으로 뉴스를 편집한다는 오해를 불러일으키기도 합니다. 그래서 에디터들은 특정 중대 사안에 대해서 두가지 다른 견해를 동시에 노출시켜주려고 노력하는 경향이 있는데, 자동화된 시스템도 중립성을 학습할 필요가 있습니다. 소셜픽이라는 검색서비스를 만들 때, 관련된 기사/글이 두개밖에 없으면 그냥 두개열로 나란히 나열해서 보여주자라고 의견을 낸 적이 있습니다. 그랬더니 뉴스/블로그 쪽에서 오래 일하셨던 분이 그렇게 되면 사용자들이 두 기사를 놓고 논쟁을 시키는 것처럼 보인다는 의견을 더했습니다. 그래서 현재는 3개열에 노출하데, 마지막 세번째 열은 공백으로 놓고 제공해주고 있습니다.
(글을 마치려고 했는데 한 가지 더 생각났습니다.) 추천 커버리지도 추천 시스템의 품질과 직결됩니다. 커버리지는 (연관아이템추천에서) 연관아이템을 가지는 아이템의 개수와 연관아이템의 개수, 둘 모두를 뜻합니다. CF 알고리즘은 간단하지만 잘 작동한다고 말했습니다. 그런데 치명적인 단점은 커버리지가 낮습니다. 일단 사용자들에게 한번 이상 조회된 아이템에 한해서만 추천 (커버리지의 두 측면에서)이 됩니다. 정확한 수치는 경우에 따라서 다르겠지만, 전체 아이템에서 10%정도만 유저들에 의해 한번이라도 조회됩니다. 전체 상품수는 1000개인데, 100개 상품만 추천/피추천 대상이 된다는 얘기입니다. 그러면 나머지 900 제품은 절대 추천되지 못하는 현상이 발생합니다. 그래서 CF 방식에 CBF 방식을 결합해서 하이브리드 형태로 추천 시스템을 만듭니다. 예를들어, '이영화를 봤던 사람들이 봤던 다른 영화들'과 '이 영화의 장르/감독/배우들의 다른 영화들'을 혼합해서 추천해주는 것입니다. 그리고, 커버리지가 낮다는 것은 (같은 아이템을 계속 추천/노출시킴으로써) 사용자들은 추천 피로도가 쌓이게 됩니다. 그래서 추천 커버리지 또는 다양성, 그리고 앞서 말했던 우연성은 중요합니다.
이 외에도 다양한 측면에서 추천 시스템의 품질을 평가, 측정할 수 있습니다.
(Coming Soon) 앞으로 추천랭킹, 필터링, 개인화, 필터버블 등의 글이 계속 이어집니다.
추천시스템 전체 목록
- 추천 시스템과의 조우 (PR시리즈.1)
- 추천 시스템을 위한 데이터 준비 (PR시리즈.2)
- 추천대상에 따른 추천 시스템의 분류 (PR시리즈.3)
- 알고리즘에 따른 추천 시스템의 분류 (PR시리즈.4)
- 추천 시스템을 위한 유사도 측정 방법 (PR시리즈.5)
- 추천 시스템의 성능 평가방법 및 고려사항 (PR시리즈.6)
- 추천 시스템에서의 랭킹과 필터링 문제 (PR시리즈.7)
- 추천 시스템의 쇼핑하우 적용예 (PR시리즈.8)
- 개인화 추천 시스템에 대하여 (PR시리즈.9)
- 추천 시스템의 부작용 - 필터버블 (PR시리즈.10)
- 추천 시스템의 레퍼런스 (PR시리즈.11)
- 추천 시스템에 대한 잡다한 생각들 (PR시리즈.12)
- 추천 시스템을 위한 하둡 마훗 사용하기 (PR시리즈.13)
- 추천 시스템에 대해서 여전히 남은 이야기들 (PR시리즈.14)
==
페이스북 페이지: https://www.facebook.com/unexperienced