Teste pentru comparații multiple

A/B Testing în Python

Moe Lotfy, PhD

Principal Data Science Manager

Introducere în problema comparațiilor multiple

  • Comparație unică:
    • Control (A) vs. Tratament (B)
    • O singură metrică
    • Fără subcategorii

 

Diagramă de bare cu vânzările medii pentru două variante.

  • Comparații multiple:
    • Variante multiple (teste A/B/n)
    • Metrici multiple
    • Categorii granulare

 

Două diagrame de bare cu variante și metrici multiple.

A/B Testing în Python

Rata erorii la nivel de familie

  • P(eroare de tip I) = $\alpha$ = 0.05
  • P(fără eroare de tip I) = 1 - $\alpha$
  • P(fără eroare de tip I în m teste) = (1 - $\alpha$)$^m$
  • P(cel puțin o eroare de tip I în m teste) = 1 - (1 - $\alpha$)$^m$ = FWER

Rata erorii la nivel de familie (FWER): probabilitatea de a comite una sau mai multe erori de tip I la efectuarea mai multor teste de ipoteză.

  • Pentru un singur test, FWER = 1 - (1 - $\alpha$)^1 = $\alpha$ = 0.05
  • Dar dacă efectuăm mai mult de un test?
A/B Testing în Python

Rata erorii la nivel de familie

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 pentru 10 teste = 40%

Grafic liniar al FWER în funcție de numărul de teste. FWER crește odată cu numărul de teste.

A/B Testing în Python

Metode de corecție

  • Cea mai simplă și populară abordare este Corecția Bonferroni
  • $\alpha$* ajustat = $\alpha$ individual împărțit la numărul de teste m

Ecuația corecției Bonferroni. Alpha împărțit la numărul de comparații 'm'

  • Corecția Sidak, mai puțin strictă
  • Se setează FWER la $\alpha$ dorit, apoi se rezolvă pentru $\alpha_s$

Ecuația corecției Sidak

A/B Testing în Python

Exemplu de corecție Bonferroni

  • Fără corecție, toate trei testele sunt semnificative
    • dar probabilitatea erorii de tip I este supraestimată la 14%
  • Cu Corecția Bonferroni, A vs. D nu mai este semnificativ, dar FWER este controlat la 0.049

Diagramă de bare cu vânzările medii pentru 4 variante și valori p.

A/B Testing în Python

Metoda multipletests din 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 în Python

Să exersăm!

A/B Testing în Python

Preparing Video For Download...