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

Карьерник — квиз-тренажёр в Telegram с 1500+ вопросами для собесов аналитика. SQL, Python, A/B, метрики. Бесплатно.

Зачем это знать

Байес — основа fraud detection, рекомендательных систем, Bayesian A/B-тестов, spam-фильтров. На собесах часто дают «парадокс»: "Болезнь редкая (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 байесовского подхода.

Пример в аналитике

Fraud detection

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. Из-за редкости.

Spam-фильтр

Наивный Байес — основа классических спам-фильтров.

Prior, likelihood, posterior

В Bayesian A/B-тестах:

  • Prior: наши ожидания о CR до теста (например, Beta(10, 90))
  • Likelihood: вероятность видеть полученные данные
  • Posterior: обновлённая оценка CR

Задача — построить posterior и принять решение.

Naive Bayes classifier

Для нескольких features:

P(class | x1, x2, ..., xn) ∝ P(class) × ∏ P(xi | class)

«Naive» предполагает независимость features. Часто работает несмотря на упрощение.

В 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

Bayesian A/B:

  1. Prior на CR: Beta(α, β)
  2. Observed: успехи и провалы
  3. Posterior: Beta(α + успехи, β + провалы)
  4. Probability что B > A: integral posterior

Преимущество: даёт прямой ответ «вероятность, что B лучше A».

На собесе

Задача

«10% mail spam. Spam содержит слово "free" в 70% случаев. Не-spam — в 5%. Пришло письмо со словом "free". Какая вероятность, что это spam?».

P(spam | "free") = (0.7 × 0.1) / (0.7 × 0.1 + 0.05 × 0.9)
                 = 0.07 / (0.07 + 0.045) = 0.609

61% — spam.

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

Не учитывать prior

Забыть умножить на P(A) → получить «обратную» likelihood, а не posterior.

Base rate fallacy

Ориентироваться только на accuracy теста, игнорируя редкость события. Классическая ошибка.

Независимость

Naive Bayes требует независимости features. Если features скоррелированы — результат смещённый.

Связанные темы

FAQ

Зачем учить при наличии ML?

Понимать фундаментально, почему модели работают. И Байес нужен в Bayesian A/B.

Prior где брать?

Из исторических данных, экспертного мнения, или uninformative prior.

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

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


Тренируйте статистику — откройте тренажёр с 1500+ вопросами для собесов.