53 영화 추천 시스템 (Movie Recommendation System)
다음에 볼 영화를 선택하기 어려운 상황을 해결해 줄 나만의 영화 추천 시스템을 만들어 봅시다. 기존의 영화 추천 알고리즘을 그대로 가져다 쓰는 대신, 자신만의 아이디어를 바탕으로 설계하고 테스트해 보는 것이 목표입니다.
이 프로젝트는 추천 시스템의 핵심 원리인 협업 필터링(Collaborative Filtering)과 콘텐츠 기반 필터링(Content-based Filtering)을 이해하는 데 아주 좋습니다. 특히 수많은 영화 데이터 속에서 사용자의 취향을 정확하게 파악하고, 이를 바탕으로 개인화된 추천 목록을 생성하는 과정을 직접 설계해 보세요.
53.1 주요 개발 포인트
- 영화 및 이용자 데이터 수집: TMDB API, MovieLens 등에서 영화 정보와 사용자 별점 데이터를 가져옵니다.
- 콘텐츠 기반 필터링: 영화의 장르, 감독, 배우, 줄거리 키워드 등을 분석하여 유사한 영화를 찾아냅니다.
- 협업 필터링 (Collaborative Filtering): 나와 비슷한 영화 취향을 가진 다른 사용자들이 재미있게 본 영화를 추천합니다.
- 하이브리드 추천 방식: 여러 가지 추천 알고리즘을 조합하여 정확도와 다양성을 높입니다.
- 사용자 인터페이스 (GUI): 사용자가 영화를 선택하고 별점을 매기면 실시간으로 추천 목록이 업데이트되는 UI를 구축합니다.
53.2 Python 구현 예시 (간단한 영화 장르 기반 추천 시나리오)
# 실제 구현 시 pandas, scikit-learn 등을 활용합니다.
# import pandas as pd
# from sklearn.metrics.pairwise import cosine_similarity
class MovieRecommender:
"""
영화 데이터와 사용자 취향을 바탕으로 추천 결과를 생성합니다.
"""
def __init__(self):
self.movies = [
{"id": 1, "title": "토이 스토리", "genres": ["애니메이션", "코미디"]},
{"id": 2, "title": "다크 나이트", "genres": ["액션", "범죄"]},
{"id": 3, "title": "인셉션", "genres": ["액션", "SF"]},
{"id": 4, "title": "라라랜드", "genres": ["로맨스", "뮤지컬"]},
{"id": 5, "title": "어벤져스", "genres": ["액션", "SF"]}
]
def recommend_by_genre(self, favorite_genre):
"""
좋아하는 장르를 포함한 영화 목록을 반환합니다.
"""
print(f"사용자가 선호하는 장르 '{favorite_genre}'를 분석 중입니다...")
results = [m['title'] for m in self.movies if favorite_genre in m['genres']]
if results:
print(f"추천 영화: {', '.join(results)}")
else:
print("해당 장르의 영화를 찾을 수 없습니다.")
return results
if __name__ == "__main__":
recommender = MovieRecommender()
# 장르 기반 추천 테스트
recommender.recommend_by_genre("액션")
recommender.recommend_by_genre("SF")
# 팁: 실제 프로젝트에서는 영화 줄거리 벡터화를 통해 코사인 유사도를 계산해 보세요.
print("\n[팁] TF-IDF나 워드 임베딩을 활용하면 훨씬 정교한 추천이 가능합니다.")