다음 포스팅을 참고하였습니다.

https://kutar37.tistory.com/entry/파이썬-협업필터링Collaborative-Filtering-추천-알고리즘-1

 

파이썬 협업필터링(Collaborative Filtering), 추천 알고리즘 - 1

파이썬 협업필터링(Collaborative Filtering), 추천 알고리즘 - 1 Preview 협업필터링이란 많은 사용자들로부터 얻은 기호정보에 따라 사용자들의 관심사를 자동적으로 예측하는 방법이다. 넷플릭스, 왓챠 등에서..

kutar37.tistory.com

https://heartbeat.fritz.ai/recommender-systems-with-python-part-i-content-based-filtering-5df4940bd831

 

Recommender Systems with Python — Part I: Content-Based Filtering

Implement a content-based recommender

heartbeat.fritz.ai

빅데이터 분석 과정에서 추천 시스템을 개발하고 싶었습니다. 

컨텐츠 기반 알고리즘, 협업 필터링 알고리즘 2가지을 마치 하나의 알고리즘으로 활용하는 것에 대해 고민해봤습니다. 리서치 해보며 프로젝트에 알맞는 추천 시스템을 완성할 수 있었습니다. 

 

각 알고리즘의 동작 방식을 정리하면 다음과 같습니다. 

 

1) 협업 필터링 알고리즘 

 

피어슨 상관계수에 따라 (-1 ~ 1 ) 로 수치화 할 수 있습니다. 즉, 유사도를 파악할 수 있습니다. 

테스트 단계에서 나와 다른 사람의 정보를 바탕으로 피어슨 상관계수를 구했다면 전체 인원에 대해 상관계수를 파악해야 합니다. 

상관계수에서 중요한점은 공통으로 내린 평가 기준입니다. 하지만, 추천은 평가를 내리지 않은것을 예측하여 상위 몇 개를 보여주는 시스템을 구축합니다. 추측평점은 유사도 * (타인 영화평점) 입니다. SUM(추측평점)/SUM(유사도) 를 통해서 예상 평점을 뽑을 수 있습니다. 

 

2) 컨텐츠 기반 알고리즘

TF-IDF 알고리즘을 사용해야 합니다. 무게를 구하는 과정이 포함되는데 이거를 구하는 공식은 다음과 같습니다. 

W = tf * log(N/df) 

tf는 무엇이고, IDF는 무엇일까요?

 

tf = term frequency = 문서에서 얼마나 나오는지 

IDF = inverse document frequency = 전체에서 얼만큼 중요한지 

 

로 생각해볼 수 있었습니다. 

이것을 구해주기 위해 python dptjsms TfidVectorizer 라는 라이브러리가 존재합니다. 이를 통해 tfidf_matrix 를 구할 수 있습니다.

 

사실 굉장히 컨텐츠 필터링 알고리즘을 직접 구현하려다가 토가 (?) 쏠린 이유는 아이템 n 개에 대한 속성 값들을 n 차원 벡터로 표현해야 하는데 자신이 없었습니다. 

 

tfidf_matrix 구하게 되면 cosine thetal 을 통해서 vecter의 증감을 알 수 있습니다. 이를 통해 유사도의 파악이 가능해집니다. 

그래프 보면 

 

이런 이차원 평면상에서 각도를 표현한겁니다. 

 

sin(A,B) = cos(theta) = AB외적/AB내적

 

정리 해보면 각 알고리즘 장 단점이 명확하기 때문에 혼합해서 하이브리드로 쓰는것이 좋습니다. 스케일을 확장시킬 수 있기 때문입니다.

컨텐츠 필터링 알고리즘 장점은 평점에 대한 정보가 없어도 됩니다. 아이템에 대한 분석을 진행하기 때문입니다. (feature-level basis에서 추천) 

단점은 이전 아이템과 추천의 차이가 미비할 수 있습니다. 부정확성의 위험도 따릅니다. 과도해서 의도와 다른 아이템을 추천해줄 수 있습니다.