Формула Байеса простыми словами
P(A|B)=P(A) при P(B)>0?Содержание:
Зачем это знать
Байес — основа антифрода, рекомендательных систем, байесовских A/B-тестов, спам-фильтров. На собесах часто дают «парадокс»: «Болезнь редкая (1%), тест точный (99%). Если тест положительный — какая вероятность болеть?». Без Байеса — неправильный ответ.
Для middle+ аналитика знание Байеса отделяет вас от тех, кто умеет только запускать t-test.
Короткое объяснение
Формула Байеса позволяет обновить вероятность гипотезы с учётом новых данных.
P(A | B) = P(B | A) × P(A) / P(B)Словами: вероятность A при условии B = (вероятность B при условии A × вероятность A) / вероятность B.
Термины
- P(A) — prior (априорная вероятность A)
- P(B|A) — likelihood (насколько B вероятен, если A истинно)
- P(A|B) — posterior (обновлённая вероятность A после наблюдения B)
- P(B) — evidence
Классическая задача
Болезнь редкая: 1% популяции. Тест:
- 99% точность: если болен, тест positive с вероятностью 0.99
- 5% false positive: если здоров, тест positive с вероятностью 0.05
Вопрос: тест positive → какая вероятность болеть?
Решение
A = «болен», B = «positive».
P(A) = 0.01
P(B|A) = 0.99
P(B|¬A) = 0.05
P(B) = P(B|A) × P(A) + P(B|¬A) × P(¬A)
= 0.99 × 0.01 + 0.05 × 0.99
= 0.0099 + 0.0495 = 0.0594
P(A|B) = (0.99 × 0.01) / 0.0594 ≈ 0.167 = 17%Всего 17%! Не 99%, как многие думают. Из-за редкости болезни.
Интуиция
- Prior низкий (1%) — «поверить» трудно
- Данных (positive test) недостаточно, чтобы сильно пересилить prior
- Posterior растёт, но остаётся умеренным
Это и есть power байесовского подхода.
Пример в аналитике
Антифрод
P(fraud) = 0.1% (prior). P(подозрительная активность | fraud) = 90%. P(подозрительная активность | не fraud) = 5%.
P(fraud | подозрительная) = (0.9 × 0.001) / (0.9 × 0.001 + 0.05 × 0.999)
≈ 0.0175 = 1.75%Даже при подозрении — скорее всего не fraud. Из-за редкости.
Спам-фильтр
Наивный Байес — основа классических спам-фильтров.
Prior, likelihood, posterior
В байесовских A/B-тестах:
- Prior: наши ожидания о конверсии до теста (например, Beta(10, 90))
- Likelihood: вероятность увидеть полученные данные
- Posterior: обновлённая оценка конверсии
Задача — построить posterior и принять решение.
Наивный байесовский классификатор
Для нескольких признаков:
P(class | x1, x2, ..., xn) ∝ P(class) × ∏ P(xi | class)«Наивный» предполагает независимость признаков. Часто работает несмотря на упрощение.
В Python
def bayes(prior_a, p_b_given_a, p_b_given_not_a):
p_b = p_b_given_a * prior_a + p_b_given_not_a * (1 - prior_a)
return p_b_given_a * prior_a / p_b
# Наш пример
print(bayes(0.01, 0.99, 0.05)) # 0.167Использование в A/B
Байесовский A/B:
- Prior на конверсию: Beta(α, β)
- Наблюдения: успехи и провалы
- Posterior: Beta(α + успехи, β + провалы)
- Вероятность что B > A: интеграл posterior
Преимущество: даёт прямой ответ «вероятность, что B лучше A».
На собесе
Задача
«10% писем — спам. Спам содержит слово "free" в 70% случаев. Не-спам — в 5%. Пришло письмо со словом "free". Какая вероятность, что это спам?».
P(spam | "free") = (0.7 × 0.1) / (0.7 × 0.1 + 0.05 × 0.9)
= 0.07 / (0.07 + 0.045) = 0.60961% — спам.
Частые ошибки
Не учитывать prior
Забыть умножить на P(A) → получить «обратную» likelihood, а не posterior.
Base rate fallacy
Ориентироваться только на точность теста, игнорируя редкость события. Классическая ошибка — та самая болезнь на 17%.
Независимость признаков
Наивный Байес требует независимости признаков. Если признаки скоррелированы — результат смещённый.
Путать P(A|B) и P(B|A)
Классическая путаница: «точность теста 99%» — это P(positive | sick), а не P(sick | positive). Это принципиально разные вещи.
Plug-and-chug без проверки порядка величин
Получили 0.83 и не задумались, что prior был 0.001 — значит надо было проверить формулу и данные.
Связанные темы
FAQ
Зачем учить при наличии ML?
Понимать фундаментально, почему модели работают. И Байес нужен в Bayesian A/B.
Prior где брать?
Из исторических данных, экспертного мнения или неинформативного prior.
Всегда правильный?
Формула — да. Результат зависит от корректности входов.