Meervoudige vergelijkingen-tests

A/B-testen in Python

Moe Lotfy, PhD

Principal Data Science Manager

Introductie: probleem van meervoudige vergelijkingen

  • Enkele vergelijking:
    • Controle (A) versus Behandeling (B)
    • Eén metriek
    • Geen subcategorieën

 

Staafdiagram van gemiddelde verkoop voor twee varianten.

  • Meervoudige vergelijkingen:
    • Meerdere varianten (A/B/n-tests)
    • Meerdere metriek(en)
    • Granulaire categorieën

 

Twee staafdiagrammen met meerdere varianten en metriek.

A/B-testen in Python

Family-wise error rate

  • P(type I-fout maken) = $\alpha$ = 0,05
  • P(geen type I-fout maken) = 1 - $\alpha$
  • P(geen type I-fout in m tests) = (1 - $\alpha$)$^m$
  • P(minstens één type I-fout in m tests) = 1 - (1 - $\alpha$)$^m$ = FWER

Family-wise error rate (FWER): de kans op één of meer type I-fouten bij meerdere hypothesetests.

  • Voor één test: FWER = 1 - (1 - $\alpha$)^1 = $\alpha$ = 0,05
  • Maar wat als we meer dan één test doen?
A/B-testen in Python

Family-wise 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 voor 10 tests = 40%

Lijndiagram van FWER als functie van aantal tests. FWER stijgt naarmate het aantal tests toeneemt.

A/B-testen in Python

Correctiemethoden

  • De simpelste en populairste aanpak is de Bonferroni-correctie
  • Stel de aangepaste $\alpha$* in op de individuele test-$\alpha$ gedeeld door het aantal tests m

Vergelijking Bonferroni-correctie. Alpha gedeeld door het aantal vergelijkingen 'm'

  • Minder strenge Sidak-correctie
  • Stel FWER in op gewenste $\alpha$, los dan $\alpha_s$ op

Vergelijking Sidak-correctie

A/B-testen in Python

Voorbeeld Bonferroni-correctie

  • Zonder correctie zijn alle drie de tests significant
    • maar de kans op een type I-fout is opgeblazen tot 14%
  • Met Bonferroni-correctie is A vs D niet langer significant, maar FWER is 0,049

Staafdiagram van gemiddelde verkoop voor 4 varianten met p-waarden.

A/B-testen in Python

statsmodels multipletests-methode

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-testen in Python

Laten we oefenen!

A/B-testen in Python

Preparing Video For Download...