Формула Байеса 🔄
Представь, что тебе пришёл результат медицинского теста. Тест очень точный: он ловит 99% больных и ошибается только в 1% случаев на здоровых. Результат — положительный. Какова вероятность, что ты действительно болен?
Почти каждый человек, включая — и это документированный факт — большинство практикующих врачей в исследовании Гигеренцера, отвечает «99%» или «около того». Правильный ответ при болезни, встречающейся у одного человека из двухсот, — 33%. Две трети людей с положительным результатом этого прекрасного теста здоровы. И это не парадокс, не софизм и не подвох: это прямое следствие одной короткой формулы, которую в 1763 году опубликовали посмертно от имени пресвитерианского священника Томаса Байеса.
Формула Байеса — это, без преувеличения, самая важная формула во всей этой части курса. Она отвечает на вопрос, который постоянно задаёт любая обучающаяся система: «я наблюдал данные — что мне теперь думать о причине, которая их породила?». Модель видит письмо и должна решить, спам это или нет. Врач видит анализ и должен оценить диагноз. Антифрод-система видит транзакцию и должна оценить, мошенничество ли это. Поисковик видит клик и обновляет своё представление о том, что́ ты искал. Все эти задачи имеют одинаковую структуру: у нас есть следствие (данные), и нам нужна вероятность причины (гипотезы). А напрямую измерять мы умеем обычно наоборот — вероятность данных при известной причине.
Формула Байеса — это машина по развороту условной вероятности. Она берёт то, что легко измерить ($P(\text{данные}\mid\text{гипотеза})$), и превращает в то, что нужно для решения ($P(\text{гипотеза}\mid\text{данные})$). Причём делает это не бесплатно: ценой разворота становится необходимость честно указать, во что ты верил до эксперимента. Именно на этом шаге ломается интуиция большинства людей — и именно поэтому этот урок стоит разобрать медленно и до конца.
В этом уроке мы выведем формулу из теоремы умножения (одна строчка алгебры), разберём словарь — априорная вероятность, правдоподобие, апостериорная вероятность, нормировочный множитель, — по косточкам разберём задачу о медицинском тесте, научимся обновлять веру последовательно (когда данные приходят порциями), переведём всё в удобные шансы и байесовские факторы, а потом посмотрим, где эта формула живёт в машинном обучении: генеративные модели, наивный Байес, спам-фильтры, MAP-оценка и регуляризация, байесовские A/B-тесты и калибровка порога при несбалансированных классах.
🎯 Ты узнаешь:
- Как за две строки вывести формулу Байеса из теоремы умножения и почему в её знаменателе стоит формула полной вероятности
- Что такое априорная вероятность, правдоподобие, апостериорная вероятность и нормировочный множитель — и почему путать первые две смертельно опасно
- Почему при редкой болезни даже 99-процентный тест даёт две трети ложных срабатываний, и как посчитать это в уме за 15 секунд
- Как записать Байеса через шансы и байесовский фактор, чтобы обновление превратилось в простое умножение (а в логарифмах — в сложение)
- Где формула Байеса стоит внутри ML: $P(y\mid x)\propto P(x\mid y)P(y)$, наивный байесовский классификатор, MAP-оценка как регуляризация и калибровка порога при дисбалансе классов
История: откуда это взялось?
Томас Байес (1702–1761) был английским пресвитерианским священником и математиком-любителем, членом Лондонского королевского общества. При жизни он не опубликовал ни одной математической работы под своим именем. Его знаменитый «Опыт решения задачи из учения о случайных событиях» («An Essay towards solving a Problem in the Doctrine of Chances») нашёл в бумагах покойного его друг Ричард Прайс и представил Королевскому обществу в 1763 году — через два года после смерти автора.
Задача, которую решал Байес, звучала так: шар катится по бильярдному столу и останавливается в неизвестной точке. Затем бросают ещё шары и сообщают только, слева или справа от первого они легли. Что можно сказать о положении первого шара? Формально: мы наблюдаем $k$ успехов в $n$ испытаниях и хотим оценить неизвестную вероятность успеха $p$. Это была обратная задача вероятности — до Байеса математики уверенно считали, с какой вероятностью выпадет столько-то орлов при известной честности монеты, но не умели двигаться в обратную сторону: от наблюдений к параметру.
Современный вид формуле придал Пьер-Симон Лаплас, который пришёл к ней независимо в 1774 году и всю жизнь применял к астрономии, демографии и судебной статистике. Именно Лаплас в «Опыте философии теории вероятностей» (1814) сформулировал то, что мы сейчас называем байесовским мышлением, и посчитал, например, вероятность того, что вероятность рождения мальчика выше, чем девочки, по парижским данным о рождениях. Долгое время подход называли «вероятностью причин» или «обратной вероятностью»; прилагательное «байесовский» вошло в оборот только в 1950-х годах.
А мостик в сегодня перекинула Вторая мировая. В Блетчли-Парке Алан Тьюринг и Ирвинг Джон Гуд использовали именно байесовское обновление в шансах для взлома «Энигмы»: метод Banburismus накапливал улики в пользу гипотезы о настройке шифровальной машины, складывая логарифмы отношений правдоподобия. Тьюринг даже ввёл единицу измерения силы улики — бан (и десятую его часть, децибан). Это ровно та схема, которую мы разберём в разделе про шансы, и ровно та, что сегодня работает внутри логистической регрессии, наивного Байеса и байесовской оптимизации гиперпараметров.
Вывод: одна строчка алгебры
Интуиция
Давай разберёмся, откуда вообще берётся формула. Всё держится на одном простом наблюдении: вероятность того, что два события произошли вместе, можно посчитать двумя способами — и оба обязаны дать один и тот же ответ.
Представь класс из 100 человек. Событие $A$ — «человек носит очки», событие $B$ — «человек программист». Сколько людей в классе — программисты в очках? Можно так: взять всех программистов и посмотреть, какая их доля в очках. А можно наоборот: взять всех очкариков и посмотреть, какая их доля — программисты. Количество людей в пересечении от способа подсчёта не зависит. Вот и вся идея.
Формально
Теорема умножения вероятностей (урок 229) говорит, что вероятность совместного наступления $A$ и $B$ раскладывается через условную вероятность:
$$P(A \cap B) = P(B) \cdot P(A \mid B)$$Но точно так же её можно разложить в другом порядке — вероятность пересечения симметрична, ей всё равно, что мы называем «условием»:
$$P(A \cap B) = P(A) \cdot P(B \mid A)$$Левые части одинаковые, значит равны и правые:
$$P(B) \cdot P(A \mid B) = P(A) \cdot P(B \mid A)$$Осталось поделить обе части на $P(B)$ (при $P(B) > 0$):
$$\boxed{\,P(A \mid B) = \frac{P(B \mid A) \cdot P(A)}{P(B)}\,}$$Всё. Это и есть формула Байеса. В ней нет ничего, кроме определения условной вероятности и коммутативности пересечения множеств. Вся её мощь — не в сложности вывода, а в том, что она разворачивает направление условной вероятности.
Определение: Пусть $A$ и $B$ — события, причём $P(B) > 0$. Формулой Байеса называется соотношение
$$P(A \mid B) = \frac{P(B \mid A)\, P(A)}{P(B)},$$выражающее условную вероятность $A$ при условии $B$ через «обратную» условную вероятность $P(B\mid A)$ и безусловные вероятности $P(A)$ и $P(B)$.
Обычно нам неизвестна напрямую и вероятность $P(B)$ в знаменателе — зато мы знаем, как $B$ может возникнуть при каждой из гипотез. Здесь вступает формула полной вероятности из прошлого урока: если $H_1, H_2, \dots, H_n$ — полная группа попарно несовместных гипотез, то
$$P(B) = \sum_{i=1}^{n} P(H_i)\, P(B \mid H_i)$$Подставим — и получим рабочую форму, ту самую, которой ты будешь пользоваться в 99% задач:
Определение (формула Байеса для системы гипотез): Если $H_1, \dots, H_n$ — полная группа попарно несовместных гипотез с $P(H_i) > 0$, а $B$ — событие с $P(B) > 0$, то для каждого $k$
$$P(H_k \mid B) = \frac{P(H_k)\, P(B \mid H_k)}{\displaystyle\sum_{i=1}^{n} P(H_i)\, P(B \mid H_i)}$$
Обрати внимание на структуру. Числитель — это вклад одной конкретной гипотезы. Знаменатель — сумма вкладов всех гипотез. То есть формула Байеса просто говорит: посчитай, какую долю от общего «объёма правдоподобия» даёт интересующая тебя гипотеза. Знаменатель одинаков для всех $H_k$ — это чистая нормировка, чтобы апостериорные вероятности в сумме дали единицу.
Примеры с разбором
Пример 1 (простой): два ящика с деталями
На складе два ящика. В первом 3 бракованных детали из 10, во втором — 1 бракованная из 10. Кладовщик наугад берёт ящик и достаёт из него деталь. Деталь оказалась бракованной. Из какого ящика её, скорее всего, взяли?
Решение:
Шаг 1. Введём гипотезы. $H_1$ — «взят первый ящик», $H_2$ — «взят второй». Ящик выбирается наугад, значит $P(H_1) = P(H_2) = 0{,}5$.
Шаг 2. Выпишем правдоподобия — вероятность наблюдения при каждой гипотезе. $B$ — «деталь бракованная».
$$P(B \mid H_1) = 0{,}3, \qquad P(B \mid H_2) = 0{,}1$$Шаг 3. Считаем знаменатель по формуле полной вероятности:
$$P(B) = 0{,}5 \cdot 0{,}3 + 0{,}5 \cdot 0{,}1 = 0{,}15 + 0{,}05 = 0{,}2$$Шаг 4. Применяем Байеса:
$$P(H_1 \mid B) = \frac{0{,}15}{0{,}2} = 0{,}75, \qquad P(H_2 \mid B) = \frac{0{,}05}{0{,}2} = 0{,}25$$Проверим наш ответ: $0{,}75 + 0{,}25 = 1$ ✅ — апостериорные вероятности образуют полную группу, как и положено.
Ответ: с вероятностью $0{,}75$ деталь из первого ящика.
📌 Смотри, что произошло: до наблюдения ящики были равноправны (50/50), после наблюдения перевес стал 3:1. Ровно во столько раз, во сколько отличаются правдоподобия ($0{,}3 : 0{,}1 = 3 : 1$). Это не совпадение — мы вернёмся к этому в разделе про шансы.
Пример 2 (средний): три станка
Цех выпускает детали на трёх станках. Первый даёт 25% продукции при доле брака 5%, второй — 35% при браке 4%, третий — 40% при браке 2%. Взятая наугад деталь оказалась бракованной. Найди вероятности того, что она сделана на каждом из станков.
Решение:
Шаг 1. Гипотезы и априорные вероятности:
$$P(H_1) = 0{,}25, \quad P(H_2) = 0{,}35, \quad P(H_3) = 0{,}40$$Проверка: $0{,}25 + 0{,}35 + 0{,}40 = 1$ ✅
Шаг 2. Правдоподобия: $P(B\mid H_1) = 0{,}05$, $P(B\mid H_2) = 0{,}04$, $P(B\mid H_3) = 0{,}02$.
Шаг 3. Считаем совместные вероятности (числители):
$$0{,}25 \cdot 0{,}05 = 0{,}0125$$$$0{,}35 \cdot 0{,}04 = 0{,}0140$$
$$0{,}40 \cdot 0{,}02 = 0{,}0080$$
Шаг 4. Знаменатель — их сумма:
$$P(B) = 0{,}0125 + 0{,}0140 + 0{,}0080 = 0{,}0345$$Шаг 5. Делим каждый числитель на знаменатель:
$$P(H_1\mid B) = \frac{0{,}0125}{0{,}0345} \approx 0{,}3623$$$$P(H_2\mid B) = \frac{0{,}0140}{0{,}0345} \approx 0{,}4058$$
$$P(H_3\mid B) = \frac{0{,}0080}{0{,}0345} \approx 0{,}2319$$
Проверим наш ответ: $0{,}3623 + 0{,}4058 + 0{,}2319 = 1{,}0000$ ✅
Ответ: $\approx 36{,}2\%$, $\approx 40{,}6\%$, $\approx 23{,}2\%$.
📌 Обрати внимание на переворот: до наблюдения самым вероятным «автором» детали был третий станок (40% продукции), после того как выяснилось, что деталь бракованная — второй. Третий станок аккуратный, ему бракованную деталь «не идёт».
Пример 3 (сложный): три монеты
В коробке три монеты: две честные и одна фальшивая — с орлом на обеих сторонах. Наугад вынули монету и подбросили три раза. Все три раза выпал орёл. Какова вероятность, что монета фальшивая?
Решение:
Шаг 1. Гипотезы: $H_{\text{ч}}$ — «монета честная», $H_{\text{ф}}$ — «монета фальшивая».
$$P(H_{\text{ч}}) = \frac{2}{3}, \qquad P(H_{\text{ф}}) = \frac{1}{3}$$Шаг 2. Событие $B$ — «три орла подряд». Правдоподобия:
$$P(B \mid H_{\text{ч}}) = \left(\frac{1}{2}\right)^3 = \frac{1}{8} = 0{,}125$$$$P(B \mid H_{\text{ф}}) = 1^3 = 1$$
Шаг 3. Числители:
$$\frac{2}{3} \cdot \frac{1}{8} = \frac{2}{24} = \frac{1}{12} \approx 0{,}0833$$$$\frac{1}{3} \cdot 1 = \frac{1}{3} \approx 0{,}3333$$
Шаг 4. Знаменатель:
$$P(B) = \frac{1}{12} + \frac{1}{3} = \frac{1}{12} + \frac{4}{12} = \frac{5}{12}$$Шаг 5. Апостериорная вероятность фальшивой монеты:
$$P(H_{\text{ф}} \mid B) = \frac{1/3}{5/12} = \frac{1}{3} \cdot \frac{12}{5} = \frac{4}{5} = 0{,}8$$Ответ: $0{,}8$, то есть 80%.
Проверим на здравый смысл: три орла подряд — улика в пользу фальшивки, но не убийственная: у честной монеты такое случается в каждой восьмой серии. Поэтому вера в фальшивку выросла с 33% до 80%, но не до 99%. А вот если бы выпало десять орлов подряд, правдоподобие честной монеты было бы $1/1024$, и апостериорная вероятность фальшивки поднялась бы до $\frac{1/3}{2/3 \cdot 1/1024 + 1/3} = \frac{1024}{1026} \approx 0{,}998$.
Почему это важно
Разворот условной вероятности — не академическая забава, а базовая операция любого вывода из данных. Природа (или пользователь, или атакующий) выбирает скрытое состояние $y$, а мы видим только его проявление $x$. Генерировать данные из состояния природа умеет; нам же нужно идти в обратную сторону. Формула Байеса — единственный математически корректный способ это сделать, и любой алгоритм, который «угадывает причину по следствию», либо явно её использует, либо неявно её приближает.
Словарь: четыре слова, которые надо выучить
Интуиция
У формулы Байеса четыре части, и у каждой есть собственное имя. Эти имена — не педантизм: как только ты начнёшь называть вещи правильно, половина типичных ошибок исчезнет сама, потому что путаница в этой теме почти всегда — путаница в терминах.
Перепишем формулу в «именованном» виде для гипотезы $H$ и данных $D$:
$$\underbrace{P(H \mid D)}_{\text{апостериорная}} = \frac{\overbrace{P(D \mid H)}^{\text{правдоподобие}} \cdot \overbrace{P(H)}^{\text{априорная}}}{\underbrace{P(D)}_{\text{нормировка}}}$$Априорная вероятность $P(H)$ (prior) — во что ты верил до того, как увидел данные. Это базовая ставка, распространённость, доля в популяции, наше исходное знание. В медицине — распространённость болезни, в спам-фильтре — доля спама в почте вообще, в ML — доля класса в обучающей выборке.
Правдоподобие $P(D \mid H)$ (likelihood) — насколько хорошо гипотеза объясняет увиденное. Это не вероятность гипотезы. Это вероятность данных, если гипотеза верна. Тест с чувствительностью 99% даёт правдоподобие $0{,}99$ для гипотезы «болен» при положительном результате.
Апостериорная вероятность $P(H \mid D)$ (posterior) — во что ты веришь после того, как увидел данные. Это ответ задачи, то, ради чего всё затевалось.
Нормировочный множитель $P(D)$ (evidence, marginal likelihood) — вероятность увидеть такие данные вообще, при любой из гипотез. Считается формулой полной вероятности. Он одинаков для всех гипотез, поэтому его роль чисто техническая: подогнать сумму апостериорных вероятностей до единицы.
Определение: В формуле Байеса $P(H\mid D) = \dfrac{P(D\mid H)P(H)}{P(D)}$ величина $P(H)$ называется априорной вероятностью гипотезы, $P(D\mid H)$ — правдоподобием данных при гипотезе, $P(H\mid D)$ — апостериорной вероятностью гипотезы, а $P(D)$ — нормировочным множителем (маргинальным правдоподобием, evidence).
Отсюда — важнейшая рабочая запись, которую в ML пишут чаще самой формулы:
$$P(H \mid D) \;\propto\; P(D \mid H) \cdot P(H)$$Значок $\propto$ читается «пропорционально». Смысл: апостериорная ∝ правдоподобие × априорная. Знаменатель можно вообще не считать, если тебе нужно только сравнить гипотезы между собой или найти самую вероятную — он одинаков и на сравнение не влияет. А если нужны сами вероятности, посчитай числители для всех гипотез и подели каждый на их сумму. Это ровно то, что делает softmax в нейросети: берёт ненормированные «оценки правдоподобия» и превращает их в распределение.
Примеры с разбором
Пример 4 (простой): называем вещи своими именами
В городе 2% жителей — курьеры. Курьер проезжает мимо камеры в среднем 8 раз за смену, обычный житель — 1 раз. Камера зафиксировала человека. Разложи задачу по словарю.
Решение:
Шаг 1. Гипотеза $H$: «человек — курьер». Априорная вероятность $P(H) = 0{,}02$ — это доля курьеров в городе, наше знание до наблюдения.
Шаг 2. Данные $D$: «человек зафиксирован камерой». Правдоподобия пропорциональны частоте проездов: курьер попадает под камеру в 8 раз чаще. Возьмём $P(D\mid H) = 8c$ и $P(D \mid \bar H) = 1c$, где $c$ — общий множитель.
Шаг 3. Ненормированные апостериорные (числители):
$$0{,}02 \cdot 8c = 0{,}16c, \qquad 0{,}98 \cdot 1c = 0{,}98c$$Шаг 4. Нормировочный множитель — их сумма: $1{,}14c$. Общий множитель $c$ сокращается — вот почему в правдоподобиях достаточно знать отношение.
$$P(H \mid D) = \frac{0{,}16}{1{,}14} \approx 0{,}1404$$Ответ: $\approx 14{,}0\%$. Априорная $0{,}02$ → апостериорная $0{,}14$: улика в 8 раз усилила гипотезу, но 2% базовой ставки — тяжёлый груз.
Пример 5 (средний): почему нормировку можно не считать
Классификатор различает три класса писем: «работа», «реклама», «спам» с априорными долями $0{,}5$, $0{,}3$, $0{,}2$. В письме встретилось слово «счёт», правдоподобия которого $0{,}12$, $0{,}05$, $0{,}20$ соответственно. Какой класс наиболее вероятен и с какой вероятностью?
Решение:
Шаг 1. Считаем ненормированные апостериорные — просто произведения:
$$\text{работа: } 0{,}5 \cdot 0{,}12 = 0{,}060$$$$\text{реклама: } 0{,}3 \cdot 0{,}05 = 0{,}015$$
$$\text{спам: } 0{,}2 \cdot 0{,}20 = 0{,}040$$
Шаг 2. Уже на этом шаге ответ на вопрос «какой класс вероятнее» готов: максимум у «работы» ($0{,}060$). Знаменатель одинаков для всех трёх — он не может изменить порядок.
Шаг 3. Если нужны сами вероятности, нормируем. Сумма: $0{,}060 + 0{,}015 + 0{,}040 = 0{,}115$.
$$P(\text{работа}\mid D) = \frac{0{,}060}{0{,}115} \approx 0{,}5217$$$$P(\text{реклама}\mid D) = \frac{0{,}015}{0{,}115} \approx 0{,}1304$$
$$P(\text{спам}\mid D) = \frac{0{,}040}{0{,}115} \approx 0{,}3478$$
Проверим наш ответ: сумма $= 0{,}5217+0{,}1304+0{,}3478 = 0{,}9999 \approx 1$ ✅ (разница — округление).
Ответ: вероятнее всего «работа», $\approx 52{,}2\%$.
📌 Именно поэтому в коде наивного Байеса ты почти никогда не увидишь вычисления $P(D)$: predict берёт argmax по числителям, а predict_proba нормирует их суммой. Отдельной формулы для знаменателя не пишут.
Пример 6 (сложный): неинформативные данные ничего не меняют
Гипотеза $H$ имеет априорную вероятность $0{,}3$. Проведён эксперимент, у которого $P(D\mid H) = P(D \mid \bar H) = 0{,}4$. Найди апостериорную вероятность и объясни результат.
Решение:
Шаг 1. Числители:
$$0{,}3 \cdot 0{,}4 = 0{,}12, \qquad 0{,}7 \cdot 0{,}4 = 0{,}28$$Шаг 2. Знаменатель: $P(D) = 0{,}12 + 0{,}28 = 0{,}40$.
Шаг 3. Апостериорная:
$$P(H\mid D) = \frac{0{,}12}{0{,}40} = 0{,}3$$Ответ: $0{,}3$ — ровно априорная вероятность, ничего не изменилось.
Разберём по шагам, почему так. Если правдоподобия равны, множитель $0{,}4$ выносится за скобку и сокращается с точно таким же множителем в знаменателе. Данные, которые одинаково ожидаемы при обеих гипотезах, не несут информации — они не помогают отличить одну от другой. Формально $D$ и $H$ независимы: $P(D\mid H) = P(D)$.
Это фундаментальный принцип отбора признаков в ML: признак полезен ровно настолько, насколько его распределение различается между классами. Признак, который одинаково часто встречается в спаме и не-спаме, для классификатора — чистый шум, сколько бы раз он ни встречался. Информационный выигрыш (information gain), взаимная информация, критерий Джини в деревьях решений — все они по сути измеряют, насколько сильно $P(D\mid H)$ отличается от $P(D\mid \bar H)$.
Почему это важно
Различение «априорная — правдоподобие — апостериорная» это не терминологический ритуал, а защита от самой дорогой ошибки в анализе данных: подмены $P(H\mid D)$ на $P(D\mid H)$. В суде эту подмену называют «ошибкой прокурора»: «вероятность такого совпадения ДНК у случайного человека — один на миллион, значит вероятность невиновности подсудимого — один на миллион». Нет. Первое число — правдоподобие, второе — апостериорная вероятность, и между ними стоит базовая ставка, которая может отличаться в тысячи раз. В машинном обучении ровно эта же подмена превращает «модель ловит 95% мошенников» в «если модель сказала мошенник — значит с вероятностью 95% мошенник». Это разные числа, и разница между ними бывает десятикратной.
Главная интуиция: Байес — это машина обновления убеждений
Интуиция
Если из всего урока ты запомнишь одну фразу, пусть это будет вот эта: формула Байеса — правило обновления убеждений при поступлении данных.
Представь, что твоя уверенность в чём-то — это не «да/нет», а число от 0 до 1. Ты живёшь с каким-то текущим уровнем уверенности. Приходит новая информация. Формула Байеса говорит, на сколько именно нужно подвинуть уверенность — не «немножко», не «сильно», а точно.
Ключевая мысль: сдвиг зависит от двух вещей, и обе обязательны.
- Насколько данные ожидаемы при твоей гипотезе — то есть правдоподобие $P(D\mid H)$.
- Насколько эти же данные ожидаемы, если гипотеза неверна — то есть $P(D\mid \bar H)$.
Улика сильна не тогда, когда она хорошо согласуется с гипотезой, а тогда, когда она хорошо согласуется с гипотезой и плохо — со всеми альтернативами. Отпечаток пальца на месте преступления — сильная улика не потому, что преступник обязательно оставляет отпечатки, а потому, что случайный человек их там не оставляет. А вот факт «преступник дышал воздухом» согласуется с гипотезой на 100% и при этом не стоит ничего: с альтернативой он согласуется тоже на 100%.
Хорошая метафора — весы. На одной чаше гипотеза $H$, на другой — $\bar H$. Изначально на чашах лежат априорные вероятности. Каждое новое наблюдение — гирька, которая умножает вес своей чаши на правдоподобие. Кто перевесил — тот и вероятнее. А нормировка — это просто пересчёт «сколько процентов веса на каждой чаше».
Из этой метафоры сразу следуют три вывода, которые стоит впечатать в память.
- Если априорная вероятность равна нулю, никакие данные её не поднимут: $0 \cdot \text{что угодно} = 0$. Байес не умеет воскрешать гипотезы, которые ты объявил невозможными. Это называется «принцип Кромвеля»: никогда не ставь априорную вероятность в точности 0 или 1.
- Слабая улика при сильном априоре почти ничего не меняет — и наоборот, при слабом априоре нужна очень сильная улика, чтобы вытащить гипотезу наверх.
- Порядок поступления данных не важен: умножение коммутативно. Если ты обновляешься на трёх независимых наблюдениях, результат один и тот же в любом порядке.
Формально
Определение (байесовское обновление): Пусть $P(H)$ — текущее (априорное) убеждение о гипотезе $H$, а $D$ — новое наблюдение. Байесовским обновлением называется переход
$$P(H) \;\longrightarrow\; P(H\mid D) = \frac{P(D\mid H)P(H)}{P(D\mid H)P(H) + P(D\mid \bar H)P(\bar H)}$$Полученная апостериорная вероятность становится априорной для следующего наблюдения.
Примеры с разбором
Пример 7 (простой): насколько сдвигает слабая улика
Ты подозреваешь, что новая версия рекомендательной модели лучше старой; априорно даёшь этому 50%. Проводишь маленький тест: за день новая версия обошла старую по CTR. Ты оцениваешь, что при гипотезе «новая лучше» такой исход случился бы с вероятностью $0{,}6$, а при гипотезе «версии одинаковы» — с вероятностью $0{,}5$. Насколько выросла твоя уверенность?
Решение:
Шаг 1. Числители: $0{,}5\cdot0{,}6 = 0{,}30$ и $0{,}5\cdot0{,}5 = 0{,}25$.
Шаг 2. Знаменатель: $0{,}30 + 0{,}25 = 0{,}55$.
Шаг 3. $P(H\mid D) = \dfrac{0{,}30}{0{,}55} \approx 0{,}5455$.
Ответ: уверенность выросла с 50% до $\approx 54{,}5\%$.
📌 Один день теста сдвинул веру на 4,5 процентных пункта. Именно поэтому эксперименты не останавливают после первого дня: слабая улика требует накопления.
Пример 8 (средний): нулевой априор — тупик
Инженер уверен, что причина падения сервиса не может быть в сети: $P(H_{\text{сеть}}) = 0$. Мониторинг показывает рост сетевых таймаутов, который при проблеме в сети наблюдался бы с вероятностью $0{,}95$, а при других причинах — $0{,}05$. Какова апостериорная вероятность сетевой проблемы?
Решение:
Шаг 1. Числитель: $P(H_{\text{сеть}})\cdot P(D\mid H_{\text{сеть}}) = 0 \cdot 0{,}95 = 0$.
Шаг 2. Знаменатель: $0 + 1 \cdot 0{,}05 = 0{,}05$.
Шаг 3. $P(H_{\text{сеть}}\mid D) = \dfrac{0}{0{,}05} = 0$.
Ответ: ноль. Никакие данные не сдвинут убеждение, объявленное невозможным.
Почему это важно на практике. В машинном обучении это ловушка нулевых вероятностей: если в обучающей выборке слово ни разу не встретилось в классе «спам», наивный Байес присвоит ему $P(\text{слово}\mid\text{спам}) = 0$, и одно это слово обнулит апостериорную вероятность спама для всего письма, каким бы очевидным спамом оно ни было. Лечится это сглаживанием Лапласа: к каждому счётчику прибавляют единицу, чтобы ни одна вероятность не была строго нулевой. Мы вернёмся к этому в лайфхаках.
Пример 9 (сложный): улика, которая работает в обе стороны
Модель антифрода помечает транзакцию. Известно, что модель срабатывает на 90% мошеннических транзакций и на 3% честных. Базовая ставка мошенничества — 1%. Посчитай, как меняется убеждение при срабатывании модели и — отдельно — при её молчании.
Решение:
Шаг 1. Случай «модель сработала».
$$P(\text{фрод}\mid +) = \frac{0{,}01\cdot 0{,}90}{0{,}01\cdot 0{,}90 + 0{,}99\cdot 0{,}03} = \frac{0{,}009}{0{,}009 + 0{,}0297} = \frac{0{,}009}{0{,}0387} \approx 0{,}2326$$Шаг 2. Случай «модель промолчала». Правдоподобия отрицательного исхода: $P(-\mid\text{фрод}) = 1 - 0{,}90 = 0{,}10$, $P(-\mid\text{честная}) = 1 - 0{,}03 = 0{,}97$.
$$P(\text{фрод}\mid -) = \frac{0{,}01\cdot 0{,}10}{0{,}01\cdot 0{,}10 + 0{,}99\cdot 0{,}97} = \frac{0{,}001}{0{,}001 + 0{,}9603} = \frac{0{,}001}{0{,}9613} \approx 0{,}00104$$Ответ: срабатывание поднимает веру с 1% до $\approx 23{,}3\%$; молчание опускает её с 1% до $\approx 0{,}10\%$.
Проверим наш ответ на согласованность. Средняя апостериорная вероятность, взвешенная по вероятностям исходов, обязана вернуть априорную:
$$0{,}0387 \cdot 0{,}2326 + 0{,}9613 \cdot 0{,}00104 = 0{,}0090 + 0{,}0010 = 0{,}0100 = P(\text{фрод})\ ✅$$Это общее свойство: ожидаемая апостериорная вероятность равна априорной. Ты не можешь заранее знать, в какую сторону тебя сдвинет эксперимент — иначе ты бы уже сдвинулся. Это называется законом сохранения ожидаемой уверенности, и это отличный способ проверить, что ты нигде не напутал с числами.
Почему это важно
Вся современная статистика машинного обучения — это цикл «убеждение → данные → обновлённое убеждение». Байесовская оптимизация гиперпараметров (урок 299) держит распределение над функцией качества и обновляет его после каждого запуска. Фильтр Калмана в робототехнике обновляет положение робота после каждого замера датчика. Reinforcement learning с Thompson sampling обновляет представление о награде каждой ручки после каждого нажатия. Все они — один и тот же цикл, только с разной математикой внутри.
Классическая задача: медицинский тест и базовая ставка
Это главная задача урока. Разберём её медленно, тремя разными способами, и посмотрим, откуда берётся контринтуитивность.
Постановка
Болезнь встречается у $0{,}5\%$ населения, то есть у одного человека из двухсот. Есть тест с отличными характеристиками:
- Чувствительность (sensitivity, true positive rate): тест положителен у $99\%$ больных, $P(+\mid \text{болен}) = 0{,}99$.
- Специфичность (specificity, true negative rate): тест отрицателен у $99\%$ здоровых, $P(-\mid\text{здоров}) = 0{,}99$, а значит вероятность ложного срабатывания $P(+\mid\text{здоров}) = 0{,}01$.
Человек из общей популяции сдал тест. Результат положительный. Какова вероятность, что он болен?
Способ 1: формула
Шаг 1. Гипотезы: $B$ — «болен», $\bar B$ — «здоров». Априорные:
$$P(B) = 0{,}005, \qquad P(\bar B) = 0{,}995$$Шаг 2. Правдоподобия для наблюдения «$+$»:
$$P(+\mid B) = 0{,}99, \qquad P(+\mid \bar B) = 0{,}01$$Шаг 3. Числители (совместные вероятности):
$$P(B)\,P(+\mid B) = 0{,}005 \cdot 0{,}99 = 0{,}00495$$$$P(\bar B)\,P(+\mid \bar B) = 0{,}995 \cdot 0{,}01 = 0{,}00995$$
Шаг 4. Знаменатель — полная вероятность положительного результата:
$$P(+) = 0{,}00495 + 0{,}00995 = 0{,}01490$$Шаг 5. Апостериорная вероятность:
$$P(B \mid +) = \frac{0{,}00495}{0{,}01490} \approx 0{,}3322$$Ответ: $\approx 33{,}2\%$.
Две трети людей с положительным результатом — здоровы. При тесте, который ошибается всего в 1% случаев.
Способ 2: натуральные частоты (самый убедительный)
Вероятности плохо ложатся на человеческую интуицию, а вот люди — хорошо. Возьмём 100 000 человек и просто посчитаем их.
Шаг 1. Больных: $100\,000 \cdot 0{,}005 = 500$ человек. Здоровых: $99\,500$.
Шаг 2. Из 500 больных тест поймает $500 \cdot 0{,}99 = 495$ человек. (Пятерых пропустит.)
Шаг 3. Из 99 500 здоровых тест ошибочно пометит $99\,500 \cdot 0{,}01 = 995$ человек.
Шаг 4. Всего положительных результатов: $495 + 995 = 1490$.
Шаг 5. Доля действительно больных среди них:
$$\frac{495}{1490} \approx 0{,}3322$$Вот и весь фокус. Здоровых просто в 199 раз больше, поэтому даже их редкая ошибка (1%) даёт в абсолютных числах вдвое больше положительных результатов, чем все настоящие больные вместе взятые: $995$ против $495$.
Сводная таблица — её полезно рисовать всегда:
| Тест «+» | Тест «−» | Всего | |
|---|---|---|---|
| Болен | 495 | 5 | 500 |
| Здоров | 995 | 98 505 | 99 500 |
| Всего | 1490 | 98 510 | 100 000 |
По этой таблице читаются сразу все нужные величины:
- $P(B\mid +) = 495/1490 \approx 33{,}2\%$ — это PPV, положительная предсказательная ценность (precision в терминах ML).
- $P(\bar B\mid -) = 98\,505/98\,510 \approx 99{,}995\%$ — NPV, отрицательная предсказательная ценность. Отрицательный результат этого теста практически исключает болезнь.
- $P(+\mid B) = 495/500 = 99\%$ — чувствительность (recall).
Обрати внимание: чувствительность и PPV — это разные направления чтения одной таблицы. Чувствительность читается по строке (среди больных), PPV — по столбцу (среди положительных). Вся ошибка интуиции в том, что человек читает таблицу по строке, а вопрос задан про столбец.
Способ 3: две строки в уме
Есть быстрая прикидка, которая работает, когда болезнь редкая. Сравни два числа:
- «Настоящие плюсы»: $\text{распространённость} \times \text{чувствительность} \approx 0{,}5\% \times 1 = 0{,}5\%$
- «Ложные плюсы»: $(1-\text{распространённость}) \times \text{FPR} \approx 1 \times 1\% = 1\%$
Отношение $0{,}5 : 1$, то есть один настоящий на два ложных, то есть PPV $\approx 1/3$. Ответ получен за пятнадцать секунд без калькулятора.
Общее правило, которое стоит запомнить: если частота ложных срабатываний сравнима с распространённостью болезни, PPV будет около 50% и ниже. Тест начинает быть надёжным только тогда, когда его FPR много меньше базовой ставки.
Что будет при других базовых ставках
Возьмём тот же тест (чувствительность и специфичность по 99%) и посмотрим, как PPV зависит только от распространённости:
| Распространённость | PPV = $P(\text{болен}\mid+)$ |
|---|---|
| $0{,}01\%$ (1 из 10 000) | $0{,}98\%$ |
| $0{,}1\%$ (1 из 1000) | $9{,}02\%$ |
| $0{,}5\%$ (1 из 200) | $33{,}2\%$ |
| $1\%$ | $50{,}0\%$ |
| $5\%$ | $83{,}9\%$ |
| $30\%$ | $97{,}7\%$ |
| $80\%$ | $99{,}75\%$ |
Проверим одну строку руками, скажем $1\%$:
$$P(B\mid+) = \frac{0{,}01\cdot 0{,}99}{0{,}01\cdot 0{,}99 + 0{,}99\cdot 0{,}01} = \frac{0{,}0099}{0{,}0198} = 0{,}5$$Числитель и знаменатель симметричны — ровно 50%. Красивая контрольная точка: при тесте с равными чувствительностью и специфичностью PPV равен 50% ровно тогда, когда распространённость равна частоте ложных срабатываний.
Самое главное в этой таблице: характеристики теста не изменились ни на йоту, а осмысленность его результата изменилась в сто раз. Один и тот же положительный результат означает «почти наверняка здоров» в скрининге всего населения и «почти наверняка болен» в профильной клинике, куда приходят люди с симптомами. Это не философия — это арифметика.
Именно поэтому в медицине скрининг всего населения на редкие болезни делают двухступенчатым, а не одноступенчатым: сначала дешёвый чувствительный тест, потом дорогой специфичный — только для тех, у кого первый дал плюс. Второй тест работает уже не на популяции с базовой ставкой $0{,}5\%$, а на популяции с базовой ставкой $33\%$ — а там, как видно из таблицы, всё выглядит совсем иначе.
Примеры с разбором
Пример 10 (средний): сколько ложных тревог на одну настоящую
Антифрод-модель имеет чувствительность $95\%$ и FPR $1\%$. Доля мошеннических транзакций — $0{,}1\%$. Сколько честных клиентов будет заблокировано на каждого пойманного мошенника, и какова точность (precision) системы?
Решение:
Шаг 1. Возьмём 100 000 транзакций. Мошеннических: $100 = 100\,000\cdot 0{,}001$. Честных: $99\,900$.
Шаг 2. Поймано мошенников: $100\cdot 0{,}95 = 95$.
Шаг 3. Ложных срабатываний: $99\,900\cdot 0{,}01 = 999$.
Шаг 4. Отношение: $999 / 95 \approx 10{,}5$.
Шаг 5. Точность:
$$\text{precision} = \frac{95}{95 + 999} = \frac{95}{1094} \approx 0{,}0868$$Ответ: примерно $10{,}5$ ложных блокировок на каждого пойманного мошенника, precision $\approx 8{,}7\%$.
📌 Модель с recall 95% и FPR 1% на бумаге выглядит прекрасно. В продакшене с базовой ставкой $0{,}1\%$ она блокирует десять честных клиентов на одного вора. Это и есть главная причина, почему при сильном дисбалансе классов метрику accuracy и даже ROC-AUC дополняют PR-кривой: precision честно показывает влияние базовой ставки, а ROC-AUC — нет.
Пример 11 (сложный): какая специфичность нужна для PPV = 90%
Болезнь встречается у $0{,}5\%$ населения. Чувствительность теста $0{,}99$. Какой должна быть частота ложных срабатываний, чтобы положительный результат означал болезнь с вероятностью не ниже $0{,}9$?
Решение:
Шаг 1. Обозначим $f = P(+\mid\text{здоров})$ — искомую FPR. Запишем условие:
$$\frac{0{,}005\cdot 0{,}99}{0{,}005\cdot 0{,}99 + 0{,}995\cdot f} \ge 0{,}9$$Шаг 2. Обозначим числитель $a = 0{,}00495$. Неравенство:
$$\frac{a}{a + 0{,}995f}\ge 0{,}9 \;\Longleftrightarrow\; a \ge 0{,}9a + 0{,}8955 f \;\Longleftrightarrow\; 0{,}1a \ge 0{,}8955 f$$Шаг 3. Отсюда
$$f \le \frac{0{,}1 \cdot 0{,}00495}{0{,}8955} = \frac{0{,}000495}{0{,}8955} \approx 0{,}000553$$Шаг 4. Значит специфичность должна быть не ниже $1 - 0{,}000553 = 0{,}999447$, то есть $\approx 99{,}945\%$.
Проверим наш ответ: при $f = 0{,}000553$
$$P(B\mid+) = \frac{0{,}00495}{0{,}00495 + 0{,}995\cdot 0{,}000553} = \frac{0{,}00495}{0{,}00495 + 0{,}00055} = \frac{0{,}00495}{0{,}00550} = 0{,}9\ ✅$$Ответ: FPR не выше $\approx 0{,}055\%$, специфичность не ниже $\approx 99{,}95\%$.
📌 Разница между 99% и 99,95% специфичности звучит как ничто — «улучшили меньше чем на процент». А на деле это разница между PPV 33% и PPV 90%, то есть между бесполезным и рабочим тестом. При редких событиях борьба идёт за девятки после запятой в специфичности, а не за чувствительность.
Почему это важно
Ошибка игнорирования базовой ставки (base rate fallacy) — самая дорогая когнитивная ошибка в работе с данными. Она стоит денег в антифроде (заблокированные клиенты), репутации в медицине (лишние биопсии), свободы в судах («ошибка прокурора»), и качества в ML (модель, показавшая 99% accuracy на выборке, где 99% объектов одного класса, не научилась ничему). Формула Байеса — это прививка от неё: она заставляет явно написать априорную вероятность, а написанное число уже не проигнорируешь.
Последовательное применение: апостериорная становится априорной
Интуиция
Данные редко приходят одной порцией. Тест сдали второй раз. Пришло второе письмо от того же адресата. Модель посмотрела на второй признак. Пользователь кликнул ещё раз. Что делать?
Ответ поразительно простой: вчерашняя апостериорная вероятность — это сегодняшняя априорная. Байесовское обновление рекурсивно. Ты не начинаешь заново с нуля, ты продолжаешь с того, где остановился.
Представь, что твоя уверенность — это счёт в игре. Каждое наблюдение либо добавляет очков одной команде, либо другой. Ты не пересчитываешь весь матч заново после каждого гола — ты просто обновляешь табло.
Формально
Определение (последовательное байесовское обновление): Если наблюдения $D_1, D_2, \dots, D_n$ условно независимы при каждой гипотезе, то
$$P(H \mid D_1, D_2, \dots, D_n) \;\propto\; P(H)\prod_{i=1}^{n} P(D_i \mid H)$$и эта величина может быть получена последовательно: апостериорная после $D_1$ используется как априорная для $D_2$, и так далее.
Ключевое слово здесь — условная независимость. Формула $P(D_1, D_2\mid H) = P(D_1\mid H)P(D_2\mid H)$ верна не всегда. Если два наблюдения — это одна и та же информация, поданная дважды, перемножать их правдоподобия нельзя: получится «двойной учёт улики», и ты будешь уверен в своём выводе гораздо сильнее, чем имеешь право. Об этом — отдельная частая ошибка в конце урока.
Примеры с разбором
Пример 12 (средний): второй положительный тест
Вернёмся к нашей болезни: распространённость $0{,}5\%$, тест с чувствительностью и специфичностью $99\%$. После первого положительного результата вероятность болезни $33{,}22\%$. Человек сдаёт тест повторно — снова положительный. Тесты считаем условно независимыми (например, разные лаборатории, разные образцы). Какова теперь вероятность болезни?
Решение:
Шаг 1. Новая априорная вероятность — это старая апостериорная:
$$P(B) = 0{,}3322, \qquad P(\bar B) = 0{,}6678$$Шаг 2. Правдоподобия те же самые, характеристики теста не изменились:
$$P(+\mid B) = 0{,}99, \qquad P(+\mid \bar B) = 0{,}01$$Шаг 3. Числители:
$$0{,}3322 \cdot 0{,}99 = 0{,}328878$$$$0{,}6678 \cdot 0{,}01 = 0{,}006678$$
Шаг 4. Знаменатель: $0{,}328878 + 0{,}006678 = 0{,}335556$.
Шаг 5. Апостериорная:
$$P(B\mid ++) = \frac{0{,}328878}{0{,}335556} \approx 0{,}9801$$Ответ: $\approx 98{,}01\%$.
Проверим наш ответ другим путём — посчитаем «в лоб», сразу с исходной априорной и двумя наблюдениями:
$$P(B\mid ++) = \frac{0{,}005 \cdot 0{,}99^2}{0{,}005\cdot 0{,}99^2 + 0{,}995 \cdot 0{,}01^2} = \frac{0{,}00490050}{0{,}00490050 + 0{,}00009950} = \frac{0{,}0049005}{0{,}005} = 0{,}9801\ ✅$$Оба пути дают ровно $0{,}9801$ — это и есть математическое содержание фразы «апостериорная становится априорной».
📌 Вот почему повторное тестирование так эффективно: первый тест переводит человека из популяции с базовой ставкой $0{,}5\%$ в популяцию с базовой ставкой $33\%$, и на этой новой базе тот же самый тест работает уже отлично. Ничего в тесте не поменялось — поменялась априорная вероятность.
Пример 13 (сложный): плюс, потом минус
Тот же человек, тот же тест. Первый результат положительный, второй — отрицательный. Какова вероятность болезни?
Решение:
Шаг 1. Априорная после первого теста: $P(B) = 0{,}3322$, $P(\bar B) = 0{,}6678$.
Шаг 2. Правдоподобия отрицательного результата:
$$P(-\mid B) = 1 - 0{,}99 = 0{,}01, \qquad P(-\mid\bar B) = 0{,}99$$Шаг 3. Числители:
$$0{,}3322\cdot 0{,}01 = 0{,}003322$$$$0{,}6678\cdot 0{,}99 = 0{,}661122$$
Шаг 4. Знаменатель: $0{,}003322 + 0{,}661122 = 0{,}664444$.
Шаг 5.
$$P(B\mid +-) = \frac{0{,}003322}{0{,}664444} \approx 0{,}005$$Ответ: $\approx 0{,}5\%$ — ровно исходная априорная вероятность.
Разберём, почему так. Положительный результат умножил шансы на $99$, отрицательный — разделил на $99$. Улики полностью погасили друг друга, и вера вернулась туда, откуда начинала. Это красивая иллюстрация того, что байесовское обновление не «накапливает уверенность» само по себе: противоречивые данные возвращают тебя к исходной точке, а не оставляют «где-то посередине по инерции».
Пример 14 (сложный): три теста, порядок не важен
Базовая ставка $2\%$. Тест такой, что положительный результат в 8 раз чаще встречается у больных, чем у здоровых, а отрицательный — в 4 раза чаще у здоровых, чем у больных. Проведено три теста: «+», «−», «+». Найди итоговую вероятность и убедись, что порядок не влияет.
Решение:
Шаг 1. Работаем с ненормированными весами (числителями). Стартовые веса:
$$w_B = 0{,}02, \qquad w_{\bar B} = 0{,}98$$Шаг 2. Первое наблюдение «+»: умножаем $w_B$ на 8, $w_{\bar B}$ на 1 (нам важно только отношение правдоподобий):
$$w_B = 0{,}02\cdot 8 = 0{,}16, \qquad w_{\bar B} = 0{,}98$$Шаг 3. Второе наблюдение «−»: отрицательный результат в 4 раза чаще у здоровых, значит умножаем $w_{\bar B}$ на 4:
$$w_B = 0{,}16, \qquad w_{\bar B} = 0{,}98\cdot 4 = 3{,}92$$Шаг 4. Третье наблюдение «+»:
$$w_B = 0{,}16\cdot 8 = 1{,}28, \qquad w_{\bar B} = 3{,}92$$Шаг 5. Нормируем:
$$P(B\mid \text{данные}) = \frac{1{,}28}{1{,}28 + 3{,}92} = \frac{1{,}28}{5{,}20} \approx 0{,}2462$$Ответ: $\approx 24{,}6\%$.
Проверим независимость от порядка. Итоговые веса — это $0{,}02\cdot 8\cdot 1\cdot 8 = 1{,}28$ и $0{,}98\cdot 1\cdot 4\cdot 1 = 3{,}92$. Это произведения, а умножение коммутативно: в каком порядке ни перемножай множители $8$, $1$, $8$ — получится $64$. Значит порядок наблюдений не влияет на результат ✅
Почему это важно
Рекурсивность байесовского обновления — это то, что делает его реализуемым в потоковых системах. Тебе не надо хранить всю историю: достаточно хранить текущее апостериорное распределение, и оно является достаточной статистикой для всего прошлого. Именно так работают фильтр Калмана (положение робота обновляется на каждом такте), онлайновые рекомендательные системы (профиль пользователя обновляется после каждого клика) и Thompson sampling в многоруких бандитах (оценка каждой ручки обновляется после каждого нажатия). Память $O(1)$ вместо $O(n)$ — прямое следствие того, что вчерашняя апостериорная это сегодняшняя априорная.
Шансы и байесовский фактор: Байес без дробей
Интуиция
Формула Байеса с дробями и знаменателями громоздкая. Но есть способ записать её так, что она превращается в одно умножение. Секрет — перейти от вероятностей к шансам (odds).
Шансы — это отношение «за» к «против». Вероятность $0{,}75$ — это шансы $3:1$. Вероятность $0{,}5$ — шансы $1:1$. Вероятность $0{,}01$ — шансы $1:99$. Букмекеры и врачи говорят на языке шансов не от снобизма: в шансах Байес выглядит вот так, и это красиво.
Формально
Запишем формулу Байеса для гипотезы $H$ и для её отрицания $\bar H$ и поделим одно на другое:
$$\frac{P(H\mid D)}{P(\bar H\mid D)} = \frac{P(D\mid H)P(H) / P(D)}{P(D\mid \bar H)P(\bar H)/P(D)} = \frac{P(D\mid H)}{P(D\mid\bar H)}\cdot\frac{P(H)}{P(\bar H)}$$Знаменатель $P(D)$ сократился — вот главный подарок. Обозначим шансы $O(H) = \dfrac{P(H)}{P(\bar H)}$ и получим:
Определение (форма Байеса в шансах):
$$\underbrace{O(H\mid D)}_{\text{апостериорные шансы}} = \underbrace{\frac{P(D\mid H)}{P(D\mid \bar H)}}_{\text{байесовский фактор } BF}\;\cdot\; \underbrace{O(H)}_{\text{априорные шансы}}$$Отношение правдоподобий $BF = \dfrac{P(D\mid H)}{P(D\mid \bar H)}$ называется байесовским фактором (в статистике — также отношением правдоподобия, likelihood ratio, LR).
То есть: апостериорные шансы = байесовский фактор × априорные шансы. Никаких дробей, никакой нормировки. Одно умножение.
Обратный перевод между шансами и вероятностями:
$$O = \frac{p}{1-p}, \qquad p = \frac{O}{1+O}$$Байесовский фактор — это чистая мера силы улики, полностью отделённая от априорных убеждений. Это очень важное разделение труда:
- $BF$ — свойство данных и модели: во сколько раз наблюдение более ожидаемо при $H$, чем при $\bar H$.
- $O(H)$ — свойство контекста: во что мы верили до.
Два человека с разными априорными убеждениями, увидев одну улику, умножат свои шансы на один и тот же байесовский фактор. Они не придут к одному ответу, но сдвинутся на одну и ту же величину. Это, кстати, объясняет, почему при накоплении большого количества данных байесовцы с разными априорными сходятся к одному выводу: произведение множества $BF$ рано или поздно перевешивает любые разумные стартовые различия.
Ориентиры силы улики (шкала Джеффриса, огрублённая):
| $BF$ | Интерпретация |
|---|---|
| $1{-}3$ | улика ничтожная |
| $3{-}10$ | заметная |
| $10{-}30$ | сильная |
| $30{-}100$ | очень сильная |
| $>100$ | решающая |
Для медицинского теста байесовские факторы имеют собственные имена:
$$LR_+ = \frac{\text{чувствительность}}{1 - \text{специфичность}}, \qquad LR_- = \frac{1-\text{чувствительность}}{\text{специфичность}}$$Для нашего теста: $LR_+ = 0{,}99/0{,}01 = 99$, $LR_- = 0{,}01/0{,}99 = 1/99$.
Логарифмы: умножение превращается в сложение
Возьмём логарифм от формулы в шансах:
$$\log O(H\mid D) = \log O(H) + \log BF$$А если наблюдений несколько и они условно независимы:
$$\log O(H \mid D_1,\dots,D_n) = \log O(H) + \sum_{i=1}^n \log BF_i$$Улики просто складываются. Каждая добавляет свои «очки» в общую копилку, положительные — за гипотезу, отрицательные — против. Именно в этой форме Тьюринг и Гуд считали улики в Блетчли-Парке, измеряя их в банах ($\log_{10}$) и децибанах.
И именно в этой форме живёт логистическая регрессия. Её уравнение
$$\log\frac{P(y=1\mid x)}{P(y=0\mid x)} = b + w_1x_1 + \dots + w_nx_n$$это буквально байесовское обновление в лог-шансах: свободный член $b$ — логарифм априорных шансов, а каждое слагаемое $w_ix_i$ — вклад признака, логарифм его байесовского фактора. Когда ты интерпретируешь коэффициент логистической регрессии как «$e^{w_i}$ — во сколько раз растут шансы», ты используешь ровно эту формулу. Сигмоида на выходе — не магия, а обратный перевод из лог-шансов в вероятность:
$$p = \frac{e^{z}}{1+e^{z}} = \frac{1}{1+e^{-z}}, \qquad z = \log O$$Примеры с разбором
Пример 15 (простой): медицинский тест в шансах за 20 секунд
Распространённость $0{,}5\%$, $LR_+ = 99$. Найди вероятность болезни при положительном тесте.
Решение:
Шаг 1. Априорные шансы:
$$O = \frac{0{,}005}{0{,}995} = \frac{1}{199}$$Шаг 2. Умножаем на байесовский фактор:
$$O(B\mid +) = \frac{1}{199}\cdot 99 = \frac{99}{199}$$Шаг 3. Переводим обратно в вероятность:
$$p = \frac{99/199}{1 + 99/199} = \frac{99}{199 + 99} = \frac{99}{298} \approx 0{,}3322$$Ответ: $\approx 33{,}2\%$ — тот же ответ, что мы получали через полную формулу, но в три строки и почти без арифметики.
📌 Обрати внимание на изящество: $\frac{99}{298}$ — точное значение. Никаких округлений по дороге.
Пример 16 (средний): два положительных теста в шансах
Продолжим предыдущий пример: второй тест тоже положительный.
Решение:
Шаг 1. Умножаем на ещё один $LR_+$:
$$O(B\mid ++) = \frac{1}{199}\cdot 99 \cdot 99 = \frac{9801}{199}$$Шаг 2. Переводим в вероятность:
$$p = \frac{9801}{9801 + 199} = \frac{9801}{10\,000} = 0{,}9801$$Ответ: ровно $0{,}9801$, то есть $98{,}01\%$.
Проверим: это в точности совпадает с ответом Примера 12, полученным двухшаговым пересчётом через полную формулу ✅ Только здесь всё уместилось в две строки, а знаменатель $10\,000$ вылез сам собой.
Пример 17 (сложный): накопление улик в логарифмах
Модель определяет, является ли пользователь ботом. Априорная доля ботов — $2\%$. Три независимых признака дают байесовские факторы $BF_1 = 40$, $BF_2 = 0{,}5$, $BF_3 = 6$. Найди апостериорную вероятность и посчитай вклад каждого признака в децибанах ($10\log_{10}BF$).
Решение:
Шаг 1. Априорные шансы:
$$O = \frac{0{,}02}{0{,}98} = \frac{1}{49} \approx 0{,}020408$$Шаг 2. Умножаем на все факторы:
$$O(\text{бот}\mid D) = \frac{1}{49}\cdot 40\cdot 0{,}5\cdot 6 = \frac{120}{49} \approx 2{,}4490$$Шаг 3. Переводим в вероятность:
$$p = \frac{120/49}{1 + 120/49} = \frac{120}{169} \approx 0{,}7101$$Шаг 4. Вклады в децибанах:
$$10\log_{10}40 \approx 16{,}0 \text{ дБ}, \quad 10\log_{10}0{,}5 \approx -3{,}0 \text{ дБ}, \quad 10\log_{10}6 \approx 7{,}8 \text{ дБ}$$Априорные лог-шансы: $10\log_{10}(1/49) \approx -16{,}9$ дБ. Итого: $-16{,}9 + 16{,}0 - 3{,}0 + 7{,}8 = 3{,}9$ дБ.
Проверим: $10^{3{,}9/10} = 10^{0{,}39} \approx 2{,}455$ — совпадает с шансами $2{,}449$ с точностью до округления ✅
Ответ: $\approx 71{,}0\%$.
📌 Второй признак дал $BF = 0{,}5 < 1$ — это улика против гипотезы, в логарифмах она даёт отрицательные $-3$ дБ. Признаки с $BF$ около единицы вносят около нуля децибан: они бесполезны. Это ещё один взгляд на отбор признаков — измерять их полезность в децибанах.
Почему это важно
Форма в шансах — это не «удобная запись для устного счёта», это рабочая форма представления в реальных системах. Логарифмы шансов не переполняются: если ты перемножишь тысячу маленьких вероятностей, получишь underflow и ноль в float, а если сложишь тысячу логарифмов — всё в порядке. Поэтому любая практическая реализация наивного Байеса считает log_prob, а не prob. Поэтому логистическая регрессия предсказывает логит, а не вероятность. Поэтому в градиентном спуске функция потерь — это -log likelihood, а не 1/likelihood. Логарифмы шансов — это родной язык вероятностного ML.
Байес в машинном обучении
Здесь формула перестаёт быть задачей про урны и становится инструментом. Разберём пять сюжетов, в каждом из которых Байес — не иллюстрация, а несущая конструкция.
Сюжет 1: генеративный подход против дискриминативного
Задача классификации: по объекту $x$ (вектор признаков, картинка, текст) предсказать класс $y$. Нужна величина $P(y\mid x)$. К ней ведут две принципиально разные дороги.
Дискриминативный подход. Моделируем $P(y\mid x)$ напрямую. Логистическая регрессия, SVM, градиентный бустинг, обычная нейросеть с softmax на выходе — всё это дискриминативные модели. Они не задаются вопросом, как устроены сами данные; их интересует только граница между классами.
Генеративный подход. Моделируем то, как данные порождаются: отдельно $P(y)$ (насколько часто встречается каждый класс) и отдельно $P(x\mid y)$ (как выглядят объекты внутри класса). А потом разворачиваем формулой Байеса:
$$P(y\mid x) = \frac{P(x\mid y)P(y)}{P(x)} \;\propto\; P(x\mid y)\,P(y)$$Наивный байесовский классификатор, гауссовский дискриминантный анализ, скрытые марковские модели, вариационные автоэнкодеры, диффузионные модели — генеративные. Название говорит само за себя: раз модель знает $P(x\mid y)$, она умеет порождать новые объекты класса, а не только различать.
Классификатор, который выбирает класс с максимальной апостериорной вероятностью, называется байесовским классификатором:
$$\hat y = \arg\max_y P(y\mid x) = \arg\max_y P(x\mid y)P(y)$$Если бы мы знали истинные $P(x\mid y)$ и $P(y)$, это правило давало бы минимально возможную ошибку среди всех вообще мыслимых классификаторов. Эта минимальная ошибка называется байесовской ошибкой и является теоретическим пределом качества для любой модели на данной задаче. Никакая нейросеть не может её пробить — это не вопрос архитектуры, это вопрос того, что данные принципиально неоднозначны. Когда говорят «человеческий уровень качества на этой задаче — 95%, а модель дала 94%», обычно подразумевают именно приближение к байесовской ошибке.
Что выбрать на практике? Компромисс такой:
- Генеративные модели требуют больше предположений о структуре данных, но лучше работают на малых выборках, естественно обрабатывают пропуски и умеют оценивать «это вообще похоже на мои данные?» (детекция аномалий через низкое $P(x)$).
- Дискриминативные модели не тратят силы на моделирование $P(x)$ — а это часто гораздо более сложный объект, чем сама граница. При больших данных они обычно выигрывают по качеству.
Классический результат Ына и Джордана (2001): наивный Байес сходится к своему (худшему) пределу качества быстрее, чем логистическая регрессия к своему (лучшему). На маленькой выборке выигрывает наивный Байес, на большой — логистическая регрессия. Забавно, что это пара «одной и той же модели, обученной по-разному»: наивный Байес и логистическая регрессия дают одинаковый вид границы, но подбирают параметры из разных принципов.
Пример 18 (средний): генеративный классификатор руками
Классифицируем клиентов на «уйдёт» ($y=1$, доля $20\%$) и «останется» ($y=0$). Единственный признак — «клиент писал в поддержку в этом месяце» ($x=1$). Известно: $P(x=1\mid y=1) = 0{,}6$, $P(x=1\mid y=0) = 0{,}15$. Клиент написал в поддержку. Найди $P(y=1\mid x=1)$.
Решение:
Шаг 1. Ненормированные апостериорные:
$$P(y=1)P(x=1\mid y=1) = 0{,}2\cdot 0{,}6 = 0{,}12$$$$P(y=0)P(x=1\mid y=0) = 0{,}8\cdot 0{,}15 = 0{,}12$$
Шаг 2. Знаменатель: $P(x=1) = 0{,}12 + 0{,}12 = 0{,}24$.
Шаг 3.
$$P(y=1\mid x=1) = \frac{0{,}12}{0{,}24} = 0{,}5$$Ответ: ровно $0{,}5$ — классы стали равновероятны.
📌 Признак сильный ($BF = 0{,}6/0{,}15 = 4$), но априорные шансы были $1:4$. Улика ровно компенсировала базовую ставку, и модель осталась в полном неведении. Ситуация «$p = 0{,}5$» — это не «модель плохая», это честное «данных недостаточно для вывода».
Сюжет 2: наивный байесовский классификатор и спам-фильтр
Проблема генеративного подхода в том, что $P(x\mid y)$ для вектора из тысяч признаков — чудовищно сложный объект. Если признаков $n$ и каждый бинарный, полное распределение требует $2^n - 1$ чисел на класс. При $n = 1000$ это больше, чем атомов во Вселенной.
Наивное байесовское предположение решает проблему топором: признаки условно независимы при известном классе.
$$P(x_1, x_2, \dots, x_n \mid y) \approx \prod_{i=1}^n P(x_i\mid y)$$Вместо $2^n$ чисел нужно $n$ — по одной вероятности на признак. Отсюда правило классификации:
$$\hat y = \arg\max_y \; P(y)\prod_{i=1}^n P(x_i\mid y) \;=\; \arg\max_y\;\Big[\log P(y) + \sum_{i=1}^n \log P(x_i\mid y)\Big]$$Предположение о независимости почти всегда ложно: в тексте слова «машинное» и «обучение» встречаются вместе куда чаще, чем по отдельности. Именно поэтому классификатор называется «наивным». Но вот удивительный факт: оценки вероятностей у него получаются плохие (он систематически слишком уверен — переоценивает вероятность выигравшего класса), а вот решения — на удивление хорошие. Ведь для выбора $\arg\max$ важна не точность вероятностей, а только то, какая из них больше. Ошибки от двойного учёта коррелированных признаков часто одинаково раздувают числители обоих классов и на порядок сравнения не влияют.
Разберём спам-фильтр на конкретных словах. Пусть доля спама в потоке $P(S) = 0{,}3$, и мы оценили по обучающей выборке частоты слов:
| Слово | $P(\text{слово}\mid\text{спам})$ | $P(\text{слово}\mid\text{не спам})$ | $BF$ |
|---|---|---|---|
| «выигрыш» | $0{,}10$ | $0{,}001$ | $100$ |
| «бесплатно» | $0{,}20$ | $0{,}010$ | $20$ |
| «встреча» | $0{,}005$ | $0{,}050$ | $0{,}1$ |
| «привет» | $0{,}060$ | $0{,}060$ | $1$ |
Пример 19 (сложный): классифицируем письмо
Письмо: «Привет! Твой выигрыш ждёт — забери бесплатно». Слова «выигрыш», «бесплатно», «привет» есть, слова «встреча» нет. Классифицируй его.
Решение:
Шаг 1. Априорные шансы спама:
$$O(S) = \frac{0{,}3}{0{,}7} = \frac{3}{7} \approx 0{,}4286$$Шаг 2. Умножаем на байесовские факторы присутствующих слов:
$$O(S\mid D) = \frac{3}{7}\cdot 100\cdot 20\cdot 1 = \frac{3}{7}\cdot 2000 = \frac{6000}{7} \approx 857{,}1$$Шаг 3. Переводим в вероятность:
$$P(S\mid D) = \frac{6000/7}{1 + 6000/7} = \frac{6000}{6007} \approx 0{,}99883$$Ответ: $\approx 99{,}88\%$ — спам, уверенно.
Проверим слово «привет». Его $BF = 1$: оно встречается одинаково часто в обоих классах и не двигает ответ вообще. Умножение на единицу — самая честная иллюстрация бесполезного признака.
📌 А теперь добавим в письмо слово «встреча» ($BF = 0{,}1$): шансы упадут в 10 раз, до $85{,}7$, и вероятность спама станет $85{,}7/86{,}7 \approx 0{,}9885$. Всё ещё спам, но одно «деловое» слово откусило процент. Именно так спамеры и обходят фильтры — добавляют в письмо «шумовые» слова с низким байесовским фактором, чтобы разбавить сигнал. Это состязание известно как Bayesian poisoning.
Пример 20 (сложный): когда наивность подводит
Два бинарных признака $x_1, x_2$, два класса с $P(y=1) = P(y=0) = 0{,}5$. Истинные распределения внутри классов:
- класс 1: с вероятностью $0{,}5$ наблюдается $(1,1)$, с вероятностью $0{,}5$ — $(0,0)$;
- класс 0: с вероятностью $0{,}5$ наблюдается $(1,0)$, с вероятностью $0{,}5$ — $(0,1)$.
Наблюдаем $(1,1)$. Сравни истинную апостериорную вероятность и оценку наивного Байеса.
Решение:
Шаг 1. Истина. $P((1,1)\mid y=1) = 0{,}5$, $P((1,1)\mid y=0) = 0$. Значит
$$P(y=1\mid (1,1)) = \frac{0{,}5\cdot 0{,}5}{0{,}5\cdot0{,}5 + 0{,}5\cdot 0} = 1$$Шаг 2. Маргинальные вероятности признаков. В классе 1: $P(x_1{=}1\mid y{=}1) = 0{,}5$ и $P(x_2{=}1\mid y{=}1) = 0{,}5$. В классе 0: $P(x_1{=}1\mid y{=}0) = 0{,}5$ и $P(x_2{=}1\mid y{=}0) = 0{,}5$.
Шаг 3. Наивная оценка.
$$P_{\text{наив}}((1,1)\mid y{=}1) = 0{,}5\cdot 0{,}5 = 0{,}25$$$$P_{\text{наив}}((1,1)\mid y{=}0) = 0{,}5\cdot 0{,}5 = 0{,}25$$
Шаг 4. Апостериорная по наивному Байесу:
$$P_{\text{наив}}(y=1\mid (1,1)) = \frac{0{,}5\cdot 0{,}25}{0{,}5\cdot0{,}25 + 0{,}5\cdot 0{,}25} = 0{,}5$$Ответ: истина — $1$, наивный Байес — $0{,}5$. Полный провал.
Почему. Вся информация здесь сидит в зависимости между признаками, а по отдельности каждый признак абсолютно неинформативен ($BF = 1$ у обоих). Наивное предположение стирает ровно тот сигнал, который единственно и важен. Это точный контрпример к «наивный Байес всегда работает»: он ломается, когда информативна именно совместность признаков, а не они сами (классический пример — XOR).
Сюжет 3: априорное распределение как регуляризация, MAP и L2
Здесь Байес перестаёт быть про «болен/здоров» и становится про параметры модели.
Обычное обучение — это метод максимального правдоподобия (MLE): подбираем параметры $\theta$ так, чтобы наблюдаемые данные были максимально ожидаемы.
$$\hat\theta_{\text{MLE}} = \arg\max_\theta P(D\mid\theta)$$Байесовский взгляд говорит: у параметров тоже есть априорное распределение $p(\theta)$ — до всяких данных мы кое-что о них думаем. Например, что веса нейросети скорее маленькие, чем гигантские. Тогда логично максимизировать не правдоподобие, а апостериорную плотность — это MAP-оценка (maximum a posteriori):
$$\hat\theta_{\text{MAP}} = \arg\max_\theta\, p(\theta\mid D) = \arg\max_\theta\, P(D\mid\theta)\,p(\theta)$$Знаменатель $P(D)$ от $\theta$ не зависит, поэтому его выкидываем. Теперь возьмём логарифм и поменяем знак — максимизация превращается в минимизацию:
$$\hat\theta_{\text{MAP}} = \arg\min_\theta\big[-\log P(D\mid\theta) - \log p(\theta)\big]$$Первое слагаемое — обычная функция потерь (cross-entropy, MSE — смотря какая модель шума). А второе — штраф за параметры. Посмотрим, какой именно, если взять гауссовский априор $\theta_j \sim \mathcal{N}(0, \tau^2)$:
$$-\log p(\theta) = -\log\prod_j \frac{1}{\sqrt{2\pi}\tau}e^{-\theta_j^2/(2\tau^2)} = \frac{1}{2\tau^2}\sum_j \theta_j^2 + \text{const}$$Это в точности L2-регуляризация (ridge, weight decay), $\lambda\|\theta\|_2^2$ с $\lambda = \dfrac{1}{2\tau^2}$. А если взять априор Лапласа $p(\theta_j)\propto e^{-|\theta_j|/b}$, получится $\sum_j|\theta_j|/b$ — L1-регуляризация (lasso), которая и объясняет, почему L1 даёт разреженные решения: у Лапласа острый пик в нуле, он «притягивает» веса ровно к нулю.
Ключевая мысль: регуляризация — это не хак и не костыль. Это MAP-оценка с определённым априорным распределением на параметрах. L2 = гауссовский априор, L1 = лапласовский. Коэффициент регуляризации $\lambda$ обратно пропорционален дисперсии априора: сильная регуляризация = уверенное убеждение «веса должны быть маленькими».
Пример 21 (сложный): shrinkage руками
Модель: $y = w + \varepsilon$, где шум $\varepsilon\sim\mathcal N(0, \sigma^2)$ с $\sigma^2 = 1$, априор $w\sim\mathcal N(0, \tau^2)$ с $\tau^2 = 1$. Наблюдено одно значение $y = 4$. Найди MLE и MAP-оценку $w$.
Решение:
Шаг 1. MLE. Максимум правдоподобия $P(y\mid w)\propto e^{-(y-w)^2/2}$ достигается при $w = y = 4$.
Шаг 2. MAP. Минимизируем
$$L(w) = \frac{(4-w)^2}{2\sigma^2} + \frac{w^2}{2\tau^2} = \frac{(4-w)^2}{2} + \frac{w^2}{2}$$Шаг 3. Берём производную и приравниваем нулю:
$$L'(w) = -(4-w) + w = 2w - 4 = 0 \;\Longrightarrow\; w = 2$$Шаг 4. Сравним с общей формулой сжатия: $\hat w_{\text{MAP}} = y\cdot\dfrac{\tau^2}{\sigma^2+\tau^2} = 4\cdot\dfrac{1}{2} = 2$ ✅
Ответ: MLE даёт $w = 4$, MAP — $w = 2$.
Разберём смысл. Априор «утянул» оценку к нулю ровно вдвое, потому что уверенность априора ($\tau^2 = 1$) и уверенность данных ($\sigma^2 = 1$) равны — оценка встала посередине между «что говорят данные» ($4$) и «что говорит априор» ($0$). Если бы данные были точнее ($\sigma^2 = 0{,}1$), сжатие было бы слабее: $4\cdot\frac{1}{1{,}1} \approx 3{,}64$. Если бы априор был жёстче ($\tau^2 = 0{,}1$), сильнее: $4\cdot\frac{0{,}1}{1{,}1} \approx 0{,}36$. Это и есть содержательный смысл коэффициента $\lambda$ в ridge-регрессии — соотношение доверия к данным и к априору.
Заметь: при $\tau^2\to\infty$ (никаких предпочтений, «плоский» априор) MAP превращается в MLE. Обучение без регуляризации — это байесовское обучение с бесконечно размытым априором.
Сюжет 4: байесовское обновление в A/B-тестах
Классический A/B-тест отвечает на вопрос «отвергаем ли мы нулевую гипотезу на уровне значимости $0{,}05$» — и практически никто не понимает, что́ это значит. Байесовский A/B-тест отвечает на вопрос, который все и хотели задать: «какова вероятность, что вариант B лучше варианта A?»
Схема такая. Конверсия варианта — неизвестное число $p\in[0,1]$. Ставим на него априорное распределение, обновляем данными по формуле Байеса, получаем апостериорное распределение — и по нему считаем всё, что нужно.
Удобнее всего брать априор из семейства бета-распределений $\text{Beta}(\alpha,\beta)$ с плотностью $p^{\alpha-1}(1-p)^{\beta-1}$ (с точностью до нормировки). Причина в том, что правдоподобие биномиальных данных ($s$ успехов, $f$ неудач) — это $p^s(1-p)^f$, и произведение
$$\underbrace{p^{\alpha-1}(1-p)^{\beta-1}}_{\text{априор}}\cdot\underbrace{p^{s}(1-p)^{f}}_{\text{правдоподобие}} = p^{\alpha+s-1}(1-p)^{\beta+f-1}$$снова оказывается бета-распределением, только с параметрами $(\alpha+s,\ \beta+f)$. Такая пара «априор — правдоподобие» называется сопряжённой, и она превращает интегрирование в сложение счётчиков.
Правило обновления: $\text{Beta}(\alpha,\beta)$ + наблюдения ($s$ успехов, $f$ неудач) $\;\to\;$ $\text{Beta}(\alpha+s,\ \beta+f)$.
Априор $\text{Beta}(1,1)$ — это равномерное распределение на $[0,1]$, «я ничего не знаю о конверсии». Среднее апостериорного распределения:
$$\mathbb E[p\mid D] = \frac{\alpha+s}{\alpha+\beta+s+f}$$Пример 22 (сложный): байесовский A/B-тест
Вариант A: $12$ конверсий из $100$. Вариант B: $20$ из $100$. Априор $\text{Beta}(1,1)$ для обоих. Оцени апостериорные средние и вероятность того, что B лучше A.
Решение:
Шаг 1. Апостериорные распределения:
$$p_A \sim \text{Beta}(1+12,\ 1+88) = \text{Beta}(13, 89)$$$$p_B \sim \text{Beta}(1+20,\ 1+80) = \text{Beta}(21, 81)$$
Шаг 2. Апостериорные средние:
$$\mathbb E[p_A] = \frac{13}{102} \approx 0{,}1275, \qquad \mathbb E[p_B] = \frac{21}{102} \approx 0{,}2059$$Шаг 3. Дисперсии по формуле $\mathrm{Var} = \dfrac{\alpha\beta}{(\alpha+\beta)^2(\alpha+\beta+1)}$, где $\alpha+\beta = 102$:
$$\mathrm{Var}[p_A] = \frac{13\cdot 89}{102^2\cdot 103} = \frac{1157}{1\,071\,612} \approx 0{,}001080,\quad \sigma_A \approx 0{,}0329$$$$\mathrm{Var}[p_B] = \frac{21\cdot 81}{1\,071\,612} = \frac{1701}{1\,071\,612} \approx 0{,}001587,\quad \sigma_B \approx 0{,}0398$$
Шаг 4. Разность $p_B - p_A$ приближённо нормальна со средним $0{,}2059 - 0{,}1275 = 0{,}0784$ и стандартным отклонением
$$\sqrt{0{,}001080 + 0{,}001587} = \sqrt{0{,}002667} \approx 0{,}0516$$Шаг 5. Вероятность того, что разность положительна:
$$P(p_B > p_A) \approx \Phi\!\left(\frac{0{,}0784}{0{,}0516}\right) = \Phi(1{,}52) \approx 0{,}936$$Ответ: $P(p_B > p_A) \approx 93{,}6\%$.
📌 Вот это и есть ответ, который можно принести менеджеру: «вероятность того, что B лучше, — около 94%». Не «p-value $= 0{,}064$, но мы не отвергаем гипотезу», а понятное число. Байесовский подход к A/B-тестам ещё и разрешает подглядывать в данные когда угодно: апостериорное распределение корректно в любой момент времени, тогда как многократная проверка p-value раздувает вероятность ложного открытия. Именно на этой идее построен Thompson sampling — алгоритм, который выделяет трафик вариантам пропорционально вероятности того, что они лучшие, и потому теряет на плохих вариантах меньше, чем фиксированный A/B-сплит.
Сюжет 5: калибровка порога при несбалансированных классах
Самый практичный сюжет. Ты обучил классификатор, он выдаёт вероятности. Где ставить порог? «$0{,}5$, конечно» — и это почти всегда неправильно.
Проблема первая: обучали не на той базовой ставке. При сильном дисбалансе классов данные часто балансируют — делают undersampling мажоритарного класса, чтобы обучающая выборка была 50/50. Модель честно учится, но она учится на другой априорной вероятности, чем та, что в реальности. Байес говорит, как это чинить: апостериорные шансы = априорные шансы × байесовский фактор, а байесовский фактор от априора не зависит. Значит нужно просто заменить один априор на другой:
$$O_{\text{реал}}(y{=}1\mid x) = O_{\text{модель}}(y{=}1\mid x)\cdot\frac{O_{\text{реал}}(y{=}1)}{O_{\text{обуч}}(y{=}1)}$$Пример 23 (сложный): пересчёт вероятности под реальную базу
Модель обучена на сбалансированной выборке (50% положительных) и выдала на объекте $p = 0{,}8$. Реальная доля положительных в потоке — $2\%$. Какова реальная вероятность?
Решение:
Шаг 1. Шансы по модели: $O_{\text{модель}} = \dfrac{0{,}8}{0{,}2} = 4$.
Шаг 2. Априорные шансы при обучении: $\dfrac{0{,}5}{0{,}5} = 1$. Реальные: $\dfrac{0{,}02}{0{,}98} = \dfrac{1}{49}$.
Шаг 3. Корректируем:
$$O_{\text{реал}} = 4\cdot\frac{1/49}{1} = \frac{4}{49} \approx 0{,}0816$$Шаг 4. Переводим в вероятность:
$$p_{\text{реал}} = \frac{4/49}{1 + 4/49} = \frac{4}{53} \approx 0{,}0755$$Ответ: $\approx 7{,}55\%$, а вовсе не $80\%$.
📌 Заметь, что для линейных моделей эта коррекция сводится к сдвигу свободного члена: $b_{\text{нов}} = b + \log\frac{O_{\text{реал}}}{O_{\text{обуч}}}$. Переобучать модель не надо — достаточно подвинуть биас. Ровно эту процедуру и называют «prior correction» или «intercept correction» при обучении на несбалансированных данных.
Проблема вторая: у ошибок разная цена. Пропустить мошенника дороже, чем побеспокоить честного клиента. Байесовское решающее правило говорит: предсказывай класс 1, если ожидаемая цена этого решения меньше ожидаемой цены обратного. Если цена ложноотрицательного $C_{FN}$, а ложноположительного $C_{FP}$, то решение «предсказать 1» выгодно при
$$p\cdot C_{FN} > (1-p)\cdot C_{FP} \;\Longleftrightarrow\; p > \frac{C_{FP}}{C_{FP} + C_{FN}}$$Оптимальный порог не равен $0{,}5$ ни при каком дисбалансе — он равен отношению цен. Если пропуск стоит в 50 раз дороже ложной тревоги, порог равен $\frac{1}{51}\approx 0{,}0196$, и надо помечать всё, что выше двух процентов.
Собери две поправки вместе — и ты получишь честную схему принятия решения: сначала пересчитай вероятность под реальную базовую ставку, потом сравни её с порогом из отношения цен. Это и есть то, что в анализе решений называют байесовским решающим правилом, и оно на порядок полезнее, чем спор о том, какую метрику оптимизировать.
Почему это важно
Три вещи, которые надо унести из этого раздела. Первое: $P(y\mid x)\propto P(x\mid y)P(y)$ — это скелет всего генеративного моделирования, от наивного Байеса до диффузионных моделей. Второе: регуляризация — это априорное распределение, а не эвристика; понимая это, ты осмысленно выбираешь $\lambda$, а не подбираешь его вслепую. Третье: вероятность на выходе модели не равна вероятности в реальном мире, пока ты не учёл базовую ставку — и это самый частый источник провалов ML-систем при переносе из ноутбука в продакшен.
Практика: 30 заданий
Базовые (задания 1-10)
Задание 1: В первом ящике 3 белых и 7 чёрных шаров, во втором — 6 белых и 4 чёрных. Наугад выбирают ящик и достают шар. Он оказался белым. Какова вероятность, что шар взят из первого ящика?
Задание 2: Болезнь встречается у 1% населения. Тест выявляет её у 90% больных и даёт ложное срабатывание у 10% здоровых. Тест положительный. Какова вероятность болезни?
Задание 3: Известно, что $P(A) = 0{,}3$, $P(B\mid A) = 0{,}8$, $P(B\mid\bar A) = 0{,}2$. Найди $P(A\mid B)$.
Задание 4: Априорные шансы гипотезы равны $1:4$. Наблюдение имеет байесовский фактор $BF = 8$. Найди апостериорные шансы и апостериорную вероятность.
Задание 5: Завод получает 60% деталей от первого поставщика (брак 2%) и 40% от второго (брак 5%). Деталь оказалась бракованной. С какой вероятностью она от первого поставщика?
Задание 6: В потоке писем 50% спама. Слово «кредит» встречается в 8% спам-писем и в 0,5% обычных. Письмо содержит слово «кредит». Какова вероятность, что это спам?
Задание 7: Три студента готовились к экзамену; вероятности сдать у них $0{,}9$, $0{,}7$ и $0{,}4$. Наугад вызванный студент сдал. Какова вероятность, что это был третий?
Задание 8: Поставщик A даёт 70% товара с браком 3%, поставщик B — 30% с браком 8%. Найди обе апостериорные вероятности при обнаружении брака и проверь, что их сумма равна единице.
Задание 9: Априорная вероятность гипотезы $P(H) = 0{,}2$. Проведён эксперимент, для которого $P(E\mid H) = P(E\mid\bar H) = 0{,}4$. Найди $P(H\mid E)$ и объясни результат.
Задание 10: Классификатор: $P(y=1) = 0{,}2$, $P(x\mid y=1) = 0{,}6$, $P(x\mid y=0) = 0{,}15$. Найди $P(y=1\mid x)$.
Средние (задания 11-20)
Задание 11: Болезнь встречается у $0{,}1\%$ населения. Тест имеет чувствительность и специфичность по $99\%$. Тест положительный. Найди вероятность болезни двумя способами: через шансы и через натуральные частоты на 100 000 человек.
Задание 12: Продолжение задания 11: человек сдал тот же тест повторно (независимо), результат снова положительный. Найди вероятность болезни.
Задание 13: Продолжение задания 11: второй тест дал отрицательный результат. Найди вероятность болезни.
Задание 14: Спам-фильтр: априорная доля спама $50\%$. В письме нашли три признака с байесовскими факторами $50$, $4$ и $0{,}2$. Найди вероятность того, что письмо — спам.
Задание 15: Задача Монти Холла. За одной из трёх дверей приз. Ты выбрал дверь 1. Ведущий, знающий, где приз, открывает дверь 3 — там пусто. Стоит ли менять выбор? Реши через формулу Байеса.
Задание 16: В ящике A восемь белых шаров из десяти, в ящике B — три из десяти. Наугад выбран ящик, из него дважды с возвращением вынули шар, оба раза белый. Какова вероятность, что выбран ящик A?
Задание 17: Модель обучена на выборке, где положительный класс составлял $25\%$, и выдала на объекте вероятность $0{,}6$. Реальная доля положительного класса в потоке — $1\%$. Какова реальная апостериорная вероятность?
Задание 18: Априорные шансы гипотезы $1:3$. Эксперимент дал байесовский фактор $12$. Найди апостериорную вероятность и оцени силу улики по шкале Джеффриса.
Задание 19: Априорное распределение конверсии — $\text{Beta}(1,1)$ (равномерное). Наблюдалось 30 конверсий из 200 показов. Найди апостериорное распределение, его среднее и моду.
Задание 20: Наивный байесовский классификатор. $P(\text{спам}) = 0{,}3$. Признак «слово A» присутствует: $P(A\mid\text{спам}) = 0{,}5$, $P(A\mid\text{не спам}) = 0{,}05$. Признак «слово B» отсутствует: $P(B\mid\text{спам}) = 0{,}2$, $P(B\mid\text{не спам}) = 0{,}6$. Найди вероятность спама.
Продвинутые (задания 21-30)
Задание 21: Трафик на сайт приходит из трёх каналов: поиск (50% визитов, конверсия 1%), реклама (30%, конверсия 3%), рассылка (20%, конверсия 6%). Произошла конверсия. Найди апостериорные вероятности всех трёх каналов и проверь их сумму.
Задание 22: Базовая ставка события — $5\%$. Проведены три независимых проверки: положительная, положительная, отрицательная. Байесовский фактор положительной проверки $LR_+ = 6$, отрицательной $LR_- = 0{,}2$. Найди итоговую вероятность и покажи, что порядок проверок не важен.
Задание 23: Тест имеет чувствительность и специфичность по $99\%$. При какой распространённости болезни положительный результат теста означает болезнь ровно с вероятностью $50\%$?
Задание 24: Распространённость болезни $0{,}2\%$, чувствительность теста $0{,}98$. Какой должна быть специфичность, чтобы положительный результат означал болезнь с вероятностью не менее $0{,}95$?
Задание 25: Модель $y = w + \varepsilon$, шум $\varepsilon\sim\mathcal N(0,\sigma^2)$ с $\sigma^2 = 1$, априор $w\sim\mathcal N(0,\tau^2)$ с $\tau^2 = 0{,}25$. Наблюдено $y = 6$. Найди MAP-оценку $w$ и соответствующий коэффициент L2-регуляризации.
Задание 26: Байесовский A/B-тест. Вариант A: 40 конверсий из 500. Вариант B: 55 из 500. Априор $\text{Beta}(1,1)$. Найди апостериорные распределения, их средние и оцени $P(p_B > p_A)$ нормальным приближением.
Задание 27: Детектор дефектов на конвейере: чувствительность $98\%$, FPR $2\%$. Доля дефектных изделий — $0{,}3\%$. (а) Сколько ложных тревог приходится на одно настоящее обнаружение? (б) Какой должна быть FPR, чтобы точность детектора достигла $50\%$?
Задание 28: Наивный байесовский классификатор с тремя классами. Априорные: $P(A) = 0{,}5$, $P(B) = 0{,}3$, $P(C) = 0{,}2$. Наблюдены три признака с правдоподобиями:
| Признак | $A$ | $B$ | $C$ |
|---|---|---|---|
| $f_1$ | $0{,}40$ | $0{,}10$ | $0{,}05$ |
| $f_2$ | $0{,}20$ | $0{,}50$ | $0{,}10$ |
| $f_3$ | $0{,}10$ | $0{,}20$ | $0{,}60$ |
Найди апостериорные вероятности всех трёх классов.
Задание 29: «Ошибка прокурора». В городе живёт 1 000 000 взрослых. На месте преступления найден биологический след; вероятность совпадения профиля у случайного невиновного человека — 1 на 100 000. Подозреваемый найден исключительно по совпадению в базе, других улик нет. Какова вероятность его виновности?
Задание 30: Байесовское решающее правило. Модель обучена на сбалансированной выборке (50/50) и выдала $p = 0{,}3$. Реальная доля положительного класса — $1\%$. Цена пропуска положительного объекта $C_{FN} = 100$, цена ложной тревоги $C_{FP} = 2$. Нужно ли поднимать тревогу?
Частые ошибки
❌ Ошибка 1: игнорирование базовой ставки (base rate fallacy)
Это главная ошибка темы и главная причина, по которой формула Байеса вообще нужна.
Неправильно: «Тест точен на 99%, результат положительный, значит я болен с вероятностью 99%». Или в ML: «Модель ловит 95% мошенников, значит если она пометила транзакцию — это мошенник с вероятностью 95%».
Правильно: сначала посмотреть на распространённость. При базовой ставке $0{,}5\%$ и тесте с чувствительностью и специфичностью $99\%$ вероятность болезни при положительном результате равна $33{,}2\%$, а не $99\%$. На 100 000 человек приходится 495 истинных плюсов и 995 ложных — здоровых просто в 199 раз больше, и их редкая ошибка в абсолютных числах перевешивает.
Почему важно: это не поправка на пару процентов, а расхождение в три раза (а при более редких болезнях — в десять и в сто раз). Из-за неё назначают лишние биопсии, блокируют честных клиентов, выкатывают в продакшен антифрод, который создаёт десять ложных тревог на одну настоящую, и радуются accuracy 99% на выборке, где 99% объектов одного класса. Правило простое: прежде чем интерпретировать результат теста, спроси, насколько редко событие, которое он ищет.
❌ Ошибка 2: путать $P(A\mid B)$ и $P(B\mid A)$ («ошибка прокурора»)
Неправильно: «Вероятность такого совпадения ДНК у случайного человека — одна миллионная, значит подсудимый виновен с вероятностью 0,999999». Или: «99% спамеров используют слово „бесплатно“, значит письмо со словом „бесплатно“ — спам с вероятностью 99%».
Правильно: $P(\text{совпадение}\mid\text{невиновен})$ и $P(\text{невиновен}\mid\text{совпадение})$ — разные величины, и между ними стоит формула Байеса с априорной вероятностью. В задании 29 «одна стотысячная» превратилась в 9% виновности, потому что подозреваемых-кандидатов в городе изначально миллион.
Почему важно: это ошибка, за которую сажали людей — дело Салли Кларк (1999) в Великобритании основывалось ровно на такой подмене, приговор был отменён спустя годы. В ML эта же подмена превращает recall в precision и рушит все расчёты стоимости системы.
❌ Ошибка 3: подставлять в знаменатель $P(B\mid A)$ вместо $P(B)$
Неправильно:
$$P(A\mid B) = \frac{P(B\mid A)P(A)}{P(B\mid A)}$$— знаменатель берут «по аналогии с числителем» и получают просто $P(A)$.
Правильно: знаменатель — это полная вероятность данных, сумма по всем гипотезам:
$$P(B) = P(B\mid A)P(A) + P(B\mid\bar A)P(\bar A)$$Почему важно: пропуск вклада альтернативной гипотезы означает, что ты вообще не сравнил гипотезы между собой — а весь смысл Байеса именно в сравнении. Диагностика ошибки очень простая: посчитай апостериорные вероятности всех гипотез и сложи их. Если сумма не равна единице — знаменатель неверный. Делай эту проверку всегда, она ловит почти все арифметические промахи.
❌ Ошибка 4: путать правдоподобие с апостериорной вероятностью
Неправильно: «$P(D\mid H) = 0{,}9$, значит гипотеза $H$ верна с вероятностью 90%».
Правильно: $P(D\mid H)$ — это вероятность данных, а не гипотезы. Она даже не обязана в сумме по гипотезам давать единицу: правдоподобия $0{,}9$ и $0{,}8$ у двух гипотез — совершенно нормальная ситуация. Гипотезу оценивает только апостериорная вероятность, которая учитывает и априор, и альтернативы.
Почему важно: метод максимального правдоподобия (MLE) находит именно $\arg\max_\theta P(D\mid\theta)$ — параметр, при котором данные наиболее ожидаемы. Это не «самый вероятный параметр», и разница становится критичной, когда правдоподобие плоское или априор информативен. Пример 21 показывает это численно: MLE даёт $4$, MAP — $2$, и вторая оценка ближе к истине, если априор адекватен.
❌ Ошибка 5: двойной учёт одной и той же улики
Неправильно: «Врач заметил сыпь, отправил на анализ, анализ подтвердил сыпь — обновимся дважды: умножим шансы на $BF$ от осмотра и на $BF$ от анализа». Или в спам-фильтре: письмо содержит «выигрыш», «выигрышный» и «выиграл» — умножаем на три больших байесовских фактора подряд.
Правильно: перемножать правдоподобия можно только при условной независимости наблюдений внутри каждой гипотезы. Если наблюдения — это по сути одна и та же улика, поданная трижды, их совместное правдоподобие много больше произведения:
$$P(D_1, D_2\mid H) \neq P(D_1\mid H)P(D_2\mid H)$$Почему важно: двойной учёт создаёт ложную уверенность. Именно поэтому наивный Байес систематически выдаёт вероятности, прижатые к 0 и 1: коррелированные слова в тексте учитываются как независимые улики, и апостериорная вероятность вылетает в $0{,}9999$ там, где честный ответ был бы $0{,}85$. Для решений (argmax) это обычно безвредно, а вот использовать такие «вероятности» для расчёта ожидаемых издержек нельзя без калибровки (Platt scaling, изотоническая регрессия).
❌ Ошибка 6: нулевая априорная вероятность или нулевое правдоподобие
Неправильно: «Эта гипотеза невозможна, ставлю $P(H) = 0$». Или: «Слово „квантовый“ ни разу не встречалось в спаме в обучающей выборке, значит $P(\text{квантовый}\mid\text{спам}) = 0$».
Правильно: ноль в априоре или в правдоподобии — это абсолютный, неотменяемый вердикт: $0\cdot x = 0$ при любом $x$. Никакие будущие данные его не сдвинут. В классификаторах это лечится сглаживанием Лапласа:
$$P(w\mid c) = \frac{n_{wc} + \alpha}{n_c + \alpha V}$$где $V$ — размер словаря, $\alpha$ обычно равно $1$.
Почему важно: без сглаживания одно незнакомое слово обнуляет апостериорную вероятность целого класса, и классификатор ломается на первом же письме с новым словом. А в рассуждениях о мире правило «никогда не ставь 0 или 1» (принцип Кромвеля) защищает от невозможности передумать при любых свидетельствах.
❌ Ошибка 7: считать, что порог классификации должен быть $0{,}5$
Неправильно: «Модель выдала $0{,}42$, значит класс отрицательный».
Правильно: порог $0{,}5$ оптимален ровно в одном случае — когда ошибки обоих типов стоят одинаково и вероятности откалиброваны под реальную базовую ставку. В общем случае порог равен $\dfrac{C_{FP}}{C_{FP}+C_{FN}}$, а саму вероятность надо предварительно пересчитать с обучающего априора на реальный.
Почему важно: при дисбалансе классов и разных ценах ошибок оптимальный порог легко оказывается $0{,}02$ или $0{,}97$. Порог $0{,}5$ в антифроде, медицинском скрининге или предсказании отказов оборудования — это молчаливое утверждение «пропустить катастрофу так же дёшево, как поднять ложную тревогу», и оно почти никогда не верно.
Главное запомнить
-
Формула Байеса разворачивает условную вероятность: $P(H\mid D) = \dfrac{P(D\mid H)P(H)}{P(D)}$. Выводится за две строки из теоремы умножения, потому что $P(H\cap D)$ можно разложить двумя способами.
-
В знаменателе — формула полной вероятности: $P(D) = \sum_i P(H_i)P(D\mid H_i)$. Она одинакова для всех гипотез, поэтому её роль чисто нормировочная.
-
Рабочая форма: апостериорная $\propto$ правдоподобие $\times$ априорная. Посчитай числители для всех гипотез, подели каждый на их сумму — знаменатель считать отдельно не нужно.
-
Четыре слова: априорная $P(H)$ — до данных; правдоподобие $P(D\mid H)$ — насколько данные ожидаемы при гипотезе; апостериорная $P(H\mid D)$ — после данных; нормировочный множитель $P(D)$ — чтобы сумма была единицей.
-
Байес — это правило обновления убеждений. Сила улики зависит не только от того, насколько она согласуется с гипотезой, но и от того, насколько плохо она согласуется с альтернативой.
-
Базовая ставка решает всё. При редком событии даже очень точный тест даёт большинство ложных срабатываний: 0,5% распространённости плюс тест 99/99 дают PPV всего 33%. Считай в натуральных частотах на 100 000 — интуиция сразу выпрямляется.
-
Апостериорная становится априорной. Данные можно обрабатывать порциями, результат тот же; порядок не важен, потому что умножение коммутативно. Хранить нужно только текущее убеждение, а не всю историю.
-
В шансах Байес — это умножение: апостериорные шансы $=$ байесовский фактор $\times$ априорные шансы, $O = \frac{p}{1-p}$, $p = \frac{O}{1+O}$. В логарифмах — сложение, и именно так устроена логистическая регрессия.
-
В ML: $P(y\mid x)\propto P(x\mid y)P(y)$ — генеративный подход; наивный Байес добавляет предположение условной независимости признаков; MAP-оценка с гауссовским априором — это в точности L2-регуляризация, с лапласовским — L1.
-
Никогда не ставь априорную вероятность равной 0 или 1 и всегда сглаживай нулевые счётчики: обнулённая гипотеза не воскресает никакими данными.
Связь с другими темами курса
Что было до. Формула Байеса стоит на трёх китах из предыдущих уроков. Условная вероятность (урок 230) дала само понятие $P(A\mid B)$. Теорема умножения (урок 229) дала два способа разложить $P(A\cap B)$ — из их равенства формула и получается за одну строку. Формула полной вероятности (урок 231) дала знаменатель: без неё нечего было бы подставить вместо $P(D)$. По сути этот урок — сборка трёх предыдущих в один рабочий инструмент.
Что дальше. В уроке 233 (схема Бернулли) появятся формулы для вероятности $k$ успехов в $n$ испытаниях — а это ровно те правдоподобия, которые Байес перемалывает в задачах об оценке неизвестной вероятности; именно из этого сочетания вырастает бета-биномиальная модель, с которой мы уже познакомились в A/B-тестах. Случайные величины и плотности (234–236) позволят перейти от дискретных гипотез к непрерывным параметрам, и формула Байеса превратится в свою «взрослую» форму $p(\theta\mid D) = \dfrac{p(D\mid\theta)p(\theta)}{\int p(D\mid\theta)p(\theta)\,d\theta}$ — со зловещим интегралом в знаменателе, ради обхода которого и придуманы MCMC и вариационный вывод. Оценка параметров (246) сравнит MLE и MAP по-взрослому, а проверка гипотез (247) даст частотную альтернативу байесовскому фактору — p-value, вместе с объяснением, почему это разные вопросы. Наивный байесовский классификатор как полноценный алгоритм с обучением, сглаживанием и текстовыми признаками разбирается в уроке 315. Байесовская оптимизация гиперпараметров, где апостериорное распределение над функцией качества обновляется после каждого запуска, — урок 299.
Где применяется. В медицине — интерпретация анализов и двухступенчатый скрининг. В юриспруденции — оценка силы улик и защита от «ошибки прокурора». В инженерии — фильтр Калмана, который на каждом такте обновляет положение объекта по показаниям датчиков. В поиске пропавших объектов — байесовская теория поиска нашла водородную бомбу у Паломареса (1966), подлодку «Скорпион» (1968) и обломки рейса Air France 447 (2011). В ML — генеративные модели, наивный Байес, MAP-оценка и регуляризация, калибровка вероятностей, Thompson sampling в бандитах, байесовские нейросети с распределениями вместо точечных весов. И в повседневном мышлении: любой разумный спор — это, по сути, обмен байесовскими факторами.
Интересные факты
🔹 Байес не публиковал свою теорему. Он умер в 1761 году, и его «Опыт» нашёл в бумагах друг Ричард Прайс, который два года дорабатывал текст и представил его Королевскому обществу в 1763-м. Более того, в работе Байеса нет формулы в том виде, в каком мы её пишем: современную запись дал Лаплас, независимо пришедший к тому же результату в 1774 году. Некоторые историки считают, что справедливее было бы называть её формулой Лапласа.
🔹 Тьюринг измерял улики в «банах». В Блетчли-Парке при взломе «Энигмы» Тьюринг и Гуд складывали логарифмы отношений правдоподобия и назвали единицу измерения баном — в честь городка Банбери, где печатали перфокарты для метода Banburismus. Практической единицей был децибан — примерно наименьшая сила улики, которую человек способен ощутить. Это прямой предок современного «децибела информации», и та же самая идея работает внутри логистической регрессии.
🔹 Байес нашёл потерянную водородную бомбу. В 1966 году после столкновения самолётов над Испанией одна из четырёх американских водородных бомб упала в Средиземное море. Команда под руководством Джона Крейвена построила байесовское апостериорное распределение по возможным местам падения, обновляя его после каждого безуспешного обследования квадрата, — и бомбу нашли. Через два года та же методика нашла затонувшую подлодку USS Scorpion, а в 2011 году байесовский анализ Metron указал район, где на глубине 4000 метров лежали обломки рейса Air France 447 — после четырёх лет безуспешных поисков традиционными методами.
🔹 Первый практический спам-фильтр был байесовским. В 2002 году Пол Грэм опубликовал эссе «A Plan for Spam», где предложил считать для каждого слова $P(\text{спам}\mid\text{слово})$ и комбинировать признаки по Байесу. Фильтр отсекал более 99% спама при доле ложных срабатываний около 0,03% — на порядки лучше правил, которые писали вручную. Это был один из первых массовых успехов машинного обучения в потребительском ПО, и слово «байесовский» тогда впервые попало в интерфейсы почтовых клиентов.
🔹 Байесовская статистика была почти под запретом. В первой половине XX века Рональд Фишер и его последователи громили «обратную вероятность» как ненаучную — из-за субъективности выбора априорного распределения. Байесовские методы держались в тени десятилетиями, и их возрождение случилось только в 1990-х, когда появились алгоритмы MCMC и достаточно дешёвые компьютеры, чтобы считать те самые неберущиеся интегралы в знаменателе.
🔹 «Наивный» Байес наивен, но не глуп. Предположение о независимости признаков почти всегда ложно, но классификатор всё равно работает. Формальное объяснение дали Домингос и Паццани (1997): для правильной классификации нужно, чтобы верным был знак разности логарифмов, а не сами вероятности. Ошибки от зависимостей часто симметрично раздувают обе стороны и на знак не влияют.
Лайфхаки и полезные трюки
💡 1. Считай в людях, а не в вероятностях. Любую задачу про тесты переводи в натуральные частоты: «возьмём 100 000 человек». Из них столько-то больны, столько-то дадут истинный плюс, столько-то — ложный. Ответ читается делением двух целых чисел. Исследования Гигеренцера показали: в формате частот задачу решают правильно около 70% врачей, в формате вероятностей — около 15%. Твой мозг не сломан, просто ему подсовывают неудобный формат.
💡 2. Работай в шансах. $O = \frac{p}{1-p}$, апостериорные шансы $=$ априорные $\times$ $BF$, обратно $p = \frac{O}{1+O}$. Никаких знаменателей, никаких дробей в дробях. Особенно выручает при нескольких наблюдениях: перемножил все байесовские факторы разом — и один раз перевёл в вероятность.
💡 3. Правило «FPR против распространённости». Быстрая прикидка PPV: сравни $\text{prevalence}\times\text{sens}$ с $\text{FPR}$. Если они одного порядка — PPV около 50%. Если FPR вдесятеро больше — PPV около 10%. Это позволяет оценить осмысленность любого теста за пятнадцать секунд, без калькулятора.
💡 4. Проверяй сумму апостериорных. После любого расчёта сложи вероятности всех гипотез. Не единица — где-то ошибка в знаменателе. Это самая дешёвая и самая эффективная проверка в теме.
💡 5. Проверяй закон сохранения ожидаемой уверенности. Взвесь апостериорные вероятности вероятностями соответствующих исходов эксперимента: $P(D)P(H\mid D) + P(\bar D)P(H\mid\bar D)$ обязано дать ровно $P(H)$. Если не даёт — ошибка в правдоподобиях. Проверка чуть дороже предыдущей, зато ловит другой класс ошибок.
💡 6. Считай в логарифмах. Произведение сотни вероятностей в float32 обнулится (underflow). Сумма ста логарифмов — не обнулится. Любая практическая реализация Байеса работает с log_prob, и scipy.special.logsumexp существует ровно для того, чтобы аккуратно нормировать логарифмы обратно в вероятности.
💡 7. Сглаживай нулевые счётчики. Правило Лапласа: $P(w\mid c) = \frac{n_{wc}+1}{n_c + V}$. Одна строчка кода, которая спасает классификатор от обнуления на любом незнакомом слове. Заодно это ровно MAP-оценка с априором $\text{Beta}(2,2)$ — сглаживание не эвристика, а байесовский вывод.
💡 8. Правь биас, а не модель. Если ты обучался на перевзвешенных данных, не надо переобучать модель под реальную базовую ставку. Для линейных моделей достаточно сдвинуть свободный член: $b_{\text{нов}} = b + \log\frac{O_{\text{реал}}}{O_{\text{обуч}}}$. Байесовский фактор от априора не зависит — меняем только априор.
💡 9. Порог считай из цен ошибок. $\text{порог} = \dfrac{C_{FP}}{C_{FP}+C_{FN}}$. Спроси у бизнеса, во сколько раз пропуск дороже ложной тревоги, — и порог посчитается сам. Это гораздо честнее, чем подбирать его по F1-мере, которая молча приравнивает цены ошибок друг к другу.
💡 10. Задавай себе вопрос «а насколько это ожидаемо, если я неправ?». Это байесовский фактор в бытовой формулировке, и он мгновенно вскрывает бесполезные аргументы. Если факт одинаково хорошо объясняется и твоей гипотезой, и противоположной, он не является уликой — какой бы яркой ни казалась его связь с твоей версией.
Заключение
Ты только что разобрал формулу, которая держит на себе половину современного машинного обучения — и при этом выводится в две строки из теоремы умножения. В этом её красота: за тривиальной алгеброй прячется целый способ думать.
Главное, что стоит унести с собой, — это не формула, а привычка. Привычка, увидев результат теста, спрашивать «а как часто это вообще бывает?». Привычка, услышав «вероятность такого совпадения ничтожна», уточнять, вероятность чего при чём. Привычка отделять силу улики от собственных ожиданий и знать, что первое — про данные, а второе — про тебя. Именно эта привычка отличает человека, который умеет читать данные, от человека, которого данными легко обмануть.
И знай: почти каждый раз, когда ты дальше в курсе встретишь что-то вроде «оценим параметр», «добавим регуляризацию», «откалибруем вероятности» или «обновим представление модели», — под этим будет лежать формула Байеса. В генеративных моделях она явная, в логистической регрессии — спрятана в логит, в weight decay — замаскирована под гауссовский априор, в байесовской оптимизации — работает в полный рост. Ты только что выучил не одну тему из блока теории вероятностей, а грамматику, на которой говорит весь вероятностный ML.
А теперь попробуй сам: возьми любой недавний вывод, который ты сделал из данных, — про пользователей, про модель, про здоровье, про что угодно, — и разложи его на априорную вероятность и байесовский фактор. Скорее всего, ты обнаружишь, что улика была слабее, чем казалась, а базовая ставка — важнее, чем ты думал. Это нормально. Именно так и работает обновление убеждений. 🔄
Понял тему? Закрепи в боте! 🚀
Попрактикуйся на задачах и получи персональные рекомендации от AI
💪 Начать тренировку