개인화 추천 시스템 설계: CF·콘텐츠 기반·하이브리드·행렬 분해
Collaborative Filtering, Content-Based Filtering, Matrix Factorization을 결합해 추천 후보 생성·랭킹·서빙을 설계하는 방법
2026-08-14 · 최초 발행 2024-04-29
추천 결과는 후보 생성부터 피드백까지 이어진다
추천 시스템은 사용자 경험과 매출에 직접 영향을 주는 개인화 엔진이다. 이 글에서는 Collaborative Filtering, Content-Based Filtering, Hybrid Models, Matrix Factorization이라는 네 축을 중심으로 데이터 흐름, 평가 지표, 서빙 구조와 운영 조건을 정리한다.
Collaborative Filtering(CF)은 사용자의 행동에서 유사성을 추정하는 방식이다. 메모리 기반 접근은 user/item-based kNN으로 구현할 수 있고, 모델 기반 접근에는 행렬분해와 인수분해 기법이 포함된다. 도메인 지식 없이도 잠재 취향을 포착할 수 있지만, 콜드 스타트와 희소성 문제, 동적 행동 반영의 지연을 고려해야 한다.
Content-Based Filtering(CBF)은 아이템과 사용자의 콘텐츠를 비교한다. 텍스트, 메타데이터, 임베딩을 활용해 유사도를 산출하므로 신규 아이템 콜드 스타트를 완화하고 추천 근거를 해석하기 좋다. 반면 피처 품질에 크게 좌우되며, 사용자가 이미 선호하던 범위 안에만 머무르는 과전문화(overspecialization)가 생길 수 있다.
Hybrid Models는 CF와 CBF를 결합한다. 가중 합, 스위칭, 스태킹(메타 모델) 같은 전략을 적용할 수 있으며, 후보 생성(retrieval) 단계에는 CF/ANN을 두고 랭킹 단계에서 CBF와 학습 기반 점수를 결합하는 구성이 가능하다.
Matrix Factorization(MF)은 사용자-아이템 행렬을 잠재 요인(latent factors)으로 분해한다. SVD, ALS, BPR 등이 여기에 속한다. 명시적 평점뿐 아니라 조회, 클릭, 재생 시간 같은 암묵적 피드백을 다룰 때는 손실 함수, 정규화, 가중치 설계가 핵심이 된다.
모델 밖에서 결정되는 추천 품질
추천 모델은 데이터 파이프라인과 피처 스토어 위에서 작동한다. 이벤트 로그, 카탈로그, 프로필을 수집·정제하고 스키마를 관리해야 하며, 특징 엔지니어링과 버전 관리도 필요하다. 원자적 업서트(upsert), 타임트래블/TTL, 지연시간 요구에 따른 오프라인·온라인 피처 이중화가 이 계층의 조건이다.
후보 생성에는 ANN, item-item CF, popularity priors를 사용할 수 있다. 랭킹에서는 MF 점수, CBF 임베딩, 학습-to-rank(GBDT/NN)를 조합한다. 이때 정확도만이 아니라 다양성, 신규성, 비즈니스 제약인 노출 한도를 동시에 최적화 대상으로 둔다.
서빙 계층에는 온라인 피처 조회, 모델 아티팩트 로딩, 저지연 캐시 전략이 필요하다. 장애 상황에서는 popularity 또는 최근성을 이용한 폴백이 동작해야 한다. 최종 재랭킹에서는 탐색-이용 균형, 공정성·신뢰도 규칙, 빈발 노출 억제를 반영한다.
평가와 개선은 오프라인과 온라인에서 나뉜다. 오프라인에서는 Recall@K, NDCG@K, MAP, Calibration을 확인하고, 온라인에서는 CTR/CVR/LTV, P95 지연시간, 커버리지를 본다. 데이터 드리프트와 노출편향을 관측하면서 카나리 배포와 A/B 테스트로 반복 개선한다.
개인화 데이터에는 최소 수집, 가명화, 목적 외 사용 금지 원칙이 적용돼야 한다. 접근 통제와 감사 로그를 남기고 모델·피처 수준의 권한을 분리한다. 편향과 차별 리스크를 점검하며 개인정보보호법/GDPR 등의 규정 준수 절차를 운영 흐름에 포함한다.
선택지별 성격과 운영 부담
| 방법 | 성능(정확도) | 확장성 | 일관성 | 안정성 | 운영 편의 |
|---|---|---|---|---|---|
| 메모리 기반 CF | 중 | 중하 | 중 | 중 | 상 |
| Content-Based | 중 | 상 | 상 | 중상 | 중 |
| Matrix Factorization | 중상 | 상 | 중 | 중상 | 중 |
| Hybrid | 상 | 중상 | 중 | 중 | 중하 |
일관성은 최신 행동을 얼마나 반영하는지와 점수 변동성 사이의 균형으로 본다. 실제 수준은 캐시와 피처 재계산 주기 같은 하위 시스템 구성에 따라 달라진다.
피처 검증과 지연시간 폴백을 포함한 흐름
피처 스토어에서는 이벤트를 idempotent하게 처리하고 업서트의 원자성을 보장하며, 버전 태깅으로 읽기와 쓰기를 분리한다. 모델 아티팩트는 서빙 버전을 고정한 뒤 카나리 비율을 조절하고, 실패하면 자동 롤백할 수 있어야 한다. 캐시 키에는 버전을 포함하고 TTL/인터벌을 조정하며, 재계산과 캐시 무효화 순서를 보장한다.
Implicit ALS로 행렬 분해 모델을 학습하는 예시
환경은 Python 3.10+, numpy 1.26+, scipy 1.11+, implicit 0.7+이다.
설치
- pip install numpy scipy implicit
import numpy as np
import scipy.sparse as sp
from implicit.als import AlternatingLeastSquares
# 1) 샘플 상호작용 데이터 구성 (user_id, item_id, weight)
interactions = np.array([
[0, 0, 1.0], [0, 1, 2.0],
[1, 1, 1.0], [1, 2, 3.0],
[2, 0, 1.0], [2, 2, 1.0],
], dtype=np.float32)
n_users = int(interactions[:,0].max() + 1)
n_items = int(interactions[:,1].max() + 1)
rows = interactions[:,0].astype(int)
cols = interactions[:,1].astype(int)
data = interactions[:,2]
# implicit ALS는 아이템-유저 CSR 입력 권장
user_item = sp.coo_matrix((data, (rows, cols)), shape=(n_users, n_items)).tocsr()
item_user = user_item.T.tocsr()
# 2) 모델 설정 및 학습
# alpha는 암묵적 피드백 가중치, regularization은 과적합 방지
model = AlternatingLeastSquares(factors=32, regularization=0.1, iterations=20)
# 내부 최적화는 아이템-유저 행렬 사용
model.fit(item_user)
# 3) 사용자별 추천 (이미 소비한 아이템 제외)
user_id = 0
recommended = model.recommend(user_id, user_item[user_id], N=5, filter_already_liked_items=True)
print("Recommendations for user", user_id, "=>", recommended)
# 4) 아이템-아이템 유사 추천 (콘텐트 정보 부재 시 유사 아이템)
item_id = 1
similar_items = model.similar_items(item_id, N=5)
print("Similar items to", item_id, "=>", similar_items)
신규 아이템은 CBF 임베딩 기반 후보에 편입하고 최소 노출 보장 규칙을 병행해 콜드 스타트를 완화할 수 있다. 최신 행동은 증분 학습 또는 주기적 재학습과 warm-start 초기화로 반영한다. 지연시간 예산은 후보 생성 515ms, 스코어링·재랭킹 1025ms이며 P95 < 50ms를 목표로 둔다.
서비스 유형에 따른 조합
전자상거래에서는 item-item CF/ANN과 인기·신규 가중을 후보 생성에 결합하고, MF와 가격·재고·마진 피처를 학습-to-rank에 사용한다. PDP 유사상품, 장바구니 크로스셀, 홈피드 개인화가 해당 시나리오다.
미디어와 스트리밍에서는 사용자 세션 기반 시퀀스 피처에 MF/CBF 임베딩을 결합하고, 다양성과 피로도를 재랭킹에서 제어한다. 다음 청취/시청, 주간 믹스, 장르 확장 탐색에 적용할 수 있다.
뉴스와 커뮤니티는 신속한 CBF 텍스트 임베딩(다국어 모델)과 효율적인 노출 제어가 필요하다. 클릭베이트 억제 규칙을 두고 트렌딩+개인화 혼합 피드, 주제 구독을 구성한다.
채용과 마켓플레이스에서는 역량·스킬 기반 CBF와 MF를 묶어 양면시장 밸런싱 및 품질 필터를 적용한다. 후보자-공고 매칭과 정합도 기반 메시지 추천이 대표적인 활용 영역이다.
측정 가능한 결과와 확장 순서
CTR +1030%, CVR +210%, ARPU/LTV +515%를 기대할 수 있다. 카탈로그 커버리지는 +2050%이고 롱테일 소비 증가도 기대 효과에 포함된다. P95 지연시간 < 50ms를 유지하면서 QPS 증가에 선형 확장성을 확보하는 것이 목표다.
사용자 만족도와 체류시간을 개선하고 신규 콘텐츠의 발견성을 높일 수 있으며, 사업 규칙을 반영하기 쉬워지고 운영 거버넌스도 명확해진다. 검증은 오프라인에서 NDCG@K, Recall@K, Coverage/Diversity 지표를 함께 확인한 뒤, 온라인에서 품질·성능·안정성 다중 지표 대시보드로 카나리→A/B→전면 배포 순으로 진행한다.
초기에는 CBF+item-CF로 단기 품질을 확보하고 콜드 스타트를 완화한다. 이후 MF와 피처 스토어를 도입해 성능과 확장성을 안정화하고, 하이브리드 랭킹·재랭킹, 온라인 피드백 루프, 거버넌스 체계를 고도화한다.