Collaborative filtering+ Recommander systems implementation detail + Content-based filtering + Principal Component Analysis

YoungJae Kang·2025년 6월 9일

머신러닝 학습

목록 보기
13/14
post-thumbnail

1. Collaborative Filtering

개념:
사용자-아이템 간의 과거 상호작용 데이터를 바탕으로 추천
즉, "비슷한 사용자/아이템이 좋아한 것"을 기반으로 예측

User-based CF

  • 비슷한 사용자를 찾고, 그들이 좋아한 아이템을 추천
  • 예시: 나와 취향이 유사한 A가 좋아한 영화 B → 나에게도 B 추천

Item-based CF

  • 비슷한 아이템을 찾고, 사용자가 좋아한 아이템과 유사한 아이템을 추천
  • 예시: 내가 좋아한 영화 A와 유사한 영화 B → 나에게 B 추천

평점 예측 공식

r^ui=μ+bu+bi+qiTpu\hat{r}_{ui} = \mu + b_u + b_i + q_i^T p_u

  • r^ui\hat{r}_{ui} : 사용자 uu의 아이템 ii에 대한 예측 평점
  • μ\mu : 전체 평균 평점
  • bub_u : 사용자 편향
  • bib_i : 아이템 편향
  • pup_u, qiq_i : 잠재 요인(latent factor) 벡터

2. Recommendation System Implementation Detail

Matrix Factorization

  • 사용자-아이템 행렬 RRP×QTP \times Q^T 로 분해
  • PRnusers×k,QRnitems×kP \in \mathbb{R}^{n_{users} \times k}, Q \in \mathbb{R}^{n_{items} \times k}

Objective Function

minp,q(u,i)κ(ruipuTqi)2+λ(pu2+qi2)\min_{p_*, q_*} \sum_{(u, i) \in \kappa} (r_{ui} - p_u^T q_i)^2 + \lambda (||p_u||^2 + ||q_i||^2)

  • κ\kappa: 관측된 사용자-아이템 쌍의 집합
  • λ\lambda: 정규화 계수

학습 방법

  • Stochastic Gradient Descent (SGD) 방식으로 미니배치 기반 학습
  • 관측된 평점에 대해서만 손실을 계산

3. Content-Based Filtering

개념:
아이템의 속성(장르, 설명, 키워드 등)을 사용하여 사용자 취향에 맞는 아이템을 추천

핵심 개념

  • 각 아이템은 특징 벡터로 표현됨 (예: TF-IDF, Word2Vec 등)
  • 사용자의 선호도를 이 벡터와 비교하여 예측

사용자 프로필 벡터

u=1IuiIuxi\vec{u} = \frac{1}{|\mathcal{I}_u|} \sum_{i \in \mathcal{I}_u} \vec{x}_i

  • Iu\mathcal{I}_u: 사용자 uu가 좋아한 아이템들의 집합
  • xi\vec{x}_i: 아이템 ii의 특징 벡터

예측 방식

  • 사용자 벡터 u\vec{u}와 아이템 벡터 x\vec{x} 간의 유사도(cosine similarity)를 계산하여 추천

4. Principal Component Analysis (PCA)

목적:
고차원 데이터를 저차원 공간으로 투영하여 중요한 정보 유지하면서 차원 축소

주요 개념

  • 분산이 큰 방향으로 새로운 축(Principal Component)을 정의
  • 첫 번째 주성분이 데이터의 최대 분산을 가지는 방향

수식 정리

  1. 평균 중심화

xi=xixˉx_i' = x_i - \bar{x}

  1. 공분산 행렬 계산
Σ=1mXTX\Sigma = \frac{1}{m} X^T X
  1. 고유값 분해 또는 SVD
X=USVTX = U S V^T
  • UU: 좌표 회전 행렬 (주성분)
  • SS: 특이값 (분산 크기)
  • VV: 원래 차원 축의 방향
  1. 차원 축소
Z=XUreduceZ = X \cdot U_{reduce}
  • UreduceU_{reduce}: 상위 kk개의 주성분 벡터로 구성
profile
Data_Analyst

0개의 댓글