다중 비교 검정

Python으로 배우는 A/B Testing

Moe Lotfy, PhD

Principal Data Science Manager

다중 비교 문제 소개

  • 단일 비교:
    • 대조군(A) vs 처리군(B)
    • 하나의 지표
    • 하위 범주 없음

 

두 변형의 평균 매출 막대차트.

  • 다중 비교:
    • 여러 변형(A/B/n 테스트)
    • 여러 지표
    • 세분화된 범주

 

여러 변형과 지표가 있는 두 개의 막대차트.

Python으로 배우는 A/B Testing

가족단위 오류율(FWER)

  • P(I종 오류 발생) = $\alpha$ = 0.05
  • P(I종 오류 미발생) = 1 - $\alpha$
  • m회 검정에서 P(I종 오류 미발생) = (1 - $\alpha$)$^m$
  • m회 검정에서 P(최소 한 번 I종 오류) = 1 - (1 - $\alpha$)$^m$ = FWER

가족단위 오류율(FWER): 다중 가설 검정에서 하나 이상 I종 오류가 발생할 확률.

  • 단일 검정에서는 FWER = 1 - (1 - $\alpha$)^1 = $\alpha$ = 0.05
  • 그렇다면 검정을 여러 번 하면 어떻게 될까요?
Python으로 배우는 A/B Testing

가족단위 오류율(FWER)

import matplotlib.pyplot as plt 
import numpy as np 
alpha = 0.05 
x = np.linspace(0, 20, 21) 
y = 1-(1-alpha)**x 
plt.plot(x,y, marker='o') 
plt.title('FWER vs Number of Tests') 
plt.xlabel('Number of Tests') 
plt.ylabel('FWER') 
plt.show()
  • FWER = 1 - (1 - $\alpha$)^10
  • 10회 검정의 FWER = 40%

검정 횟수에 따른 FWER 선그래프. 검정 수가 늘수록 FWER 증가.

Python으로 배우는 A/B Testing

보정 방법

  • 가장 단순하고 널리 쓰이는 방법: 본페로니 보정
  • 보정된 $\alpha$* = 개별 검정의 $\alpha$ ÷ 검정 개수 m

본페로니 보정식. 알파를 비교 횟수 'm'으로 나눔

  • 덜 엄격한 시닥(Sidak) 보정
  • 원하는 $\alpha$로 FWER을 설정하고, $\alpha_s$를 계산

시닥 보정식

Python으로 배우는 A/B Testing

본페로니 보정 예시

  • 보정이 없으면 세 검정 모두 유의함
    • 단, I종 오류 확률이 14%로 증가
  • 본페로니 보정 적용 시 A 대 D는 더 이상 유의하지 않지만, FWER은 0.049로 통제됨

4개 변형의 평균 매출과 p-값 막대차트.

Python으로 배우는 A/B Testing

statsmodels의 multipletests 메서드

import statsmodels.stats.multitest as smt 
pvals = [0.023,0.0005,0.00004]
corrected = smt.multipletests(pvals, alpha=0.05, method='bonferroni')
print("Significant Test:", corrected[0])
print("Corrected P-values:", corrected[1])
print("Bonferroni Corrected alpha: {:.4f}".format(corrected[3]))
Significant Test: [False  True  True]
Corrected P-values: [0.069   0.0015  0.00012]
Bonferroni Corrected alpha: 0.0167
Python으로 배우는 A/B Testing

연습해 봅시다!

Python으로 배우는 A/B Testing

Preparing Video For Download...