728x90
반응형

협업 필터링(Collaborative Filtering): 개인화 추천 시스템의 핵심 기술

개요

  • 협업 필터링은 사용자 간의 유사성 또는 아이템 간의 유사성을 기반으로 추천을 제공하는 기술.
  • 넷플릭스, 아마존, 유튜브 등 많은 기업에서 사용자에게 개인화된 경험을 제공하기 위해 활용.
  • 기본 가정: "비슷한 취향을 가진 사용자들은 비슷한 항목을 선호할 것이다."
  • 사용자 행동 데이터(평점, 클릭, 구매 이력 등)를 분석하여 패턴을 발견하고 예측에 활용.

협업 필터링 유형

1. 메모리 기반 협업 필터링

  • 전체 사용자-아이템 상호작용 데이터를 메모리에 유지하고 직접 계산.
  • 사용자 기반(User-based) 협업 필터링
    • 타겟 사용자와 유사한 취향을 가진 다른 사용자들을 찾아 추천.
    • 예: A와 B가 비슷한 영화를 좋아한다면, A가 좋아하는 새 영화를 B에게 추천.
  • 아이템 기반(Item-based) 협업 필터링
    • 아이템 간 유사성을 계산하여 사용자가 좋아했던 아이템과 유사한 아이템 추천.
    • 예: 사용자가 '매트릭스'를 좋아했다면, 유사한 SF 영화 '인셉션' 추천.

2. 모델 기반 협업 필터링

  • 기계학습 알고리즘을 사용하여 사용자 행동을 모델링.
  • 행렬 분해(Matrix Factorization) 방식
    • SVD(Singular Value Decomposition), NMF(Non-negative Matrix Factorization) 등.
    • 사용자-아이템 평점 행렬을 저차원 잠재 요인(latent factor) 행렬로 분해.
  • 딥러닝 기반 접근법
    • 오토인코더, NCF(Neural Collaborative Filtering) 등.
    • 복잡한 사용자-아이템 상호작용 패턴 학습 가능.

구현 과정 및 알고리즘

사용자 기반 협업 필터링 구현 단계

  1. 사용자-아이템 평점 행렬 구성
  2. 사용자 간 유사도 계산
    • 코사인 유사도, 피어슨 상관계수, 자카드 유사도 등 활용
  3. 유사 사용자 식별
  4. 예측 평점 계산
  5. Top-N 추천 아이템 생성
flowchart LR
    A[사용자-아이템 행렬 구성] --> B[사용자 간 유사도 계산]
    B --> C[유사 사용자 식별]
    C --> D[예측 평점 계산]
    D --> E[Top-N 추천 아이템 생성]

아이템 기반 협업 필터링 구현 단계

  1. 사용자-아이템 평점 행렬 구성
  2. 아이템 간 유사도 계산
  3. 사용자가 평가한 아이템 기반으로 다른 아이템 예측 평점 계산
  4. Top-N 추천 아이템 생성

행렬 분해 기반 협업 필터링

  1. 사용자-아이템 평점 행렬 R을 사용자 행렬 P와 아이템 행렬 Q로 분해
  2. R ≈ P × Q^T
  3. P와 Q 행렬 최적화(SGD, ALS 등 사용)
  4. 최적화된 행렬을 사용하여 평점 예측
graph LR
    A[평점 행렬 R] --> B[행렬 분해]
    B --> C[사용자 행렬 P]
    B --> D[아이템 행렬 Q]
    C --> E[평점 예측]
    D --> E

유사도 측정 방법

코사인 유사도

  • 두 벡터 간의 각도를 기반으로 유사도 측정.
  • 범위: -1(완전 반대) ~ 1(완전 유사).
  • 수식: cos(θ) = (A·B) / (||A|| × ||B||)
  • 예시: 사용자 A와 B의 영화 평점 벡터 간 각도가 작을수록 취향이 유사.

피어슨 상관계수

  • 두 변수 간의 선형 관계 측정.
  • 범위: -1(완전 부적 상관) ~ 1(완전 정적 상관).
  • 평균을 중심으로 편차를 고려하므로 사용자 평점 경향(관대함/엄격함) 보정.

자카드 유사도

  • 이진 데이터(구매/미구매, 클릭/미클릭)에 적합.
  • 두 집합의 교집합 크기를 합집합 크기로 나눈 값.
  • 범위: 0(공통 요소 없음) ~ 1(완전 동일).

냉시동(Cold Start) 문제와 해결 방안

냉시동 문제

  • 신규 사용자: 행동 데이터가 없어 정확한 추천 어려움.
  • 신규 아이템: 초기 평가 부족으로 추천시스템에 노출 어려움.

해결 방안

  • 콘텐츠 기반 필터링 병행
    • 사용자 프로필 정보, 아이템 메타데이터 활용.
  • 하이브리드 접근법
    • 협업 필터링 + 콘텐츠 기반 + 지식 기반 필터링 결합.
  • 액티브 러닝(Active Learning)
    • 신규 사용자에게 전략적 문항으로 선호도 파악.
  • 인구통계학적 정보 활용
    • 연령, 성별 등 기반 초기 추천.

희소성(Sparsity) 문제와 해결 방안

희소성 문제

  • 대부분의 사용자는 전체 아이템 중 일부만 평가(보통 1% 미만).
  • 데이터 희소성으로 유사도 계산 정확도 저하.

해결 방안

  • 차원 축소 기법
    • SVD, PCA 등으로 밀집된 저차원 표현 추출.
  • 잠재 요인 모델
    • MF, SVD++, Factorization Machines 등.
  • 그래프 기반 방법
    • 사용자-아이템 이분 그래프에서 경로 기반 유사도 계산.

실제 구현 사례

아마존의 아이템 기반 협업 필터링

  • "이 상품을 구매한 사용자들이 구매한 다른 상품" 추천.
  • 아이템 간 유사도 미리 계산하여 실시간 추천에 활용.
  • 대규모 카탈로그에서도 효율적인 추천 제공.

넷플릭스의 행렬 분해 기반 접근법

  • 영화 추천 정확도 향상을 위한 넷플릭스 프라이즈 대회 개최.
  • SVD, Restricted Boltzmann Machines 등 다양한 기법 활용.
  • 하이브리드 앙상블 모델로 최종 추천 시스템 구축.

스포티파이의 협업 필터링 + 콘텐츠 기반 하이브리드

  • 음악 소비 패턴 분석을 통한 협업 필터링.
  • 오디오 특성, 가사, 장르 등 콘텐츠 메타데이터 활용.
  • 주간 개인화 플레이리스트 'Discover Weekly' 제공.

평가 지표

정확도 지표

  • RMSE(Root Mean Square Error): 예측 평점과 실제 평점 간 차이 측정.
  • MAE(Mean Absolute Error): 예측 오차의 절대값 평균.

랭킹 기반 지표

  • 정밀도(Precision): 추천된 아이템 중 관련 있는 아이템 비율.
  • 재현율(Recall): 관련 있는 모든 아이템 중 추천된 아이템 비율.
  • F1 점수: 정밀도와 재현율의 조화평균.
  • MAP(Mean Average Precision): 순위를 고려한 정밀도 평균.
  • NDCG(Normalized Discounted Cumulative Gain): 순위와 관련성을 고려한 지표.

비즈니스 관련 지표

  • CTR(Click-Through Rate): 추천된 아이템 클릭률.
  • 전환율(Conversion Rate): 추천으로 인한 구매/가입 비율.
  • 사용자 만족도: 설문조사, 이탈률 등으로 측정.

최신 트렌드 및 발전 방향

딥러닝 기반 협업 필터링

  • 오토인코더: 비선형 잠재 특성 학습.
  • 신경망 협업 필터링(NCF): MLP와 행렬 분해 결합.
  • 그래프 신경망(GNN): 사용자-아이템 상호작용을 그래프로 모델링.

시퀀셜 추천 시스템

  • 사용자 행동 시퀀스 고려(RNN, LSTM, Transformer 활용).
  • 시간적 컨텍스트와 사용자 취향 변화 반영.

강화학습 기반 추천

  • 추천 시스템을 MDP(Markov Decision Process)로 모델링.
  • 장기적 사용자 만족도 최적화.
  • 탐색(exploration)과 활용(exploitation) 균형 조정.

협업 필터링 구현 사례 (Python)

사용자 기반 협업 필터링 구현 예시

import numpy as np
from sklearn.metrics.pairwise import cosine_similarity

# 사용자-아이템 평점 행렬
ratings = np.array([
    [5, 4, 0, 0, 1],
    [0, 0, 5, 4, 0],
    [4, 5, 0, 0, 2],
    [0, 0, 4, 5, 0]
])

# 사용자 간 유사도 계산
user_similarity = cosine_similarity(ratings)

# 특정 사용자에 대한 예측 평점 계산
def predict_ratings(user_id, item_id):
    sim_scores = user_similarity[user_id]
    item_ratings = ratings[:, item_id]

    # 해당 아이템에 대한 평점이 있는 사용자만 고려
    mask = item_ratings > 0

    # 유사도 가중 평균 계산
    if np.sum(mask) > 0:
        weighted_sum = np.sum(sim_scores[mask] * item_ratings[mask])
        sim_sum = np.sum(np.abs(sim_scores[mask]))
        if sim_sum > 0:
            return weighted_sum / sim_sum
    return 0

행렬 분해 기반 협업 필터링 구현 예시

from surprise import SVD, Dataset, Reader
from surprise.model_selection import cross_validate

# 데이터 로드 및 전처리
reader = Reader(rating_scale=(1, 5))
data = Dataset.load_from_df(ratings_df[['user_id', 'item_id', 'rating']], reader)

# SVD 모델 학습
svd = SVD(n_factors=50, n_epochs=20, lr_all=0.005, reg_all=0.02)
cross_validate(svd, data, measures=['RMSE', 'MAE'], cv=5, verbose=True)

# 전체 데이터셋으로 학습
trainset = data.build_full_trainset()
svd.fit(trainset)

# 예측 평점 계산
user_id = 1
item_id = 42
pred = svd.predict(user_id, item_id)
print(f"예측 평점: {pred.est:.2f}")

도입 시 고려사항

확장성(Scalability)

  • 대규모 사용자와 아이템 처리 능력.
  • 근사 최근접 이웃(Approximate Nearest Neighbors) 알고리즘 활용.
  • 분산 처리 프레임워크(Spark, Hadoop) 적용.

실시간 처리

  • 사용자 행동 즉시 반영 방안.
  • 증분 업데이트(Incremental Updates) 구현.
  • 온라인 학습(Online Learning) 적용.

프라이버시

  • 개인정보 보호 규정(GDPR, CCPA 등) 준수.
  • 연합 학습(Federated Learning) 고려.
  • 차분 프라이버시(Differential Privacy) 기법 적용.

편향성과 다양성

  • 인기 아이템 쏠림 현상(Filter Bubble) 방지.
  • 추천 다양성(Diversity) 향상 전략 적용.
  • 공정성(Fairness) 고려한 알고리즘 설계.

결론

  • 협업 필터링은 개인화 추천 시스템의 핵심 기술로, 다양한 산업에 활용 중.
  • 메모리 기반, 모델 기반 등 다양한 접근법이 존재하며 각각 장단점 보유.
  • 냉시동, 희소성 등의 문제를 해결하기 위해 하이브리드 접근법이 효과적.
  • 딥러닝, 강화학습 등 최신 기술과 결합하여 지속적으로 발전 중.
  • 정확한 추천뿐 아니라 다양성, 공정성, 설명 가능성 등 다양한 측면 고려 필요.

Keywords

Collaborative Filtering, Recommendation System, 협업 필터링, 추천 시스템, Matrix Factorization, User-based CF, Item-based CF, 행렬 분해, 냉시동 문제, 희소성 문제

728x90
반응형

+ Recent posts