'Collaborative Filtering'에 해당되는 글 2건

  1. 2013.12.06 알고리즘에 따른 추천 시스템의 분류 (PR시리즈.4)
  2. 2013.12.02 추천 시스템과의 조우 (PR시리즈.1)
Share           Pin It

앞으로 다양한 주제의 글이 남아있지만, 이번 포스팅이 추천 시스템에서는 가장 핵심이 되는 추천 알고리즘에 대한 글입니다.

본격적으로 추천 알고리즘이 개발된 것은 20여 년 밖에 되지 않지만, 실 서비스에서 쉽게/바로 적용이 가능하고 그 효과도 즉각적으로 측정이 가능하기 때문에 다양한 방법들이 개발되었습니다. 밑에서 자세히 설명하겠지만 대부분의 알고리즘들이 매우 간단하여, 데이터마이닝에 큰 지식이 없는 이들도 쉽게 구현, 적용할 수 있어서 다양한 분야의 전문가들이 추천 알고리즘에 살을 붙여서 개념의 간단성에 비해서 매우 다양한 방법들이 존재합니다.

가장 원시적인 추천 알고리즘은 컨텐츠 기반의 필터링 (CBF)이 될 듯합니다. 아이템의 속성/메타데이터를 이용해서 연관 아이템을 묶어주기 때문에 별로 어렵지 않게 구현도 가능합니다. 예를들어, '변호인'이라는 영화를 본 사용자에게 변호인이 장르가 '드라마'이므로 드라마 장르의 다른 인기 영화를 추천해준다거나, (양우석 감독이 메가폰을 잡았기 때문에 양우석 감독의 전작인 XX를 추천해주면 된다고 적으려 했는데, 변호인이 첫번째 영화네요ㅠㅠ) 송강호씨가 주연을 맡았기 때문에 송강호씨가 출연한 다른 작품인 관상이나 설국열차 등을 추천해주는 형태입니다. 알고리즘이 매우 직관적이고 쉽기는 하지만, 추천되는 아이템이 너무 뻔하다는 단점이 있습니다. 그래도 CBF는 다른 알고리즘들과 하이브리드 형태로 여전히 사용되고 있습니다. 밑에서 설명할 CF방식의 커버리지 문제를 해결하기 위해서 CBF를 이용하면 좋습니다.

보통 추천 알고리즘이라고 말하면 대부분 협업필터링 Collaborative Filtering (CF)으로 이해합니다. 그만큼 CF가 추천시스템의 대표 알고리즘입니다. 그렇기에 지난 20여년간 다양한 방법들이 개발, 활용되고 있습니다. CF의 기본 컨셉/가정은 'likely-mind'라고 표현하듯이 나와 비슷한 성향을 가진 다른 사용자들이 좋아하는 것이면 나도 좋아할 가능성이 높다는 것입니다. 내가 영화 '변호인'을 재미있게 봤다면, '변호인'을 재미있게 본 다른 많은 사람들이 재미있게 본 '화려한 휴가'나 '26년' 등을 추천해주는 형태입니다.

CF방식도 머신러닝을 활용한 모델기반CF가 있고, 단순히 앞서 설명한 가정 (likely-mind)을 그대로 구현한 메모리기반CF가 있습니다. 죄송하지만, 모델기반의 CF는 제가 구현/적용해보지 않아서 자세한 설명을 해드릴 수 없습니다. 나이브 베이지언이나 뉴럴네트워크 등의 다양한 머신러닝/AI기법을 활용해서 추천을 해준다 정도로 이해하고 넘어가면 됩니다. 밑에서 다시 언급될 Matrix Factorization도 모델기반이라고 부르는 듯한데, 이것은 따로 설명하겠습니다.

메모리 기반 CF가 가장 흔하게 사용되는 추천 알고리즘입니다. 유저-아이템 레이팅을 모두 메모리에 올려두고 유저-유저 또는 아이템-아이템의 관계 (유사도)를 계산한다고 해서 메모리 기반이라 불립니다. 메모리 기반 CF도 사용자기반CF와 아이템기반CF로 나뉩니다. 사용자 기반의 경우 나와 유사한 사용자들이 좋아하는 상품을 추천해주는 형태입니다. (나 - 유사사용자들 - 그들이 좋아한 아이템들) 반면에 아이템 기반은 내가 좋아하는 아이템의 관련 아이템들을 추천해줍니다. (나 - 내가 좋아한 아이템들 - 그것들의 관련 아이템들) 여기서 중요한 점은 유사사용자 또는 관련아이템을 찾아내는 것입니다. 그래서 다음 글에서는 CF의 핵심은 유사도 측정 방법에 대해서 따로 설명할 예정입니다. 

일반적으로 유저수와 아이템수 중에서 적은 쪽에 맞춰서 추천시스템을 구현하는 것이 정확도나 강건성 등의 측면에서 더 낫다고 합니다. 유저기반이 조금더 일찍 소개되었지만, 아마존의 성공 이후에 아이템기반이 많은 주목을 받았고, 구글 유튜브도 최근(?)에 아이템기반으로 개인화추천을 변경했다고 합니다. CF 방식의 장점은 간단하지만 의외로 추천이 잘 된다는 점이 있고, 또 우연에 의한 추천이 가능하다는 점입니다. 그러나 적어도 한번 이상 유저들이 조회해본 상품들이 추천되기 때문에 커버리지가 낮다는 단점이 있습니다. 그리고 새로운 유저가 시스템에 등록했거나 새로운 아이템이 등장했을 때, 유저-아이템 레이팅이 존재하지 않기 때문에 이른 유저/아이템에 적당한 아이템을 추천해주지 못합니다. (Cold start 문제라고 함) 그리고 CF방식도 기본적으로 인기도에 의한 추천이기 때문에 인기 있는 상품들이 더 자주 추천될 가능성이 높습니다. 이상하게 들리겠지만, 우연에 의한 추천이 가능하지만 또 전혀 그렇지 않을 수도 있습니다.

마지막으로 CF방법에서 가장 최근에 주목을 받는 것은 Matrix Factorization (MF) 방식입니다. 여러 논문들을 읽어보면 data dimensionality를 해결하기 위해서 MF를 사용한다고 하는데, 단순히 수학적인 계산 측면에서 보면 MF방식을 적용하기 위해서 행열 matrix 연산을 하는데 필요한 메모리도 감당하기 어렵습니다. MF방식을 따로 연구/구현해보지 않았기 때문에 자세하게 설명드릴 수는 없지만, 유저-아이템 레이팅 매트릭스에서 고유값 eigen vector를 구해서 행열을 분해하는 singular value decomposition (SVD)를 이용합니다. SVD의 자세한 설명은 위키피디어를 참조하시고, 간단히 말해서 N x M 레이팅 매트릭스 (R)를 a개의 고유값으로 분해한다면 N x a의 U 행열과 a x M의 V 행열로 분해해서, 다시 이들을 조합해서 missing value에 대한 예측치를 만들어주는 형태가 됩니다. (설명이 복잡한 것같은데, 더 궁금하면 구글링을...) 앞서 MF에서 SVD를 구하는 것도 계산이 클 수 있다고 말했는데, 최근에 로컬 업데이트를 통해서 SVD를 예측하는 방식도 나와있기 때문에 서비스에서 문제가 없습니다. 실제 Netflix에서도 몇 십억 건의 레이팅을 SVD로 분해했다고 하니, 서비스 적용에는 별 문제가 없습니다.

아주 러프하게 추천 알고리즘을 설명해드렸습니다. 다음 글에서는 유사도 측정방법이나 다른 고려사항들을 다루겠습니다.

추천시스템 전체 목록

  1. 추천 시스템과의 조우 (PR시리즈.1)
  2. 추천 시스템을 위한 데이터 준비 (PR시리즈.2)
  3. 추천대상에 따른 추천 시스템의 분류 (PR시리즈.3)
  4. 알고리즘에 따른 추천 시스템의 분류 (PR시리즈.4)
  5. 추천 시스템을 위한 유사도 측정 방법 (PR시리즈.5)
  6. 추천 시스템의 성능 평가방법 및 고려사항 (PR시리즈.6)
  7. 추천 시스템에서의 랭킹과 필터링 문제 (PR시리즈.7)
  8. 추천 시스템의 쇼핑하우 적용예 (PR시리즈.8)
  9. 개인화 추천 시스템에 대하여 (PR시리즈.9)
  10. 추천 시스템의 부작용 - 필터버블 (PR시리즈.10)
  11. 추천 시스템의 레퍼런스 (PR시리즈.11)
  12. 추천 시스템에 대한 잡다한 생각들 (PR시리즈.12)
  13. 추천 시스템을 위한 하둡 마훗 사용하기 (PR시리즈.13)
  14. 추천 시스템에 대해서 여전히 남은 이야기들 (PR시리즈.14)

==

페이스북 페이지: https://www.facebook.com/unexperienced

댓글을 달아 주세요

Share           Pin It

최근에 제주 사진 위주의 가벼운 주제의 글을 적거나 좀 맥락이 없는 지나친 시니컬한 글만 적은 것같아서, 앞으로 -- 언제까지 진행될지는 모르겠으나 -- 업무와 연관성이 있는 조금 기술적인 그러나 쉬운 글을 시리즈로 적으려 합니다. 시작은 간단하게 요즘 맡고 있는 추천 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팟에서 관련동영상 작업도 진행했었는데 여러 이슈로 서비스에는 반영되어있지 않습니다. 그리고 현재는 개인화된 뉴스 서비스를 위한 준비작업을 하고 있습니다. 앞으로 추천의 다양한 알고리즘이나 추천 서비스를 준비하면서 고려해야할 사항, 개인화 문제 등을 자세히 다룰 예정입니다.

추천시스템 전체 목록

  1. 추천 시스템과의 조우 (PR시리즈.1)
  2. 추천 시스템을 위한 데이터 준비 (PR시리즈.2)
  3. 추천대상에 따른 추천 시스템의 분류 (PR시리즈.3)
  4. 알고리즘에 따른 추천 시스템의 분류 (PR시리즈.4)
  5. 추천 시스템을 위한 유사도 측정 방법 (PR시리즈.5)
  6. 추천 시스템의 성능 평가방법 및 고려사항 (PR시리즈.6)
  7. 추천 시스템에서의 랭킹과 필터링 문제 (PR시리즈.7)
  8. 추천 시스템의 쇼핑하우 적용예 (PR시리즈.8)
  9. 개인화 추천 시스템에 대하여 (PR시리즈.9)
  10. 추천 시스템의 부작용 - 필터버블 (PR시리즈.10)
  11. 추천 시스템의 레퍼런스 (PR시리즈.11)
  12. 추천 시스템에 대한 잡다한 생각들 (PR시리즈.12)
  13. 추천 시스템을 위한 하둡 마훗 사용하기 (PR시리즈.13)
  14. 추천 시스템에 대해서 여전히 남은 이야기들 (PR시리즈.14)

==

페이스북 페이지: https://www.facebook.com/unexperienced

댓글을 달아 주세요