Формула Байеса простыми словами
Карьерник — квиз-тренажёр в 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:
- Prior на CR: Beta(α, β)
- Observed: успехи и провалы
- Posterior: Beta(α + успехи, β + провалы)
- 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.60961% — spam.
Частые ошибки
Не учитывать prior
Забыть умножить на P(A) → получить «обратную» likelihood, а не posterior.
Base rate fallacy
Ориентироваться только на accuracy теста, игнорируя редкость события. Классическая ошибка.
Независимость
Naive Bayes требует независимости features. Если features скоррелированы — результат смещённый.
Связанные темы
FAQ
Зачем учить при наличии ML?
Понимать фундаментально, почему модели работают. И Байес нужен в Bayesian A/B.
Prior где брать?
Из исторических данных, экспертного мнения, или uninformative prior.
Всегда правильный?
Формула всегда. Результат зависит от корректности входов.
Тренируйте статистику — откройте тренажёр с 1500+ вопросами для собесов.