Tests de comparaisons multiples

A/B Testing en Python

Moe Lotfy, PhD

Principal Data Science Manager

Introduction au problème des comparaisons multiples

  • Comparaison unique :
    • Témoin (A) versus Traitement (B)
    • Une mesure
    • Aucune sous-catégorie

 

Diagramme à bandes des ventes moyennes pour deux variantes.

  • Comparaisons multiples :
    • Plusieurs variantes (tests A/B/n)
    • Plusieurs mesures
    • Catégories fines

 

Deux diagrammes à bandes avec plusieurs variantes et mesures.

A/B Testing en Python

Taux d'erreur par famille

  • P(erreur de type I) = $\alpha$ = 0,05
  • P(pas d'erreur de type I) = 1 - $\alpha$
  • P(pas d'erreur de type I en m tests) = (1 - $\alpha$)$^m$
  • P(au moins une erreur de type I en m tests) = 1 - (1 - $\alpha$)$^m$ = FWER

Taux d'erreur par famille (FWER) : probabilité de commettre une ou plusieurs erreurs de type I lors de tests d'hypothèses multiples.

  • Pour un seul test, FWER = 1 - (1 - $\alpha$)^1 = $\alpha$ = 0,05
  • Mais si nous effectuons plus d'un test ?
A/B Testing en Python

Taux d'erreur par famille

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 pour 10 tests = 40 %

Courbe du FWER en fonction du nombre de tests. Le FWER augmente avec le nombre de tests.

A/B Testing en Python

Méthodes de correction

  • L'approche la plus simple et la plus répandue : la correction de Bonferroni
  • Définir $\alpha$* ajusté = $\alpha$ du test individuel divisé par le nombre de tests m

Équation de correction de Bonferroni. Alpha divisé par le nombre de comparaisons « m »

  • Correction de Sidak, moins stricte
  • Fixer le FWER à $\alpha$ souhaité, puis résoudre pour $\alpha_s$

Équation de correction de Sidak

A/B Testing en Python

Exemple de correction de Bonferroni

  • Sans correction, les trois tests sont jugés significatifs
    • mais la probabilité d'une erreur de type I grimpe à 14 %
  • Avec la correction de Bonferroni, A versus D n'est plus significatif, mais le FWER est maîtrisé à 0,049

Diagramme à bandes des ventes moyennes pour 4 variantes avec p-values.

A/B Testing en Python

Méthode multipletests de 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 en Python

Passons à la pratique !

A/B Testing en Python

Preparing Video For Download...