🎬 추천 시스템과 SVD 완전 정복
“추천 시스템은 수많은 아이템 중에서
나에게 꼭 맞는 것을 골라주는 기술이다.”
그리고 그 핵심에는 SVD(특이값 분해) 가 있다.
학습 목표
핵심 목표
- 추천 시스템의 원리를 이해한다.
- 추천 시스템에 사용되는 기술(콘텐츠 기반, 협업 필터링, 행렬 분해)을 구분할 수 있다.
- SVD가 추천 시스템에 어떻게 적용되는지 수학적으로 이해한다.
최소 달성 목표
- “아, 추천시스템에는 이런 방법이 존재하는구나!” 를 알기
추가적으로 이해하기
- 평점 데이터를 행렬(Matrix) 형태로 표현하는 이유
- 행렬 분해(Matrix Factorization) 가 추천 시스템으로 이어지는 이유
- 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 |
|---|
| 사용자1 | 5 | 3 | ? |
| 사용자2 | 4 | ? | 2 |
| 사용자3 | ? | 1 | 4 |
- 행(Row): 사용자
- 열(Column): 아이템(영화)
- 값(Value): 평점
- 대부분의 칸이 비어 있음 → 희소 행렬(Sparse Matrix)
추천 시스템의 목표는 비어 있는 값(?)을 예측하는 것이다.
즉, “이 사용자가 이 영화를 본다면 몇 점을 줄까?”를 예측한다.
4. 행렬 분해의 아이디어
평점 행렬 R을 두 개의 더 작은 행렬로 분해한다.
R≈P×QT
- P: 사용자 잠재 요인 행렬 (사용자 수 × 잠재 차원 수)
- Q: 아이템 잠재 요인 행렬 (아이템 수 × 잠재 차원 수)
예측 평점 = 사용자 벡터 × 아이템 벡터의 내적(dot product)
예를 들어,
- 사용자 A: [0.9, 0.1] (액션을 좋아하고 로맨스는 싫어함)
- 영화 B: [0.8, 0.2] (액션성 높고 로맨스 낮음)
→ 두 벡터의 방향이 비슷하므로 예측 평점이 높다.
즉, 사람과 아이템을 같은 좌표 공간에 배치해 가까운 점끼리 추천한다.
5. SVD (Singular Value Decomposition, 특이값 분해)
SVD는 임의의 행렬을 세 개의 행렬로 나누는 수학적 기법이다.
A=U×Σ×VT
| 기호 | 의미 |
|---|
| U | 사용자 방향(왼쪽 특이벡터) |
| Σ (Sigma) | 특이값(각 요인의 중요도) |
| VT | 아이템 방향(오른쪽 특이벡터) |
핵심 아이디어는,
복잡한 데이터 구조를 단순한 축(요인)으로 나눠 표현한다는 것이다.
SVD를 직관적으로 이해하기
데이터를 하나의 공간에 점처럼 찍어 놓았다고 생각해보자.
이 점들이 넓게 퍼져 있는 방향이 있다면,
그 방향이 바로 “데이터의 가장 중요한 축”이다.
SVD는 데이터를 이런 축으로 정렬시키는 과정이다.
- VT: 데이터를 주요 방향으로 회전
- Σ : 각 방향으로 데이터를 늘리거나 줄임
- U : 다시 원래 공간으로 회전
즉, “회전 → 크기 조정 → 회전” 과정을 통해
데이터의 본질적인 구조를 파악한다.
SVD의 구성요소 심화 설명
-
U (왼쪽 특이벡터 행렬)
- 각 열이 사용자들의 잠재 특징을 의미한다.
- 서로 직교(orthogonal)하며 독립된 취향 축을 형성한다.
-
Σ (특이값 대각 행렬)
- 각 대각 원소는 데이터의 “중요도”를 나타내는 양수이다.
- 값이 클수록 해당 요인이 데이터의 구조에 큰 영향을 미친다.
- 예를 들어 Σ₁이 Σ₂보다 크다면, 첫 번째 요인이 더 중요한 의미를 가진다.
-
V (오른쪽 특이벡터 행렬)
- 아이템들의 잠재 특징을 나타낸다.
- 마찬가지로 직교하며, 아이템 간 독립된 특성을 설명한다.
SVD의 특징
| 구분 | 설명 |
|---|
| 차원 축소 | 데이터의 복잡도를 줄이고 핵심 요인만 남김 |
| 노이즈 제거 | 불필요한 변동(잡음)을 제거 |
| 잠재 요인 추출 | 사용자와 아이템의 숨은 특성을 찾아냄 |
| 해석 용이성 | 각 축(요인)이 데이터의 의미를 설명할 수 있음 |
6. Truncated SVD (절단된 SVD)
현실의 데이터는 너무 커서 모든 특이값을 사용할 수 없다.
그래서 가장 중요한 상위 K개의 특이값만 남긴다.
A≈Uk×Σk×VkT
- Uk,Σk,Vk: 상위 k개의 요인만 포함
- 나머지 요인은 버려서 계산 효율 향상
효과
- 계산 속도 향상
- 노이즈 감소
- 일반화 성능 향상
비유:
거대한 데이터를 “핵심만 남기고 압축하는 것”과 같다.
7. 추천 시스템에서의 SVD 적용 과정
- 사용자-아이템 평점 행렬 R을 만든다.
- R을 SVD로 분해한다.
- 상위 k개의 요인만 남긴다 (Truncated SVD).
- 근사 행렬 R'을 재구성한다.
- R'에서 비어 있던 평점을 예측한다.
- 높은 예측 평점을 가진 아이템을 추천한다.
예측 공식 (개념적 표현)
예측평점=사용자벡터×아이템벡터
사용자와 아이템의 벡터가 비슷할수록 높은 평점이 예측된다.
8. SVD의 작동 흐름 요약
| 단계 | 설명 |
|---|
| 1 | 사용자-아이템 평점 행렬 생성 |
| 2 | SVD로 행렬 분해 (U,Σ,VT도출) |
| 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,
즉 데이터 속에서 인간의 패턴을 찾아내는 수학의 힘이 자리하고 있다.