한눈에 보는 요약
온라인 평가는 머신러닝 모델·알고리즘을 실제 운영 환경에서 실시간으로 검증하는 방법으로, 오프라인 평가가 제공하지 못하는 사용자 행동·비즈니스 지표를 직접 측정할 수 있다. 주요 기술은 A/B 테스트, 다중 슬롯(멀티-암드) 밴딧, 스트림 창 (window) 기반 측정, 개념 드리프트 탐지이며, 대규모 데이터 스트림 프레임워크(MOA·Flink 등)를 통해 구현된다. 실무에서는 오프라인 지표가 충분히 안정화된 후 온라인 평가를 적용하고, 통계적 유의성·실험 설계·실시간 모니터링으로 품질을 보증한다. (Shaped | Recommendations and Search, Medium, MOA, Optimizely)
개요
온라인 평가(Online Evaluation)는 실제 트래픽을 투입한 실험적 방법으로, 사용자 반응(클릭률·전환·체류 시간 등)을 직접 관측해 모델의 가치를 측정한다. 오프라인 평가와 달리 모델-환경 상호작용에 따른 동적 효과·개념 드리프트를 반영할 수 있다. (Shaped | Recommendations and Search, toloka.ai)
기본 개념
1. 특징
실험 단위: A/B 테스트가 가장 보편적이며, 트래픽을 Control(모델 A)·Treatment(모델 B)로 분할해 효과 차이를 검정한다. (Optimizely, SurveyMonkey)
지표 설계: 클릭률(CTR)·Conversion Rate 등 1차 지표와, Revenue Per Mille(RPM) 같은 종합 비즈니스 지표를 사용한다. (neptune.ai)
통계적 검정: p-value·신뢰구간으로 우연 차이를 배제한다. 효과 크기가 작을 수록 표본 수와 실험 기간이 커져야 한다. (SurveyMonkey)
2. 코드 예제 (Python)
import numpy as np
np.random.seed(42)
N = 1_000_000
control = np.random.binomial(1, 0.05, N // 2)
treatment = np.random.binomial(1, 0.055, N // 2)
ctr_control = np.mean(control)
ctr_treatment = np.mean(treatment)
lift = (ctr_treatment / ctr_control - 1.0) * 100
print(f"CTR(Control): {ctr_control:.4f}")
print(f"CTR(Treatment): {ctr_treatment:.4f}")
print(f"Lift: {lift:.2f} %")
3. 출력 예시
CTR(Control): 0.0500
CTR(Treatment): 0.0550
Lift: 10.00 %
이 결과는 실제 트래픽에서 얻어진 CTR 변화를 기반으로 신규 모델의 효과를 정량적으로 비교할 수 있음을 보여준다.
고급 기능
1. 특징
다중 슬롯 밴딧(MAB): 모델을 팔(Arm)로 정의하고 Upper Confidence Bound(UCB)·Thompson Sampling으로 탐색-활용 균형을 자동화한다. (arXiv, cs.nyu.edu)
스트림 평가 윈도잉: 고정·가변 윈도(window)로 실시간 정확도·NDCG 등을 누적·가중 집계한다. (Proceedings of Machine Learning Research, Diva Portal)
개념 드리프트 탐지: 윈도 통계 변화를 CUSUM·ADWIN으로 감지해 모델을 재학습하거나 랭킹을 재조정한다. (arXiv)
프레임워크 사례:
MOA (자바): 수백 만 레코드 스트림에서도 실시간 평가 지원. (MOA)
Amazon Personalize: 온라인 지표를 자동 수집·시각화. (AWS Documentation)
Flink + Kafka: 대용량 로그를 윈도별로 집계해 메트릭 파이프라인을 구성. (Springer Link)
2. 코드 예제 (Python) – 슬라이딩 윈도 정밀도
from collections import deque
import random
def precision_sliding(y_true, y_pred, k):
tp = sum(1 for i in range(k) if y_true[i] == y_pred[i] == 1)
return tp / k
truth, pred = deque(), deque()
WINDOW = 1000
# 예시 스트림 데이터 시뮬레이션
def generate_event():
label = random.randint(0, 1)
prediction = label if random.random() > 0.2 else 1 - label
return label, prediction
for _ in range(2000):
y, y_hat = generate_event()
truth.appendleft(y)
pred.appendleft(y_hat)
if len(truth) > WINDOW:
truth.pop()
pred.pop()
if len(truth) == WINDOW:
p = precision_sliding(truth, pred, WINDOW)
print(f"[precision@W] = {p:.3f}")
3. 출력 예시
[precision@W] = 0.812
정밀도 하락이 지속되면 드리프트나 품질 저하 가능성을 탐지하고, 모델 리프레시 또는 정책 변경을 검토할 수 있다.
결론
온라인 평가는 실제 사용자와의 상호작용을 정량화하여 모델의 사업적 가치를 검증하는 필수 단계이다. A/B 테스트로 출발해 밴딧·드리프트 탐지·스트림 프레임워크로 고도화하면 데이터 규모가 증가해도 정확한 의사결정을 지속할 수 있다. 실무에서는 (1) 명확한 핵심 지표, (2) 충분한 표본 및 기간, (3) 자동 모니터링·알림 체계를 준비해 실험 오류·지표 왜곡을 방지해야 한다. (Shaped | Recommendations and Search, toloka.ai, contentsquare.com)
'추천시스템' 카테고리의 다른 글
추천 품질 평가 지표 정리 (Offline 중심) (0) | 2025.04.23 |
---|---|
추천시스템 성능 지표 (0) | 2025.04.23 |
고전적인 추천 알고리즘 (0) | 2025.03.15 |
추천시스템 소개 및 특성 (0) | 2025.03.14 |