Junghoon Choi
4 min readSep 3, 2017

추천 엔진에 대한 고민, 공부했던 내용에 대한 정리 내용들

아직은 아니지만 구매 기능을 현재 개발 중인 모바일 앱에 탑재할 생각이고 거기에 연계된 Recommender Engine을 미리 준비하고 생각을 해보려고 한다. 그러면서 한가지씩 정리를 해보려고 한다.

  1. 추천 엔진의 타입
  • 가장 유명한걸 추천하기: 데이터가 없을 때 접근하기 가장 좋은 방법, 조회수, 판매수, 평점수 등의 기준을 가지고 추천하기. 단점이 있다면 개인화가 반영되어 있지 않다. 표현에 따르면 Blazing fast and dirty approach, 그럼에도 불구하고 대중화 심리에 따라 잘 먹히는 경우가 있다.
  • Classifier를 이용해서 추천하기: Classifier는 parmeter를 추출해서 이걸 활용, 추천을 하는 시스템이다. 예를 들면 강아지 보유, 어떤 종의 강아지를 보유했는지에, 또는 강아지의 나이를 파라미터로 인식해서 그에 맞는 사료를 추천해주는 방식이다. 하지만 사용자수가 늘어날 수록 좋은 classifier를 구분하는 것이 exponentially 어려워지고 좋은 parameter를 추출하는 것 또한 쉽지 않다. (적당한 데이터 축적 및 분류값을 데이터베이스에 확보하고 있어야 함)
  • 추천 알고리즘: 여기서 이제 Content based / Collaborative Filtering 개념이 나옴
  • Content Based 알고리즘: 말 그대로 비슷한 아이템을 추천한다. 기존에 구매했던 것과 비슷한 아이템을 추천하는 방식, 아무래도 영화나 노래 추천에 적합한 방식으로 좋아하는 콘텐츠의 Type을 파악해서 추천하기에 좋다
  • Collaborative Filtering 알고리즘: A가 아이템 1,2,3을 좋아하고 B가 아이템 2,3,4를 좋아한다면 A는 아이템 4를 좋아할 가능성이 높고 B 역시 아이템 1을 좋아할 가능성이 높다는 것에서 착안된 방식
  • 과거의 행동 양태를 기반으로 해서 알고리즘을 작성하고 현재 가장 흔하게 쓰이는 알고리즘 중에 하나이다. Amazon, American Express 등에서도 자주 쓰이는 방식
  • Collaborative Filtering도 여러 가지 타입이 있다. User-User, Item-Item, Market basket 분석 등이 있다는데 나도 자세하게는 안 봤다.

2. Collaborative Filtering Model

Core 아이디어는 2개의 step을 따른다.

비슷한 아이템들을 찾는다. (similarity metrix를 만든다)

사용자를 대상으로 이미 좋아하는 아이템이 있는 경우, 그 아이템과 비슷한 아이템을 추천한다.

Item-Item Matrix를 빌드하는 것이고 이 경우의 단점은 Item이 늘어날 수록 이 매트릭스의 크기가 늘어나는 것이다. 생각해볼 수 있는 Similarity(유사성이라고 말해볼까)는 3가지 타입 정도가 있는 것 같다.

  1. Jaccard: 이건 보통 평점을 가지고 유사성을 평가하기 보다는 좋아요 / 클릭 여부 등의 Boolean value를 가지고 만들 수 있다
  2. Cosine: 벡터 2개의 cosine angle로 유사성을 평가, 이 값이 크면 클 수록 유사성이 높은 것으로
  3. Pearson

향후 준비방안에 대해 적어보자면,

초기에는 클릭 수, 구매 수 등의 간단한 기준을 가지고 추천을 해주면서 Parameter를 추출해서 준비한다. (아이템의 특징 또한 데이터베이스에 넣어두고 추천할 준비를 해야 함) 그 이후에 사용자가 축적이 되면 Collaborative Filtering을 준비해서 추천을 해보자

다음에는 Recommender Open Source Python 패키지들 몇 개를 스터디해서 소개해보려고 한다.