추천 시스템은 사용자에게 개인화된 추천을 제공하여 사용자의 경험을 향상시키는 데 중요한 역할을 합니다. 이번 포스트에서는 Python을 사용하여 간단한 추천 시스템을 만드는 미니 프로젝트를 진행해보겠습니다. 이 프로젝트를 통해 데이터 처리, 모델링, 평가의 기초를 익힐 수 있습니다.
데이터 준비
추천 시스템을 만들기 위해서는 먼저 데이터를 준비해야 합니다. 간단한 예로, 영화 추천 시스템을 구축해 보겠습니다. pandas와 numpy 라이브러리를 사용하여 데이터를 처리하겠습니다. 영화와 사용자 평점을 포함하는 데이터셋을 만들어보겠습니다.
import pandas as pd
movies = pd.DataFrame({
'movie_id': [1, 2, 3, 4, 5],
'title': ['Inception', 'The Dark Knight', 'Interstellar', 'Dunkirk', 'Tenet']
})
# 사용자 평점 데이터셋 생성
ratings = pd.DataFrame({
'user_id': [1, 1, 1, 2, 2, 3, 4, 4, 5],
'movie_id': [1, 2, 3, 1, 4, 5, 2, 3, 4],
'rating': [5, 4, 4, 5, 3, 4, 2, 5, 5]
})
print(movies)
print(ratings)
위의 코드에서는 영화 제목과 사용자 평점 정보를 담고 있는 두 개의 데이터프레임을 생성했습니다. 이후 이 데이터를 기반으로 추천 시스템을 구축할 것입니다.
추천 시스템 구축
가장 간단한 추천 시스템 방식은 협업 필터링(Collaborative Filtering) 방법입니다. 이 방법은 사용자 간의 유사성을 바탕으로 추천을 수행합니다. 아래 코드는 사용자의 유사성을 기반으로 추천 영화를 제공하는 기본적인 시스템을 구현한 것입니다.
사용자-아이템 행렬 생성
사용자와 영화 간의 평점을 행렬 형태로 변환합니다.
# 사용자-아이템 행렬 생성
user_movie_matrix = ratings.pivot(index='user_id', columns='movie_id', values='rating').fillna(0)
print(user_movie_matrix)
코사인 유사도 계산
sklearn 라이브러리를 이용해 사용자 간의 유사도를 계산할 수 있습니다.
from sklearn.metrics.pairwise import cosine_similarity
# 사용자 간의 유사도 계산
user_similarity = cosine_similarity(user_movie_matrix)
user_similarity_df = pd.DataFrame(user_similarity, index=user_movie_matrix.index, columns=user_movie_matrix.index)
print(user_similarity_df)
추천 영화 제공
특정 사용자가 선호할 만한 영화를 추천하는 기능을 추가해 보겠습니다.
def recommend_movies(user_id, user_movie_matrix, user_similarity_df):
similar_users = user_similarity_df[user_id].sort_values(ascending=False).index[1:3]
recommended_movies = pd.Series()
for similar_user in similar_users:
similar_user_movies = user_movie_matrix.loc[similar_user]
recommended_movies = recommended_movies.append(similar_user_movies[similar_user_movies > 0])
# 중복 제거 및 정렬
recommended_movies = recommended_movies.groupby(recommended_movies.index).mean().sort_values(ascending=False)
return recommended_movies.index[:3]
# 사용자 1에게 추천
print("추천 영화:", recommend_movies(1, user_movie_matrix, user_similarity_df))
위의 함수는 특정 사용자가 평가하지 않은 영화를 추천합니다. 유사한 사용자들의 평가를 기반으로 추천 영화 목록을 생성합니다.
마무리
이번 포스트에서는 Python을 활용해 간단한 추천 시스템을 구축하는 방법을 알아보았습니다. 데이터셋을 만들고, 사용자-아이템 행렬을 구성한 후, 코사인 유사도를 기반으로 추천 영화를 제공하는 과정을 살펴보았습니다. 이제 여러분은 이 기본적인 추천 시스템을 참고하여 더 복잡한 알고리즘이나 다양한 데이터셋을 활용하여 발전시킬 수 있습니다. 추천 시스템을 통해 사용자 경험을 향상시키고, 데이터의 가치를 극대화하는 방법을 배울 수 있기를 바랍니다.