728x90
반응형
SMALL
넷플릭스에서 취향 저격 드라마를 추천받거나, 아마존에서 평소 관심 있던 제품을 추천받은 경험 있으신가요?
이러한 맞춤형 추천의 중심에는 바로 추천 시스템(Recommendation System)이 있습니다.
이번 글에서는 추천 시스템의 기본 개념과 함께, 그중 가장 널리 쓰이는 협업 필터링(Collaborative Filtering) 기법을 알아보겠습니다.
1️⃣ 추천 시스템이란?
추천 시스템은 사용자의 행동 데이터를 바탕으로 개인의 취향에 맞는 아이템(상품, 콘텐츠 등)을 예측하고 추천하는 시스템입니다.
단순히 인기 순위를 보여주는 것이 아니라, 개개인의 선호에 따라 달라지는 결과를 제공하는 것이 핵심입니다.
✅ 추천 시스템의 대표 사례
- 넷플릭스(Netflix): 시청 이력을 기반으로 유사한 영화/드라마 추천
- 아마존(Amazon): 구매한 제품을 바탕으로 연관 상품 제안
- 스포티파이(Spotify): 청취 이력을 분석해 좋아할 만한 음악 추천
2️⃣ 추천 시스템의 주요 기법
① 협업 필터링 (Collaborative Filtering)
사용자 간 또는 아이템 간의 행동 유사성을 기반으로 추천을 수행하는 방식입니다.
- 사용자 기반(User-Based)
나와 비슷한 사용자들이 좋아한 아이템을 추천
→ 예: 나와 비슷한 음악 취향을 가진 사용자가 좋아한 곡 추천 - 아이템 기반(Item-Based)
내가 좋아한 아이템과 유사한 아이템을 추천
→ 예: 내가 좋아한 영화와 비슷한 장르/분위기의 영화 추천
협업 필터링의 강점은 별도의 항목 정보 없이 오직 사용자 행동만으로도 강력한 추천이 가능하다는 점입니다.
② 콘텐츠 기반 필터링 (Content-Based Filtering)
아이템의 속성(특징)을 분석하여 추천하는 방식입니다.
예를 들어, 영화의 경우 장르, 감독, 출연 배우, 연출 스타일 등을 기준으로 유사성을 판단합니다.
→ 사용자가 과거에 좋아했던 콘텐츠와 비슷한 속성의 아이템을 추천합니다.
③ 하이브리드 필터링 (Hybrid Filtering)
협업 필터링과 콘텐츠 기반 필터링을 결합한 방식입니다.
→ 두 방식의 장점을 모두 활용하여 정확도와 다양성을 동시에 높일 수 있습니다.
✅ 실습: 사용자 기반 협업 필터링 구현
이번 실습에서는 간단한 사용자-아이템 평점 매트릭스를 활용하여, 사용자 간 유사도를 계산해보겠습니다.
import numpy as np
import pandas as pd
from sklearn.metrics.pairwise import cosine_similarity
# 샘플 사용자-아이템 평점 데이터
ratings = pd.DataFrame(
{
"User1": [5, 4, 0, 0, 3],
"User2": [4, 0, 4, 3, 5],
"User3": [0, 3, 5, 4, 2],
"User4": [2, 3, 0, 5, 4],
},
index=["MovieA", "MovieB", "MovieC", "MovieD", "MovieE"]
)
# 사용자 간 유사도 계산 (코사인 유사도 기준)
user_similarity = cosine_similarity(ratings.T)
user_sim_df = pd.DataFrame(user_similarity, index=ratings.columns, columns=ratings.columns)
# 결과 출력
print("사용자 간 유사도:")
print(user_sim_df)
🔍 결과 해석
- User1과 가장 유사한 사용자는 누구인지?
- User3과 비슷한 취향을 가진 사용자가 선호한 영화는 무엇인지?
이런 분석을 바탕으로 아직 시청하지 않은 아이템을 추천할 수 있게 됩니다.
🏆 오늘의 핵심 요약
항목 | 설명 |
✅ 추천 시스템 | 사용자 맞춤형 콘텐츠를 제공하는 핵심 기술입니다. |
✅ 협업 필터링 | 사용자 또는 아이템 간의 유사도를 기반으로 추천을 수행합니다. |
✅ 콘텐츠 기반 필터링 | 아이템의 특징을 분석해 유사한 항목을 추천합니다. |
✅ 하이브리드 방식 | 두 방식을 결합하여 더 정밀한 추천이 가능합니다. |
728x90
반응형
LIST
'인공지능 (AI) > 머신러닝 (ML)' 카테고리의 다른 글
12 - 단어를 수치로 표현하다: Word2Vec과 딥러닝 기반 NLP (0) | 2025.04.04 |
---|---|
11 - 컴퓨터가 언어를 이해한다면?: 자연어 처리와 텍스트 데이터 분석 (0) | 2025.04.04 |
9 - 복잡한 데이터를 간단하게 보기: 차원 축소와 PCA, t-SNE (0) | 2025.04.03 |
8 -한층 더 정교한 군집화: 계층적 군집과 DBSCAN (0) | 2025.04.03 |
7 - 정답 없이 배우는 머신러닝: 비지도 학습과 K-Means 클러스터링 (0) | 2025.04.03 |