Формула Байеса: тест на болезнь

Главная формула пересмотра убеждений и её самый знаменитый парадокс — точный медицинский тест на редкую болезнь.

Формула Байеса переворачивает условную вероятность: зная $P(B\mid A)$, она даёт $P(A\mid B)$ с учётом априорной вероятности $A$.

Мы умеем считать $P(B\mid A)$ — например, вероятность положительного теста при болезни. Но в жизни нас интересует обратное: $P(A\mid B)$ — вероятность болезни при положительном тесте. Формула Байеса связывает эти два направления, и её ответ часто шокирует. Эта теорема — не просто школьная формула, а целое мировоззрение. Байесовский взгляд состоит в том, что вероятность выражает степень нашей уверенности, и эта уверенность обновляется с каждым новым свидетельством. У нас есть априорное мнение (что мы думали до наблюдения), приходит свидетельство, и формула выдаёт апостериорное мнение (что разумно думать после). На этом принципе построены фильтры спама, медицинская диагностика, навигаторы, уточняющие ваше положение по сигналам GPS, и значительная часть современного машинного обучения. Понять Байеса один раз — значит навсегда изменить то, как вы взвешиваете доказательства в любой области жизни.

Вывод формулы

Из определения условной вероятности $P(A\cap B)$ можно записать двумя способами: $P(A)P(B\mid A)$ и $P(B)P(A\mid B)$. Приравняв и разделив, получаем теорему Байеса:

$$P(A\mid B)=\frac{P(B\mid A)\,P(A)}{P(B)}.$$

Знаменатель $P(B)$ обычно раскрывают формулой полной вероятности по гипотезам «$A$» и «не $A$»:

$$P(B)=P(B\mid A)P(A)+P(B\mid \bar{A})P(\bar{A}).$$

Парадокс редкой болезни

Пусть болезнь встречается у $1\%$ людей: $P(D)=0{,}01$. Тест точен: при болезни даёт «+» в $99\%$ случаев ($P(+\mid D)=0{,}99$), а у здорового ошибочно срабатывает лишь в $5\%$ ($P(+\mid \bar{D})=0{,}05$). У вас тест положителен. Какова вероятность, что вы больны? Интуиция кричит «99%». Посчитаем по Байесу:

$$P(D\mid +)=\frac{0{,}99\cdot 0{,}01}{0{,}99\cdot 0{,}01+0{,}05\cdot 0{,}99}=\frac{0{,}0099}{0{,}0594}\approx 0{,}1667.$$

Всего около $17\%$. Причина в том, что здоровых очень много, и даже маленький процент их ложных срабатываний даёт больше положительных тестов, чем все настоящие больные. Проверим симуляцией.

import random
random.seed(8)

n = 2000000
sick_and_pos = 0
pos = 0
for _ in range(n):
    sick = random.random() < 0.01
    if sick:
        test = random.random() < 0.99
    else:
        test = random.random() < 0.05
    if test:
        pos += 1
        if sick:
            sick_and_pos += 1
print("P(болен | +) симуляция:", round(sick_and_pos / pos, 4))
print("Теория:                ", round(0.99*0.01/(0.99*0.01+0.05*0.99), 4))

Вывод:

P(болен | +) симуляция: 0.1664
Теория:                 0.1667

Спам-фильтр — та же логика

Байесовский спам-фильтр работает точно так же: слово «выигрыш» встречается в $80\%$ спама и лишь в $4\%$ обычных писем. Зная априорную долю спама и эти условные вероятности, фильтр пересчитывает $P(\text{спам}\mid \text{слово})$. Каждое подозрительное слово сдвигает оценку, и письма сортируются по накопленной байесовской вероятности.

Как работает под капотом

Симуляция буквально строит две группы людей: больных (их мало) и здоровых (их много), прогоняет каждого через тест с его процентом срабатывания и считает, какая доля среди всех положительных оказалась реально больной. Это и есть $P(D\mid +)$ по определению. Никакой формулы код не использует — он честно перебирает популяцию. Совпадение с формулой Байеса доказывает, что она просто аккуратно учитывает, насколько редко событие до наблюдения.

Частые ошибки

Главная ошибка — «подмена условия»: принимать высокую точность теста $P(+\mid D)$ за вероятность болезни $P(D\mid +)$. Это и есть знаменитая «ошибка прокурора». Вторая — игнорировать априорную вероятность (базовую частоту): при редком событии она решает всё. Третья — забыть про ложные срабатывания у здоровых; именно их абсолютное число «топит» истинных больных, когда болезнь редка.

Итог

  • Формула Байеса даёт $P(A\mid B)$ из $P(B\mid A)$ и априорной $P(A)$.
  • При редком событии даже точный тест даёт много ложных тревог.
  • Базовую частоту (априор) игнорировать нельзя — она определяет ответ.
  • Спам-фильтры и медицина используют ровно эту логику пересмотра убеждений.
Проверьте себя
1. Что вычисляет формула Байеса?
AP(B | A) из P(A | B)
BP(A | B) из P(B | A) и априорной P(A)
CТолько P(A ∩ B)
DЧисло испытаний
2. Почему при точном тесте и редкой болезни P(болен | +) всего ~17%?
AТест неточен
BЗдоровых много, и их ложные срабатывания дают большинство положительных
CФормула ошибочна
DБолезнь на самом деле частая
3. Как называется ошибка подмены P(болен|+) высокой точностью теста P(+|болен)?
AЗакон больших чисел
BОшибка прокурора (подмена условия)
CПарадокс Симпсона
DОшибка игрока