Собесов

Хабр Статистика — что значит «95% доверительный интервал»

Статистика и теорверДоверительные интервалыЛёгкаяMiddle

Условие

PM смотрит результаты A/B-теста и видит: «средний uplift = 3.2%, 95% CI = [0.5%; 5.9%]». Он трактует это как «с вероятностью 95% истинный uplift между 0.5% и 5.9%». Прав ли он? Сформулируйте корректную интерпретацию.

Решение

Частотная интерпретация CI

«95% CI» означает: если мы повторим эксперимент много раз и каждый раз построим такой интервал, то 95% построенных интервалов накроют истинное значение параметра.

Это утверждение о методе, а не о конкретном интервале. Для конкретного теста истинное значение либо лежит в [0.5%; 5.9%], либо нет — это уже фиксированная характеристика, не случайная.

Поэтому формально некорректно: «вероятность 95% что истинный uplift в этом интервале».

Что хочется сказать (но требует Bayes)

Утверждение P(параметр ∈ [a, b]) = 0.95 валидно только в байесовой парадигме — это credible interval, основанный на posterior distribution. Он требует prior. На практике для аналитика разница в формулировке часто несущественна, но интервью-вопрос «вы знаете разницу?» — частый.

Правильная формулировка

«В 95% случаев такая процедура построения интервала захватывает истинное значение. По нашему конкретному тесту — мы не знаем, попали ли мы в эти 95% или в 5% промахов, но статистически уверенно говорим, что uplift отличается от 0, потому что CI не содержит 0».

Что более полезно знать на практике

  1. CI не содержит 0 ↔ p < α для двустороннего теста (приблизительно, при симметричных распределениях). Это связывает CI и стат. значимость.
  2. Ширина CI = 2 · 1.96 · SE ≈ MDE для уровня α=0.05 и power=50%. Чем уже CI, тем точнее оценка.
  3. CI сужается как 1/√n. Удвоение точности требует 4× выборки.
  4. Bayesian credible interval похож на CI при неинформативном prior и больших n.

Симуляция для интуиции

import numpy as np
true_mu = 5
hits = 0
for _ in range(1000):
    sample = np.random.normal(true_mu, 1, size=100)
    se = sample.std(ddof=1) / np.sqrt(100)
    lo, hi = sample.mean() - 1.96*se, sample.mean() + 1.96*se
    if lo <= true_mu <= hi:
        hits += 1
print(hits / 1000)   # ≈ 0.95

Подводные камни

  1. «CI содержит истинное значение с вероятностью 95%» — для конкретного интервала неверно.
  2. CI и prediction interval — разные вещи. Первый — про параметр, второй — про следующее наблюдение.
  3. Перекрытие двух CI не означает «нет разницы». Стандартно перекрывающиеся 95% CI могут соответствовать значимой разнице (вплоть до p≈0.005).
  4. CI для не-нормально распределённого среднего на маленьком n искажён. Используйте bootstrap или t-distribution.
  5. «CI узкий — оценка точная». Узкий CI может быть на плохом методе с занижением дисперсии (peeking, недоучёт корреляций) — узость не гарантия качества.

Эталонный ответ

CI — характеристика метода: 95% из построенных таким методом интервалов накрывают истинный параметр. Для конкретного теста сказать «вероятность 95%, что истинное значение в CI» строго неверно (это credible interval, требующий байесова подхода). Практически: 95% CI не содержит 0 ↔ результат значим на α=0.05.

Хочешь увидеть разбор?

Зарегистрируйся бесплатно — откроется развёрнутое решение этой задачи и ещё 4 на выбор.

Зарегистрироваться и увидеть разбор
Уже есть аккаунт? Войти