실험 설계 및 A/B 테스트¶
1. 개요¶
A/B 테스트는 두 개 이상의 변형을 비교하여 어떤 것이 더 효과적인지 통계적으로 검증하는 실험 방법. 데이터 기반 의사결정의 핵심 도구.
정의¶
실험의 핵심 원칙¶
| 원칙 | 설명 |
|---|---|
| 무작위화 | 처리군/대조군 무작위 배정 |
| 대조군 | 비교 기준 설정 |
| 통제 | 다른 변수 고정 |
| 복제 | 충분한 샘플 크기 |
2. 실험 설계¶
2.1 가설 수립¶
영가설 (H₀): 차이가 없다 (μ_A = μ_B)
대립가설 (H₁): 차이가 있다 (μ_A ≠ μ_B)
단측 vs 양측:
- 양측: 방향 모름 (μ_A ≠ μ_B)
- 단측: 방향 확신 (μ_A > μ_B)
2.2 샘플 크기 계산¶
통계적 검정력 분석:
n = 2 × ((Z_α/2 + Z_β)² × σ²) / δ²
α: 유의수준 (보통 0.05)
β: Type II 오류 (1-검정력, 보통 0.2)
σ: 표준편차
δ: 최소 탐지 효과 (MDE)
예: α=0.05, β=0.2 → Z_α/2=1.96, Z_β=0.84
전환율 비교 시:
| 파라미터 | 샘플 크기 영향 |
|---|---|
| α 감소 | 증가 |
| β 감소 (검정력 증가) | 증가 |
| MDE 감소 | 증가 |
| 분산 증가 | 증가 |
2.3 실험 기간¶
실험 기간 고려사항:
- 충분한 샘플 달성
- 주간 패턴 포함 (최소 1-2주)
- 계절성 고려
- Novelty/Learning 효과
MDE에 따른 기간:
작은 효과 (1-2%) → 길게
큰 효과 (10%+) → 짧게
2.4 무작위화¶
3. 통계적 분석¶
3.1 빈도주의 접근¶
t-검정 (연속 변수):
z-검정 (비율):
신뢰구간:
3.2 베이지안 접근¶
사후 확률 직접 계산:
P(B > A | data)
장점:
- 직관적 해석 ("B가 A보다 좋을 확률 95%")
- 조기 종료 가능
- 연속 모니터링
단점:
- 사전 분포 선택
- 계산 복잡성
3.3 다중 비교 문제¶
여러 변형 테스트 시:
FWER (Family-wise Error Rate) 증가
보정 방법:
- Bonferroni: α/m
- Sidak: 1 - (1-α)^(1/m)
- FDR (Benjamini-Hochberg)
3.4 분산 감소 기법¶
CUPED (Controlled-experiment Using Pre-Experiment Data):
4. 실험 운영¶
4.1 실험 파이프라인¶
1. 가설 수립
2. 메트릭 정의
3. 샘플 크기/기간 계산
4. 실험 설정 (플랫폼)
5. AA 테스트 (선택)
6. 실험 실행
7. 모니터링
8. 결과 분석
9. 의사결정
10. 문서화
4.2 AA 테스트¶
4.3 Guardrail 메트릭¶
4.4 세그먼트 분석¶
5. 고급 주제¶
5.1 다변량 테스트 (MVT)¶
5.2 Interleaving¶
5.3 Bandits¶
5.4 장기 효과 측정¶
6. 실무 적용¶
6.1 일반적인 함정¶
| 함정 | 해결 |
|---|---|
| Peeking | Sequential testing, 베이지안 |
| Underpowered | 사전 샘플 크기 계산 |
| 다중 비교 | 보정, 사전 정의 |
| Sample Ratio Mismatch | 모니터링, AA 테스트 |
| Novelty Effect | 충분한 기간 |
6.2 의사결정 프레임워크¶
7. 참고 자료¶
핵심 서적¶
| 서적 | 저자 | 주제 |
|---|---|---|
| "Trustworthy Online Controlled Experiments" | Kohavi et al. | A/B 테스트 바이블 |
| "A/B Testing" | Georgi Georgiev | 실무 가이드 |
| "Statistical Methods in Online A/B Testing" | Georgiev | 통계 심화 |
주요 논문¶
| 논문 | 저자 | 주제 |
|---|---|---|
| "Controlled experiments on the web" | Kohavi et al. | 실험 개론 |
| "Online Controlled Experiments at Large Scale" | Kohavi et al. | 대규모 실험 |
| "Improving Sensitivity of Online Experiments by Utilizing Pre-Experiment Data" | Deng et al. | CUPED |
8. 도구¶
| 도구 | 용도 |
|---|---|
| Optimizely | A/B 테스트 플랫폼 |
| Google Optimize | 무료 테스트 |
| VWO | 테스트 + 분석 |
| Statsig | 실험 플랫폼 |
| Eppo | 창고 기반 실험 |
| Python (scipy) | 통계 분석 |
Python 샘플 크기 계산¶
from scipy import stats
import numpy as np
def sample_size_proportion(p1, p2, alpha=0.05, power=0.8):
"""전환율 비교 샘플 크기"""
effect_size = abs(p2 - p1) / np.sqrt(p1 * (1-p1))
analysis = stats.power.TTestIndPower()
n = analysis.solve_power(
effect_size=effect_size,
alpha=alpha,
power=power,
alternative='two-sided'
)
return int(np.ceil(n))
# 전환율 5% → 5.5% 탐지
n = sample_size_proportion(0.05, 0.055)
print(f"필요 샘플 (그룹당): {n}")