Миф о 95 %: руководство по самой распространённой простейшей ошибке в Data Science

Допустим, вы аналитик. Вы только что провели A/B-тест или вычислили средний чек, и ваш скрипт на Python выдал:

95% Confidence Interval: [100, 120]

Вы приходите к продакт-менеджеру и уверенно заявляете:

«С вероятностью 95% истинный средний чек лежит между 100 и 120 рублями».

Все довольны и соглашаются, но на самом деле в этом высказывании скрыта серьёзная неточность.

«Нет никакой «вероятности» — параметр либо внутри, либо вне интервала!»


1. Проверка интуиции

Представьте, что вам выдали 95% доверительный интервал [5, 10]. Какова вероятность, что истинное значение лежит внутри?

  1. 95% (ну, это же доверительный интервал).
  2. 5% (а может, вопрос хитрый?).
  3. 0 или 1 (либо попало, либо нет).
  4. 50% (ровно половина случаев?).
Правильный ответ

3 – либо 0, либо 1. Интервал уже получен: границы зафиксированы, а истинный параметр — постоянная величина. Либо он внутри, либо снаружи.

В чём подвох?

Когда мы слышим «95%», представляем невидимую «шарик» правды и «стены» интервала. Но в классической статистике:

  • Параметр μ — это константа, он не «болтается».
  • Интервал — случайная величина, «коробка», которую мы надеваем на правду.

После вычисления промежутка истинное значение либо зажато между границами (вероятность 1), либо нет (вероятность 0).


2. Статистика без фокусов

Частотный подход предполагает, что истина фиксирована, а мы перемещаемся. Представьте истинный рост всех людей — это конкретное число, скажем, 170.543 см. Мы не можем измерить всех, поэтому берём выборки, и среднее будет прыгать.

Доверительный интервал — это не цельная «комната» для истины, а дрожащий каркас, который мы надеваем на этот неподвижный показатель.

import numpy as np
import scipy.stats as stats

TRUE_MEAN = 100
POP_STD = 15
N = 50
TRIALS = 10

print(f"Скрытая истина: {TRUE_MEAN}")

print(f"{'№':<3} | {'Нижняя':<8} | {'Верхняя':<8} | {'Попало?'}")
print("-" * 40)

for i in range(TRIALS):
    sample = np.random.normal(TRUE_MEAN, POP_STD, N)
    mean = sample.mean()
    sem = stats.sem(sample)
    low, high = stats.t.interval(0.95, N-1, loc=mean, scale=sem)
    hit = "✅" if low <= TRUE_MEAN <= high else "❌"
    print(f"{i+1:<3} | {low:.2f}    | {high:.2f}    | {hit}")

Вы увидите: в большинстве попыток интервал «попадает», но иногда промахивается — и тогда вероятность попадания равна 0.

Миф о 95 %: руководство по самой распространённой простейшей ошибке в Data Science
Ложная интуиция и жестокая реальность

3. Лес интервалов

Запустим 100 независимых экспериментов и построим для каждого интервал. Если он захватил истину — рисуем зелёную линию, иначе — красную.

import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as stats

NP = 100
N = 50
MU = 0
SIGMA = 1

plt.figure(figsize=(10,8))
plt.axvline(MU, color="black", linewidth=3, label="Истина")

miss = 0
np.random.seed(42)

for i in range(NP):
    s = np.random.normal(MU, SIGMA, N)
    low, high = stats.t.interval(0.95, N-1, loc=s.mean(), scale=stats.sem(s))
    color = "green" if low <= MU <= high else "red"
    if color=="red": miss += 1
    plt.hlines(i, low, high, colors=color, linewidth=2, alpha=0.7)

plt.title(f"Forest Plot: {miss} промахов из {NP}")
plt.xlabel("Значение")
plt.yticks([])
plt.legend()
plt.show()

Вы видите множество «зелёных» и несколько «красных». Ваш эксперимент — одна линия: либо вы попали, либо промахнулись.

Вывод: 95% — свойство метода, а не вашего конкретного интервала.


4. Модель «кольцеброс»

Наша интуиция строится на модели «стрельбы по мишени», но правильнее представить старый советский «кольцеброс»:

  1. Колышек — истинный параметр.
  2. Кольца — доверительные интервалы.
  3. Бросок — эксперимент.
Кольцеброс
Кольцеброс — метафора доверительного интервала

«95%» описывает вашу меткость: если кольцо уже упало, либо оно на колышке, либо нет.


5. Байес vs частота

Наш мозг предпочитает Байесову логику — параметр как случайная величина и фраза «с вероятностью 95% параметр лежит здесь» корректна в байесовской интерпретации (так называемый «кредибельный интервал»).

При больших данных байесовский и частотный интервалы почти совпадают, но на малых выборках различие может быть критичным.


6. Зачем нужны доверительные интервалы

«Если я не знаю, попал ли я, зачем мне эти интервалы?»

Их задача — контролировать надёжность процесса, а не гарантировать точный ответ в каждом отдельном случае.

Вы — не снайпер, вы — владелец казино

  • При 100 решениях вы примете около 95 правильных и ошибётесь в ~5.
  • В долгосрочной перспективе процент ошибок стабилен.

Так же, как казино выигрывает на дистанции, вы управляете риском.


7. Как формулировать

❌ Никогда не говорите:

«С вероятностью 95% истинное значение здесь».

✅ Правильно (для статистиков):

«При многократном повторении эксперимента 95% таких интервалов содержат истинное значение».

✅ Для бизнеса:

«Наш метод обеспечивает диапазон [X, Y] и работает с точностью 95%. Риск ошибки контролируемый».

Это честная формулировка, подчеркивающая не уверенность в конкретном случае, а надежность метода.

 

Источник

Читайте также