Test con confronti multipli

A/B Testing in Python

Moe Lotfy, PhD

Principal Data Science Manager

Introduzione al problema dei confronti multipli

  • Confronto singolo:
    • Controllo (A) vs Trattamento (B)
    • Una metrica
    • Nessuna sottocategoria

 

Grafico a barre delle vendite medie per due varianti.

  • Confronti multipli:
    • Più varianti (test A/B/n)
    • Più metriche
    • Categorie granulari

 

Due grafici a barre con più varianti e metriche.

A/B Testing in Python

Family-wise error rate

  • P(errore di Tipo I) = $\alpha$ = 0,05
  • P(nessun errore di Tipo I) = 1 - $\alpha$
  • P(nessun errore di Tipo I in m test) = (1 - $\alpha$)$^m$
  • P(almeno un errore di Tipo I in m test) = 1 - (1 - $\alpha$)$^m$ = FWER

Family-wise Error Rate (FWER): la probabilità di commettere uno o più errori di Tipo I quando si eseguono test multipli.

  • Per un singolo test, FWER = 1 - (1 - $\alpha$)^1 = $\alpha$ = 0,05
  • Ma cosa succede se eseguiamo più test?
A/B Testing 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 per 10 test = 40%

Grafico a linee di FWER in funzione del numero di test. FWER cresce all'aumentare dei test.

A/B Testing in Python

Metodi di correzione

  • L'approccio più semplice e diffuso è la correzione di Bonferroni
  • Imposta $\alpha$* corretto come $\alpha$ del singolo test diviso per il numero di test m

Equazione della correzione di Bonferroni. Alpha diviso per il numero di confronti "m"

  • Correzione di Sidak, meno stringente
  • Imposta FWER all'$\alpha$ desiderato, poi risolvi per $\alpha_s$

Equazione della correzione di Sidak

A/B Testing in Python

Esempio di correzione di Bonferroni

  • Senza correzione, tutti e tre i test risultano significativi
    • ma la probabilità di errore di Tipo I sale al 14%
  • Con la correzione di Bonferroni, A vs D non è più significativo, ma FWER è controllato a 0,049

Grafico a barre delle vendite medie per 4 varianti con p-value.

A/B Testing in Python

Metodo multipletests di 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 in Python

Esercitiamoci!

A/B Testing in Python

Preparing Video For Download...