Skip to main content

이 가이드 사용 방법

** 이 교육 자료는 Claude Code (또는 Cursor)와 함께 사용합니다.** 이 모듈에서는 Gold 테이블의 사용자 프로필 데이터를 활용하여 개인화 콘텐츠 추천 모델을 개발하고 배포합니다.

학습 목표

  • Feature Engineering: Gold 테이블에서 ML 피처 추출
  • ALS 협업 필터링: 사용자-콘텐츠 상호작용 기반 추천 모델
  • MLflow Tracking: 실험 관리, 하이퍼파라미터 비교
  • Model Registry: Unity Catalog에 모델 등록 및 버전 관리
  • Model Serving: 서빙 엔드포인트 배포 및 추론
  • Vector Search: 콘텐츠 임베딩 기반 유사도 추천

아키텍처

┌──────────────┐  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐
│ Gold Tables │  │ Feature   │  │ ML Model   │  │ Model    │
│       │───→│ Engineering │───→│ Training   │───→│ Serving   │
│ user_profiles│  │ 피처 추출  │  │ ALS + MLflow │  │ 엔드포인트  │
│ viewing_logs │  │ 학습 데이터  │  │ 실험 관리  │  │ 실시간 추론 │
│ content_rank │  │       │  │       │  │       │
└──────────────┘  └──────────────┘  └──────────────┘  └──────────────┘

                   ┌────────┴────────┐
                   │ MLflow     │
                   │ Tracking    │
                   │ Registry (UC) │
                   └─────────────────┘

Step 1: 콘텐츠 메타데이터 테이블 생성

Claude에게 요청하기

개인화 추천을 위한 콘텐츠 메타데이터 테이블을 만들어줘.

테이블: gold.content_metadata
레코드 수: 500개

컬럼:
- content_id: 고유 ID (content_001 ~ content_500)
- title: 콘텐츠 제목 (한국어 - 드라마, 예능, 뉴스 등 실제 프로그램 느낌)
- content_type: live_tv, vod, app, fasttv
- channel_or_app: 채널명/앱명
- genre: 장르 (drama, entertainment, news, sports, movie, kids, documentary)
- sub_genre: 세부 장르 (로맨스, 액션, 시사, 스포츠하이라이트 등)
- description: 콘텐츠 설명 (2~3문장, 한국어) - 임베딩에 사용될 텍스트
- target_audience: 타겟 시청층 (family, young_adult, male_30s 등)
- language: 언어 (ko, en, ja)
- release_year: 출시년도
- rating: 평점 (1.0 ~ 5.0)
- tags: 키워드 태그 (콤마 구분: "로맨스,20대,트렌디")

description을 현실적으로 작성해줘. 장르별 분포와 샘플 5건을 보여줘.

Step 2: 사용자-콘텐츠 상호작용 매트릭스 생성

Claude에게 요청하기

ALS 추천 모델 학습을 위한 사용자-콘텐츠 상호작용 매트릭스를 만들어줘.

타겟: gold.user_content_interactions

소스: silver.viewing_logs_ctas + gold.content_metadata

로직:
1. viewing_logs에서 (device_id, user_profile_id, channel_or_app, genre) 조합으로 집계
2. 콘텐츠 메타데이터와 매핑 (channel_or_app + genre → content_id)
3. 상호작용 점수 계산 (implicit feedback):
  - total_views: 시청 횟수
  - total_minutes: 총 시청 시간
  - avg_completion_rate: 평균 완료율
  - interaction_score = total_views * 0.3 + total_minutes * 0.3 + avg_completion_rate * 100 * 0.4

4. user_id를 정수 인덱스로 변환 (ALS 입력용)
5. content_id를 정수 인덱스로 변환

결과 컬럼:
- user_idx (INT), content_idx (INT)
- device_id, user_profile_id, content_id
- total_views, total_minutes, avg_completion_rate
- interaction_score

생성 후 상호작용 매트릭스의 밀도(sparsity), 사용자당 평균 상호작용 수 등 통계를 보여줘.

Step 3: ALS 추천 모델 학습 (MLflow Tracking)

Claude에게 요청하기

ALS (Alternating Least Squares) 협업 필터링 모델을 학습해줘.
MLflow로 실험을 관리하고 여러 하이퍼파라미터를 비교할거야.

=== MLflow 실험 설정 ===
실험 이름: /{catalog}/content_recommendation

=== 데이터 준비 ===
gold.user_content_interactions에서:
- Train (80%) / Test (20%) 분할
- 분할 기준: 사용자별 랜덤 (동일 사용자의 상호작용이 양쪽에 섞이도록)

=== ALS 모델 학습 (3가지 설정 비교) ===

Run 1: 기본 설정
 - rank=10, maxIter=10, regParam=0.01

Run 2: 높은 차원
 - rank=50, maxIter=15, regParam=0.01

Run 3: 강한 정규화
 - rank=30, maxIter=15, regParam=0.1

각 Run에서 MLflow 로깅:
- 파라미터: rank, maxIter, regParam, alpha
- 메트릭: RMSE, MAE, precision@10, recall@10, NDCG@10
- 아티팩트: 모델 파일, 피처 중요도

=== 평가 ===
- 3개 Run의 메트릭 비교 테이블
- 최적 모델 선택 이유 설명

PySpark ML의 ALS를 사용하고, MLflow 실험 UI에서 확인할 수 있도록 해줘.

Step 4: 모델을 Unity Catalog에 등록

Claude에게 요청하기

최적 ALS 모델을 Unity Catalog Model Registry에 등록해줘.

모델 이름: {catalog}.gold.content_recommender

등록 절차:
1. 최적 Run에서 모델 가져오기 (MLflow에서)
2. Unity Catalog에 모델 등록
3. 모델 버전에 설명 추가: "SmartTV 콘텐츠 추천 ALS 모델 v1"
4. 모델 버전에 태그 추가: stage=staging, team=smarttv
5. 모델 Alias 설정: "champion" 별칭 부여

등록 후:
- Unity Catalog에서 모델 확인
- 모델 버전 정보 조회
- 모델 리니지 확인 (어떤 테이블에서 학습되었는지)

Unity Catalog Model Registry의 장점:
- 기존 MLflow Registry 대비 거버넌스 통합
- 테이블 → 피처 → 모델 → 엔드포인트 리니지 추적
- 환경별 접근 제어 (dev/staging/prod)

이 내용도 설명해줘.

Step 5: 추천 결과 생성 및 검증

Claude에게 요청하기

등록된 ALS 모델로 실제 추천 결과를 생성해줘.

1. 모델 로드 (Unity Catalog에서)
  model_uri = "models:/{catalog}.gold.content_recommender@champion"

2. 전체 사용자에 대해 Top 10 추천 생성
  - model.recommendForAllUsers(10)
  - 결과를 gold.user_recommendations 테이블로 저장

3. 추천 결과 컬럼:
  - device_id, user_profile_id
  - recommendations: array of {content_id, title, genre, score, rank}

4. 추천 품질 검증:
  - 사용자 3명 샘플의 추천 결과 상세 확인
  - 각 사용자의 실제 시청 이력 vs 추천 콘텐츠 비교
  - 다양성 점수: 추천된 장르가 얼마나 다양한지
  - 참신성 점수: 인기도 낮은 콘텐츠가 포함되어 있는지

결과를 사용자별로 보여주고, 추천이 합리적인지 분석해줘.

Step 6: Vector Search 기반 콘텐츠 유사도 추천

Claude에게 요청하기

ALS 협업 필터링과 별도로, Vector Search를 활용한
콘텐츠 기반(Content-Based) 추천도 구현해줘.

1. Vector Search Endpoint 생성 (없으면):
  - 이름: smarttv_vs_endpoint

2. content_metadata의 description 컬럼을 임베딩할 Delta Sync Index 생성:
  - 인덱스: {catalog}.gold.content_search_index
  - 소스: gold.content_metadata
  - 임베딩 컬럼: description
  - 임베딩 모델: databricks-gte-large-en
  - 동기화 모드: TRIGGERED

3. 유사도 검색 테스트:
  - "가족이 함께 볼 수 있는 따뜻한 드라마" → 유사 콘텐츠 5개
  - "스포츠 하이라이트와 실시간 경기" → 유사 콘텐츠 5개
  - "최신 한국 예능 프로그램" → 유사 콘텐츠 5개

4. 하이브리드 추천 함수 생성 (UC Function):
  - 함수: gold.hybrid_recommend(device_id, user_profile_id, num_recs)
  - ALS 추천 50% + Vector Search 추천 50% 블렌딩
  - 중복 제거 후 최종 Top N 반환

Vector Search Delta Sync Index가 어떻게 동작하는지,
협업 필터링 vs 콘텐츠 기반 추천의 차이도 설명해줘.

Step 7: Model Serving 엔드포인트 배포

Claude에게 요청하기

추천 모델을 Model Serving 엔드포인트로 배포해줘.

엔드포인트 이름: smarttv-content-recommender

배포 설정:
- 모델: {catalog}.gold.content_recommender@champion
- 컴퓨트 크기: Small
- Scale to zero: 활성화

배포 후 테스트:
1. REST API로 추천 요청
  {
   "dataframe_records": [
    {"user_idx": 42},
    {"user_idx": 100}
   ]
  }

2. 응답 확인 (추천 콘텐츠 목록)

3. SQL에서 ai_query로 호출하는 방법도 보여줘

Model Serving의 장점:
- 자동 스케일링 (요청량에 따라)
- Scale to zero (비용 절약)
- A/B 테스트 지원 (트래픽 분할)
- MLflow와 통합 (자동 로깅)

Step 8: 추천 시스템 전체 검증

Claude에게 요청하기

추천 시스템 전체를 종합 검증해줘.

1. 오프라인 메트릭 (모델 품질)
  - RMSE, Precision@10, Recall@10, NDCG@10
  - ALS vs 랜덤 추천 vs 인기도 기반 추천 비교

2. 다양성 & 공정성
  - 추천 장르 분포 (특정 장르에 편향되지 않는지)
  - 지역별 추천 품질 차이 (Korea vs US vs EU)
  - Cold-start 사용자 대응 (상호작용이 적은 사용자)

3. 비즈니스 시뮬레이션
  - 추천 콘텐츠의 예상 시청 시간 증가율
  - 추천 콘텐츠의 광고 CTR 예상 변화

4. End-to-End 파이프라인 정리:
  Gold 데이터 → Feature Engineering → ALS 학습 → UC 등록 →
  Serving 배포 → 추론 → 추천 결과

결과를 종합 리포트로 보여줘.

학습 정리

개념실습 내용
Feature Engineering사용자-콘텐츠 상호작용 매트릭스, 암시적 피드백
ALS 협업 필터링PySpark ML, 하이퍼파라미터 튜닝
MLflow Tracking실험 관리, 3개 Run 비교, 메트릭/파라미터 로깅
UC Model Registry모델 등록, 버전 관리, Alias, 리니지
Vector Search콘텐츠 임베딩, Delta Sync Index, 유사도 검색
하이브리드 추천ALS + Vector Search 블렌딩
Model Serving엔드포인트 배포, REST API, Scale to zero

다음 단계

Module 6: GenAI & Agent Bricks