Тести з множинними порівняннями

A/B Testing на Python

Moe Lotfy, PhD

Principal Data Science Manager

Вступ до проблеми множинних порівнянь

  • Одне порівняння:
    • Контроль (A) проти Варіанта (B)
    • Одна метрика
    • Без підкатегорій

 

Стовпчикова діаграма середніх продажів для двох варіантів.

  • Множинні порівняння:
    • Кілька варіантів (тести A/B/n)
    • Кілька метрик
    • Детальні категорії

 

Дві стовпчикові діаграми з кількома варіантами та метриками.

A/B Testing на Python

Family-wise error rate

  • P(помилка I роду) = $\alpha$ = 0.05
  • P(без помилки I роду) = 1 - $\alpha$
  • P(без помилки I роду в m тестах) = (1 - $\alpha$)$^m$
  • P(принаймні одна помилка I роду в m тестах) = 1 - (1 - $\alpha$)$^m$ = FWER

Family-wise Error Rate (FWER): імовірність зробити одну або більше помилок I роду під час виконання кількох гіпотезних тестів.

  • Для одного тесту, FWER = 1 - (1 - $\alpha$)^1 = $\alpha$ = 0.05
  • А що, якщо тестів більше ніж один?
A/B Testing на 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 для 10 тестів = 40%

Лінійний графік FWER як функції кількості тестів. FWER зростає зі збільшенням кількості тестів.

A/B Testing на Python

Методи корекції

  • Найпростіший і найуживаніший підхід — поправка Бонферроні
  • Встановіть скориговане $\alpha$* як індивідуальне $\alpha$, поділене на кількість тестів m

Рівняння поправки Бонферроні. Альфа, поділена на кількість порівнянь «m».

  • Менш сувора поправка Сидака
  • Задайте FWER як бажане $\alpha$, далі розв'яжіть відносно $\alpha_s$

Рівняння поправки Сидака

A/B Testing на Python

Приклад поправки Бонферроні

  • Без корекції всі три тести вважаються значущими
    • але ймовірність помилки I роду зростає до 14%
  • З поправкою Бонферроні порівняння A проти D вже незначуще, зате FWER контрольовано на рівні 0,049

Стовпчикова діаграма середніх продажів для 4 варіантів із p-значеннями.

A/B Testing на Python

Метод multipletests у 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 на Python

Давайте потренуємось!

A/B Testing на Python

Preparing Video For Download...