среда, 10 июля 2024 г.

Множественная проверка гипотез

Ситуация множественного сравнения возникает каждый раз, когда нужно провести несколько параллельных стат-тестов на одном и том же наборе данных.

При выполнении множественного тестирования возникает серьёзная проблема — быстрый рост вероятности допустить ошибку первого рода хотя бы в одном из тестов.

FWER=1(1α)m (family-wise error rate)

 график для α=0.05



FWER напрямую зависит от уровня значимости α и числа проводимых тестов. Чтобы снизить FWER, можно, прежде всего, уменьшить число тестов. Если же число тестов уменьшить нельзя, то аналитику остаётся понизить уровень значимости α. Такую операцию называют коррекцией уровня значимости.

Для чего проводится коррекция уровня значимости. Допустим, Вася сравнивает две пары городов, используя один набор данных: Самару с Владивостоком и Самару с Томском. Вася заранее устанавливает уровень значимости α=0.05. Вася ожидает, что ошибётся в 5% случаев. Но в ситуации множественных сравнений вероятность ошибки будет не 0.05, а FWER=1−(1−α)2=0.0975. То есть Вася может ошибиться не в 5% случаев, как он ожидает, а в 9.75% случаев — почти в два раза чаще. Задача Васи в том, чтобы выбрать такой уровень значимости α, при котором FWER станет равным 0.05.

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

αcorr=α/m

m - количество проводимых тестов
для двух тестов m=2 и уровне значимости в 5% αcorr=0.025:

FWER=1(1αcorr)m = 1(10.025)2=0.05


Метод Шидака

αcorr=1(1α
)
1/m


Метод Холма

метод Холма — итерационный. То есть рассчитывается не единый уровень αα для всех тестов, а новый для каждого из тестов. Формула расчёта уровней коррекции выглядит так



Видно, что коррекция уровня значимости по методу Холма даёт более высокие значения скорректированных уровней значимости, чем при применении методов Бонферрони и Шидака. Это позволяет одновременно и понизить FWER, и повысить мощность теста.



import pandas as pd
import numpy as np
from matplotlib import pyplot as plt

   
# подготавливаем данные
report = pd.DataFrame()
report['m'] = pd.Series([2, 3, 4, 5, 6, 7, 8, 9, 10]) # число тестов
report['alpha'] = 0.05 # исходный уровень значимости

# считаем поправки
report['Метод Бонферрони'] = report['alpha'] / report['m'] 
report['Метод Шидака'] = 1 - (1 - report['alpha']) ** (1 / report['m'])

# рассчитываем поправку Холма
def holm_correction(row):
    m, alpha = int(row['m']), row['alpha'] # число тестов и уровень значимости
    result = []
    for i in range(m): # получаем номер текущего теста и считаем коррекцию 
        result += [alpha / (m - i)]
    return result

# поскольку поправка Холма возвращает много результатов - возьмём среднее по ним
report['Поправки Холма'] = report.apply(holm_correction, axis=1)
report['Средний ур. знач. при поправке Холма'] = report['Поправки Холма'].apply(np.mean) # считаем средний уровень значимости с учётом поправки Холма
print(report)

# строим график
report.set_index('m')[['Метод Бонферрони', 'Метод Шидака', 'Средний ур. знач. при поправке Холма']].plot(grid=True)
    
# подписываем оси
plt.xlabel('Число тестов'), plt.ylabel('Уровень значимости')
plt.legend(title = 'Метод коррекции'), plt.title('Скорректированные уровни значимости')
plt.show()

На практике чаще всего применяют коррекцию Бонферрони — из-за простоты, но можно применять и коррекцию Холма, поскольку она более «щадящая» по отношению к мощности теста. 

Cкорректированный уровень значимости стремится к 0. Например, если посчитать коррекцию методом Бонферрони для 1000 тестов, то получится, что уровень значимости должен быть равен 0.00005. 

На практике это означает, что с таким низким уровнем значимости мы практически всегда будем оказываться в ситуации, когда нулевая гипотеза не отвергается и, возможно, будем совершать частые ошибки второго рода (то есть пострадает мощность теста). Это может произойти даже при коррекции для десяти сравнений и выше.

Казалось бы, кому может понадобиться проводить десятки, сотни или даже тысячи тестов? Но такие ситуации в бизнесе возникают довольно часто. Например, маркетологи могут сравнивать одновременно десятки и сотни рекламных кампаний, а генетики — проводить тысячи одновременных генетических тестов. В таких ситуациях коррекции Бонферрони и Шидака (и даже их более продвинутые аналоги) не смогли бы помочь.

Чтобы справиться с этой проблемой, придумали специальные тесты для множественного сравнения гипотез:
  • ANOVA — аналог t-теста для ситуаций сравнения трёх и более выборок;
  • χ2-тест (читается «хи-квадрат») на независимость для сравнения пропорций, долей и шагов воронок — аналог z-теста для пропорций. Обратите внимание, что существует целое семейство тестов χ2, использующихся для самых разных целей. Для сравнения пропорций используется только тест на независимость (test of independence/association);
  • Тест Краскела-Уоллиса — аналог теста Манна-Уитни для ситуации множественных сравнений. С тестом Манна-Уитни вы познакомитесь в следующей теме.

вторник, 9 июля 2024 г.

Ошибки 1ого и 2ого рода

 


Уровень статистической значимости — это вероятность случайно получить в реальном наблюдении значение, далёкое от предполагаемого в нулевой гипотезе.

Уровень статистической значимости — это одновременно и вероятность ошибиться: отвергнуть нулевую гипотезу, потому что наблюдение отличается от предполагаемого значения слишком сильно.

Такая ошибка называется ошибкой первого рода, или ложнопозитивным результатом статистического теста. Это означает, что различий между сравниваемыми группами нет, но тест показал p-value меньше уровня значимости. Получается, есть основания отвергнуть H₀. Так, вероятность ошибки первого рода равна уровню значимости α.

Ошибка второго рода — ложнонегативный результат. Он указывает, что различия между группами есть, но тест показал p-value больше уровня значимости α и нет оснований отвергать H₀. Если обозначить вероятность ошибки второго рода как β, то параметр 1 - β будет называться мощностью статистического теста. Раз β — вероятность ошибиться, то 1 - β — вероятность не ошибиться, то есть правильно отклонить нулевую гипотезу, когда она неверна.

Мощность и значимость теста связаны напрямую: чем больше один из этих показателей, тем больше и другой. Предпочтительнее иметь малую значимость и большую мощность теста. Приходится искать баланс, и стандартные значения значимости в 5% и 1% — типичные решения этой задачи.

Пример: Если увеличить уровень статистической значимости теста с 0.01 до 0.05, то вероятность ошибки первого рода увеличится, а второго рода уменьшится.

воскресенье, 7 июля 2024 г.

Приоретизация гипотез

  • срочно / не срочно; важно / не важно (Матрица Эйзенхауэра — способ приоритизации, в котором задаче присваивают два свойства: важность и срочность)
  • Weighted Shortest Job First = (User-Business Value + Time Criticality + Risk Reduction or Opportunity Enablement) / Job Duration
  • RICE = (reach * impact * confidence) / efforts
при правильной оценке показателей (обычно берут 10 бальную шкалу или ряд Фибоначчи) оценки дают одинаковый или близкий порядок следования гипотез

reach - часто дружит с анкетированием
impact - часто дружит с UX исследованием и интервью
confidence - зависит от уверенности в оценке reach и impact
efforts - чем больше сотрудников процессов и времени задействовано, тем выше оценка

ICE, RICE, WSJF - считаются фреймворками :0

Определение важных метрик

Как правило, большинство задач по поиску опережающих метрик и декомпозиции уже выполнил кто-то до вас (в компании или best practicies на рынке)

Модели:
  • продуктовые
  • маркетинговые
  • финансовые модели
Опережающие метрики могут быть найдены из анализа:
  • доходов и расходов
  • маркетинговой и продуктовой воронки
  • когорт и юнит-экономики
  • пользовательских метрик
а так же:
  • при анализе стейкхолдеров
  • при анализу P&L
  • User jorney, UX, интервью с пользователями
  • список не исчерпывающий

Пример анализа стейкхолдеров e-comm

  • Инвесторы, владельцы
    • Рост стоимости бизнеса, увеличение дивидендов
    • Метрики: Выручка, прибыль
  • Chief executive officer
    • KPI от владельцев по росту выручки, прибыли
    • Метрики: Темпы роста выручки, прибыли
  • Chief marketing officer
    • Рост выручки, увеличение маркетингового бюджета
    • Метрики: Маркетинговый бюджет, ROMI, выручка
  • CTO
    • Стабильная работа продукта, бюджет разработки
    • Метрики: downtime&bugs, объем выполненных задач
  • Пользователи
    • удобство продукта, ценность, стоимость использования
    • ROI продукта, экономия времени, количество запросов в поддержку, удельное количество часов, потраченных на поддержку клиента
Отчет P&L из годового отчета Яндекс
image

P&L полезен руководителям компании, потому что:
  • Содержит информацию обо всех доходах и расходах компании. Включает платежи, которые нужно исполнить или получить по договору с отсрочкой.
  • Информация в P&L предоставляется за период, а не по состоянию на конкретную дату.
  • Имеет стандартную структуру. Её шаблоны для разных видов бизнеса легко найти.
  • Структура P&L уже декомпозирована на траты по направлениям деятельности подразделений и отделов. Это позволяет рассчитать юнит-экономику с минимальными дополнительными вычислениями.