협업 필터링(collaborative filtering)
사용자와 item간의 rating을 이용해서 사용자끼리 '유사도'를 찾는 방식.
특정 사용자와 유사한 사용자들이 남긴 평점, 상품구매 이력 등 행동양식 기반으로 '예측'해서 '추천'해준다.
그래서 item을 얼마나 좋아할 것인지 수치적으로 예측한다.
협업필터링의 2가지 유형
- 최근접 이웃기반 필터링 (nearest neighbor collaborative filtering)
- 잠재요인 기반 필터링 (latent factor collaborative filtering)
2.1 최근접 이웃기반 필터링 (nearest neighbor collaborative filtering)
사용자-아이템 행렬에서 사용자가 아직 평가하지 않은 아이템을 예측하는 것이 목표
- 사용자 기반 협업 필터링 : 비슷한 고객들이 ~한 item을 소비했다.
- 아이템 기반 협업 필터링 : ~한 item을 소비한 고객들은 다음과 같은 상품도 구매했다.
사용자기반 협업필터링
colums은 user, row는 item 행렬을 가지고 있다. (user-item).
user1과 user2는 itemA,itemB,itemC까지 평점이 비슷하기 때문에 user1과 user2는 비슷하다고 판단
아이템기반 협업필터링
colums은 item , row는 user 행렬을 가지고 있다. (item-user)
itemA와 itemB는 비슷한 평점분포를 가지고 있기 때문에 itemA와 itemB는 비슷하다고 판단.
그래서 결국 user4에게 ItemA를 추천해준다.
일반적으로 정확도, 사용빈도는 사용자기반 협업필터링 < 아이템기반 협업필터링
그래서 이번엔 아이템기반 협업필터링을 적용해볼 것이다.
데이터셋 : https://www.kaggle.com/sengzhaotoo/movielens-small
- rating.csv : user가 movie에 평가를 매긴 데이터
- moives.csv : 영화정보 데이터
목적 : 아이템기반 협업필터링으로 사용자에게 유사한 영화를 추천해준다
1. 데이터준비
2. 데이터전처리
필요없는 컬럼 삭제
movie 데이터와 평점데이터를 merge해서 하나로 합침
피봇테이블 생성
아이템 기반 협업 핕터링을 적용하기 위해서 사용자-영화에 따른 평점 점수가 데이터로 들어가야한다.
사용자-영화는 아래와 같이 두가지경우가 있을수 있다.
movie_usr_rating : 영화-사용자 피봇테이블 (index : 영화, column : 사용자)
usr_movie_rating : 사용자-영화 피봇테이블 (index : 사용자, column : 영화)
그런데 우리는 아이템기반 협업 필터링이기니까,
인덱스가 영화인 movie_usr_rating : 영화-사용자 피봇테이블 (index : 영화, column : 사용자) 을 사용한다.
피봇테이블의 NaN처리
NaN은 아직 평점을 매기지 않은 것으로 볼 수 있는데, fillna를 사용해서 NaN 0으로 처리한다.
3. 아이템기반 협업 필터링
유사도값 추출 (코사인유사도)
유사한 아이템끼리 추천을 해주는 방식, 즉 평점이 비슷한 아이템(영화)를 추천해주는 것이다.
현재 평점이 data로 들어가있으니까, 이 상태에서 코사인 유사도값을 이용해 유사도를 계산한다.
유사도값을 가진 데이터프레임 생성
그럼 각 아이템(영화)끼리 서로 유사한 정보의 값을 가지게 된다.
그럼 서로 유사도가 가까운 영화일수록 1에 가깝고, 자기자신과 같은 영화이면 유사도값은 1이 된다(대각선은 자기자신)
4. 영화추천 사용자 함수 생성
이제 이 데이터프레임을 가지고, 영화추천 기능을 구현하는 사용자 함수를 생성한다.
만약 사용자가 어떤 영화를 보았을때(매개변수로 영화이름 입력), 그 영화와 비슷한 영화를 추천해주는 것이다.
실제로 toy story(1995)를 보았다고 했을때, 이와 유사한 영화에 대한 결과이다.
참고
https://lsjsj92.tistory.com/568
'🌿 Data Engineering > Data Analysis' 카테고리의 다른 글
[텍스트분석] 02. 텍스트 사전준비 (텍스트 전처리) (0) | 2021.09.04 |
---|---|
[텍스트분석] 01.텍스트 분석 수행 프로세스 (0) | 2021.09.04 |
추천시스템04. 잠재요인 협업필터링(latent factor collaborative filtering) 구현 (0) | 2021.08.27 |
추천시스템02. 콘텐츠기반 필터링(content based filtering) 구현 (0) | 2021.08.26 |
추천시스템01. 추천 시스템(Recommendation)이란? 유형 알아보기 (0) | 2021.08.26 |
[Pandas] 가상 쇼핑몰 고객주문 데이터 전처리2 - 국가별,월별,요일별,t시간대별 매출 (0) | 2021.08.24 |