본문 바로가기
데이터 과학 수학

넷플릭스는 어떻게 내 취향을 아는가, 특이값 분해(SVD)의 원리

by dexien 2026. 4. 22.

넷플릭스를 켜면 "회원님이 좋아할 것 같은 영화"가 뜹니다. 제가 본 영화 목록을 넷플릭스가 기억하고 있다는 건 알겠는데, 어떻게 제가 아직 보지 않은 영화를 좋아할지 예측하는 걸까요. 단순히 "비슷한 장르"를 추천하는 수준이 아닙니다. 본 적도 없는 감독의 영화, 전혀 다른 장르인데 왠지 취향에 맞는 작품이 뜨곤 합니다.

그 중심에 특이값 분해(SVD, Singular Value Decomposition)가 있습니다. 행렬을 분해해서 사용자와 영화 사이의 숨겨진 관계를 찾아내는 방법입니다. 선형대수학 개념이지만, 이걸 이해하면 추천 시스템이 어떻게 "취향"을 수학으로 표현하는지 보입니다. 오늘은 그 원리를 따라가 보겠습니다.

 

넷플릭스 추천 알고리즘의 핵심인 SVD 특이값 분해 원리를 보여주는 행렬 분해 인포그래픽
넷플릭스 알고리즘의 심장, 특이값 분해(SVD)의 원리

문제 — 비어있는 평점 행렬

추천 시스템의 출발점은 사용자-아이템 행렬입니다. 행은 사용자, 열은 영화, 각 칸에는 평점이 들어갑니다. 그런데 현실에서 이 행렬은 대부분 비어있습니다. 사용자 한 명이 넷플릭스의 모든 영화를 볼 수는 없으니까요.

        영화A  영화B  영화C  영화D  영화E
사용자1   5     3     ?     ?     1
사용자2   ?     ?     4     2     ?
사용자3   1     ?     ?     5     3
사용자4   ?     4     3     ?     ?

? = 아직 보지 않은 영화 → 이 값을 예측하는 게 목표

추천 시스템의 목표는 이 물음표를 채우는 겁니다. 사용자 1이 영화 C를 본다면 몇 점을 줄지 예측해서, 높은 점수가 예상되는 영화를 추천합니다. SVD는 이 비어있는 행렬을 수학적으로 채우는 방법 중 하나입니다.

사용자와 영화로 구성된 평점 행렬에서 비어있는 칸을 SVD로 예측하는 추천 시스템 원리
추천 시스템의 목표는 사용자-영화 행렬의 비어있는 칸을 예측해 높은 점수가 예상되는 영화를 추천하는 것이다


SVD란 무엇인가 — 행렬을 세 개로 쪼개기

SVD(Singular Value Decomposition)는 하나의 행렬 M을 세 개의 행렬 곱으로 분해하는 방법입니다. 수식으로 쓰면 이렇습니다.

M = U × Σ × V^T

M: 원본 행렬 (사용자 × 영화)
U: 사용자 행렬 (사용자 × 잠재 요인)
Σ: 특이값 행렬 (잠재 요인의 중요도)
V^T: 영화 행렬 (잠재 요인 × 영화)

분해 자체는 수학적으로 항상 가능합니다. 어떤 행렬이든 이 세 가지로 쪼갤 수 있습니다. 중요한 건 이 분해가 단순한 수학 조작이 아니라 의미를 가진다는 점입니다. 각 행렬이 무엇을 나타내는지 이해하면 SVD가 왜 추천에 효과적인지 보입니다.


세 행렬이 의미하는 것

U, Σ, V^T 각각이 무엇을 나타내는지가 SVD의 핵심입니다.

U (사용자 행렬) — 각 사용자가 잠재 요인에 얼마나 반응하는지를 나타냅니다. 사용자1의 행이 [0.8, 0.1, 0.6]이라면 첫 번째와 세 번째 잠재 요인에 강하게 반응한다는 뜻입니다.

Σ (특이값 행렬) — 대각선에 특이값(Singular Value)이 들어있는 행렬입니다. 특이값이 클수록 해당 잠재 요인이 데이터를 많이 설명합니다. 보통 앞쪽 몇 개의 특이값이 전체 정보의 대부분을 담고 있습니다.

V^T (영화 행렬) — 각 영화가 잠재 요인에 얼마나 해당하는지를 나타냅니다. 어떤 영화의 열이 [0.9, 0.0, 0.2]라면 첫 번째 잠재 요인에 강하게 해당하는 영화라는 뜻입니다.

세 행렬이 담은 정보를 정리하면 이렇습니다.

행렬 크기 의미
U 사용자 × 잠재요인 각 사용자의 취향 벡터
Σ 잠재요인 × 잠재요인 각 잠재 요인의 중요도
V^T 잠재요인 × 영화 각 영화의 특성 벡터

SVD 특이값 분해에서 M행렬이 U 시그마 V전치 세 행렬의 곱으로 분해되는 구조를 보여주는 다이어그램
SVD는 원본 행렬 M을 사용자 취향 행렬 U, 특이값 행렬 Σ, 영화 특성 행렬 V^T로 분해한다


잠재 요인 — 수학이 스스로 찾아낸 취향

SVD에서 가장 흥미로운 부분이 잠재 요인(Latent Factor)입니다. 우리가 "이 요인은 액션 영화 선호도야"라고 정의하는 게 아닙니다. 수학이 평점 데이터에서 스스로 패턴을 찾아내서 만들어내는 개념입니다.

예를 들어 학습이 끝나고 보니 첫 번째 잠재 요인이 액션/모험을 좋아하는 성향과 상관관계가 높고, 두 번째는 로맨스 선호도와 연관이 있는 것으로 나타날 수 있습니다. 명시적으로 "장르"를 알려주지 않았는데 평점 패턴만으로 이런 구조를 찾아낸 겁니다.

이게 SVD가 강력한 이유입니다. 사람이 생각하지 못한 숨겨진 패턴까지 포착합니다. "누아르 감성을 좋아하면서 동시에 철학적 주제를 선호하는 사용자" 같은 복잡한 취향도 잠재 요인의 조합으로 표현됩니다.


실제 숫자로 따라가보기

간단한 예시로 실제 계산 과정을 따라가 보겠습니다. 3명의 사용자와 4개의 영화로 구성된 평점 행렬이 있다고 가정합니다.

원본 행렬 M (3×4):
      영화A  영화B  영화C  영화D
Alice    5     3     0     1
Bob      4     0     0     1
Carol    1     1     0     5

SVD 분해 후 잠재 요인 2개만 사용 (근사):
Alice의 취향 벡터: [0.91, -0.17] → 요인1 강함
Bob의 취향 벡터:  [0.76, -0.12] → 요인1 강함
Carol의 취향 벡터: [0.32,  0.89] → 요인2 강함

영화A의 특성 벡터: [0.84,  0.22] → 요인1 해당
영화D의 특성 벡터: [0.21,  0.79] → 요인2 해당

→ Alice와 Bob의 취향이 비슷 → 서로의 평점으로 예측 가능

Alice가 아직 보지 않은 영화의 예측 평점은 Alice의 취향 벡터와 해당 영화의 특성 벡터를 내적(dot product)해서 구합니다. 벡터 방향이 비슷할수록 높은 점수가 나옵니다. 이게 수학적으로 "취향이 맞는 영화"를 찾는 방법입니다.

 

SVD 잠재 요인 공간에서 사용자와 영화가 벡터로 표현되어 취향이 비슷한 사용자와 영화가 가깝게 위치하는 다이어그램
잠재 요인 공간에서 사용자와 영화의 거리가 가까울수록 취향이 일치해 높은 평점이 예측된다


넷플릭스 프라이즈 — SVD가 세상에 알려진 계기

2006년 넷플릭스는 흥미로운 공모전을 열었습니다. 기존 추천 알고리즘보다 10% 이상 성능을 높이는 팀에게 100만 달러를 주겠다는 겁니다. 넷플릭스 프라이즈(Netflix Prize)입니다. 전 세계 수천 개 팀이 참가했고 3년 만에 우승팀이 나왔습니다.

그 우승 알고리즘의 핵심이 SVD 기반의 행렬 분해였습니다. 특히 Simon Funk가 공개한 방법이 큰 영향을 줬는데, 비어있는 칸을 포함한 전체 행렬을 SVD로 근사하는 대신 실제 평점이 있는 칸만 사용해서 U와 V를 경사하강법으로 학습하는 방식이었습니다. 이게 Funk SVD입니다.

Funk SVD 핵심 아이디어:

예측 평점 = U[사용자] · V[영화] (내적)
오차 = 실제 평점 - 예측 평점
목표 = 오차² 합계를 최소화

→ 경사하강법으로 U와 V를 반복 업데이트
→ 학습이 끝나면 비어있는 칸도 예측 가능

경사하강법으로 행렬을 학습한다는 아이디어, 이 연재에서 계속 나온 개념과 같습니다. 미분으로 방향을 찾고, 반복해서 오차를 줄이는 구조입니다. SVD와 경사하강법이 여기서 만납니다.


SVD의 한계와 현대 추천 시스템

SVD가 강력하지만 한계도 있습니다. 가장 큰 문제는 새로운 사용자나 새로운 영화입니다. 평점 데이터가 전혀 없는 신규 사용자는 취향 벡터를 만들 수 없습니다. 이걸 콜드 스타트(Cold Start) 문제라고 합니다.

또 SVD는 사용자가 언제 봤는지, 어떤 기기로 봤는지, 몇 분 시청하다 껐는지 같은 맥락 정보를 활용하지 못합니다. 현대 넷플릭스 추천 시스템은 SVD를 기반으로 하되 여기에 딥러닝, 시계열 분석, 콘텍스트 정보를 결합한 훨씬 복잡한 구조를 씁니다.

그럼에도 SVD가 중요한 이유는 "취향을 벡터로 표현한다"는 아이디어 자체가 현대 AI 전반에 쓰이기 때문입니다. Word2Vec이 단어를 벡터로, BERT가 문장을 벡터로 표현하는 것도 같은 철학입니다. 넷플릭스 추천에서 시작한 개념이 자연어 처리, 이미지 인식, 광고 타겟팅 전반으로 이어집니다. SVD는 그 출발점 중 하나입니다.


소개 및 문의 · 개인정보처리방침 · 면책조항

© 2026 블로그 이름