Формула Байеса простыми словами

Проверь себя · 1/3разбор после ответа
В каком случае выполняется равенство 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 и принять решение.

Готовься к собесу аналитика как в Duolingo
10 минут в день — SQL, Python, A/B, метрики. 1700+ вопросов в Telegram
Открыть Карьерник в Telegram

Наивный байесовский классификатор

Для нескольких признаков:

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:

  1. Prior на конверсию: Beta(α, β)
  2. Наблюдения: успехи и провалы
  3. Posterior: Beta(α + успехи, β + провалы)
  4. Вероятность что 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.609

61% — спам.

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

Не учитывать 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.

Всегда правильный?

Формула — да. Результат зависит от корректности входов.