핵심 인사이트 (3줄 요약)

  1. 본질: SVD(특이값 분해)는 모든 직사각형 행렬을 세 개의 행렬($U, \Sigma, V^T$)로 완벽하게 쪼개는 수학적 기법이며, ALS(교대 최소 제곱법)는 이 분해 과정에서 발생하는 막대한 연산량과 빈칸(희소성) 문제를 해결하기 위해 꼼수를 부린 최적화 알고리즘이다.
  2. 가치: 넷플릭스 영화 추천 시스템에서, SVD는 사용자 행렬(U)과 아이템 행렬(V)을 찾아내는 가장 이상적인 정답지지만, 실무 데이터는 99%가 빈칸(결측치)이라 SVD가 멈춰버리므로 이를 억지로 풀게 만드는 ALS가 실서비스의 진짜 주인공이 된다.
  3. 판단 포인트: ALS는 병렬 처리(Spark, Hadoop)가 완벽하게 지원되므로 빅데이터 환경에서 압도적인 연산 속도를 자랑하나, "사용자가 클릭하지 않은 빈칸이 과연 진짜 싫어해서 안 누른 건지, 몰라서 안 누른 건지"를 모델링하는 암묵적 피드백(Implicit Feedback) 처리 설계가 추천 성능을 좌우한다.

Ⅰ. 개요 및 필요성

행렬 분해(Matrix Factorization)는 텅 빈 거대 행렬을 작고 꽉 찬 두 개의 행렬로 쪼개는 아이디어다. 그렇다면 컴퓨터에게 "어떻게 쪼갤래?"라고 물었을 때 가장 먼저 나오는 선형 대수학의 정석적인 대답이 바로 **SVD (Singular Value Decomposition, 특이값 분해)**다. 어떤 모양의 행렬이든 무조건 세 조각으로 예쁘게 찢어준다.

하지만 치명적인 문제가 발생했다. SVD 공식은 행렬에 단 하나의 빈칸(Null)이라도 있으면 계산이 돌아가지 않는 깐깐한 녀석이었다. 넷플릭스 데이터의 99%는 빈칸인데 말이다. 이 빈칸을 0으로 채우자니 컴퓨터 메모리가 터져버렸다. 이 꽉 막힌 SVD의 한계를 부수고, 빈칸은 그냥 무시한 채 존재하는 데이터만 가지고 두 행렬(User와 Item)을 번갈아 가며(Alternating) 대충 끼워 맞추는 속도전의 천재, **ALS(Alternating Least Squares)**가 탄생했다.

📢 섹션 요약 비유: SVD가 구멍이 하나라도 난 천은 꿰매지 못하는 결벽증 재단사라면, ALS는 구멍 난 곳은 대충 무시하고 남아있는 천 조각들만 이리저리 번갈아 기워가며 가장 그럴듯한 옷(추천)을 뚝딱 만들어내는 실전형 재단사다.


Ⅱ. 아키텍처 및 핵심 원리

SVD의 완벽한 수학 공식에서 출발하여, ALS가 어떻게 현실과 타협했는지 아키텍처를 비교해 보자.

┌────────────────────────────────────────────────────────┐
│             [ SVD와 ALS의 수학적 구조 및 타협 과정 ]           │
├────────────────────────────────────────────────────────┤
│ 1. SVD (특이값 분해)의 수학적 이상향                    │
│    R(M×N) = U(유저) × Σ(중요도 가중치) × V^T(아이템)       │
│    - 조건: 행렬 R에 빈칸(Null)이 없어야 함 (현실에선 불가능!)  │
│                                                        │
│ 2. ALS (교대 최소 제곱법)의 현실적 타협                   │
│    R ≈ P(유저 행렬) × Q(아이템 행렬)^T                   │
│    - 목표: P와 Q를 곱한 값이 실제 평점 R과 가장 비슷해지도록 만듦│
│                                                        │
│ 3. ALS의 동작 방식 (Alternating, 교대로 풀기)           │
│    ① Q(아이템)를 그냥 상수로 고정함 -> P(유저)를 계산 (회귀분석)│
│    ② P(유저)를 상수로 고정함 -> Q(아이템)를 계산 (회귀분석)     │
│    ③ 오차가 최소화될 때까지 ①, ②를 수백 번 반복(핑퐁)!     │
└────────────────────────────────────────────────────────┘
  1. Truncated SVD: 원래 SVD는 수학적으로 완벽하게 분해하지만, 추천 시스템에서는 '노이즈(쓰레기 정보)'를 날려버리기 위해 가장 중요한 상위 K개의 특이값($\Sigma$)만 남기고 나머지는 쳐내는 Truncated SVD를 쓴다 (차원 축소 효과).
  2. ALS의 교대(Alternating) 마법: $P \times Q$를 한 번에 풀려면 수학적으로 비선형 문제가 되어 풀리지 않는다. 하지만 둘 중 하나를 고정(상수 취급)해 버리면 그냥 1차 방정식(선형 회귀, OLS) 문제가 되어 너무나 쉽게 풀린다. P 풀고, Q 풀고, 다시 P 풀고... 이렇게 핑퐁을 치면 마법처럼 최적해를 찾아간다.

📢 섹션 요약 비유: 미지수 X와 Y를 한 번에 맞추는 건 불가능하지만, Y를 '3'이라고 일단 찍어두고(고정) X를 찾은 다음, 다시 그 X를 바탕으로 진짜 Y를 찾아가는 과정을 반복하며 정답을 좁혀가는 스무고개 게임이다.


Ⅲ. 비교 및 연결

추천 시스템의 행렬 분해 최적화 알고리즘의 양대 산맥인 SGD와 ALS를 비교한다.

비교 항목SGD (확률적 경사 하강법)ALS (교대 최소 제곱법)
작동 원리오차의 기울기(미분)를 구해 조금씩 산을 내려감두 행렬을 번갈아 고정하며 회귀 방정식(OLS)을 풂
병렬 처리 (분산 연산)순차적으로 계산해야 해서 병렬 처리가 까다로움유저/아이템 행렬이 독립적이라 완벽한 병렬 처리 가능!
희소 데이터(빈칸) 처리빈칸이 많아도 무난하게 작동빈칸을 매우 빠르게 처리
암묵적 피드백(클릭 등) 처리상대적으로 취약클릭/조회수 등 암묵적 피드백 모델링(Hu et al.)에 최고!
플랫폼 최적화딥러닝 프레임워크 (PyTorch, TF)Apache Spark (빅데이터 분산 처리의 표준)

빅데이터 실무에서 ALS가 킹으로 군림하는 이유는 Spark MLlib에 내장되어 있어 수백 대의 분산 서버에서 병렬로 연산을 돌릴 수 있기 때문이다.

📢 섹션 요약 비유: SGD가 한 명의 등산객이 손전등을 들고 조심조심 산(오차)을 내려가는 방식이라면, ALS는 100대의 헬리콥터(병렬 처리)를 띄워 산의 지형을 한 번에 스캔하고 최적의 길을 찾아내는 대규모 인해전술이다.


Ⅳ. 실무 적용 및 기술사 판단

실무 적용 시나리오: 음원 스트리밍 서비스에서 "이 사람이 이 노래를 좋아한다(별점)"는 명시적 피드백은 거의 없다. 대부분 그냥 음악을 플레이(클릭)할 뿐이다. 이것을 '암묵적 피드백(Implicit Feedback)'이라고 한다. Spark ALS 모델을 띄워, 유저의 '노래 재생 횟수'를 '신뢰도(Confidence)' 점수로 변환하여 유저-노래 행렬을 학습시키고, 내일 이 유저가 좋아할 만한 새로운 인디 밴드 노래를 홈 화면에 띄워준다.

기술사 판단 포인트 (Trade-off): ALS 아키텍처 설계 시 **'Negative Sample(부정적 피드백)의 해석'**이 추천 시스템 성능을 지배한다.

  1. 사용자가 클릭하지 않은 빈칸(0)은 과연 '싫어해서' 안 들은 것일까, 아니면 이 노래가 있는지 '몰라서' 안 들은 것일까?
  2. 빈칸을 전부 '싫어함(Negative)'으로 간주하고 학습시키면 모델이 심하게 찌그러진다. 따라서 기술사는 유저가 한 번도 클릭하지 않은 수많은 0(결측치) 중에서 일부만 랜덤하게 샘플링하여 "이건 아마 싫어하는 걸 거야"라고 모델에 살짝 섞어주는 네거티브 샘플링(Negative Sampling) 비율(하이퍼파라미터)을 예술적으로 튜닝해야 한다.

📢 섹션 요약 비유: 내가 어제 파인애플 피자를 안 먹은 이유는, 파인애플 피자가 극도로 싫어서일 수도 있고, 메뉴판에 파인애플 피자가 있는 줄 몰라서일 수도 있다. 알고리즘에게 이 두 가지 핑계의 비율을 적절히 속여서(네거티브 샘플링) 가르치는 것이 기술사의 노하우다.


Ⅴ. 기대효과 및 결론

SVD가 행렬 분해의 완벽한 '수학적 이데아'를 제시했다면, ALS는 이 이데아를 멱살 잡고 더럽고 거친 '현실의 엑셀 표(빅데이터)'로 끌고 내려온 실용주의의 극치다. 아파치 스파크(Spark)라는 거대한 분산 처리 엔진과 ALS의 결합은 현대 IT 기업들이 실시간으로 수억 명의 취향을 계산할 수 있게 한 일등 공신이다.

결론적으로 추천 시스템은 데이터의 빈칸(희소성)과의 끝없는 싸움이다. 기술사는 단순히 행렬을 쪼개는 SVD의 수학 공식을 외우는 것을 넘어, 암묵적 피드백(클릭, 스크롤 시간) 속에 숨겨진 고객의 '신뢰도(Confidence)'를 가중치로 치환해 내는 ALS 아키텍처의 비즈니스적 맥락을 정확히 이해하고 MLOps 파이프라인에 녹여내야 한다.

📢 섹션 요약 비유: SVD는 실험실 안에서 완벽한 레고 조립법을 연구하는 과학자고, ALS는 공사장 한가운데서 먼지를 마셔가며 부족한 부품(빈칸)을 철사로 묶어가며 기어코 로봇을 조립해 내는 현장의 에이스 엔지니어다.

📌 관련 개념 맵

  • 상위 개념: 추천 시스템 (Recommendation System), 행렬 분해 (Matrix Factorization)
  • 하위 개념: 암묵적 피드백 (Implicit Feedback), 잠재 요인 (Latent Factor), 네거티브 샘플링
  • 연결 개념: Apache Spark (MLlib), SGD (경사 하강법), 차원 축소 (Dimensionality Reduction)

👶 어린이를 위한 3줄 비유 설명

  1. 퍼즐을 맞추는데 중간중간 조각이 엄청나게 많이 빠져 있어서 원래 무슨 그림인지 도저히 알 수가 없어요.
  2. SVD라는 완벽주의자는 "조각이 다 없으면 난 안 맞춰!"라고 화를 내고 집에 가버려요.
  3. 하지만 ALS라는 똑똑한 친구는, 빠진 조각은 대충 무시하고 남은 조각들만 요리조리 번갈아 맞춰가면서 "이건 100% 공룡 그림이야!"라고 정답을 찾아낸답니다!