최근에 제주 사진 위주의 가벼운 주제의 글을 적거나 좀 맥락이 없는 지나친 시니컬한 글만 적은 것같아서, 앞으로 -- 언제까지 진행될지는 모르겠으나 -- 업무와 연관성이 있는 조금 기술적인 그러나 쉬운 글을 시리즈로 적으려 합니다. 시작은 간단하게 요즘 맡고 있는 추천 Recommender System으로 시작하겠습니다. 첫 글이니 약속과는 다르지만 기술적인 내용은 몽땅 빼버리겠습니다.
제가 어떻게 해서 처음 추천시스템을 연구하게 되었는지에 대한 정확한 기억이 없습니다. 대학원 연구실이 데이터마이닝 또는 데이터분석을 전문으로 하는 곳이 아니었기 때문에 따로 추천시스템을 접할 기회가 없었습니다. 다른 연구실에서도 추천을 전문적으로 다루지 않았고, (옆 연구실에서) 나보다 2년정도 전에 추천 논문이 한편 제출되었다는 사실은 나중에 알았습니다. 그렇다고 해서 최근 (이미 몇 년 지난 얘기지만) 추천시스템에 관심을 가지고 연구했던 분들은 대부분 Netflix Prize의 영향이 컸는데, 저는 추천 관련 논문을 제출한 이후에 넷플릭스 프라이즈에 대한 소식을 들었습니다.
추천을 시작한 계기는 정확히 알 수 없으나 모교에서 박사후과정을 하면서 추천 논문을 적기 시작했습니다. 2006년 8월에 졸업해서 2008년 3월에 다음에 입사하기 까지 2.5편의 논문을 적었습니다. 0.5편은 입사 후에 최종심사에 통과했기 때문입니다. (1년반동안 저것밖에 못 했냐고 하시겠지만, 다른 주제의 논문들도 몇 편 제출했습니다.) 그때 추천을 (연구로써) 처음 접했고, 이후에 몇년이 지난 2012년부터 업무로써 추천을 다시 시작했습니다. 검색에서의 랭킹이나 몇몇 서비스들을 추천과 완벽히 분리할 수는 없으나, 일반 의미에서의 추천업무를 다시 시작한지는 채 2년이 넘지 않았습니다.
학교에서 논문을 적을 때는 잘 알려진 MovieLens (ML) 데이터와 BookCrossing (BX) 데이터를 가지고 아주 미약하더라도 정확도를 높이면 바로 논문을 적고 제출했습니다. 논문을 적을 때, Netflix 데이터도 존재했지만 Matlab에서 사용하기에는 너무 스케일이 컸습니다. 실제 넷플릭스에서는 프라이즈에 제시한 것보다 수십, 수백배 이상의 데이터를 사용하고 있다고 합니다. 학교에 있을 때도 정확도 뿐만 아니라, 다양한 대용량 데이터를 처리하는 방법이나 분산처리 기법을 고민했더라면 더 좋았을텐데라는 때늦은 후회도 합니다. 실서비스용 알고리즘을 개발했다면 바로 A/B 테스트 (버킷테스트)를 거쳐서 유효성 또는 민감도를 판단할 수 있었을텐데, 학교에서 주어진 데이터세트 내에서 정확도 이외의 다른 것을 검증하기란 매우 힙듭니다.
학교에서 그리고 지금 회사에서 사용하는 추천 방식은 (다른 글에서 더 자세히 다루겠지만) 가장 일반적인 협업필터링 Collaborative Filtering 방식입니다. 물론 지금 실서비스를 위해서 컨텐츠 기반의 CBF를 CF와 결합한 하이브리드 방식을 사용하지만, 기본은 CF입니다. 학교에서 논문을 적을 때 사용한 ML이나 BX는 사용자의 명시점수를 이용했는데, 지금은 대부분 암묵적 피드백을 이용하고 있다는 차이점이 있습니다. 여러 가지 측면을 고려할 때 암묵점수를 사용하는 편이 쉬울 때가 많습니다. 그리고 실서비스에서는 최적의 해보다는 빠르게 얻을 수 있는 feasible/viable solution만으로도 충분한 경우가 많습니다. 그리고 순차적으로 개선해도 큰 문제는 없습니다. 그런 의미에서 학교에서 너무 적은 (정확도 등) 수치 변화에 너무 민감하게 반응할 필요도 없고, 논문을 위한 연구를 지양할 필요가 있습니다.
다음에서는 쇼핑하우에서 상품 추천 업무를 진행해서 현재 1차 적용되어있고, 중간에 tv팟에서 관련동영상 작업도 진행했었는데 여러 이슈로 서비스에는 반영되어있지 않습니다. 그리고 현재는 개인화된 뉴스 서비스를 위한 준비작업을 하고 있습니다. 앞으로 추천의 다양한 알고리즘이나 추천 서비스를 준비하면서 고려해야할 사항, 개인화 문제 등을 자세히 다룰 예정입니다.
추천시스템 전체 목록
- 추천 시스템과의 조우 (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