Тесты множественных сравнений

A/B-тестирование в Python

Moe Lotfy, PhD

Principal Data Science Manager

Введение в проблему множественных сравнений

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

 

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

  • Множественные сравнения:
    • Несколько вариантов (A/B/n-тесты)
    • Несколько метрик
    • Детализированные категории

 

Две столбчатые диаграммы с несколькими вариантами и метриками.

A/B-тестирование в 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-тестирование в 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-тестирование в Python

Методы коррекции

  • Самый простой и популярный подход — поправка Бонферрони
  • Скорректированный $\alpha$* равен исходному $\alpha$ для отдельного теста, делённому на число тестов m

Формула поправки Бонферрони: alpha делится на число сравнений 'm'

  • Менее строгая поправка Шидака
  • Задайте желаемый FWER = $\alpha$, затем решите уравнение для $\alpha_s$

Формула поправки Шидака

A/B-тестирование в Python

Пример поправки Бонферрони

  • Без коррекции все три теста считаются значимыми
    • однако вероятность ошибки I рода завышена и составляет 14%
  • С поправкой Бонферрони сравнение A и D перестаёт быть значимым, а FWER контролируется на уровне 0.049

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

A/B-тестирование в 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-тестирование в Python

Давайте потренируемся!

A/B-тестирование в Python

Preparing Video For Download...