18 분 소요

이번 포스트는 Recommender System에 대해 다룬다.

Recommender Systems

Introduction to Recommender Systems

Motivation 정보 폭발의 시대

  • 세상에 정보가 너무 많아졌다. (추천 시스템의 필요성 증대)

인터넷에서 1분동안...유튜브 500시간 분량 업로드돼 < 마케팅 < 기사본문 - 반론보도닷컴

  • Information Overload 발생
    • 정보 과부하 : 선택지가 너무 많아서 사용자가 오히려 원하는 걸 못 찾는 현상

Recommender System

추천시스템의 목표

  • 사용자의 정부 과부하 완화 + 만족도 최대화
  • 유저가 좋아할만한 소수의 아이템을 골라서 제공

  • 작동 흐름
    1. 사용자가 아이템을 구매 / 소비
    2. 시스템이 사용자의 선호도 분석
    3. 좋아할 만한 아이템 선별
    4. 사용자에게 추천

추천시스템의 핵심 도전과제

  1. 유저와 아이템을 어떻게 이해할 것인가?
질문 의미
사용자의 진짜 선호도를 어떻게 파악? 클릭했다고 다 좋아하는 건 아님
비정형 데이터에서 아이템 특성 추출? 영화 포스터, 상품 이미지 등
시간에 따라 변하는 선호도 모델링? 어제 좋아하던 것 ≠ 오늘 좋아하는 것
단기 선호 vs 장기 선호 구분? 일시적 관심 vs 진짜 취향
  1. 추천 품질을 어떻게 평가하고 공정하게 만들 것인가?
    • 어떤 지표로 추천 품질을 측정할 것인가?
    • 어떤 지표가 실제 사용자 만족도를 가장 잘 반영하는가
개념 의미 예시
Diversity (다양성) 비슷한 것만 계속 추천하지 않기 액션만 추천 , 다양한 장르 추천
Fairness (공정성) 특정 유저 그룹 차별 금지 인기 있는 아이템만 추천하면 소수 아이템 불이익
Explainability (설명 가능성) 왜 이걸 추천했는지 설명 “당신이 액션 영화를 좋아해서 추천했어요”

Recommend에 활용할 수 있는 정보 종류

  • Content Information (콘텐츠 정보)
    • 아이템 자체의 속성 정보
  • Collaborative Information (협업 정보)
    • 비슷한 취향의 사람들이 좋아한 것을 나도 좋아할 것이다.
    • 같은 아이템을 소비한 유저들은 서로 비슷한 취향
  • Social (Trust) Information (소셜 정보)
    • SNS 친구 관계, 팔로우 관계
    • 유저 - 유저 관계 + 유저 - 아이템 상호작용을 함께 활용
  • External Knowledge (외부 지식)
    • Knowledge Graph : 지식 그래프 활용
    • 텍스트 기반 지식

Basic Recommendation Methods

Content-Based Recommendation

핵심 아이디어 : 사용자가 과거에 좋아했던 아이템과 내용이 비슷한 아이템을 추천

  • Content = 아이템의 메타데이터
  • 작동 과정
    1. 유저의 과거 소비 아이템 -> 유저 프로필 벡터 추출
    2. 전체 아이템 풀 -> 각 아이템 프로필 벡터 추출
    3. 유저 프로필 <-> 아이템 프로필 유사도 측정
    4. 유사도 높은 아이템 추천

Item Profile Representation : 좋은 feature 선택이 핵심

  • 영화 : 상영시간보다 감독/배우가 더 좋은 피처
  • 뉴스 : 카테고리만으로 부족 -> TF/IDF 사용

TF-IDF 란?

TF (Term Frequency) : 단어 빈도 \(TF_{i,j} = \frac{f_{i,j}} {\max_{z} f_{z,j}}\)

  • 분자 : 뉴스에서 키워드가 등장한 횟수
  • 분모 : 해당 문서에서 가장 많이 나온 단어의 빈도 (정규화 용도)
    • 의미 : 이 문서에서 이 단어가 얼마나 자주 나오는가?

IDF (Inverse Document Frequency) : 역문서 빈도 \(IDF_i = \log \frac{N}{n_i}\)

  • N : 전체 뉴스 기사 수
  • n_i : 키워드 k가 등장한 문서 수
    • 의미 : 이 단어가 전체 문서에서 얼마나 희귀한가?

최종 TF-IDF 수식 \(w_{i,j} = TF_{i,j} \times IDF_i\)

User Profile Representation : 유저가 읽은 아이템들의 콘텐츠를 합산 \(w_{ic} = \frac{1}{k} \sum_{j=1}^{k} w_j\)

  • 유저 c가 읽은 k개 뉴스에서 키워드 k_i의 평균 가중치
  • 집계 방법 종류 :
    • 단순 평균, 가중 평균, Max Pooling, Linear Transformation

Utility Computation Recommendation

이 아이템을 추천할지 말지를 어떻게 결정하는가?

추천 결정 방법 2단계 과정

  1. 유저 프로필 c와 아치템 프로필 s의 유사도를 계산
  2. 유사도가 높은 순으로 상위 아이템 추천

Utility Function u(c, s) :

아이템 s가 유저 c에게 얼마나 유용한지를 나타내는 점수 \(u(c,s)=(ContentBasedProfile(c), Content(s))\)

\[u(c,s) = \cos(w_c,w_s) = \frac{w_c \cdot w_s} {\|w_c\|_2 \, \|w_s\|_2} = \frac{\sum_{i=1}^{K} w_{i,c} w_{i,s}} {\sqrt{\sum_{i=1}^{K} w_{i,c}^2}\sqrt{\sum_{i=1}^{K} w_{i,s}^2}}\]

Model-based Method

추천 결정 방법 : 추천을 이진 분류 (Binary Classification) 문제로 보기

  • 사용 가능한 모델 종류 : Bayesian Classifier, Decision Tree, Logistic Regression, Deep learning 등

예시) Naive Bayes Classifier

  • 훈련 데이터로 학습 하여 추천

    • 키워드들이 서로 독립적이라는 가정이 실제로는 연관이 있기에 한계 존재
    \[P(C_i \mid k_{1,j}, k_{2,j}, \ldots, k_{n,j}) = \frac{ P(C_i) \prod_x P(k_{x,j} \mid C_i) }{ \prod_x P(k_{x,j}) }\]

Content-Based Approach의 한계점

1. 콘텐츠 분석의 어려움

문제 설명
멀티미디어 데이터 텍스트는 쉽지만 이미지/동영상/음악은 특징 추출 어려움
품질 구분 불가 같은 키워드여도 잘 쓴 글 vs 못 쓴 글을 구분 못함

2. Overspecialization (과도한 특화 = 다양성 부족)

  • 항상 기존에 좋아하던 것만 추천
  • 새로운 장르 / 분야 추천 불가
  • filter bubble 현상 -> 세상이 좁아진다.

3. Cold-Start User Problem (신규 유저 문제)

  • 과거 이력이 없는 신규 유저 -> 프로필 생성 불가 -> 추천 불가
  • 어느 정도 아이템을 소비해야 추천이 가능해짐

CF-Based Recommendation

핵심 아이디어 : 아이템 내용이 아니라 다른 유저들의 행동을 활용해서 추천

  • Collaborative Filtering (CF) : 다른 유저들이 뭘 좋아했는지를 참고
    • User-based CF : 나랑 비슷한 유저가 좋아한 것
    • Item-based CF : 내가 좋아한 것과 비슷한 아이템

핵심 질문 2가지:

Q1. 비슷한 유저/아이템을 어떻게 찾을 것인가?

Q2. 아이템의 평점을 어떻게 예측하는가?

Data Format

CF의 입력 데이터 : N x M 평점 행렬

  • 행 : 각 유저의 평점 이력
  • 열 : 해당 아이템에 평점을 준 유저 목록
  • 빈칸 : 아직 평가 안 한 것으로 이것을 예측하는 것이 목표

Collaborative Filtering

User-Based CF

3단계 Process

Step 1. 나와 비슷한 유저(이웃) 찾기

  • 유저간 유사도 측정 방법 2가지

1. Pearson Correlation Coefficient (PCC) \(\mathrm{sim}(x,y) = \frac{ \sum_{s \in S_{xy}} (r_{x,s}-\bar r_x) (r_{y,s}-\bar r_y) }{ \sqrt{\sum_{s \in S_{xy}} (r_{x,s}-\bar r_x)^2} \sqrt{\sum_{s \in S_{xy}} (r_{y,s}-\bar r_y)^2} }\)

  • S_xy : x와 y 둘 다 평가한 아이템 집합
  • ˉx : 유저 x의 평균 평점
  • 평균을 뺀 후 상관관계 -> 평점 경향 차이 보정

2. Cosine Similarity \(\mathrm{sim}(x,y) = \cos(x,y) = \frac{ \sum_{s \in S_{xy}} r_{x,s}r_{y,s} }{ \sqrt{\sum_{s \in S_{xy}} r_{x,s}^{\,2}} \sqrt{\sum_{s \in S_{xy}} r_{y,s}^{\,2}} }\)

  • 평점 자체의 방향(각도)으로 비교
    • 평점 스케일 차이 보정 안 됨

Step 2. 이웃들의 평점으로 내 평점 예측

기본 방법 : 이웃 평점의 평균 \(r_{c,s} = \frac{1}{N} \sum_{c' \in \hat{C}} r_{c',s}\) 개선 방법

1. 유사도 가중 평균 \(r_{c,s} = \frac{ \sum_{c' \in \hat{C}} \mathrm{sim}(c,c') \, r_{c',s} }{ \sum_{c' \in \hat{C}} \mathrm{sim}(c,c') }\)

  • 나와 더 비슷한 이웃의 평점을 더 많이 반영

  • 덜 비슷한 이웃은 영향력을 낮춤

2. 평점 경향 차이 보정 (가장 정교한 방법) \(r_{c,s} = \bar r_c + \frac{ \sum_{c' \in \hat{C}} \mathrm{sim}(c,c') \left( r_{c',s} - \bar r_{c'} \right) }{ \sum_{c' \in \hat{C}} \mathrm{sim}(c,c') }\)

  • r_c : 내 평균 평점 (나는 평소에 어느 정도의 점수를 주는 사람인가)
  • (r_c’,s - r_c’) : 이웃이 이 아이템에 평균 대비 얼마나 더/덜 줬는가? (offset)

Step 3. 예측 평점이 높은 TOP-K 아이템 추천

최종 추천 방법 : 예측 평점이 높은 TOP-K 아이템을 추천

예시) 내 취향과 비슷한 u1, u2, u4가 봤는데 내가 안 본 영화들의 예상 별점을 계산해서 가장 높을 것 같은 것부터 추천

  • Cold-Start 문제 : 평점이 거의 없는 신규 유저는 이웃을 찾기 어려워 추천 품질이 낮아지는 문제 존재

Item-Based CF

3단계 Process

Step 1. 타겟 아이템과 비슷한 아이템 찾기

  • 같은 유저들이 함께 소비한 아이템

Step 2. 타겟 유저가 비슷한 아이템에 준 평점으로 예측

Step 3. 예측 평점 높은 Top-K 추천

CF의 3가지 중요 이슈

  • Cold-Start User 문제
    • User-based : 이 유저와 비슷한 유저를 찾는 것이 어렵다.
    • Item-based : 아이템 유사도는 이미 계산되어 있다.
  • 효율성
    • User-based는 계산량이 훨씬 많다.
  • 다양성
    • 다양한 유저 추천 가능
    • 내가 본 것만 비슷해서 Item-based는 다양성이 낮음.

Hybrid Approach

3가지의 Hybrid 방법이 존재

1. Content-based와 CF-based를 따로 돌리고 결과를 합침 \(\hat{r} = \alpha \hat{r}_{CF} + (1-\alpha)\hat{r}_{CB}\)

  • Alpha : CF 결과에 얼마나 가중치를 줄지 조저하는 파라미터
  • CF예측값과 Content-based 예측값의 선형 결합

둘 중 더 신뢰도 높은 추천 시스템 하나 선택도 괜찮다.

2. Content를 통한 협업

  • 평점 행렬이 너무 sparse(빈칸이 많다)
    • 공통으로 평가한 아이템이 적어서 유저 유사도 계산이 어렵다.

(1) Content-based 프로필로 이웃 찾기 보완

  • 평점 + Content 프로필 둘 다 활용해서 평점이 적어도 콘텐츠 취향이 비슷하면 이웃

(2) Content-based 예측값으로 빈칸 채우기

  • 평점 행렬의 빈칸 -> Content-based로 예측값 채우기
    • 더 풍부한 행렬로 CF 계산이 가능하다.

3. 차원 축소로 더 좋은 Content 프로필 만들기

  • 불필요한 feature, 노이즈
  • 모든 유저의 Content 프로필을 행렬로 모아서 차원 축소 (SVD 등) 적용
 모든 유저의 ContentBasedProfile 모음
    n × d 행렬

 SVD  차원 축소 적용
    n × k 행렬 (k << d)

 결과: CF-enhanced content profiles
    여러 유저의 협업 정보가 반영된 압축된 프로필

Evaluation of Recommender Systems

그렇다면 추천 시스템을 평가를 어떻게 할까?

평가 방법 3가지 : Prediction Accuracy, Top-N Recommendation Quality, Ranking Quality 가 존재

Prediction Accuracy

예측 평점 vs 실제 평점의 오차 측정

MAE (Mean Absolute Error) \(MAE = \frac{1}{N} \sum_{i=1}^{N} \left| \hat{r}_i - r_i \right|\)

  • 오차의 절댓값 평균
    • 평균적인 오차 크기를 알고 싶을 때 사용
  • 직관적으로 해석하기 쉽다.

MSE (Mean Squared Error) \(MSE = \frac{1}{N} \sum_{i=1}^{N} \left( \hat{r}_i - r_i \right)^2\)

  • 오차를 제곱해서 평균
    • 큰 실수를 특히 더 벌주고 싶을 때 사용
  • 큰 오차에 더 강한 페널티
  MAE MSE
계산 절댓값 평균 제곱 평균
이상치(outlier) 덜 민감 매우 민감
해석 직관적 단위가 제곱이라 해석 어려움
큰 오차 패널티 약함 강함

RMSE (Root Mean Squared Error) \(RMSE = \sqrt{ \frac{1}{N} \sum_{i=1}^{N} \left( \hat{r}_i-r_i \right)^2 } = \sqrt{MSE}\)

  • MSE에 루트를 씌운 것
    • 단위를 다시 원래 평점 스케일로 복원
Prediction Accuracy의 한계

평점 예측 오차가 낮다고 해서 좋은 추천 목록이 되는 것은 아니다.

평점 분포에 집중할 뿐, 순위/목록 품질은 별개 문제

Top-N Evaluation

Precision@K : TOP-K 추천 목록 중 실제로 관련 있는 아이템이 몇 %인가? \(\mathrm{Precision@K}(u) = \frac{ \left| Rec_u^K \cap Rel_u \right| }{K}\)

  • Rec : 유저 u에게 추천한 TOP-K 아이템
  • Rel : 유저 u가 실제로 좋아하는 아이템 집합

  • Limitation
    • 놓친 아이템을 고려 안 한다.
    • 순위 위치 고려 안 한다.

Recall@K : 유저가 실제로 좋아하는 것 중 TOP-K에 몇 %나 포함됐나? \(\mathrm{Recall@K}(u) = \frac{ \left| Rec_u^K \cap Rel_u \right| }{ \left| Rel_u \right| }\)

  • 분모 : 실제 좋아하는 아이템 수
    • Precision과의 차이
  • Limitation
    • K를 늘리면 무조건 높아진다.
    • 마찬가지로 순위 위치를 고려하지 않는다.

F1@K : Precision과 Recall의 균형 \(F1@K = \frac{ 2 \cdot Precision@K \cdot Recall@K }{ Precision@K + Recall@K }\)

HR@K : TOP-K 추천 목록에 관련 아이템이 하나라도 있으면 성공(1), 없으면 실패(0) \(HR@K(u) = \begin{cases} 1, & \text{if } Rec_u^K \cap Rel_u \neq \emptyset \\ 0, & \text{otherwise} \end{cases}\)

\[HR@K = \frac{1}{|U|} \sum_{u \in U} HR@K(u)\]
  • 추천 목록에 단 하나라도 관련 아이템이 있는 유저 비율

= 추천 시스템이 얼마나 많은 유저를 만족시키는가?

Rank-Based Evaluation

MR (Mean Rank) : 관련 아이템들이 추천 목록에서 평균 몇 번째에 위치하는가? \(MR(u) = \frac{1}{m} \sum_{j=1}^{m} r_j \qquad (\text{Lower is better } \downarrow)\)

  • r_j : 관련 아이템의 순위 위치
  • m : 관련 아이템 수

계산 예시)

추천 목록: [A, B, C, D, E]
실제 좋아하는 것: [B, D]

B의 순위 = 2번째
D의 순위 = 4번째

MR(u) = (2+4)/2 = 3
→ "관련 아이템이 평균 3위에 위치"
  • MR의 Limitation
    • 직관성이 낮다.
    • 이상치가 민감하다.
    • 선형 취급
      • 1위와 2위 차이와 101위와 102위 차이를 동일하게 본다.
    • 정규화가 없다.

MRR (Mean Reciprocal Rank) : 첫 번째로 등장하는 관련 아이템 순위의 역수 평균 : 얼마나 빨리 관련 아이템을 만나는가? \(RR(u) = \frac{1}{r_u}\)

\[MRR = \frac{1}{|U|} \sum_{u \in U} \frac{1}{r_u} \qquad (\text{Higher is better } \uparrow)\]
  • r_u : 추천 목록에서 첫 번째 관련 아이템의 순위
  • MRR의 한계
    • 오직 첫 번째 관련 아이템만 고려하기에 나머지는 무시된다.

nDCG : 전체 순위 목록의 품질 측정 + 상위 순위에 더 높은 가중치 부여

  • 단계별 공식

    • Step 1. DCG (Discounted Cumulative Gain) \(DCG@K = \sum_{i=1}^{K} \frac{2^{rel_i}-1} {\log_2(i+1)}\)

      • i 번째 아이템이 관련 있으면 1, 없으면 0
      • Discount factor : 순위가 낮을수록 가중치 감소
    • Step 2. IDCG (Ideal DCG)

      • 가장 이상적인 순서로 배열했을 때의 DCG
      • 관련 아이템을 모두 맨 앞에 배치할 때
    • Step 3. nDCG \(nDCG@K = \frac{DCG@K}{IDCG@K} \qquad (\text{Higher is better } \uparrow)\)

  • 의미 : 관련 아이템들이 상위권에 잘 배치되어 있는가?
    • MRR은 첫 번째 아이템만 본다면, nDCG는 여러 관련 아이템까지 모두 고려
    • Precision/Recall@K는 순위 위치는 무시한다면, nDCG는 위치까지 고려한다.
  • 한계
    • 이진 관련도만 지원하고 복잡하다.
지표 핵심 측정 여러 관련 아이템 고려? 위치 민감? 주요 단점
MR 관련 아이템 평균 순위 Yes Yes 이상치에 민감
MRR 첫 관련 아이템 순위의 역수 No 강하게 나머지 관련 아이템 무시
nDCG 전체 순위 품질 Yes Yes 복잡함

요약

단일 지표만으로는 추천 품질을 완전히 측정할 수 없다.

MR, MRR, nDCG 등 여러 지표를 함께 사용해야 한다.


MF-Based Recommendation

핵심 아이디어 : 평점 행렬 R을 두 개의 작은 행렬로 분해 \(R \approx UV^T \quad (\text{or } P \times Q^T)\)

행렬 의미 크기
R 원본 평점 행렬 n×m (유저×아이템)
P (U) User Latent Matrix n×k
Q^T (V^T) Item Latent Matrix k×m
\[\hat{r}_{ui} = p_u^T q_i\]
  • 유저 u의 잠재 벡터와 아이템 i의 잠재 벡터의 내적
    • 예측 평점
  • 유저와 아이템이 같은 공간에 있을 때 (벡터가 비슷할수록) 유저가 그 아이템을 좋아한다고 판단

왜 MF가 CF인가?

P와 Q는 독립적으로 학습되지 않는다.

  • 유저 벡터 p_u 학습 방식
    • 유저 u가 상호작용한 아이템들의 벡터(q_i)를 기반으로 학습
    • 그 아이템 벡터들은 다른 유저들과 공유됨.
  • 아이템 벡터 q_i 학습 방식
    • 아이템 i와 상호작용한 유저들의 벡터(p_u)를 기반으로 학습
    • 유저 벡터들은 다른 아이템들과 공유됨.

SVD in Recommender Systems

SVD (Singular Value Decomposition)

  • 행렬을 3개 행렬의 곱으로 분해 \(R≈UΣVT\)
행렬 크기 의미
U n×d 유저 잠재 행렬
Σ d×d 특이값 대각행렬 (중요도)
V^T d×m 아이템 잠재 행렬
  • n = 유저 수, m = 아이템 수, d = 잠재 차원 수

3가지 핵심 질문

Q1. 각 행렬의 행/열은 무엇을 의미하는가?

Q2. 왜 SVD가 추천 시스템에서 작동하는가?

Q3. 어떻게 추천하는가?

Full SVD

\[R \approx U \Sigma V^T\] \[U \in \mathbb{R}^{n \times n}, \quad \Sigma \in \mathbb{R}^{n \times m}, \quad V \in \mathbb{R}^{m \times m}\]
  • RR^T 의 뜻 : User-User Matrix
    • 유저 i의 평점 벡터와 유저 j의 평점 벡터의 내적
    • 두 유저의 평점 패턴이 얼마나 비슷한가
\[R \;(n \times m) \;\times\; R^T \;(m \times n) = RR^T \;(n \times n)\]
  • R^TR의 뜻 : Item-Item Matrix
    • 아이템 i와 아이템 j를 같이 평가한 패턴
\[R^T \;(m \times n) \;\times\; R \;(n \times m) = R^T R \;(m \times m)\]

Q1. 각 행렬이 의미하는 것? 에 대한 답변

  • U : 유저들의 구매 패턴을 반영하는 벡터(축)
  • V : 아이템들의 소비 패턴을 반영하는 벡터(축)

Q2. 왜 SVD가 Recommendation System에서 작동하는가? 에 대한 답변

  • 유저와 아이템이 유저-아이템 상호작용 기반으로 잘 표현되기 때문
  • User latent space : 비슷한 취향의 유저들이 같은 공간에 가깝게 위치
  • Item latent space : 비슷한 성격의 아이템들이 같은 공간에 가깝게 위치

Q3. 어떻게 추천하는가? 에 대한 답변

  • 유저 u의 잠재 벡터 : U의 u 번째 항
  • 아이템 i의 잠재 벡터 : V^T의 i번째 열
    • 예측 평점 = 유저 벡터 와 아이템 벡터의 내적
    • 같은 방향을 가리킬수록 유저가 좋아하는 아이템

Pure SVD

개념 : SVD를 Recommend에서 가장 단순하게 적용한 방법

Step 1. 빈칸을 0 으로 채우기

  • 평점 행렬 R에 빈칸이 많다. (sparse)
  • SVD는 빈칸 없는 완전한 행렬에만 적용이 가능하다.

Step 2. SVD 분해 (Closed-form solution)

R → U × Σ × V^T
  • 훈련 과정 없이 수학적으로 바로 분해

Step 3. 상위 d개 벡터로만 재구성 (Truncated SVD)

  • Σ에서 가장 큰 d개 특이값만 선택

Pure SVD의 한계

  • Low Personalization

    • 전체 평점 행렬의 전역 패턴을 포착하기에 대체로 사람들이 좋아하는 것에 찾는 것을 잘한다.

    • 각 유저의 개인적인 취향, 특정 아이템의 고유한 특성, 유저마다 주는 편향 반영 X

  • 빈칸 = 무조건 부정적 신호로 처리

    • 아이템을 모르고 노출이 안된 것일수도 있는데, 부정적 신호로 처리

MF for Better Personalization

  1. 잠재 벡터를 직접 학습
  • Pure SVD : 고정된 R 행렬을 수학적으로 분해하기에 유연하지 않음.

  • P와 Q를 직접 학습 파라미터로 설정

    • 관측된 평점에 맞게 최적화
    • 유저별 / 아이템별 특성을 더 잘 반영하도록 함.
  1. 현실의 평점에 영향 주는 요소들을 반영
요소 설명 예시
User bias 어떤 유저는 항상 후하게/짜게 줌 항상 5점 주는 사람
Item bias 어떤 아이템은 평균적으로 높게/낮게 평가됨 블록버스터 영화
Implicit feedback 과거 상호작용 자체가 취향을 암시 구매 기록, 클릭 기록
  • 목적 함수 \(\min_{P,Q} \sum_{(u,i)\in O} \left( r_{ui} - p_u^T q_i \right)^2 + \lambda \left( \|p_u\|^2 + \|q_i\|^2 \right)\)
의미
$(r_{ui} - p_u^T q_i)^2 $ 실제 평점과 예측 평점의 오차 (MSE)
$\lambda(|p_u|^2 + |q_i|^2) $ L2 정규화 (과적합 방지)
$\mathcal{O} $ 관측된 평점만 학습에 사용
  • 예측
\[\hat{r}_{ui} = p_u^T q_i\]

두 가지의 차이점

  PureSVD 기본 MF
학습 방법 수학적 분해 (no training) 경사하강법으로 직접 학습
빈칸 처리 0으로 채움 관측된 것만 학습
개인화 낮음 높음

Biased MF

핵심 = 상호 작용 + 편향 (Bias) \(\hat{r}_{ui} = \mu + b_u + b_i + p_u^T q_i\)

의미
$\mu $ 전체 평균 평점 (Global mean)
$b_u $ 유저 편향: 이 유저가 평균보다 후하게/짜게 주는 정도
$b_i $ 아이템 편향: 이 아이템이 평균보다 높게/낮게 평가되는 정도
$p_u^T q_i $ 개인화된 상호작용: 유저와 아이템의 실제 취향 궁합

SVD++ : Biased MF + Implicit Feedback 추가 \(\hat{r}_{ui} = \mu + b_u + b_i + \left( p_u + \frac{1}{\sqrt{|N(u)|}} \sum_{j \in N(u)} y_j \right)^T q_i\)

의미
$\mu + b_u + b_i $ 기존 Biased MF의 편향
$p_u $ 기존 유저 잠재 벡터
$N(u) $ 유저 u가 상호작용한 아이템 집합
$y_j $ 아이템 j의 implicit embedding (학습 가능)
$\frac{1}{\sqrt{ N(u)

Implicit Feedback : 클릭,구매, 시청 기록 등 내 취향에 대한 강력한 신호

목적 함수 비교

  1. 기본 MF
\[\min_{P,Q} \sum_{(u,i)\in O} \left( r_{ui} - p_u^T q_i \right)^2 + \lambda \left( \|p_u\|^2 + \|q_i\|^2 \right)\]
  1. Biased MF (bias항 추가)
\[\min \sum_{(u,i)\in O} \left( r_{ui} - \mu - b_u - b_i - p_u^T q_i \right)^2 + \lambda \left( b_u^2 + b_i^2 + \|p_u\|^2 + \|q_i\|^2 \right)\]
  1. SVD++
\[\min \sum_{(u,i)\in O} \left( r_{ui} - \mu - b_u - b_i - \left( p_u + \frac{1}{\sqrt{|N(u)|}} \sum_{j\in N(u)} y_j \right)^T q_i \right)^2\]

One-Class Collaborative Filtering (OCCF)

Multi-class 설정 : 1~5점 같은 정확한 평점 수치를 예측하는 것

3가지의 문제점이 존재

1. 추천 시스템 목표와 불일치 (Misalignment)

  • 실제 추천 목표 : 이 유저가 좋아할 아이템을 Top-K에 넣기
  • 평점 예측 목표 : 정확한 점수 맞추기
    • 이 둘은 항상 같은게 아니다.

2. Data Sparsity (데이터 희소성)

  • Explicit Feedback (1~5점 평점)
    • 유저가 직접 별점을 눌러야 하고, 실제로 평점을 주는 사람은 극소수
    • 행렬이 매우 sparse 하다.

3. Complex Rating Biases (복잡한 편향)

  • 어떤 유저는 항상 후학, 어떤 유저는 항상 짜게 줌
  • 어떤 아이템은 평균적으로 높게/낮게 평가됨

One-Class Collaborative Filtering (OCCF)

OCCF : 정확한 평점 대신 좋아하는지 아닌지만 예측 (이진 분류)

3가지의 장점이 존재

1. 추천 목표와 잘 맞음

  • 좋아할 아이템을 찾기 (굳이 몇 점인지 알 필요가 없다.)

2. 데이터 희소성 완화

  • Implicit Feedback (클릭/시청/구매) : 자동으로 수집되기에 덜 sparse
  • 데이터가 훨씬 풍부하다

3. 빈칸 해석의 도전

  • Negative : 유저가 의도적으로 안 본 것 (싫어함)
  • Potentially positive : 그냥 모르거나 노출이 안 된 것 (좋아할 수도 있음.)

Weighted regularized MF (WRMF)

One-Class 데이터 표현

  • 상호작용한 아이템 -> 1, 상호작용 안 한 아이템 -> 0
    • (1~5점이 아닌 0 또는 1만)
\[\min_{P,Q,X} \sum_{u,i} c_{ui} \left( x_{ui} - p_u^T q_i \right)^2 + \lambda \left( \|p_u\|^2 + \|q_i\|^2 \right)\]

기본 MF 와의 차이

  기본 MF WRMF
학습 데이터 관측된 평점만 모든 유저-아이템 쌍
목표값 1~5점 0 또는 1
빈칸 처리 무시 0으로 포함 + 가중치 조절

Weighting Scheme : 가중치의 설정 방법

  • 긍정 상호작용(1)의 가중치 \(cui​=1(항상 고정)\)

  • 부정/빈칸(0)의 가중치 3가지 방법

    • Uniform : 모든 빈칸에 동일한 낮은 가중치 부여
    • User-oriented : 유저가 많이 상호작용할수록 안 본것은 진짜 안 좋아할 가능성이 높기에 빈칸 가중치를 높임

    • Item-oriented : 아이템이 적게 소비될수록 유저들이 안 본게 싫어서가 아니라 몰라서일 수 있기에 가중치를 낮춤.

Point-wise Training : 각 유저 아이템 쌍의 평점/상호작용을 개별적으로 예측

  • Multi-Class 목적 함수:
\[\min_{P,Q} \sum_{(u,i)\in O} \left( r_{ui} -\mu -b_u -b_i -p_u^T q_i \right)^2 + \lambda \left( b_u^2+b_i^2+\|p_u\|^2+\|q_i\|^2 \right)\]
  • One-Class 목적 함수:
\[\min_{P,Q,X} \sum_{u,i} c_{ui} \left( x_{ui} - p_u^T q_i \right)^2 + \lambda \left( \|p_u\|^2+\|q_i\|^2 \right)\]

Bayesian pariwise ranking (BPR)

Bayesian Personalized Ranking Point-wise의 한계를 극복한 Pair-wise 학습 방법

Pair-wise : 본 것 vs 안 본 것 -> 상대적인 순서를 학습

\[\max_{\Theta} \sum_{(u,i,j)} \ln \sigma \left( x_{ui} - x_{uj} \right) - \lambda \|\Theta\|^2\]
  • 핵심 가정 : 유저가 본 것 > 안 본 것
  • 예측 방식은 WRMF와 동일

MF-based Recommendation 요약

방법 데이터 개인화 학습 손실 목표
PureSVD Explicit ⚠️ 낮음 없음 (수학적 분해) - 전역 재구성
Biased MF Explicit Point-wise MSE 평점 예측
SVD++ Explicit+Implicit Point-wise MSE 평점 예측
WRMF Implicit Point-wise Weighted MSE 선호도 예측
BPR-MF Implicit Pair-wise BPR 순위

번외 : 요즘의 발전방향

OCCF + BPR Loss + 더 강력한 표현력 + 추가 정보

1. NeuMF [WWW’17]

  • MLP로 표현력 강화
  • 기존 MF에서 비선형 관계도 표현이 가능하다.
  • 구조 :
    • GMF Layer : 기존 MF 방식
    • MLP Layer : 여러 층의 신경망
    • 두 결과를 합쳐서 최종 예측
  • 입력 : 유저 / 아이템을 one-hot 벡터로 표현

2. NGCF[SIGIR’19] : GNN으로 이웃 정보 반영

  • NeuMF의 한계 : 유저-아이템 직접 관계만 본다. 이웃의 영향을 못 봄
  • Grpah Neural Network사용
    • 여러 층을 통해 이웃의 이웃까지 정보 전파

3. LightGCN[SIGIR’20]: 불필요한 부분 제거

  • NGCF의 한계 : 변환 행렬, 비선형 활성화 등 불필요한 요소가 많아서 복잡하고 오히려 성능이 저하됨.
  • LightGCN : 핵심만 남기고 단순화
    • 이웃의 임베딩을 Normalized Sum으로만 집계
    • 각 레이어의 결과를 weighted sum으로 최종 표현

Data Sparsity

Data Sparsity Problem

  • CF는 평점 행렬에 의존하는데, 95% 이상이 빈칸이다.
  • Sparsity가 심할수록 성능은 떨어진다.
    • 데이터가 희박할수록 추천 품질이 급격히 하락
  • 문제점이 되는 이유
    • 낮은 정확도, Cold-Start 문제 (평점이 거의 없는 신규 유저/아이템)
    • 낮은 커버리지

평가 안된 아이템들 (Unrated Items)을 활용해서 추천을 개선할 수 없을까?

User’s Preference

  Pre-use (사용 전) Post-use (사용 후)
의미 써보기 전 기대감 써본 후 실제 만족도
예시 “이 영화 재밌어 보여!” 보고 나서 별점
데이터 추론 필요 평점으로 관측 가능

Rated vs Unrated 아이템 해석

  • 평가된 아이템 (Rated) : Pre-use 선호도가 높았기 때문에 보게 된다.
  • 평가 안 된 아이템 (Unrated) : Pre-use 선호도가 낮았기 때문에 안 봤을 가능성이 크다.

(Un)Interesting Items

핵심 질문 : 평가 안된 아이템 (Unrated) = 전부 흥미가 없을까?

  • 전체 아이템 집합 I
    • 흥미로운 아이템 : 유저가 관심 있는 것
      • 선호 아이템 : 실제로 좋아하는 것
        • 평가된 아이템 : 실제로 본 것
      • 아직 모르는 것 : 흥미롭지만 미 접촉
    • 흥미없는 아이템 : 진자 관심 없는 것
  • Unrated 아이템의 2가지 가능성
    • Pre-use 선호도가 높다. : 그냥 아직 모르는 것
      • 나중에 추천해주면 좋아할 수 있다.
    • Pre-use 선호도가 낮다. : 진짜 흥미없는 것
      • 추천해도 싫어할 것
      • 유전의 부정적 선호도를 알려주는 신호

Uninteresting Items : 유저의 부정적 선호도 학습에 활용 가능

Uninteresting Items를 활용하는 방법

1. 추천에 활용 (긍정 + 부정에 모두 학습)

  • 흥미로운 것과 흥미없는 것을 함께 학습하여 유저의 전체적인 취향을 파악

2. 추천 후보에서 제외

  • Uninteresting Items를 추천 목록에서 아예 빼버림

  • 싫어할 것이 확실한 건 처음부터 걸러낸다.

    • Step1. 평점 행렬 -> Pre-use 선호도 행렬 변환

    • Step2. 빈칸의 Pre-use 선호도 추론
    • Step3. Zero-injected Matrix Z 구성

그러면 Uninteresting Items을 어떻게 찾냐?

Uninteresting Items 식별 방법

규칙 1. 평가된 아이템 -> Pre-use 선호도 높다.

  • 평점이 1,5점이든 일단 봤다는 것 자체 = Pre-use 관심 있었다.
  • 모두 Pre-use = 1 (High)로 처리

규칙 2. 평가 안 된 아이템 -> 추론 필요

  • CF 방법으로 추론 :
    • 비슷한 유저들이 이거에 관심 있었는가?
    • 비슷한 유저들도 안봤으면 Uninteresting

Zero-Injection

개념 : Uninteresting Items에 0을 삽입해서 평점 행렬을 더 풍부하게 만드는 방법

3단계 전체 과정

Step 1. 평점 행렬 -> Observed Pre-Use 행렬 변환

  • 평점 점수 상관없이 봤으면 1 (Pre-use High)
  • 안 봤으면 빈칸 (모름)

Step 2. Pre-use 선호도 추론

  • OCCF 방법 (예: WRMF) 으로 빈칸의 Pre-Use 선호도 추론

Step 3. Uninteresting Items 식별 후 0 주입

  • 임계값으로 Uninteresting 을 판별

Zero-Injection의 효과

  1. User-Based / Item-based 에서 둘 다 효과적이다.
  • User-based CF에서 공통 아이템이 없어 유사도 계산이 불가할 때, 유사도 계산이 가능해진다.
  • Item-based CF에서 훨씬 많은 공통신호로 비교가 가능
  1. 모든 CF 방법의 성능을 향상시킨다.