A/B 테스트는 두 가지 버전(A와 B)을 서로 다른 사용자 그룹에 무작위로 노출해 어느 쪽이 더 좋은 결과를 내는지 통계적으로 검증하는 실험 방법이다. 데이터 기반 의사결정의 핵심 도구다.
동작 방식
전체 사용자
↓ 무작위 분배
Group A (50%): 기존 버튼 (파란색)
Group B (50%): 새 버튼 (빨간색)
측정 지표 (Metric):
클릭률 (CTR), 전환율 (CVR), 이탈률
결과 분석:
A: 클릭률 3.2%
B: 클릭률 4.1% (+28%)
p-value < 0.05 → 통계적으로 유의미
통계적 유의성
python
from scipy import stats
# A/B 테스트 결과
control_users = 10000
control_conversions = 320 # 3.2%
treatment_users = 10000
treatment_conversions = 410 # 4.1%
# 카이제곱 검정 또는 비율 검정
control_rate = control_conversions / control_users
treatment_rate = treatment_conversions / treatment_users
# 표준 비율 검정
from statsmodels.stats.proportion import proportions_ztest
count = [control_conversions, treatment_conversions]
nobs = [control_users, treatment_users]
stat, p_value = proportions_ztest(count, nobs)
print(f"p-value: {p_value:.4f}")
if p_value < 0.05:
print("통계적으로 유의미한 차이")
표본 크기 계산
python
from statsmodels.stats.power import zt_ind_solve_power
# 최소 탐지 효과 크기, 검정력(80%), 유의수준(5%)
n = zt_ind_solve_power(
effect_size=0.1, # 최소 감지할 효과
alpha=0.05, # 1종 오류
power=0.8, # 검정력 (1 - 2종 오류)
alternative='two-sided'
)
print(f"그룹당 필요 표본 수: {int(n)}")
A/B 테스트 주의사항
- •노벨티 효과: 새것이라 반응이 좋아 보일 수 있음 (충분한 기간 필요)
- •SUTVA 위반: 그룹 간 상호작용 (소셜 피처의 경우)
- •다중 검정: 여러 메트릭 동시 검정 시 오탐율 증가 (Bonferroni 보정)
- •샘플 오염: 같은 사용자가 두 그룹에 노출
관련 개념