코딩공부/Machine Learning
데이터셋을 활용하여 추천시스템 구현 / TIL_221102
Dong_Devlog
2022. 11. 2. 21:10
영화 정보 데이터셋과 영화 평점 데이터셋을 활용한 영화 추천시스템 구현
- pandas와 numpy 라이브러리 import
라이브러리에 대한 설명 - https://dongcodingblog.tistory.com/35
import pandas as pd
import numpy as np
- 데이터셋 불러오기
영화 정보 데이터셋과 영화 평점 데이터셋을 읽고
ratings = pd.read_csv('ratings.csv')
movies = pd.read_csv('movies.csv')
- ratings와 movies를 결합
두 개의 데이터셋을 movieId를 기준으로 merge
movie_ratings = pd.merge(ratings, movies, on='movieId')
- pivot table 사용
user 별로 영화에 부여한 rating 값을 볼 수 있도록 pivot table 사용, 평점을 부여안한 영화는 0으로 부여
title_user = movie_ratings.pivot_table('rating', index='userId', columns='title')
title_user = title_user.fillna(0)
- 유사도 측정
유저 기반으로 코사인 유사도를 구함
from sklearn.metrics.pairwise import cosine_similarity
user_based_collab = cosine_similarity(title_user, title_user)
user_based_collab
- pandas 활용
위의 데이터는 numpy 행렬이므로, pandas를 활용하여 데이터프레임으로 변환하고,
1번 유저와 비슷한 유저를 내림차순으로 정렬한 후, 상위 10개만 출력
user_based_collab = pd.DataFrame(user_based_collab, index=title_user.index, columns=title_user.index)
user_based_collab.head
print(user_based_collab[1].sort_values(ascending=False)[:10])
- 유사도가 가장 높은 유저의 정보를 출력
1번 유저와 가장 비슷한 유저를 뽑고, 그 유저가 좋아했던 영화를 평점 내림차순으로 출력
user = user_based_collab[1].sort_values(ascending=False)[:10].index[1]
result = title_user.query(f"userId == {user}").sort_values(ascending=False, by=user, axis=1)
print(result)
이런 방식으로 데이터셋을 활용하여 추천시스템을 만들어 볼 수 있다.