추천 시스템과 SVD 완전 정복

JERRY·2025년 10월 30일
0

Deep Learning

목록 보기
34/35

🎬 추천 시스템과 SVD 완전 정복

“추천 시스템은 수많은 아이템 중에서
나에게 꼭 맞는 것을 골라주는 기술이다.”
그리고 그 핵심에는 SVD(특이값 분해) 가 있다.


학습 목표

핵심 목표

  • 추천 시스템의 원리를 이해한다.
  • 추천 시스템에 사용되는 기술(콘텐츠 기반, 협업 필터링, 행렬 분해)을 구분할 수 있다.
  • SVD가 추천 시스템에 어떻게 적용되는지 수학적으로 이해한다.

최소 달성 목표

  • “아, 추천시스템에는 이런 방법이 존재하는구나!” 를 알기

추가적으로 이해하기

  1. 평점 데이터를 행렬(Matrix) 형태로 표현하는 이유
  2. 행렬 분해(Matrix Factorization) 가 추천 시스템으로 이어지는 이유
  3. SVD(특이값 분해) 가 행렬 분해에서 어떤 역할을 하는지

1. 추천 시스템이란?

추천 시스템은 사용자의 행동, 취향, 평가 데이터를 바탕으로
“사용자가 좋아할 만한 콘텐츠를 예측하는 시스템”이다.

예시

서비스추천 예시
넷플릭스내가 좋아할 만한 영화 추천
유튜브내가 자주 보는 영상과 비슷한 콘텐츠 추천
쿠팡내가 살만한 상품 추천
멜론내가 자주 듣는 곡과 비슷한 음악 추천

2. 추천 시스템의 세 가지 방식

(1) 콘텐츠 기반 필터링 (Content-Based Filtering)

“아이템의 속성이 비슷하면 추천한다.”

영화의 장르, 감독, 배우, 키워드 등 콘텐츠 속성(feature) 을 벡터로 표현하고,
내가 좋아한 아이템과 속성이 유사한 다른 아이템을 추천한다.

예시
“로맨틱 코미디”를 좋아하는 사용자에게 다른 로맨틱 코미디 추천.

유사도 계산:

  • 코사인 유사도(Cosine Similarity) 사용
  • 값이 1에 가까울수록 매우 유사
  • 0이면 관련 없음
  • -1이면 반대 성향

(2) 협업 필터링 (Collaborative Filtering)

“비슷한 사람 혹은 비슷한 아이템의 행동 패턴을 이용한다.”

콘텐츠의 속성이 아니라, 사람들의 평점/행동 패턴을 기반으로 추천한다.

예시

  • 나와 취향이 비슷한 사용자가 좋아한 아이템을 나에게 추천
  • 영화 A를 본 사람이 영화 B도 자주 봤다면, A를 본 사용자에게 B 추천

종류

구분설명
사용자 기반나와 비슷한 사람들의 행동 패턴을 이용
아이템 기반같은 패턴으로 평가된 아이템끼리 묶어서 추천

(3) 행렬 분해 (Matrix Factorization)

협업 필터링을 수학적으로 표현한 방법으로,
사용자와 아이템 간의 관계를 행렬(Matrix) 형태로 나타내고
그 행렬을 더 작은 차원으로 분해한다.


3. 평점 행렬 (Rating Matrix)

예를 들어, 다음과 같은 영화 평점 데이터가 있다고 하자.

사용자영화 A영화 B영화 C
사용자153?
사용자24?2
사용자3?14
  • 행(Row): 사용자
  • 열(Column): 아이템(영화)
  • 값(Value): 평점
  • 대부분의 칸이 비어 있음 → 희소 행렬(Sparse Matrix)

추천 시스템의 목표는 비어 있는 값(?)을 예측하는 것이다.
즉, “이 사용자가 이 영화를 본다면 몇 점을 줄까?”를 예측한다.


4. 행렬 분해의 아이디어

평점 행렬 R을 두 개의 더 작은 행렬로 분해한다.

RP×QTR ≈ P × Q^T

  • P: 사용자 잠재 요인 행렬 (사용자 수 × 잠재 차원 수)
  • Q: 아이템 잠재 요인 행렬 (아이템 수 × 잠재 차원 수)

예측 평점 = 사용자 벡터 × 아이템 벡터의 내적(dot product)

예를 들어,

  • 사용자 A: [0.9, 0.1] (액션을 좋아하고 로맨스는 싫어함)
  • 영화 B: [0.8, 0.2] (액션성 높고 로맨스 낮음)
    → 두 벡터의 방향이 비슷하므로 예측 평점이 높다.

즉, 사람과 아이템을 같은 좌표 공간에 배치해 가까운 점끼리 추천한다.


5. SVD (Singular Value Decomposition, 특이값 분해)

SVD는 임의의 행렬을 세 개의 행렬로 나누는 수학적 기법이다.

A=U×Σ×VTA = U × Σ × V^T

기호의미
UU사용자 방향(왼쪽 특이벡터)
ΣΣ (Sigma)특이값(각 요인의 중요도)
VTV^T아이템 방향(오른쪽 특이벡터)

핵심 아이디어는,
복잡한 데이터 구조를 단순한 축(요인)으로 나눠 표현한다는 것이다.


SVD를 직관적으로 이해하기

데이터를 하나의 공간에 점처럼 찍어 놓았다고 생각해보자.
이 점들이 넓게 퍼져 있는 방향이 있다면,
그 방향이 바로 “데이터의 가장 중요한 축”이다.

SVD는 데이터를 이런 축으로 정렬시키는 과정이다.

  1. VTV^T: 데이터를 주요 방향으로 회전
  2. ΣΣ : 각 방향으로 데이터를 늘리거나 줄임
  3. UU : 다시 원래 공간으로 회전

즉, “회전 → 크기 조정 → 회전” 과정을 통해
데이터의 본질적인 구조를 파악한다.


SVD의 구성요소 심화 설명

  • U (왼쪽 특이벡터 행렬)

    • 각 열이 사용자들의 잠재 특징을 의미한다.
    • 서로 직교(orthogonal)하며 독립된 취향 축을 형성한다.
  • Σ (특이값 대각 행렬)

    • 각 대각 원소는 데이터의 “중요도”를 나타내는 양수이다.
    • 값이 클수록 해당 요인이 데이터의 구조에 큰 영향을 미친다.
    • 예를 들어 Σ₁이 Σ₂보다 크다면, 첫 번째 요인이 더 중요한 의미를 가진다.
  • V (오른쪽 특이벡터 행렬)

    • 아이템들의 잠재 특징을 나타낸다.
    • 마찬가지로 직교하며, 아이템 간 독립된 특성을 설명한다.

SVD의 특징

구분설명
차원 축소데이터의 복잡도를 줄이고 핵심 요인만 남김
노이즈 제거불필요한 변동(잡음)을 제거
잠재 요인 추출사용자와 아이템의 숨은 특성을 찾아냄
해석 용이성각 축(요인)이 데이터의 의미를 설명할 수 있음

6. Truncated SVD (절단된 SVD)

현실의 데이터는 너무 커서 모든 특이값을 사용할 수 없다.
그래서 가장 중요한 상위 K개의 특이값만 남긴다.

AUk×Σk×VkTA ≈ U_k × Σ_k × V_k^T

  • Uk,Σk,VkU_k, Σ_k, V_k: 상위 k개의 요인만 포함
  • 나머지 요인은 버려서 계산 효율 향상

효과

  • 계산 속도 향상
  • 노이즈 감소
  • 일반화 성능 향상

비유:
거대한 데이터를 “핵심만 남기고 압축하는 것”과 같다.


7. 추천 시스템에서의 SVD 적용 과정

  1. 사용자-아이템 평점 행렬 R을 만든다.
  2. R을 SVD로 분해한다.
  3. 상위 k개의 요인만 남긴다 (Truncated SVD).
  4. 근사 행렬 R'을 재구성한다.
  5. R'에서 비어 있던 평점을 예측한다.
  6. 높은 예측 평점을 가진 아이템을 추천한다.

예측 공식 (개념적 표현)

예측평점=사용자벡터×아이템벡터예측 평점 = 사용자 벡터 × 아이템 벡터

사용자와 아이템의 벡터가 비슷할수록 높은 평점이 예측된다.


8. SVD의 작동 흐름 요약

단계설명
1사용자-아이템 평점 행렬 생성
2SVD로 행렬 분해 (U,Σ,VTU, Σ, V^T도출)
3상위 K개의 요인만 선택 (Truncated SVD)
4근사 행렬 재구성
5비어 있는 평점 예측
6추천 결과 생성

9. 실제 서비스 적용 구조

단계설명예시
후보 생성추천할 만한 후보 아이템을 빠르게 추출협업 필터링, SVD 등
랭킹후보 아이템을 클릭/선호 확률에 따라 정렬딥러닝 기반 모델 (DeepFM, Transformer 등)
평가추천이 잘 되었는지 측정Precision@K, Recall@K 등

10. SVD의 효과와 한계

장점

  • 희소한 데이터에서도 강력한 패턴 추출 가능
  • 계산 효율적 (Truncated SVD 사용 시)
  • 잠재 요인을 통해 “왜 추천했는가”를 설명 가능

한계

  • 결측값이 많은 데이터에서는 단순 SVD 적용이 어렵다
  • 시간 변화(트렌드)를 반영하지 못한다
  • 새로운 사용자나 아이템(콜드 스타트) 문제 발생

보완 방법

  • 결측값을 고려한 MF(Matrix Factorization) 알고리즘 사용
  • 시간 가중치(Time-aware MF)
  • 콘텐츠 기반 정보와 결합 (Hybrid Recommendation)

11. SVD의 실제 응용 예시

  • 영화 추천: Netflix, Watcha 등
  • 음악 추천: Melon, Spotify
  • 텍스트 분석 (LSA): 문서-단어 행렬을 SVD로 분해하여 단어 의미 분석
  • 이미지 압축: 상위 특이값만 남겨도 시각적으로 큰 손실 없이 압축 가능

12. 전체 요약

개념설명
콘텐츠 기반아이템의 속성 기반 추천
협업 필터링사용자-아이템 행동 기반 추천
행렬 분해평점 행렬을 잠재 요인으로 분해
SVD복잡한 행렬을 핵심 요인으로 분해
Truncated SVD상위 요인만 남겨 효율적 학습
결과비어 있는 평점을 예측해 맞춤형 추천 수행

13. 핵심 문장 요약

SVD는 복잡한 데이터 속에서
사용자와 아이템의 숨은 패턴을 찾아내고,
비어 있는 평점을 예측하는 수학적 엔진이다.


참고 자료

  • Angelo Yeo 블로그 – SVD의 직관적 이해
  • Darkpgmr 블로그 – 추천 시스템 기초
  • NumPy 공식 문서 – SVD 함수 사용법
  • Netflix Tech Blog – 추천 알고리즘 사례
  • 모두의연구소 Modulabs – CTR 기반 추천 시스템

마무리

추천 시스템은 단순히 “비슷한 영화를 추천하는 기술”이 아니다.
그 안에는 수학, 통계, 인공지능이 결합된 ‘취향 예측 과학’ 이 있다.
그리고 그 중심에는 바로 SVD,
데이터 속에서 인간의 패턴을 찾아내는 수학의 힘이 자리하고 있다.


0개의 댓글