多重比較檢定

Python 的 A/B 測試

Moe Lotfy, PhD

Principal Data Science Manager

多重比較問題導論

  • 單一比較:
    • 對照組(A)對上實驗組(B)
    • 一個指標
    • 無子類別

 

兩個版本的平均銷售長條圖。

  • 多重比較:
    • 多個版本(A/B/n 測試)
    • 多個指標
    • 更細分類別

 

含多個版本與指標的兩張長條圖。

Python 的 A/B 測試

家族錯誤率(FWER)

  • P(發生第一類錯誤)= $\alpha$ = 0.05
  • P(不發生第一類錯誤)= 1 - $\alpha$
  • P(m 次檢定都不發生第一類錯誤)= (1 - $\alpha$)$^m$
  • P(m 次檢定中至少發生一次第一類錯誤)= 1 - (1 - $\alpha$)$^m$ = FWER

家族錯誤率(FWER):在進行多重假設檢定時,發生一個或多個第一類錯誤的機率。

  • 對單一檢定,FWER = 1 - (1 - $\alpha$)^1 = $\alpha$ = 0.05
  • 但若進行不只一個檢定呢?
Python 的 A/B 測試

家族錯誤率(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 測試

校正方法

  • 最簡單也最常用的是 Bonferroni 校正
  • 將調整後的 $\alpha$* 設為個別檢定的 $\alpha$ 除以檢定數 m

Bonferroni 校正公式。Alpha 除以比較次數 m

  • 較不嚴格的 Sidak 校正
  • 將 FWER 設為目標 $\alpha$,再解出 $\alpha_s$

Sidak 校正公式

Python 的 A/B 測試

Bonferroni 校正範例

  • 不做校正時,三個檢定都達顯著
    • 但第一類錯誤機率膨脹為 14%
  • 用 Bonferroni 校正後,A 對 D 不再顯著,但 FWER 控制在 0.049

4 個版本平均銷售與 p 值的長條圖。

Python 的 A/B 測試

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 測試

一起來練習吧!

Python 的 A/B 測試

Preparing Video For Download...