코딩공부/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)

 

이런 방식으로 데이터셋을 활용하여 추천시스템을 만들어 볼 수 있다.