Testes de comparações múltiplas

A/B Testing em Python

Moe Lotfy, PhD

Principal Data Science Manager

Introdução ao problema de comparações múltiplas

  • Comparação única:
    • Controle (A) versus Tratamento (B)
    • Uma métrica
    • Sem subcategorias

 

Gráfico de barras das vendas médias para duas variantes.

  • Comparações múltiplas:
    • Várias variantes (testes A/B/n)
    • Várias métricas
    • Categorias granulares

 

Dois gráficos de barras com várias variantes e métricas.

A/B Testing em Python

Taxa de erro por família (FWER)

  • P(cometer erro tipo I) = $\alpha$ = 0,05
  • P(não cometer erro tipo I) = 1 - $\alpha$
  • P(não cometer erro tipo I em m testes) = (1 - $\alpha$)$^m$
  • P(cometer ao menos um erro tipo I em m testes) = 1 - (1 - $\alpha$)$^m$ = FWER

Family-wise Error Rate (FWER): a probabilidade de cometer um ou mais erros tipo I ao realizar vários testes de hipótese.

  • Para um único teste, FWER = 1 - (1 - $\alpha$)^1 = $\alpha$ = 0,05
  • Mas e se executarmos mais de um teste?
A/B Testing em Python

Taxa de erro por família (FWER)

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 para 10 testes = 40%

Gráfico de linha do FWER em função do número de testes. FWER sobe conforme aumentam os testes.

A/B Testing em Python

Métodos de correção

  • A abordagem mais simples e popular é a Correção de Bonferroni
  • Defina o $\alpha$* ajustado como o $\alpha$ do teste individual dividido pelo número de testes m

Equação da correção de Bonferroni. Alpha dividido pelo número de comparações "m"

  • Correção de Sidak, menos rigorosa
  • Defina a FWER para o $\alpha$ desejado e resolva $\alpha_s$

Equação da correção de Sidak

A/B Testing em Python

Exemplo de correção de Bonferroni

  • Sem correção, os três testes são considerados significativos
    • mas a probabilidade de erro tipo I sobe para 14%
  • Com a Correção de Bonferroni, A versus D deixa de ser significativo, e a FWER fica controlada em 0,049

Gráfico de barras das vendas médias para 4 variantes com p-values.

A/B Testing em Python

Método multipletests do 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 em Python

Vamos praticar!

A/B Testing em Python

Preparing Video For Download...