Testy pro vícenásobná porovnání

A/B testování v Pythonu

Moe Lotfy, PhD

Principal Data Science Manager

Úvod do problému vícenásobných porovnání

  • Jediné porovnání:
    • Kontrola (A) vs. ošetření (B)
    • Jedna metrika
    • Žádné podkategorie

 

Sloupcový graf průměrných prodejů pro dvě varianty.

  • Vícenásobná porovnání:
    • Více variant (A/B/n testy)
    • Více metrik
    • Podrobné kategorie

 

Dva sloupcové grafy s více variantami a metrikami.

A/B testování v Pythonu

Familywise error rate

  • P(chyba I. druhu) = $\alpha$ = 0,05
  • P(žádná chyba I. druhu) = 1 - $\alpha$
  • P(žádná chyba I. druhu v m testech) = (1 - $\alpha$)$^m$
  • P(alespoň jedna chyba I. druhu v m testech) = 1 - (1 - $\alpha$)$^m$ = FWER

Familywise Error Rate (FWER): pravděpodobnost výskytu jedné nebo více chyb I. druhu při provádění vícenásobných hypotézových testů.

  • Pro jeden test: FWER = 1 - (1 - $\alpha$)^1 = $\alpha$ = 0,05
  • Co když ale provedeme více než jeden test?
A/B testování v Pythonu

Familywise error rate

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 pro 10 testů = 40 %

Spojnicový graf FWER v závislosti na počtu testů. FWER roste s počtem testů.

A/B testování v Pythonu

Korekční metody

  • Nejjednodušší a nejoblíbenější přístup je Bonferroniho korekce
  • Upravená $\alpha$* = individuální $\alpha$ dělené počtem testů m

Rovnice Bonferroniho korekce. Alfa dělená počtem porovnání 'm'

  • Méně přísná Šidákova korekce
  • FWER nastavte na požadované $\alpha$, pak vyřešte $\alpha_s$

Rovnice Šidákovy korekce

A/B testování v Pythonu

Příklad Bonferroniho korekce

  • Bez korekce jsou všechny tři testy považovány za signifikantní
    • pravděpodobnost chyby I. druhu je však zvýšena na 14 %
  • S Bonferroniho korekcí přestává být A vs. D signifikantní, ale FWER je kontrolováno na 0,049

Sloupcový graf průměrných prodejů pro 4 varianty s p-hodnotami.

A/B testování v Pythonu

Metoda multipletests ze 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 testování v Pythonu

Pojďme si procvičit!

A/B testování v Pythonu

Preparing Video For Download...