본문으로 건너뛰기
yutils

A/B testing 은 어떻게 동작할까?

randomization (마법), 'peeking' 이 p-value 를 무효로 만드는 이유, sample size 계획, 조기 종료 위한 sequential testing, explore/exploit 대안의 multi-armed bandit, network effect / cross-experiment contamination 함정.

약 10분 읽기

"이 button 색 바꿨더니 conversion 5% ↑" — 진짜? 우연일 가능성? 통계의 마법으로 답하는 게 A/B test. 그러나 "peeking", randomization 의 잘못, network effect 등 함정이 즐비. 이 가이드는 A/B test 의 정확한 메커니즘과 함정을 정리한다.

Randomization — 핵심 마법

naive 비교:
  v1 (전 주 데이터): conversion 3.5%
  v2 (이번 주 데이터): conversion 4.0%
  → 0.5% 좋아짐?

문제:
- 시간대 차이 (주말 vs 평일)
- 외부 이벤트 (마케팅 캠페인, 명절)
- user mix 변화 (새 user 비율)
- 계절성

randomization 의 답:
  같은 시점에 user 무작위로 두 group:
  - control (A): v1 노출, 50%
  - treatment (B): v2 노출, 50%

→ 두 group 의 평균이 (이론적으로) 같은 분포에서 sample
→ 차이는 v1/v2 의 영향 + random noise
→ statistical test 로 noise 와 진짜 차이 구분

Statistical Significance — p-value

H0 (null hypothesis): "v1 = v2, 차이 없음"
H1 (alternative): "v1 ≠ v2, 차이 있음"

p-value = "H0 가 참일 때, 관찰된 차이 또는 더 큰 차이가 우연으로 발생할 확률"

예:
  observed: v2 가 conversion 0.5% 높음
  p-value = 0.03

  해석: "v1 = v2 라면 이 정도 차이가 우연으로 발생할 확률 3%"
  → "v1 ≠ v2" 라고 결론 (significance level 5% 기준)

흔한 함정:
- p-value < 0.05 = "v2 가 더 좋다" 의 95% 확신? — 정확히 X
- 실제 의미: "H0 가 참일 때 이 차이 또는 더 큰 차이가 발생할 확률"
  ≠ "v2 가 더 좋을 확률"

Peeking — 가장 큰 함정

A/B test 진행 중 매일 p-value 확인:

Day 1: p = 0.4
Day 3: p = 0.2
Day 5: p = 0.07
Day 7: p = 0.04   ← "유의미하다! 종료!"

문제: 매번 보면서 "유의미할 때까지" 기다리면 → 우연으로 통과할 확률 ↑

  1 회 test: 5% 우연 통과 (significance level)
  매일 보면서 1 주일: ~25% 우연 통과
  매일 보면서 1 달: ~50% 우연 통과 (false positive)

해결:
1. 미리 sample size 정함 + 그 시점에만 결과 봄
2. Sequential testing (Wald's SPRT) — peek 허용 + threshold 조정
3. Bayesian — credible interval 의 직접 해석 (조심)

→ Netflix, Meta 등 큰 회사가 sequential / mSPRT 같은 advanced 사용.
   대부분 작은 팀은 "미리 sample size 정하고 끝까지 wait" 으로 충분.

Sample Size 계산

적절한 sample size 결정:
- baseline conversion: 3% (현재)
- minimum detectable effect (MDE): 0.3% (의미 있는 차이)
- significance level (α): 0.05
- power (1-β): 0.8 (80% 확률로 진짜 효과 발견)

공식 (대략):
  n = 16 × baseline × (1-baseline) / MDE²
  = 16 × 0.03 × 0.97 / 0.003²
  ≈ 51,733 per group

→ 약 10 만 user 필요. trafic 적으면 더 큰 effect 만 detect 가능.

도구:
- Evan Miller's calculator (online)
- Python statsmodels.stats.power
- R pwr package

trade-off:
- MDE 작게 (0.1%) → sample size 폭증
- MDE 크게 (1%) → 작은 효과 미발견

Sequential Testing — 정상적 peek 허용

전통 A/B 는 "고정 sample size + 끝에 결정". sequential test 는 매 시점에
"계속 / 종료 / 결정 보류" 결정 가능 — statistical 정합.

도구:
- mSPRT (Sequential Probability Ratio Test) — Optimizely, Netflix
- Always Valid Inference — Microsoft
- Group Sequential Testing — 일정 시점마다 peek
- Bayesian early stopping — credible interval based

이점:
- 효과 큰 test 는 일찍 종료 → resource 절약
- 효과 작은 test 는 충분히 대기
- peek 의 statistical 정합 (FWER 보존)

도입:
- 가장 단순: 1주마다 5회 peek 허용 + α/5 = 0.01 으로 보수적
- 정형 mSPRT 는 더 efficient 이지만 구현 복잡

Multi-armed Bandit — 다른 접근

A/B 의 약점: "test 진행 중에는 loser 에도 traffic 50%".
   → 명확히 나쁜 variant 인데도 sample 다 채울 때까지 그 traffic 손실.

Multi-armed bandit:
- 좋은 variant 의 traffic 자동 증가
- explore (다른 variant 도 가끔 노출) vs exploit (가장 좋은 것 위주)
- Thompson sampling 알고리즘이 표준

vs A/B:
- A/B: "확신 후 변경" — 학습 cost 크지만 통계 정합 강력
- Bandit: "학습하면서 활용" — opportunity cost ↓ but 통계적 분석 약함

사용:
- A/B: 새 feature 의 long-term 효과 측정 (causal)
- Bandit: 짧은 캠페인 / 추천 시스템 / headline 선택 (즉시 가치)

흔한 함정

  • peeking + 조기 종료 — false positive 폭증. 미리 sample size + sequential test.
  • network effect — A 의 user 가 B 의 user 와 상호작용 (social network, marketplace) → A 와 B 의 효과 섞임. cluster-randomized 또는 다른 unit 으로 randomize.
  • simpson's paradox — 전체로는 A 가 좋아 보이지만 모든 segment 에서는 B 가 좋음. segment 별 분석 + 가중 평균.
  • multiple testing — 10 metric 동시 검정 → 1개는 우연으로 유의미. Bonferroni correction (α/n) 또는 primary metric 선언.
  • conversion 외 metric 무시 — A 가 conversion 좋아도 retention 나쁠 수 있음. North Star metric + guardrail.

마무리

A/B testing 의 본질 — randomization 으로 confounder 제거 + statistical test 로 noise 와 진짜 차이 구분. peeking / multiple testing / network effect 등 함정 많음.

실용 — 처음엔 단순 (fixed sample, 1 metric, no peek). 큰 회사 면 Optimizely / VWO 같은 platform 또는 자체 platform + sequential test. ML model 비교는 A/B 또는 shadow 둘 다 검토.

가이드 목록으로