일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 추천시스템
- 통계분석
- git init
- Python
- eda
- 의사결정나무
- 데이터분석
- git stash
- Linux
- 앙상블
- 배깅
- airflow 정리
- 네트워크
- Decision Tree
- SQL
- Collaborative filtering
- CF
- 오라클 데이터 처리방식
- Oracle ASSM
- Spark Data Read
- 리눅스 환경변수
- git 기본명령어
- Oracle 논리적 저장 구조
- Spark jdbc parallel read
- 알고리즘
- enq: FB - contention
- 데이터 분석
- 랜덤포레스트
- Spark 튜닝
- BFS
- Today
- Total
[Alex] 데이터 장인의 블로그
[추천] Collaborative Filtering 협업필터링 본문
Collaborative Filtering (협업필터링)
[추천시스템] CF, 즉 협업필터링은 많은 유저들로부터 모은 취향 정보들을 기반으로 개별 사용자가 다음 선호할 것만 같은 아이템을 예측해서 '추천'해주는 기술을 말합니다. 취향이 비슷한 사람들을 파악하고 평점이 비슷할 것 같은 아이템을 분석하여 추천에 활용하는 방식입니다. 이 정도로만 이해하고 있으면 될 것 같습니다. 추가적인 사용나의 '개인정보'나 '아이템' 정보가 없이도 추천할 수 있는 것이 가장 큰 장점입니다.
Memory-based Collaborative Filtering
Memory-based 협업 필터링 추천 시스템은 유사도를 기반으로 동작합니다. 사용자-사용자 간의 유사도를 기준으로 하는 경우는 사용자 기반(User-Based), 아이템-아이템 간의 유사도를 기준으로 하는 경우는 아이템 기반(Item-Based)입니다.
사용자 기반 (User-Based)
사용자 기반의 Collaborative Filtering 에서의 '유사도' 는 각각 사용자가 얼마나 유사한 아이템을 선호했는지 나타냅니다. 여기서의 벡터는 사용자 각각의 영화들의 점수들입니다. 만약 A 사용자라면 (5,4,4,3,0) 라는 벡터에 해당하겠습니다.
ex) 각각의 사용자가 시청한 영화의 평가점수 Matrix
테넷 | 강철비 2 | 반도 | 다만 악에서 구하소서 | 오! 문희 | |
A 사용자 | 5 | 4 | 4 | 3 | |
B 사용자 | 1 | 0 | 1 | 4 | |
C 사용자 | 4 | 4 | 5 | 3 | |
D 사용자 | 2 | 1 | 4 | 3 | |
E 사용자 | 4 | 4 | 2 |
아이템 기반 (Item-Based)
아이템 기반의 Collaborative Filtering 도 마찬가지로 사용자 기반의 CF와 유사한 과정을 거칩니다. 아이템들의 유사도를 구하는 방법으로 진행되지만 사용자 기반의 CF와는 반대로 영화를 기준으로 사용자 평가점수를 벡터로 사용합니다. 예를들어, 테넷의 경우 (5,1,4,0,4)가 벡터에 해당하겠습니다.
보통 유사도를 구하기전 피봇팅한 데이터 수치(rank, score)들의 표준화 작업 이후 Sparse matrix로 변환합니다.
A 사용자 | B 사용자 | C 사용자 | D 사용자 | E 사용자 | |
테넷 | 5 | 1 | 4 | 4 | |
강철비 2 | 4 | 0 | 4 | 2 | |
반도 | 4 | 1 | 1 | 4 | |
다만 악에서 구하소서 | 3 | 5 | 4 | 2 | |
오!문희 | 4 | 3 | 3 |
유사도
* 두 벡터 간의 거리(유사도)를 구하기 위해 주로 코사인 유사도, 피어슨 유사도를 사용하게 됩니다.
코사인 유사도
*코사인 유사도는 주로 Item based CF에서 사용합니다. *
코사인 유사도 방식은 평점들을 '벡터'로 생각하고 2개의 각 벡터사이의 각도를 '유사도'라고 가정하는 방법입니다. 즉, 둘 사이의 벡터의 각도가 가까울때 비슷한 아이템 or 사용자라고 판단하게 됩니다. 코사인 유사도의 단점은 정보(데이터)가 많지 않을 때에는 예측의 정확도가 높지 않다는 것이다.
피어슨 유사도
*피어슨 유사도는 주로 User based CF 에서 사용합니다. *
+ ) 사용자 기반의 CF에서 피어슨 유사도를 활용하게 되면 각 사용자의 평가 성향을 반영하지 못한다는 '단점'이 있습니다. 때문에 가중치를 활용하여 평가하는 방법으로 조정할 수 있습니다.
하지만 아이템 CF에서 코사인 유사도를 사용할 때, 사용자들의 평가가 극명하게 갈리는데 둘의 유사도를 1이라고 산출하는 경우가 생길수도 있습니다.
영화 A | 1 | 1 | 1 | 1 | 1 |
영화 B | 4 | 4 | 4 | 4 | 4 |
예를 들어서, 위와 같은 경우에는 각각 영화의 유사도가 1인 현상이 발생합니다.
때문에 이를 보완하기 위해, 피어슨 유사도나 약간의 보정 과정을 거친 코사인 유사도를 활용할 수 있습니다.
다음 글. [2020/09/02 - [ML&DL] - [추천] Collaborative Filtering - 코드 구현] 에서는 Python을 활용하여 Memory-based Collaborative Filtering을 구현해보겠습니다.
참고.
https://www.kaggle.com/ajmichelutti/collaborative-filtering-on-anime-data/data
https://lsjsj92.tistory.com/569
'ML&DL > 추천 알고리즘' 카테고리의 다른 글
[추천] Collaborative Filtering - 코드 구현 (feat. python) (0) | 2020.09.04 |
---|