-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCollaborative Filtering Neighbor based
More file actions
66 lines (50 loc) · 3.75 KB
/
Collaborative Filtering Neighbor based
File metadata and controls
66 lines (50 loc) · 3.75 KB
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# Collaborative Filtering (Neighbor-based)
## 파일 설명
> 사용한 데이터셋
- 소상공인 데이터: 카페 시군구명 비교
- 카카오톡 리뷰데이터 (ratings_two.csv) : 'user_id', 'cafe', 'rating' 세 가지 열만 사용
- ratings_two.csv: cafe 3444개, user 4708명 (이 중 '안다르 카페'에 평점을 남긴 사람은 총 3명)
> 모델 설명 (Content-Based Filtering):
- 협업 필터링: 취향이 비슷한 사람들의 집단이 존재한다고 가정. 추천의 대상이 되는 어떤 한 사람이 있으면 이 사람과 취향이 비슷한 사람들(=이웃)을 찾아내서 이 사람들이 공통적으로 좋아하는 제품 및 서비스를 추천 대상인 사람에게 추천
- 과정: 1) 각 사용자의 평가의 유사성을 계산하여 유저와 비슷한 취향을 가진 사용자 찾기
2) 비슷한 취향을 가진 이웃들이 좋게 평가한 제품/서비스 찾기
3) 평점평균이 높게 나온 제품/서비스를 유저에게 추천해주기
- 기본적인 CF는 이웃을 전체 사용자로 하는데, 이런 simple CF 알고리즘을 개선할 수 있는 방법 중 한가지가 사용자 중에서 유사도가 높은 사용자들만을 이웃으로 선정해서 그 사람들의 평점만 가지고 예측을 하는 Neighbor-based CF! 즉 이웃을 전체 사용자로 하는 대신에 대상 사용자와 유사도가 높은 사람만 이웃으로 선정해서 이웃의 크기를 줄이는 것
## 실행 방법
> 코드 간략 설명:
- train, test 데이터 분리
- train 데이터로 Full matrix 구하기
- train set 사용자들의 Cosine similarities 계산
- 정확도(RMSE)를 계산하는 함수, 모델별 RMSE를 계산하는 함수 정의
- Neighbor size를 정해서 예측치를 계산하는 함수 정의
- 추천해주는 함수 정의 (현재 사용자의 모든 아이템에 대한 예상 평점 계산, 이미 평가한 카페 확인, 예상평점 계산, 예상평점이 가장 높은 카페 선택, 거리지표 포함)
- input: user_id, 몇개의 카페를 추천받고 싶은지, 시군구명
- output: 추천해줄 카페 리스트 (카페명, 예측평점, 시군구명)
- 모델의 정확도 계산
> 성능을 높이기 위한 방법 3가지
<br/>
1. 최적의 neighbor size 구하기
2. 사용자 평가경향 고려
3. 신뢰도 가중
> 아이템 기반 CF:
<br/>
사용자 기반 CF와의 차이점은 유사도를 계산하는 기준이 '아이템'이라는 점. 취향이 비슷한 이웃 사용자를 알아내고, 이 그룹에 속한 사용자들이 공통적으로 좋게 평가한 아이템을 추천하는 방식.
- train set의 모든 가능한 아이템 pair의 Cosine similarities 계산
- 주어진 카페의 가중평균 rating을 계산하는 함수 정의 (가중치는 주어진 아이템과 다른 아이템 간의 유사도(item_similarity))
- 현재 카페가 train set에 있는지 확인
- 현재 카페와 다른 카페의 similarity 값 가져오기
- 현 사용자의 모든 rating 값 가져오기
- 사용자가 평가하지 않은 카페 index 가져오기
- 사용자가 평가하지 않은 카페 제거
- 사용자가 평가하지 않은 카페의 similarity 값 제거
- 현 카페에 대한 예상 rating 계산, 가중치는 현 카페와 사용자가 평가한 카페의 유사도 계산
- 정확도 계산
## 결과
> 성능
- Neighbor based CF 모델: RMSE = 3.8330406653778324
- 1. 최적의 neighbor size로 한 경우: K = 160, RMSE = 4.049282410478079
- 2. 사용자의 평가경향을 고려한 경우: K = 160, RMSE = 3.9841417700711603
- 아이템 기반 CF: 2.789600418536724
## 레퍼런스
책 <Python을 이용한 개인화 추천 시스템> - 임일
http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9788959727667