콘텐츠로 이동
Data Prep
상세

실험 설계 및 A/B 테스트

1. 개요

A/B 테스트는 두 개 이상의 변형을 비교하여 어떤 것이 더 효과적인지 통계적으로 검증하는 실험 방법. 데이터 기반 의사결정의 핵심 도구.

정의

A/B 테스트 = 무작위 대조 실험 (RCT)

목적:
- 변경 효과 검증
- 인과관계 확립
- 의사결정 불확실성 감소

실험의 핵심 원칙

원칙 설명
무작위화 처리군/대조군 무작위 배정
대조군 비교 기준 설정
통제 다른 변수 고정
복제 충분한 샘플 크기

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

전환율 비교 시:

n = 2 × p(1-p) × (Z_α/2 + Z_β)² / δ²

p: 기준 전환율
δ: 예상 상대 변화

파라미터 샘플 크기 영향
α 감소 증가
β 감소 (검정력 증가) 증가
MDE 감소 증가
분산 증가 증가

2.3 실험 기간

실험 기간 고려사항:
- 충분한 샘플 달성
- 주간 패턴 포함 (최소 1-2주)
- 계절성 고려
- Novelty/Learning 효과

MDE에 따른 기간:
작은 효과 (1-2%) → 길게
큰 효과 (10%+) → 짧게

2.4 무작위화

단위 선택:
- 사용자 (가장 일반적)
- 세션
- 페이지뷰
- 디바이스

무작위화 방법:
- 해시 기반: hash(user_id) % 100
- 일관성 보장
- 버킷팅

3. 통계적 분석

3.1 빈도주의 접근

t-검정 (연속 변수):

t = (X̄_A - X̄_B) / √(s²_A/n_A + s²_B/n_B)

p-value < α → 귀무가설 기각

z-검정 (비율):

z = (p̂_A - p̂_B) / √(p̂(1-p̂)(1/n_A + 1/n_B))

p̂ = 합산 전환율 (pooled)

신뢰구간:

CI = (X̄_A - X̄_B) ± Z_α/2 × SE

95% CI가 0을 포함하지 않으면 유의

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):

Y_adj = Y - θ(X - E[X])

θ = Cov(X, Y) / Var(X)
X: 실험 전 데이터

분산 감소 → 더 작은 MDE 또는 짧은 기간


4. 실험 운영

4.1 실험 파이프라인

1. 가설 수립
2. 메트릭 정의
3. 샘플 크기/기간 계산
4. 실험 설정 (플랫폼)
5. AA 테스트 (선택)
6. 실험 실행
7. 모니터링
8. 결과 분석
9. 의사결정
10. 문서화

4.2 AA 테스트

A/A 테스트: 동일 변형 비교

목적:
- 실험 인프라 검증
- 무작위화 확인
- 기대 유의성 비율 (5%) 확인

4.3 Guardrail 메트릭

실험이 해를 끼치지 않음을 확인:
- 매출
- 사용자 경험 지표
- 시스템 성능

의도치 않은 부작용 탐지

4.4 세그먼트 분석

전체 효과와 세그먼트별 효과:
- 신규 vs 기존 사용자
- 디바이스별
- 지역별

주의: 다중 비교 문제
Exploratory vs Confirmatory

5. 고급 주제

5.1 다변량 테스트 (MVT)

여러 요소 동시 테스트:
헤드라인 × 이미지 × CTA

Full Factorial: 모든 조합
Fractional: 일부 조합 (효율적)

5.2 Interleaving

검색/추천 평가:
두 알고리즘 결과 섞어서 표시
사용자 선택으로 평가

빠른 실험 가능

5.3 Bandits

탐색(Exploration) + 활용(Exploitation):
- Epsilon-greedy
- Thompson Sampling
- UCB

실험 중 최적화

5.4 장기 효과 측정

단기 실험의 한계:
- 학습 효과
- 습관 형성

장기 효과 추정:
- 장기 Holdout
- 서로게이트 메트릭
- 코호트 분석

6. 실무 적용

6.1 일반적인 함정

함정 해결
Peeking Sequential testing, 베이지안
Underpowered 사전 샘플 크기 계산
다중 비교 보정, 사전 정의
Sample Ratio Mismatch 모니터링, AA 테스트
Novelty Effect 충분한 기간

6.2 의사결정 프레임워크

결과 해석:
1. 통계적 유의성
2. 실질적 유의성 (효과 크기)
3. 비용/위험 고려
4. 세그먼트 효과
5. Guardrail 확인

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}")