Kiểm định so sánh nhiều nhóm

A/B Testing bằng Python

Moe Lotfy, PhD

Principal Data Science Manager

Giới thiệu vấn đề so sánh nhiều nhóm

  • So sánh đơn:
    • Đối chứng (A) so với Điều trị (B)
    • Một chỉ số
    • Không có phân nhóm

 

Biểu đồ cột doanh số trung bình cho hai biến thể.

  • So sánh nhiều:
    • Nhiều biến thể (A/B/n)
    • Nhiều chỉ số
    • Danh mục chi tiết

 

Hai biểu đồ cột với nhiều biến thể và chỉ số.

A/B Testing bằng Python

Tỷ lệ lỗi theo họ (FWER)

  • P(mắc lỗi loại I) = $\alpha$ = 0,05
  • P(không mắc lỗi loại I) = 1 - $\alpha$
  • P(không mắc lỗi loại I trong m kiểm định) = (1 - $\alpha$)$^m$
  • P(mắc ít nhất một lỗi loại I trong m kiểm định) = 1 - (1 - $\alpha$)$^m$ = FWER

Tỷ lệ lỗi theo họ (FWER): xác suất mắc một hoặc nhiều lỗi loại I khi thực hiện nhiều kiểm định giả thuyết.

  • Với một kiểm định, FWER = 1 - (1 - $\alpha$)^1 = $\alpha$ = 0,05
  • Nếu thực hiện nhiều kiểm định thì sao?
A/B Testing bằng Python

Tỷ lệ lỗi theo họ (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
  • FWER cho 10 kiểm định = 40%

Biểu đồ đường FWER theo số kiểm định. FWER tăng khi số kiểm định tăng.

A/B Testing bằng Python

Phương pháp hiệu chỉnh

  • Cách đơn giản, phổ biến nhất: Hiệu chỉnh Bonferroni
  • Đặt $\alpha$* hiệu chỉnh = $\alpha$ mỗi kiểm định chia cho số kiểm định m

Phương trình hiệu chỉnh Bonferroni. Alpha chia cho số so sánh 'm'

  • Hiệu chỉnh Sidak ít nghiêm ngặt hơn
  • Đặt FWER bằng $\alpha$ mong muốn, rồi giải $\alpha_s$

Phương trình hiệu chỉnh Sidak

A/B Testing bằng Python

Ví dụ hiệu chỉnh Bonferroni

  • Không hiệu chỉnh: cả ba kiểm định đều có ý nghĩa
    • nhưng xác suất lỗi loại I tăng lên 14%
  • Với Bonferroni: A so với D không còn ý nghĩa, nhưng FWER được khống chế ở 0,049

Biểu đồ cột doanh số trung bình cho 4 biến thể kèm p-value.

A/B Testing bằng Python

Phương thức multipletests của statsmodels

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
A/B Testing bằng Python

Ayo berlatih!

A/B Testing bằng Python

Preparing Video For Download...