이웃기반협업필터링
협업필터링이란
협업필터링(Collaborating Filtering)
- 협업하여 필터링한다.
- 많은 사람의 의견으로 더 나은 추천을 한다.
집단지성(Collective Intelligence)
- 개인보다 단체 또는 그룹의 선택과 취향에 의존한다.
- 여러 사람의 의견을 종합적으로 반영
- 다수의 의견으로 더 나은 선택을 한다.
User-based VS. Item-based
Neighborhood-based Collaborative Filtering
- Memory-based Collaborative Filtering=Neighborhood-based Collaborative Filtering
- User-Item 간의 평점 등 주어진 데이터로 새로운 아이템을 예측
- 특징
- 구현이 간단하다
- Model-based CF에 비해 계산량이 적다
- 새로운 user, item이 추가되더라도 비교적 안정적이다
- 새로운 content(user 또는 item)를 추천할 수 있다
User-based Collaborative Filtering
- 두 사용자가 얼마나 유사한 항목을 좋아했는지 바탕으로 추천
- 취향이 비슷한 사용자끼리의 데이터를 바탕으로 추천
- 플랫폼에서 유저가 많은 부분을 차지하는 시스템에 적용하기 적절한 알고리즘
- SNS의 친구 추천 등에서 사용
- Regression vs. Classification
- 평점 등 점수 분포가 continuous일 때와 discrete할 때 나눠서 적용
- 평점 등 점수를 정규화하여 추천알고리즘에 적용 -> Mean-Centering, Z-score normalization
- User 간의 유사도를 구함
- User '병'의 마이너리티 리포트 - User '갑' = 0.3, User'을' = 0.6, User'정' = 0.45, User'무' = 0.15 유사하다고 가정
- User "병"의 마이너리티 리포트 평점은? - 0.6으로 가장 유사한 User'을'의 평점 = 5로 예측
Item-based Collaborative Filtering
- 아이템과 아이템 사이의 유사도 계산
- 과거 아이템 선호도 데이터를 기반으로 선호 연관성 높은 아이템 추천
- 컨텐츠기반 추천시스템과 차이점 -> 여러 사용자의 과거 선호도 데이터로 연관성 높은 아이템을 찾고, 해당 아이템을 사용자에게 추천한다.
- 아마존, 넷플릭스 등에서 많이 활용
- 라이언 일병 구하기=0.7, 미션 임파서블=0.85 유사하다고 가정
- User '병'의 마이너리티 리포트 평점은?
User-based VS. Item-based Collaborative Filtering
1. 정확도
- User 수 < Item 수: User-based; User 수 > Item 수: Item-based
2. 모델 Robustness
- 유저와 아이템이 얼마나 자주 그리고 많이 변하는지에 따라 다르다
- 아이템 수가 크게 변하지 않는다면, Item-based
3. 설명력
- Item-based는 비슷한 item과 가중치로 함께 설명할 수 있다
- User-based는 특정 user와 비슷한 user로 분류된 user의 실제 취향을 알 수가 없기 어렵다
4. 새로운 추천 가능
- Item-based는 과거 아이템 데이터에 의존하기 때문에 새로운 item을 추천하기 어렵다
- User-based는 여러 유저의 데이터를 보기 때문에 더 새로운 추천을 할 수 있다
User-based & Item-based Collaborative Filtering
1. Cold-start 문제 -> 딥러닝 기반 추천알고리즘
- 충분한 데이터가 없다면 좋은 추천을 할 수 없다
- 유저에 대한 아무런 기록이 없다면, 새로운 아이템에 대한 정보가 없다면, 추천 불가능
2. 계산량
- 데이터가 많아질수록 유사도 계산이 많아진다
- 하지만 데이터가 많아야 추천 품질이 좋아진다
3. Long-Tail Economy -> 모델 기반 협업필터링
- 대부분의 사용자가 관심 갖는 소수 아이템으로 쏠림 현상
- 관심이 상대적으로 부족한 아이템은 추천되지 못하는 현상
유사도 이해하기
자카드 유사도(Jaccard Similarity)
- 집합의 개념을 이용한 유사도 계산
- 집합 A와 B사이의 유사도는 얼마나 많은 아이템이 겹치는지로 판단
- 전체 집합(=합집합)과 교집합 사이의 비율로 유사도 계산
- 공통 아이템이 없으면 0, 모두 겹치면 1
- 주로 여러 단어로 구성된 등 문서 또는 문장이 유사한지 판단할 때 사용
피어슨 유사도(Pearson Similarity)
- Vector X, Y 사이의 상관관계를 계산(=피어슨 상관계수)
- 각 Vector의 표본평균으로 각 vector를 정규화(normalize)하고, 코사인 유사도를 구한다
- 1은 양의 상관관계, -1은 음의 상관관계, 0은 상관관계 없음을 나타낸다
이웃기반_협업필터링_구현실습
https://colab.research.google.com/drive/1WFfj2TpAh2jjzz43OTVqNYVo2KeT6m0m#scrollTo=Oj-gwi8w0qkD
Google Colaboratory Notebook
Run, share, and edit Python notebooks
colab.research.google.com
출처 - 패스트캠퍼스