🔴 Сложный ⏱️ 55 минут

Формула полной вероятности

📋 Содержание урока

Формула полной вероятности 🌳

Представь, что ты отвечаешь за модель, которая распознаёт номера машин на въезде в паркинг. Тебя спрашивают простую вещь: «Какая у неё вероятность ошибки?» Ты открываешь метрики и понимаешь, что честного одного числа там нет. Днём при хорошем свете модель ошибается в 2% случаев. Вечером в сумерках — в 9%. Ночью под жёлтой лампой — в 18%. В дождь всё становится ещё хуже. Каждое из этих чисел — правда, но ни одно из них не является ответом на заданный вопрос.

Ответ появится только тогда, когда ты вспомнишь ещё одну вещь: как часто вообще случаются день, сумерки и ночь. Если 70% машин заезжают днём, 20% вечером и 10% ночью, то общая вероятность ошибки — это не среднее арифметическое $ (0{,}02 + 0{,}09 + 0{,}18)/3 $, а взвешенная сумма: $0{,}7 \cdot 0{,}02 + 0{,}2 \cdot 0{,}09 + 0{,}1 \cdot 0{,}18 = 0{,}05$. Ровно 5%. Каждый сценарий входит в итог с тем весом, с каким он встречается в реальности.

Вот это и есть формула полной вероятности — один из тех редких результатов, который выглядит почти тривиально, а работает буквально везде. Она говорит: если ты не можешь посчитать вероятность события «в лоб», разрежь мир на непересекающиеся сценарии, в каждом сценарии посчитай вероятность отдельно — а потом собери всё обратно, взвесив сценарии по их собственным вероятностям. Разрезал → посчитал по кускам → сложил обратно.

В машинном обучении у этой формулы есть второе имя — маргинализация. Когда ты из совместного распределения $p(x, y)$ получаешь маргинальное $p(x)$, суммируя по всем значениям $y$, ты не делаешь ничего нового — ты применяешь формулу полной вероятности, где гипотезами служат значения $y$. Когда ты описываешь данные смесью гауссиан (GMM), плотность смеси $p(x) = \sum_k \pi_k \, \mathcal{N}(x \mid \mu_k, \Sigma_k)$ — это она же. Когда ты усредняешь предсказания ансамбля по весам моделей — снова она. А ещё именно она стоит в знаменателе формулы Байеса, которую мы разберём в следующем уроке. Так что этот урок — не «ещё одна формула», а несущая балка всего вероятностного мышления в ML.

🎯 Ты узнаешь:

  • Что такое полная группа гипотез и три требования к ней, без которых формула ломается
  • Как выводится $P(A) = \sum_i P(H_i) P(A \mid H_i)$ через разрезание события на несовместные куски
  • Как рисовать и читать дерево вероятностей — самый быстрый способ не запутаться в условиях
  • Как решать классику: две урны, три станка с браком, канал связи с помехами, каскад проверок
  • Почему маргинализация, смеси распределений и ансамбли моделей — это одна и та же формула в трёх костюмах

История: откуда это взялось?

Формула полной вероятности не имеет одного «дня рождения» — она вызревала внутри задач о азартных играх и страховании на протяжении всего XVIII века. Первым, кто систематически считал вероятности «по сценариям», был Абрахам де Муавр: в «Doctrine of Chances» (первое издание — 1718 год) он раз за разом разбирал задачи вида «игра может пойти так или эдак, посчитаем каждый случай отдельно и сложим». Явной формулы с суммой $\sum P(H_i)P(A \mid H_i)$ у него ещё нет — есть последовательное применение того, что мы сегодня называем теоремой умножения, к каждой ветке разбора.

По-настоящему конструкция оформилась в работах Томаса Байеса и Пьера-Симона Лапласа. Байес в посмертно опубликованном «An Essay towards solving a Problem in the Doctrine of Chances» (1763, читал на заседании Королевского общества Ричард Прайс) рассуждает именно так: есть набор взаимоисключающих «причин», каждая со своей априорной вероятностью, и есть наблюдаемое следствие. Чтобы развернуть рассуждение от следствия к причине, Байесу понадобилось сначала посчитать вероятность самого следствия — а это и есть полная вероятность. Лаплас в «Théorie analytique des probabilités» (1812) уже формулирует всё в общем виде: он вводит систему «причин» $C_1, \dots, C_n$, требует, чтобы одна из них обязательно произошла и никакие две вместе, и выписывает вероятность события как взвешенную сумму. Слово «гипотеза» вместо «причины» закрепилось позже, во многом благодаря русской школе — Чебышёву, Маркову и Ляпунову.

Строгая аксиоматика, в которой формула перестала быть «рассуждением» и стала теоремой, появилась в 1933 году в «Grundbegriffe der Wahrscheinlichkeitsrechnung» Андрея Николаевича Колмогорова. Там разбиение вероятностного пространства на счётный набор непересекающихся событий — это просто аккуратное применение счётной аддитивности меры, третьей аксиомы. И вот что интересно: в современном машинном обучении та же самая счётная аддитивность, записанная как $p(x) = \sum_z p(z)\,p(x \mid z)$, лежит в основе латентных переменных — от GMM и скрытых марковских моделей 1960-х до вариационных автокодировщиков 2013 года. Меняются обозначения и масштаб, механика остаётся ровно той, которую Лаплас записал двести лет назад.


Полная группа гипотез: как правильно разрезать неопределённость

Интуиция

Давай начнём с картинки. Представь квадрат — это всё пространство элементарных исходов $\Omega$, весь мир, в котором может происходить эксперимент. Его площадь равна единице: что-то из этого квадрата обязательно произойдёт. Теперь возьми ножницы и разрежь квадрат на несколько кусков — так, чтобы куски не перекрывались и чтобы после разрезания не осталось обрезков на полу. Каждый кусок — это гипотеза $H_i$, то есть один из возможных «сценариев мира». Площадь куска — это $P(H_i)$.

Три требования к такому разрезанию звучат как здравый смысл, и именно поэтому их так легко нарушить на автомате:

Куски не перекрываются — два сценария не могут случиться одновременно. Нельзя одновременно «деталь сделал станок №1» и «деталь сделал станок №2». Если у тебя гипотезы «пользователь с телефона» и «пользователь из Москвы» — это не разрезание, это два перекрывающихся пятна, и формула на них соврёт.

Куски покрывают весь квадрат — какой-то из сценариев обязательно реализуется. Если ты перечислил «день», «вечер», «ночь», но забыл «раннее утро», часть мира осталась неучтённой, и итоговая вероятность окажется заниженной.

У каждого куска ненулевая площадь — $P(H_i) > 0$. Это требование чисто техническое: условная вероятность $P(A \mid H_i) = P(A \cap H_i)/P(H_i)$ просто не определена, если знаменатель равен нулю. Гипотезу с нулевой вероятностью в список включать бессмысленно — она всё равно внесёт нулевой вклад.

Проверка того, что разрезание корректное, до смешного проста и при этом ловит подавляющее большинство ошибок: сумма вероятностей гипотез должна быть ровно единица. $\sum_i P(H_i) = 1$. Если получилось 0,95 — ты что-то забыл. Если 1,15 — твои «сценарии» пересекаются и ты посчитал часть мира дважды. Возьми это в привычку: прежде чем считать хоть что-нибудь, сложи вероятности гипотез.

Определение: События $H_1, H_2, \dots, H_n$ образуют полную группу гипотез (разбиение пространства $\Omega$), если выполнены три условия:

  1. Попарная несовместность: $H_i \cap H_j = \varnothing$ при $i \neq j$
  2. Полнота: $H_1 \cup H_2 \cup \dots \cup H_n = \Omega$, то есть $P(H_1) + \dots + P(H_n) = 1$
  3. Положительность: $P(H_i) > 0$ для каждого $i$

Обрати внимание на слово «гипотеза». Оно не случайное и не означает «предположение, в котором мы не уверены». В этой формуле гипотеза — это просто условие, при котором мы умеем считать. Мы не знаем, какой сценарий реализовался, но знаем, что если бы знали — задача была бы лёгкой. Формула полной вероятности превращает «если бы знал» в честный ответ.

Примеры с разбором

Пример 1 (простой): образуют ли полную группу события «выпало чётное число очков», «выпало 1», «выпало 3»?

Решение:

Шаг 1. Выпишем гипотезы явно через исходы броска кости:

  • $H_1 = \{2, 4, 6\}$, $P(H_1) = 3/6 = 1/2$
  • $H_2 = \{1\}$, $P(H_2) = 1/6$
  • $H_3 = \{3\}$, $P(H_3) = 1/6$

Шаг 2. Проверим несовместность: множества $\{2,4,6\}$, $\{1\}$, $\{3\}$ попарно не пересекаются. ✅

Шаг 3. Проверим полноту суммой: $1/2 + 1/6 + 1/6 = 3/6 + 1/6 + 1/6 = 5/6 \neq 1$. ❌

Шаг 4. Значит, чего-то не хватает. Ищем пропажу: исход $5$ не попал ни в одну гипотезу. Его вероятность как раз $1/6$, и она добивает сумму до единицы.

Ответ: полную группу не образуют — не выполнено условие полноты, потерян исход $5$. Чтобы получилась полная группа, надо добавить $H_4 = \{5\}$.


Пример 2 (средний): три модели-классификатора обрабатывают поток запросов. Модель A получает 50% трафика, B — 30%, C — 20%. Образуют ли события «запрос ушёл в A», «в B», «в C» полную группу? А события «запрос ушёл в A» и «запрос обработан быстрее 100 мс»?

Решение:

Шаг 1. Первый набор. Каждый запрос маршрутизируется ровно в одну модель — значит, события попарно несовместны. ✅

Шаг 2. Сумма: $0{,}5 + 0{,}3 + 0{,}2 = 1$. ✅ Все вероятности положительны. ✅

Шаг 3. Первый набор — корректная полная группа гипотез.

Шаг 4. Второй набор. «Ушёл в A» и «обработан быстрее 100 мс» могут произойти одновременно: запрос вполне может уйти в A и при этом отработать за 40 мс. Несовместность нарушена. ❌

Шаг 5. Более того, эти два события даже не покрывают всё: запрос мог уйти в B и работать 300 мс — такой исход не попадает ни в одно из них.

Ответ: первый набор — полная группа; второй — нет, нарушены и несовместность, и полнота.

📌 Типичная ловушка: гипотезы должны быть ответами на один и тот же вопрос («какая модель обработала?»), а не набором разных интересных фактов о мире.


Пример 3 (сложный): в датасете 40% изображений сняты днём, 35% — вечером, 30% — ночью. Можно ли использовать это как полную группу гипотез?

Решение:

Шаг 1. Сложим: $0{,}40 + 0{,}35 + 0{,}30 = 1{,}05$.

Шаг 2. Сумма больше единицы — это невозможно для разбиения. Значит, категории пересекаются: скорее всего, часть «вечерних» снимков одновременно размечена и как «ночные» (граница сумерек размыта, и разметчики поставили обе метки).

Шаг 3. Что будет, если всё равно применить формулу? Пересечение будет посчитано дважды — с весом «вечера» и с весом «ночи». Итоговая вероятность окажется завышена, а если условная вероятность ошибки ночью велика, завышена сильно.

Шаг 4. Как чинить. Два рабочих пути:

  • Сделать метки взаимоисключающими: ввести жёсткое правило «если есть обе метки — считаем ночью», после чего пересчитать доли так, чтобы сумма стала 1
  • Ввести четвёртую гипотезу «сумерки» как отдельную категорию и переразметить спорные кадры в неё

Ответ: нельзя — сумма $1{,}05 > 1$ доказывает, что категории пересекаются; нужна переразметка до строгого разбиения.

Почему это важно

Проверка $\sum P(H_i) = 1$ — это дешёвый детектор ошибок в данных, а не формальность из учебника. В реальных задачах доли по категориям почти всегда приходят из чужой таблицы: выгрузка из аналитики, разметка подрядчика, отчёт производства. И там регулярно оказывается либо 0,97 (потеряли категорию «прочее»), либо 1,04 (двойная разметка). Одна строчка проверки экономит часы отладки, потому что ошибка в весах гипотез не бросается в глаза — она просто тихо смещает итоговое число на несколько процентов.


Формула полной вероятности: вывод и смысл

Интуиция

Теперь добавим на нашу картинку событие $A$ — какую-нибудь кляксу на квадрате $\Omega$. Клякса может лежать частично в первом куске, частично во втором, частично в третьем. Её площадь и есть $P(A)$, и посчитать её напрямую трудно — форма сложная.

Но разрезы уже проведены. Клякса ими разрезана на части: кусочек в $H_1$, кусочек в $H_2$, кусочек в $H_3$. Эти кусочки не перекрываются (потому что не перекрываются сами куски) и вместе составляют всю кляксу (потому что куски покрывают весь квадрат). Значит, площадь кляксы — это просто сумма площадей кусочков:

$$P(A) = P(A \cap H_1) + P(A \cap H_2) + \dots + P(A \cap H_n)$$

Это уже теорема сложения для несовместных событий из урока 229, ничего нового. А дальше вступает теорема умножения из урока 230: каждое пересечение можно расписать через условную вероятность.

$$P(A \cap H_i) = P(H_i) \cdot P(A \mid H_i)$$

Подставляем — и получаем формулу целиком. Смысл каждого слагаемого читается по-человечески: $P(H_i)$ — «как часто мы попадаем в этот сценарий», $P(A \mid H_i)$ — «как часто внутри этого сценария случается $A$». Произведение — вклад сценария в общий итог.

Строгая формулировка и вывод

Определение (формула полной вероятности): Пусть $H_1, \dots, H_n$ — полная группа гипотез, и $A$ — произвольное событие. Тогда

$$P(A) = \sum_{i=1}^{n} P(H_i) \cdot P(A \mid H_i)$$

Доказательство по шагам.

Шаг 1. Так как $H_1 \cup \dots \cup H_n = \Omega$, то любой исход из $A$ лежит хотя бы в одной гипотезе. Запишем это:

$$A = A \cap \Omega = A \cap (H_1 \cup H_2 \cup \dots \cup H_n)$$

Шаг 2. Раскроем пересечение по дистрибутивности операций над множествами:

$$A = (A \cap H_1) \cup (A \cap H_2) \cup \dots \cup (A \cap H_n)$$

Шаг 3. Проверим, что эти куски несовместны. Возьмём $i \neq j$:

$$(A \cap H_i) \cap (A \cap H_j) = A \cap (H_i \cap H_j) = A \cap \varnothing = \varnothing$$

Пересечение пустое — куски попарно несовместны.

Шаг 4. Применим теорему сложения для попарно несовместных событий (вероятность объединения равна сумме вероятностей):

$$P(A) = \sum_{i=1}^{n} P(A \cap H_i)$$

Шаг 5. По теореме умножения, поскольку $P(H_i) > 0$, каждое пересечение раскладывается так:

$$P(A \cap H_i) = P(H_i) \cdot P(A \mid H_i)$$

Шаг 6. Подставляем в сумму:

$$P(A) = \sum_{i=1}^{n} P(H_i) \cdot P(A \mid H_i) \qquad \blacksquare$$

Заметь, где именно в доказательстве работает каждое из трёх требований. Полнота нужна в шаге 1 (иначе часть $A$ потеряется). Несовместность — в шаге 3 (иначе нельзя складывать). Положительность — в шаге 5 (иначе условная вероятность не определена). Убери любое — и вывод рассыпается.

Ещё один полезный взгляд: формула полной вероятности — это взвешенное среднее условных вероятностей, где веса $P(H_i)$ сами суммируются в единицу. Отсюда сразу следует практичное свойство: результат всегда лежит между минимальной и максимальной условной вероятностью.

$$\min_i P(A \mid H_i) \;\le\; P(A) \;\le\; \max_i P(A \mid H_i)$$

Это бесплатная проверка ответа. Если условные вероятности брака были 2%, 4% и 5%, а у тебя вышло 6% — ты ошибся, и искать ошибку надо не в третьем знаке, а в структуре решения.

Примеры с разбором

Пример 4 (простой): две урны. В первой 6 белых и 4 чёрных шара, во второй 3 белых и 7 чёрных. Наугад выбирают урну, затем из неё наугад вынимают шар. Какова вероятность, что шар белый?

Решение:

Шаг 1. Задаём гипотезы — они отвечают на вопрос «из какой урны тянули»:

  • $H_1$ — выбрана первая урна, $P(H_1) = 1/2$
  • $H_2$ — выбрана вторая урна, $P(H_2) = 1/2$

Проверка: $1/2 + 1/2 = 1$ ✅

Шаг 2. Считаем условные вероятности события $A$ = «шар белый» внутри каждой гипотезы:

$$P(A \mid H_1) = \frac{6}{6+4} = 0{,}6, \qquad P(A \mid H_2) = \frac{3}{3+7} = 0{,}3$$

Шаг 3. Подставляем в формулу:

$$P(A) = 0{,}5 \cdot 0{,}6 + 0{,}5 \cdot 0{,}3 = 0{,}30 + 0{,}15 = 0{,}45$$

Проверим наш ответ: $0{,}45$ лежит между $0{,}3$ и $0{,}6$ ✅, и это ровно середина — что логично, ведь урны выбираются с одинаковой вероятностью.

Ответ: $P(A) = 0{,}45$.


Пример 5 (средний): три станка. Первый производит 25% всех деталей и даёт 5% брака, второй — 35% деталей и 4% брака, третий — 40% деталей и 2% брака. Какова вероятность, что случайно взятая деталь бракованная?

Решение:

Шаг 1. Гипотезы — «деталь сделана станком №$i$»:

  • $P(H_1) = 0{,}25$, $P(H_2) = 0{,}35$, $P(H_3) = 0{,}40$

Проверка: $0{,}25 + 0{,}35 + 0{,}40 = 1{,}00$ ✅

Шаг 2. Условные вероятности брака $A$:

  • $P(A \mid H_1) = 0{,}05$, $P(A \mid H_2) = 0{,}04$, $P(A \mid H_3) = 0{,}02$

Шаг 3. Считаем вклад каждого станка отдельно — так удобнее проверять:

  • Станок 1: $0{,}25 \cdot 0{,}05 = 0{,}0125$
  • Станок 2: $0{,}35 \cdot 0{,}04 = 0{,}0140$
  • Станок 3: $0{,}40 \cdot 0{,}02 = 0{,}0080$

Шаг 4. Складываем: $0{,}0125 + 0{,}0140 + 0{,}0080 = 0{,}0345$.

Проверим наш ответ: значение $0{,}0345$ зажато между $0{,}02$ и $0{,}05$ ✅. Оно ближе к нижней границе, потому что самый чистый станок делает самую большую долю деталей — тоже логично.

Ответ: $P(A) = 0{,}0345 = 3{,}45\%$.

📌 Обрати внимание на побочный результат: мы заодно узнали, что станок 2 вносит в брак больше всех ($0{,}0140$ из $0{,}0345$, то есть около 41%), хотя процент брака у него не самый высокий. Это уже почти байесовский вопрос «кто виноват?» — и в следующем уроке мы доведём его до конца.


Пример 6 (сложный): двоичный канал связи. Источник передаёт ноль с вероятностью $0{,}6$ и единицу с вероятностью $0{,}4$. Канал шумит несимметрично: ноль искажается в единицу с вероятностью $0{,}03$, а единица искажается в ноль с вероятностью $0{,}08$. Какова вероятность, что на выходе приёмник увидит единицу?

Решение:

Шаг 1. Гипотезы — что было послано:

  • $H_0$ — послан ноль, $P(H_0) = 0{,}6$
  • $H_1$ — послана единица, $P(H_1) = 0{,}4$

Сумма $= 1$ ✅

Шаг 2. Событие $A$ = «принята единица». Условные вероятности:

Если послан ноль, единица на выходе означает искажение: $P(A \mid H_0) = 0{,}03$.

Если послана единица, единица на выходе означает, что искажения не было: $P(A \mid H_1) = 1 - 0{,}08 = 0{,}92$.

Шаг 3. Формула полной вероятности:

$$P(A) = 0{,}6 \cdot 0{,}03 + 0{,}4 \cdot 0{,}92 = 0{,}018 + 0{,}368 = 0{,}386$$

Шаг 4. Проверим себя с другой стороны. Посчитаем вероятность принять ноль:

$$P(\bar{A}) = 0{,}6 \cdot 0{,}97 + 0{,}4 \cdot 0{,}08 = 0{,}582 + 0{,}032 = 0{,}614$$

Сумма: $0{,}386 + 0{,}614 = 1{,}000$ ✅ Всё сходится.

Ответ: $P(\text{принята единица}) = 0{,}386$.

📌 Смотри, что произошло: посылали единицу в 40% случаев, а принимаем в 38,6%. Канал «съедает» часть единиц и добавляет ложных — итоговая статистика на выходе отличается от статистики на входе. Ровно этот эффект в ML называют сдвигом распределения меток: шумная разметка меняет наблюдаемые доли классов.

Почему это важно

Формула полной вероятности — это способ считать там, где прямой подсчёт невозможен в принципе. У тебя почти никогда нет «вероятности ошибки модели вообще» — у тебя есть вероятности ошибки на срезах: по времени суток, по типу устройства, по языку, по длине текста. И есть доли этих срезов в трафике. Общая метрика собирается только через взвешивание. Более того, когда доли срезов в проде отличаются от долей в тестовой выборке, метрика на тесте систематически врёт — и это не «плохая модель», а неправильно применённая формула полной вероятности.


Дерево вероятностей: как не запутаться

Интуиция

Когда гипотез три-четыре, а внутри каждой ещё пара развилок, держать всё в голове бесполезно. Рисуй дерево. Это не «наглядная картинка для школьников» — это рабочий инструмент, который превращает путаницу условий в механическую процедуру.

Правила рисования простые:

  • Из корня выходят ветви по числу гипотез. На каждой ветви пишем её вероятность $P(H_i)$
  • Из каждой гипотезы выходят ветви следующего шага. На них пишем условные вероятности при этой гипотезе
  • Вероятность целого пути от корня до листа = произведение чисел вдоль пути (это теорема умножения)
  • Вероятность события $A$ = сумма по всем путям, которые приводят к $A$ (это теорема сложения)

Две проверки, которые дерево делает почти бесплатно:

  • Сумма чисел на ветвях, выходящих из одного узла, всегда равна 1
  • Сумма вероятностей всех листьев тоже равна 1

Схематично для трёх гипотез это выглядит так:

                    Ω
        ┌───────────┼───────────┐
     P(H₁)=0,25  P(H₂)=0,35  P(H₃)=0,40
        │           │           │
       H₁          H₂          H₃
     ┌──┴──┐     ┌──┴──┐     ┌──┴──┐
  0,05    0,95 0,04   0,96 0,02   0,98
    A      Ā     A     Ā     A     Ā
  ↓0,0125      ↓0,0140      ↓0,0080     →  P(A)=0,0345

Слева направо — сценарии, вниз — исходы внутри сценария. Вертикальные стрелки внизу — вклады путей, которые ведут к $A$. Складываешь три числа — получаешь ответ. Тот же пример 5, но теперь видно, откуда берётся каждое слагаемое.

Примеры с разбором

Пример 7 (средний): каскад проверок. В потоке 10% писем — спам. Быстрый фильтр помечает спам как подозрительный с вероятностью $0{,}90$, а нормальное письмо помечает подозрительным (ложное срабатывание) с вероятностью $0{,}05$. Какая доля всех писем попадёт в очередь на ручную проверку?

Решение:

Шаг 1. Строим дерево. Первая развилка — реальный тип письма:

  • $H_1$ — спам, $P(H_1) = 0{,}10$
  • $H_2$ — не спам, $P(H_2) = 0{,}90$

Шаг 2. Вторая развилка — что сделал фильтр. Событие $A$ = «помечено подозрительным»:

  • $P(A \mid H_1) = 0{,}90$ (правильное срабатывание)
  • $P(A \mid H_2) = 0{,}05$ (ложное срабатывание)

Шаг 3. Считаем пути, ведущие к $A$:

  • Путь «спам → помечен»: $0{,}10 \cdot 0{,}90 = 0{,}090$
  • Путь «не спам → помечен»: $0{,}90 \cdot 0{,}05 = 0{,}045$

Шаг 4. Складываем: $P(A) = 0{,}090 + 0{,}045 = 0{,}135$.

Проверим наш ответ: посчитаем оставшиеся два пути. «Спам → пропущен»: $0{,}10 \cdot 0{,}10 = 0{,}010$. «Не спам → пропущен»: $0{,}90 \cdot 0{,}95 = 0{,}855$. Сумма всех четырёх листьев: $0{,}090 + 0{,}045 + 0{,}010 + 0{,}855 = 1{,}000$ ✅

Ответ: на ручную проверку уйдёт $13{,}5\%$ писем.

📌 И сразу практический вывод: из этих 13,5% только $0{,}090/0{,}135 = 2/3$ — настоящий спам. Треть работы модераторов уходит на ложные срабатывания, хотя точность фильтра «на спаме» кажется приличной. Причина в том, что нормальных писем в девять раз больше, и даже маленький процент ложных срабатываний даёт большой абсолютный поток.


Пример 8 (сложный): двухступенчатый каскад моделей. Лёгкая модель фильтрует поток, тяжёлая проверяет то, что прошло фильтр. В потоке 5% мошеннических транзакций. Лёгкая модель отправляет на тяжёлую проверку мошенническую транзакцию с вероятностью $0{,}95$, честную — с вероятностью $0{,}10$. Тяжёлая модель блокирует то, что до неё дошло: мошенническую с вероятностью $0{,}88$, честную — с вероятностью $0{,}03$. Какова вероятность, что случайная транзакция будет заблокирована?

Решение:

Шаг 1. Дерево трёхуровневое. Первый уровень — тип транзакции:

  • $H_1$ — мошенническая, $P(H_1) = 0{,}05$
  • $H_2$ — честная, $P(H_2) = 0{,}95$

Шаг 2. Внутри каждой гипотезы — цепочка «прошла фильтр И заблокирована тяжёлой». Заблокировать можно только то, что дошло до второй ступени, поэтому по теореме умножения:

$$P(\text{блок} \mid H_1) = 0{,}95 \cdot 0{,}88 = 0{,}8360$$$$P(\text{блок} \mid H_2) = 0{,}10 \cdot 0{,}03 = 0{,}0030$$

Шаг 3. Применяем формулу полной вероятности:

$$P(\text{блок}) = 0{,}05 \cdot 0{,}8360 + 0{,}95 \cdot 0{,}0030 = 0{,}04180 + 0{,}00285 = 0{,}04465$$

Шаг 4. Разберём, что получилось. Заблокировано $4{,}465\%$ потока. Из них настоящих мошенников $0{,}04180$, ложных блокировок $0{,}00285$ — то есть чистота блокировок около $93{,}6\%$.

Проверим наш ответ: обе условные вероятности блокировки ($0{,}836$ и $0{,}003$) ограничивают ответ сверху и снизу: $0{,}003 \le 0{,}04465 \le 0{,}836$ ✅ Ответ близок к нижней границе, потому что честных транзакций подавляющее большинство.

Ответ: $P(\text{блокировка}) \approx 0{,}0447$, то есть примерно $4{,}5\%$ транзакций.

📌 Каскад — это дерево, где условная вероятность внутри гипотезы сама считается произведением по цепочке. Такой архитектурный приём в проде встречается постоянно: дешёвая модель отсекает 90% трафика, дорогая работает только с остатком. Формула полной вероятности — единственный честный способ посчитать итоговое качество такой связки.


Пример 9 (средний): классика с перекладыванием. Из первой урны, где 4 белых и 6 чёрных шаров, наугад берут один шар и перекладывают во вторую урну, где было 3 белых и 7 чёрных. После этого из второй урны наугад достают шар. Какова вероятность, что он белый?

Решение:

Шаг 1. Здесь состав второй урны зависит от того, что переложили — значит, гипотезы про переложенный шар:

  • $H_1$ — переложили белый, $P(H_1) = 4/10 = 0{,}4$
  • $H_2$ — переложили чёрный, $P(H_2) = 6/10 = 0{,}6$

Шаг 2. Считаем состав второй урны в каждом случае. Изначально там 10 шаров, после перекладывания — 11.

Если переложили белый: белых стало $3 + 1 = 4$ из 11, значит $P(A \mid H_1) = 4/11$.

Если переложили чёрный: белых осталось $3$ из 11, значит $P(A \mid H_2) = 3/11$.

Шаг 3. Формула:

$$P(A) = 0{,}4 \cdot \frac{4}{11} + 0{,}6 \cdot \frac{3}{11} = \frac{1{,}6}{11} + \frac{1{,}8}{11} = \frac{3{,}4}{11} = \frac{17}{55}$$

Шаг 4. В десятичном виде: $17/55 \approx 0{,}3091$.

Проверим наш ответ: ответ обязан лежать между $3/11 \approx 0{,}2727$ и $4/11 \approx 0{,}3636$ ✅ И он должен быть чуть ближе к нижней границе, потому что чёрный шар перекладывают чаще — так и есть.

Ответ: $P(A) = 17/55 \approx 0{,}309$.

Почему это важно

Дерево — это не только способ решить задачу, но и способ проверить постановку. Когда ты рисуешь ветви и видишь, что из какого-то узла выходят вероятности, не дающие в сумме единицу, — ты нашёл дырку в условии или в своих данных ещё до того, как начал считать. В коде эта же идея живёт как ассерты на нормировку: assert abs(probs.sum() - 1) < 1e-9. Одна такая строчка ловит опечатки в конфиге весов смеси лучше любого дебаггера.


Маргинализация: та же формула на языке ML

Интуиция

Теперь самое главное для нас. Возьми формулу и переименуй буквы. Пусть гипотезы — это значения дискретной случайной величины $y$ (например, класс объекта), а событие $A$ — это значение другой величины $x$ (например, наблюдаемый признак). Тогда:

$$P(x) = \sum_{y} P(y) \cdot P(x \mid y)$$

Слева — распределение одного только $x$. Справа — сумма по всем значениям $y$. В теории вероятностей это формула полной вероятности. В машинном обучении ровно то же выражение называется маргинализацией: переходом от совместного распределения $p(x, y)$ к маргинальному $p(x)$. Ведь $P(y)P(x \mid y)$ — это в точности $P(x, y)$, и формула превращается в

$$P(x) = \sum_{y} P(x, y)$$

Слово «маргинальное» пришло из практики XIX века: совместное распределение записывали таблицей, а суммы по строкам и столбцам подписывали на полях (margin) этой таблицы. Отсюда и название.

Определение: Маргинализация — это исключение (суммирование или интегрирование) переменной из совместного распределения:

$$p(x) = \sum_{y} p(x, y) = \sum_{y} p(y)\, p(x \mid y)$$

В непрерывном случае сумма заменяется интегралом: $p(x) = \int p(x, y)\, dy = \int p(y)\, p(x \mid y)\, dy$.

Именно поэтому формулу полной вероятности иногда называют законом полной вероятности, а в байесовской литературе — вычислением evidence (свидетельства). Всё это одна и та же операция: «просуммируй по тому, чего не знаешь».

Смеси распределений: генеративная схема

Самая красивая иллюстрация — модели смесей (mixture models). Представь генеративную процедуру, которая порождает данные в два шага:

  1. Бросаем нечестную кость и выбираем компоненту $k$ с вероятностью $\pi_k$
  2. Генерируем точку $x$ из распределения этой компоненты: $x \sim p(x \mid k)$

Какова плотность получившейся точки? Компонента — это гипотеза, $\pi_k = P(H_k)$, а $p(x \mid k) = P(A \mid H_k)$. Формула полной вероятности отвечает мгновенно:

$$p(x) = \sum_{k=1}^{K} \pi_k \, p(x \mid k)$$

Для гауссовой смеси (GMM) это знаменитое

$$p(x) = \sum_{k=1}^{K} \pi_k \, \mathcal{N}(x \mid \mu_k, \Sigma_k), \qquad \sum_{k=1}^{K} \pi_k = 1, \quad \pi_k > 0$$

Смотри, как условия на веса $\pi_k$ буквально повторяют три требования к полной группе гипотез: положительность и сумма, равная единице. Это не совпадение и не удобное соглашение — без них $p(x)$ просто перестанет быть плотностью.

Пример 10 (средний): смесь двух поведений пользователей. 40% посетителей — «случайные» (кликают на баннер с вероятностью $0{,}02$), 60% — «заинтересованные» (кликают с вероятностью $0{,}15$). Какой CTR ты увидишь в отчёте?

Решение:

Шаг 1. Компоненты смеси = гипотезы: $\pi_1 = 0{,}40$, $\pi_2 = 0{,}60$. Сумма $= 1$ ✅

Шаг 2. Условные вероятности клика: $0{,}02$ и $0{,}15$.

Шаг 3. Маргинальная вероятность клика:

$$P(\text{клик}) = 0{,}40 \cdot 0{,}02 + 0{,}60 \cdot 0{,}15 = 0{,}008 + 0{,}090 = 0{,}098$$

Шаг 4. В отчёте CTR будет $9{,}8\%$.

Проверим наш ответ: $0{,}02 \le 0{,}098 \le 0{,}15$ ✅

Ответ: $9{,}8\%$.

📌 И вот ключевой урок: $9{,}8\%$ — это число, которого нет ни у одной реальной группы пользователей. Ни один посетитель не кликает «с вероятностью 9,8%». Наблюдаемая метрика — артефакт смешивания. Если завтра доля заинтересованных вырастет до 70% (например, поменялся источник трафика), CTR подскочит до $0{,}3 \cdot 0{,}02 + 0{,}7 \cdot 0{,}15 = 0{,}111$ — при том, что поведение обеих групп не изменилось ни на йоту. Это классическая ловушка аналитики: метрика двинулась, а причина — в весах гипотез, а не в качестве продукта.

Ансамбли моделей

Ещё один костюм той же формулы. Пусть у тебя ансамбль: модель выбирается (или взвешивается) с вероятностями $w_1, \dots, w_m$, где $\sum w_j = 1$. Тогда вероятность правильного ответа ансамбля при случайном выборе модели:

$$P(\text{верно}) = \sum_{j} w_j \, P(\text{верно} \mid \text{модель } j)$$

Пример 11 (простой): в ансамбле три модели с весами $0{,}5$, $0{,}3$ и $0{,}2$ и точностями $0{,}86$, $0{,}91$ и $0{,}78$. Какова точность при случайном выборе модели по весам?

Решение:

Шаг 1. Проверяем веса: $0{,}5 + 0{,}3 + 0{,}2 = 1$ ✅

Шаг 2. Считаем вклады:

  • $0{,}5 \cdot 0{,}86 = 0{,}430$
  • $0{,}3 \cdot 0{,}91 = 0{,}273$
  • $0{,}2 \cdot 0{,}78 = 0{,}156$

Шаг 3. Сумма: $0{,}430 + 0{,}273 + 0{,}156 = 0{,}859$.

Ответ: $85{,}9\%$.

📌 Важная оговорка: это точность схемы «подбросим монетку и возьмём одну модель», а не точность голосования большинством. Голосование — другая схема, и оно может дать точность выше максимума по отдельным моделям, потому что там ошибки моделей частично компенсируют друг друга. Формула полной вероятности такого не умеет: взвешенное среднее всегда зажато между минимумом и максимумом. Именно поэтому реальные ансамбли строят через агрегацию предсказаний, а не через случайный выбор модели.

Латентные переменные и генеративные модели

Общая схема, которая объединяет всё вышесказанное, выглядит так:

$$p(x) = \sum_{z} p(z)\, p(x \mid z)$$

Здесь $z$ — латентная (скрытая) переменная: кластер в GMM, тема в тематическом моделировании, скрытое состояние в HMM, код в автокодировщике. Мы её не наблюдаем, но предполагаем, что она есть и что данные порождаются в два шага «сначала $z$, потом $x$». Обучение таких моделей (EM-алгоритм, вариационный вывод) — это по сути борьба с тем, что сумма по $z$ бывает астрономически большой и её приходится приближать. Но сама формула, которую приближают, — та, что мы вывели двадцать строк назад.

Почему это важно

Когда ты видишь в статье выражение $p(x) = \int p(z) p(x \mid z)\, dz$ и оно кажется тяжёлым, полезно вспомнить: это две урны. Просто урн бесконечно много, и они непрерывно перетекают друг в друга. Механика не изменилась: выбрали сценарий с каким-то весом, внутри сценария посчитали вероятность, собрали обратно. Понимание этой единственной идеи снимает добрую половину пугающих формул в байесовском ML.


Счётное число гипотез и непрерывный случай

Интуиция

До сих пор гипотез было конечное число: две урны, три станка. Но ничто не мешает разрезать мир на бесконечно много кусков — лишь бы кусков было счётное число и лишь бы их вероятности по-прежнему давали в сумме единицу. Аксиома счётной аддитивности Колмогорова разрешает складывать бесконечные ряды точно так же, как конечные суммы.

Определение (расширенная формула): Пусть $H_1, H_2, H_3, \dots$ — счётная полная группа гипотез: попарно несовместные события с $P(H_i) > 0$ и $\sum_{i=1}^{\infty} P(H_i) = 1$. Тогда для любого события $A$

$$P(A) = \sum_{i=1}^{\infty} P(H_i)\, P(A \mid H_i)$$

Ряд справа сходится абсолютно, поскольку все слагаемые неотрицательны и не превосходят $P(H_i)$, а $\sum P(H_i) = 1$.

Эта сходимость — приятный бонус: ряд можно суммировать в любом порядке, результат не изменится. И ещё: сумма всегда конечна и не больше единицы, что бы ни творилось с условными вероятностями.

Дальше по той же логике идёт непрерывный случай. Если «гипотеза» — это значение непрерывной случайной величины $\theta$ с плотностью $p(\theta)$, сумма превращается в интеграл:

$$P(A) = \int_{-\infty}^{+\infty} p(\theta)\, P(A \mid \theta)\, d\theta$$

Это уже полноценный байесовский аппарат: $p(\theta)$ — априорное распределение параметра, $P(A \mid \theta)$ — правдоподобие наблюдения, а весь интеграл — то самое evidence, которое стоит в знаменателе апостериорного распределения. Мы вернёмся к нему в следующем уроке и потом ещё много раз.

Примеры с разбором

Пример 12 (сложный): подбрасывают симметричную монету до первого выпадения орла. Пусть $K$ — общее число бросков. Затем берут $K$ новых монет и подбрасывают их все. Какова вероятность, что все $K$ новых монет тоже дали орла?

Решение:

Шаг 1. Гипотезы — значения $K$. Первый орёл выпал на $k$-м броске, если до этого было $k-1$ решек:

$$P(K = k) = \left(\frac{1}{2}\right)^{k-1} \cdot \frac{1}{2} = \frac{1}{2^k}, \qquad k = 1, 2, 3, \dots$$

Шаг 2. Проверим, что это полная группа. Сумма геометрической прогрессии со знаменателем $1/2$:

$$\sum_{k=1}^{\infty} \frac{1}{2^k} = \frac{1/2}{1 - 1/2} = 1 \quad ✅$$

Гипотез бесконечно много, но они честно разбивают весь мир.

Шаг 3. Условная вероятность. Если $K = k$, то нужно, чтобы все $k$ независимых монет дали орла:

$$P(A \mid K = k) = \left(\frac{1}{2}\right)^{k} = \frac{1}{2^k}$$

Шаг 4. Собираем по формуле полной вероятности:

$$P(A) = \sum_{k=1}^{\infty} \frac{1}{2^k} \cdot \frac{1}{2^k} = \sum_{k=1}^{\infty} \frac{1}{4^k}$$

Шаг 5. Снова геометрическая прогрессия, теперь со знаменателем $1/4$:

$$\sum_{k=1}^{\infty} \frac{1}{4^k} = \frac{1/4}{1 - 1/4} = \frac{1/4}{3/4} = \frac{1}{3}$$

Проверим наш ответ: первое слагаемое ($k=1$) равно $1/4 = 0{,}25$, второе $1/16 = 0{,}0625$, третье $1/64 \approx 0{,}0156$. Частичные суммы: $0{,}25$, $0{,}3125$, $0{,}3281$, дальше $0{,}3320$, $0{,}3330$… — уверенно ползут к $1/3 \approx 0{,}3333$ ✅

Ответ: $P(A) = 1/3$.

📌 Обрати внимание: почти вся вероятность набирается на первых двух-трёх гипотезах. Так бывает почти всегда, когда $P(H_k)$ убывает геометрически, — и это оправдывает практический приём «обрезать хвост», когда точная сумма ряда не берётся аналитически.


Пример 13 (средний): обратная задача. Известно, что общая вероятность события $A$ равна $0{,}40$. Гипотез две: $P(H_1) = 0{,}3$ и $P(H_2) = 0{,}7$, причём $P(A \mid H_1) = 0{,}6$. Найди $P(A \mid H_2)$.

Решение:

Шаг 1. Записываем формулу с неизвестной $x = P(A \mid H_2)$:

$$0{,}40 = 0{,}3 \cdot 0{,}6 + 0{,}7 \cdot x$$

Шаг 2. Считаем известное слагаемое: $0{,}3 \cdot 0{,}6 = 0{,}18$.

Шаг 3. Выражаем $x$:

$$0{,}7x = 0{,}40 - 0{,}18 = 0{,}22 \quad \Rightarrow \quad x = \frac{0{,}22}{0{,}7} = \frac{22}{70} = \frac{11}{35}$$

Шаг 4. В десятичном виде: $11/35 \approx 0{,}3143$.

Проверим наш ответ: подставим обратно: $0{,}3 \cdot 0{,}6 + 0{,}7 \cdot 0{,}31428\ldots = 0{,}18 + 0{,}22 = 0{,}40$ ✅ И проверим осмысленность: $0{,}314$ лежит между 0 и 1 — значит, задача корректна.

Ответ: $P(A \mid H_2) = 11/35 \approx 0{,}314$.

📌 Обратные задачи — хороший способ поймать несогласованные данные. Если бы в условии стояло $P(A) = 0{,}9$, мы получили бы $x = (0{,}9 - 0{,}18)/0{,}7 = 1{,}029 > 1$ — невозможная вероятность, то есть условие противоречиво. Формула полной вероятности работает и как проверка непротиворечивости входных чисел.


Ошибка, которая ломает всё: неполная группа гипотез

Давай отдельно разберём главный источник неверных ответов. Формула выглядит настолько безобидно, что её применяют механически — и в 80% случаев ошибка сидит не в арифметике, а в наборе гипотез.

Сценарий первый: гипотезы не покрывают всё. Аналитик пишет: «60% трафика с мобильных, 30% с десктопа», считает конверсию — и получает заниженное число, потому что 10% трафика с планшетов просто выпали из расчёта. Детектор: $0{,}6 + 0{,}3 = 0{,}9 \neq 1$.

Сценарий второй: гипотезы пересекаются. «40% пользователей из Москвы, 25% с iPhone, 50% старше 30» — это не разбиение, это три разных признака. Сумма $1{,}15 > 1$, и любой расчёт по формуле посчитает часть аудитории по два-три раза.

Сценарий третий, самый коварный: гипотезы формально в сумме дают единицу, но не несовместны. Такое бывает при подгонке долей «чтобы сходилось». Тут сумма не спасает — нужно проверять смысл: могут ли два сценария реализоваться одновременно? Если да — разбиения нет.

Пример 14 (сложный): в компании считают вероятность отказа сервиса. Инженер пишет: «Отказ бывает при высокой нагрузке (вероятность высокой нагрузки $0{,}20$, отказ при ней $0{,}30$), при сбое сети (вероятность $0{,}05$, отказ $0{,}80$) и при деплое (вероятность $0{,}10$, отказ $0{,}25$). Итого $P(\text{отказ}) = 0{,}2 \cdot 0{,}3 + 0{,}05 \cdot 0{,}8 + 0{,}1 \cdot 0{,}25 = 0{,}125$». Найди ошибку.

Решение:

Шаг 1. Проверяем сумму гипотез: $0{,}20 + 0{,}05 + 0{,}10 = 0{,}35 \neq 1$. Уже плохо: 65% времени не описано ни одной гипотезой.

Шаг 2. Проверяем несовместность по смыслу. Может ли одновременно идти деплой и быть высокая нагрузка? Разумеется, может — более того, именно на такой комбинации сервисы обычно и падают. Несовместность тоже нарушена.

Шаг 3. Что именно посчитал инженер? Он посчитал сумму $\sum P(H_i)P(A \mid H_i) = \sum P(A \cap H_i)$ — то есть суммарную вероятность отказа, случившегося при одном из трёх перечисленных условий, причём случаи двойного совпадения условий учтены дважды. Это ни полная вероятность отказа, ни какая-либо другая осмысленная величина.

Шаг 4. Как чинить. Нужно построить настоящее разбиение. Например, по «режиму работы системы» так, чтобы каждый момент времени попадал ровно в один режим:

  • $H_1$ — спокойный режим: $P = 0{,}65$, отказ при нём $0{,}01$
  • $H_2$ — высокая нагрузка без деплоя: $P = 0{,}17$, отказ $0{,}30$
  • $H_3$ — идёт деплой (при любой нагрузке): $P = 0{,}13$, отказ $0{,}25$
  • $H_4$ — сбой сети: $P = 0{,}05$, отказ $0{,}80$

Шаг 5. Проверяем: $0{,}65 + 0{,}17 + 0{,}13 + 0{,}05 = 1{,}00$ ✅ Теперь можно считать:

$$P(\text{отказ}) = 0{,}65 \cdot 0{,}01 + 0{,}17 \cdot 0{,}30 + 0{,}13 \cdot 0{,}25 + 0{,}05 \cdot 0{,}80$$$$= 0{,}0065 + 0{,}0510 + 0{,}0325 + 0{,}0400 = 0{,}1300$$

Ответ: исходный расчёт неверен (гипотезы не образуют полную группу: сумма $0{,}35$ и события совместны). После корректного разбиения $P(\text{отказ}) = 0{,}13$.

Почему это важно

Разбиение — это половина работы, а иногда и вся. Арифметику посчитает кто угодно, а вот заметить, что «мобильные» и «из приложения» пересекаются, — это уже профессиональный навык. В коде это выражается очень конкретно: если у тебя есть массив весов гипотез, первое, что с ним надо сделать, — проверить нормировку; а если ты строишь категории из данных, проверить, что группировка не даёт объекту попасть в две группы сразу.


Мостик к формуле Байеса

Мы почти дошли до самого известного результата теории вероятностей. Смотри, как это устроено.

Формула полной вероятности отвечает на вопрос «вперёд»: знаю сценарии и их вероятности — найду вероятность результата. Но чаще жизнь задаёт обратный вопрос: результат уже наблюдён, какой сценарий его вызвал? Деталь оказалась бракованной — какой станок виноват? Тест дал положительный результат — болен ли пациент? Модель выдала «спам» — это правда спам?

Начнём с определения условной вероятности (урок 230) и распишем числитель через теорему умножения:

$$P(H_i \mid A) = \frac{P(H_i \cap A)}{P(A)} = \frac{P(H_i)\, P(A \mid H_i)}{P(A)}$$

И вот здесь появляется наша формула: знаменатель $P(A)$ — это ровно полная вероятность.

$$P(H_i \mid A) = \frac{P(H_i)\, P(A \mid H_i)}{\sum_{j} P(H_j)\, P(A \mid H_j)}$$

Это и есть формула Байеса. Подробно мы разберём её в следующем уроке 232 — там будут априорные и апостериорные вероятности, парадокс редкой болезни и байесовский классификатор. Сейчас важно другое: знаменатель Байеса — это то, что ты уже умеешь считать. Он играет роль нормировки: делает так, чтобы апостериорные вероятности всех гипотез в сумме давали единицу.

Пример 15 (средний): предвкушение Байеса. Вернёмся к трём станкам из примера 5. Мы посчитали, что $P(\text{брак}) = 0{,}0345$, и что вклад второго станка равен $0{,}0140$. Какая доля всего брака приходится на второй станок?

Решение:

Шаг 1. Общий брак: $0{,}0345$ (уже посчитан).

Шаг 2. Часть брака, произведённая вторым станком: $P(H_2 \cap A) = 0{,}35 \cdot 0{,}04 = 0{,}0140$.

Шаг 3. Доля:

$$\frac{0{,}0140}{0{,}0345} \approx 0{,}4058$$

Шаг 4. Проверим на всех трёх: $0{,}0125/0{,}0345 \approx 0{,}3623$, $0{,}0140/0{,}0345 \approx 0{,}4058$, $0{,}0080/0{,}0345 \approx 0{,}2319$. Сумма: $0{,}3623 + 0{,}4058 + 0{,}2319 = 1{,}0000$ ✅ Ровно то, что должно давать нормированное распределение.

Ответ: около $40{,}6\%$ всего брака — со второго станка.

📌 Ты только что применил формулу Байеса, не зная её названия. Полная вероятность в знаменателе, вклад гипотезы в числителе — вот и весь механизм. В следующем уроке мы разберём, почему интуиция здесь регулярно подводит и как этим пользуются в диагностике, антифроде и наивном байесовском классификаторе.


Практика: 30 заданий

Базовые (задания 1-10)

Задание 1: В первой урне 5 белых и 5 чёрных шаров, во второй — 8 белых и 2 чёрных. Урну выбирают наугад, затем достают один шар. Найди вероятность того, что шар белый.


Задание 2: Аналитик заявил, что события $H_1$, $H_2$, $H_3$ с вероятностями $0{,}30$, $0{,}45$ и $0{,}20$ образуют полную группу гипотез. Проверь это утверждение.


Задание 3: Первый станок делает 60% деталей и даёт 3% брака, второй — 40% деталей и 5% брака. Найди вероятность того, что случайно взятая деталь бракованная.


Задание 4: Дано: $P(H) = 0{,}7$, $P(A \mid H) = 0{,}2$, $P(A \mid \bar{H}) = 0{,}5$. Найди $P(A)$.


Задание 5: Есть три ящика с деталями. Доля годных деталей в них: $0{,}9$, $0{,}8$ и $0{,}7$. Ящик выбирают наугад, затем берут деталь. Найди вероятность взять годную деталь.


Задание 6: В датасете 70% фотографий сняты днём и модель ошибается на них в 4% случаев; 30% сняты ночью, там ошибка 15%. Найди общую вероятность ошибки модели.


Задание 7: Трое стрелков с вероятностями попадания $0{,}9$, $0{,}7$ и $0{,}5$. Стрелка выбирают наугад, он делает один выстрел. Найди вероятность попадания.


Задание 8: По симметричному двоичному каналу передают ноль или единицу равновероятно. Каждый бит искажается с вероятностью $0{,}1$ независимо от того, что было послано. Найди вероятность того, что приёмник получит единицу.


Задание 9: На склад поступают лампочки: 60% с завода A (брак 2%) и 40% с завода B (брак 5%). Найди вероятность того, что купленная лампочка бракованная.


Задание 10: По дереву вероятностей: из корня выходят две ветви с вероятностями $0{,}4$ и $0{,}6$; из первой ветви путь к событию $A$ имеет условную вероятность $0{,}25$, из второй — $0{,}5$. Найди $P(A)$ и проверь нормировку всех листьев.


Средние (задания 11-20)

Задание 11: В первой урне 7 белых и 3 чёрных шара, во второй — 2 белых и 8 чёрных. Из первой урны наугад берут один шар и перекладывают во вторую. После этого из второй урны достают шар. Найди вероятность того, что он белый.


Задание 12: Три станка производят соответственно 20%, 30% и 50% деталей, доля брака у них 4%, 3% и 1%. Найди вероятность брака и определи, какой станок вносит наибольший вклад в общий брак.


Задание 13: В потоке 5% транзакций мошеннические. Лёгкая модель первой ступени отправляет транзакцию на дорогую проверку с вероятностью $0{,}95$, если она мошенническая, и с вероятностью $0{,}10$, если честная. Какая доля потока дойдёт до второй ступени?


Задание 14: В коробке 30 билетов, из них 25 «счастливых». Два студента по очереди тянут по одному билету (первый билет не возвращается). Найди вероятность того, что второму студенту достанется счастливый билет.


Задание 15: 25% трафика на сайт — боты, они «кликают» на рекламу с вероятностью $0{,}50$. Остальные 75% — люди, они кликают с вероятностью $0{,}03$. Какой CTR покажет отчёт и какая доля кликов сделана ботами?


Задание 16: Вероятность хорошей погоды $0{,}7$; при ней рейс вылетает вовремя с вероятностью $0{,}95$. При плохой погоде (вероятность $0{,}3$) — с вероятностью $0{,}4$. Найди вероятность того, что рейс вылетит вовремя.


Задание 17: Трафик рекомендательного сервиса раздают трём версиям модели: версия A получает 60% пользователей и даёт конверсию $0{,}040$, версия B — 25% и конверсию $0{,}055$, версия C — 15% и конверсию $0{,}030$. Найди общую конверсию сервиса.


Задание 18: Три урны выбираются с вероятностями $0{,}2$, $0{,}3$ и $0{,}5$. Доли белых шаров в них: $0{,}5$, $0{,}4$ и $0{,}9$. Найди вероятность вытащить белый шар.


Задание 19: Известно, что $P(A) = 0{,}20$, гипотезы имеют вероятности $P(H_1) = 0{,}4$ и $P(H_2) = 0{,}6$, а $P(A \mid H_2) = 0{,}1$. Найди $P(A \mid H_1)$.


Задание 20: Бросают игральную кость. Если выпало $n$ очков, то подбрасывают $n$ симметричных монет. Найди вероятность того, что не выпадет ни одного орла.


Продвинутые (задания 21-30)

Задание 21: В первой урне 5 белых и 5 чёрных шаров. Из неё наугад берут два шара и перекладывают во вторую урну, где было 2 белых и 8 чёрных. Затем из второй урны достают один шар. Найди вероятность того, что он белый.


Задание 22: Комплектующие идут от двух поставщиков. У первого доля брака 6%, у второго — 2%. Общая доля брака на складе составляет 3%. Какую долю поставок обеспечивает первый поставщик?


Задание 23: Канал работает в двух режимах: «чистый» (вероятность $0{,}8$, вероятность искажения одного бита $0{,}01$) и «шумный» (вероятность $0{,}2$, искажение бита $0{,}2$). Каждый бит передают трижды, а декодируют по большинству. Найди вероятность ошибочного декодирования.


Задание 24: 30% писем — спам. Письмо последовательно проходит три независимых фильтра. Каждый фильтр удаляет спам с вероятностью $0{,}7$ и ошибочно удаляет нормальное письмо с вероятностью $0{,}02$. Найди вероятность того, что письмо дойдёт до ящика.


Задание 25: Пользователь заходит на сайт $k$ раз за месяц, причём $P(k) = (1/2)^k$ для $k = 1, 2, 3, \dots$. При каждом визите он совершает покупку с вероятностью $0{,}1$ независимо от других визитов. Найди вероятность того, что за месяц он сделает хотя бы одну покупку.


Задание 26: Данные описаны смесью трёх компонент с весами $\pi_1 = 0{,}5$, $\pi_2 = 0{,}3$, $\pi_3 = 0{,}2$. Вероятность того, что точка компоненты превысит порог $T$, равна соответственно $0{,}02$, $0{,}15$ и $0{,}60$. Найди долю точек выше порога и вклад каждой компоненты.


Задание 27: Пользователь бывает активен или неактивен. Если сегодня активен, завтра будет активен с вероятностью $0{,}8$; если неактивен — с вероятностью $0{,}3$. Сегодня он активен с вероятностью $0{,}6$. Найди вероятность того, что он будет активен послезавтра.


Задание 28: В урне A 3 белых и 7 чёрных шаров, в урне B — 6 белых и 4 чёрных. Из урны A достают шар, смотрят его цвет и возвращают обратно. Если шар был белым, второй шар тянут снова из A; если чёрным — из B. Найди вероятность того, что второй шар белый.


Задание 29: Класс $y$ принимает значения $1$ (с вероятностью $0{,}3$) и $0$ (с вероятностью $0{,}7$). Признак $x$ принимает значения $a$, $b$, $c$ с условными вероятностями: при $y=1$ — $0{,}2$, $0{,}5$, $0{,}3$; при $y=0$ — $0{,}5$, $0{,}2$, $0{,}3$. Найди маргинальное распределение $x$ и проверь его нормировку.


Задание 30: Болезнь встречается у $1\%$ людей. Тест выявляет болезнь у больного с вероятностью $0{,}98$ и даёт положительный результат у здорового с вероятностью $0{,}05$. Найди вероятность положительного результата у случайного человека и определи, во сколько раз ложных срабатываний больше, чем истинных.


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

Ошибка 1: гипотезы не образуют полную группу

Неправильно: «60% трафика мобильный (конверсия $0{,}03$), 30% десктопный (конверсия $0{,}05$), итого конверсия $= 0{,}6 \cdot 0{,}03 + 0{,}3 \cdot 0{,}05 = 0{,}033$».

Правильно: сначала проверить сумму весов: $0{,}6 + 0{,}3 = 0{,}9 \neq 1$. Потеряны $10\%$ трафика (планшеты, ТВ-приставки, боты). Пока эта категория не добавлена со своей конверсией, считать нельзя. Если у планшетов конверсия $0{,}04$, правильный ответ: $0{,}6 \cdot 0{,}03 + 0{,}3 \cdot 0{,}05 + 0{,}1 \cdot 0{,}04 = 0{,}018 + 0{,}015 + 0{,}004 = 0{,}037$.

Почему важно: пропущенная гипотеза всегда смещает ответ, и смещает молча — результат выглядит правдоподобно. Разница между $0{,}033$ и $0{,}037$ — это $12\%$ относительной ошибки в метрике, на которой принимают решения.


Ошибка 2: усреднить условные вероятности вместо взвешивания

Неправильно: «Брак у станков $5\%$, $4\%$ и $2\%$, значит общий брак $= (5+4+2)/3 = 3{,}67\%$».

Правильно: усреднять можно только при равных весах гипотез. Если доли выпуска $0{,}25$, $0{,}35$, $0{,}40$, то $P = 0{,}25 \cdot 0{,}05 + 0{,}35 \cdot 0{,}04 + 0{,}40 \cdot 0{,}02 = 0{,}0345 = 3{,}45\%$.

Почему важно: это самая частая ошибка в аналитике: «средняя точность по срезам» вместо «точность на всём потоке». Если самый плохой срез редкий, простое среднее сильно преувеличит проблему; если самый плохой срез частый — преуменьшит. Обе ошибки ведут к неправильной приоритизации работы.


Ошибка 3: перепутать $P(A \mid H)$ и $P(H \mid A)$

Неправильно: «Тест даёт положительный результат у $98\%$ больных, значит при положительном тесте человек болен с вероятностью $98\%$».

Правильно: $P(+ \mid \text{болен}) = 0{,}98$ — это свойство теста. $P(\text{болен} \mid +)$ — совсем другая величина, и её надо считать через формулу Байеса, у которой в знаменателе стоит полная вероятность. Для задачи 30 это $0{,}0098/0{,}0593 \approx 16{,}5\%$, а вовсе не $98\%$.

Почему важно: это самая дорогая ошибка в прикладной статистике — на ней ломаются интерпретации медицинских тестов, антифрод-систем и метрик precision/recall. Условная вероятность несимметрична, и путать направление стрелки нельзя никогда.


Ошибка 4: гипотезы совместны, хотя сумма их вероятностей равна единице

Неправильно: «Пусть $H_1$ — пользователь зашёл с телефона ($0{,}55$), $H_2$ — пользователь зашёл вечером ($0{,}45$). Сумма равна 1, значит это полная группа».

Правильно: сумма единица — необходимое, но не достаточное условие. Проверь по смыслу: можно ли зайти с телефона вечером? Можно. Значит, события совместны, и разбиения нет — оно бы требовало, чтобы каждый визит попадал ровно в одну категорию. Корректное разбиение: «телефон днём», «телефон вечером», «десктоп днём», «десктоп вечером» — четыре несовместные ячейки.

Почему важно: проверка суммой ловит большинство ошибок, но не все. Финальный фильтр — вопрос «могут ли два сценария случиться одновременно?». Если да, формулу применять нельзя, каким бы красивым ни было совпадение весов.


Ошибка 5: считать $P(A \mid H_i)$ по всему пространству, а не внутри гипотезы

Неправильно: в задаче про урны написать $P(\text{белый} \mid \text{первая урна}) = \dfrac{6}{20}$, поделив число белых в первой урне на общее число шаров в обеих.

Правильно: условная вероятность считается внутри гипотезы — мир сузился до первой урны, в ней 10 шаров: $P = 6/10 = 0{,}6$.

Почему важно: знаменатель условной вероятности — это размер того мира, в который мы попали, а не исходного. Признак ошибки заметен сразу: сумма получившихся условных вероятностей внутри одной гипотезы не даёт единицы. В коде это соответствует нормировке по неправильной оси массива — классическая опечатка вида softmax(axis=0) вместо axis=1.


Ошибка 6: складывать вероятности вместо перемножения вдоль ветки дерева

Неправильно: «Письмо проходит три фильтра, каждый пропускает нормальное письмо с $0{,}98$, значит вероятность дойти $= 3 \cdot 0{,}98$» или «$= 0{,}98/3$».

Правильно: вдоль одной ветки дерева вероятности перемножаются (теорема умножения): $0{,}98^3 = 0{,}941192$. Складываются только разные ветки, ведущие к одному событию.

Почему важно: правило «вдоль пути умножаем, между путями складываем» — единственное, что нужно помнить про деревья вероятностей. Нарушив его, легко получить вероятность больше единицы, что мгновенно выдаёт ошибку — но чаще получается просто неверное число в допустимом диапазоне, и оно проходит незамеченным.


Главное запомнить

  • Полная группа гипотез — это разбиение мира на попарно несовместные сценарии, покрывающие всё, каждый с положительной вероятностью. Три условия, ни одно не лишнее
  • Проверка номер один: $\sum_i P(H_i) = 1$. Делай её всегда и до всех вычислений — она ловит большинство ошибок в данных
  • Формула: $P(A) = \sum_i P(H_i)\, P(A \mid H_i)$ — «вероятность сценария × вероятность события внутри сценария», просуммированная по всем сценариям
  • Вывод в две строки: разрезали $A$ на несовместные куски $A \cap H_i$ (теорема сложения), каждый кусок раскрыли как $P(H_i)P(A \mid H_i)$ (теорема умножения)
  • Дерево вероятностей: вдоль пути умножаем, между путями складываем. Из каждого узла сумма ветвей равна 1, сумма всех листьев тоже 1
  • Бесплатная проверка ответа: $\min_i P(A \mid H_i) \le P(A) \le \max_i P(A \mid H_i)$. Вышел за границы — ошибка в структуре решения, а не в арифметике
  • Простое среднее условных вероятностей годится только при равных весах гипотез; в остальных случаях это грубая ошибка
  • Гипотез может быть счётно много: $P(A) = \sum_{i=1}^{\infty} P(H_i)P(A \mid H_i)$, ряд сходится абсолютно; в непрерывном случае сумма становится интегралом $\int p(\theta) P(A \mid \theta)\, d\theta$
  • В ML эта формула зовётся маргинализацией: $p(x) = \sum_y p(y)p(x \mid y) = \sum_y p(x,y)$. Смеси распределений, латентные переменные, ансамбли — всё это она
  • Полная вероятность — знаменатель формулы Байеса. Освоив её, ты уже наполовину освоил следующий урок

Связь с другими темами курса

Что было до. Урок 226 дал язык событий: объединение, пересечение, несовместность, дополнение — без него нельзя даже сформулировать, что такое разбиение. Урок 227 научил считать вероятности в конечных схемах — именно оттуда берутся числа вроде $6/10$ внутри каждой гипотезы. Урок 229 дал теорему сложения для несовместных событий: это шаг 4 нашего доказательства. Урок 230 дал условную вероятность и теорему умножения: это шаг 5. Формула полной вероятности — не новый закон природы, а аккуратная склейка двух уже знакомых теорем.

Что дальше. Урок 232 — формула Байеса: разворот рассуждения от следствия к причине, где полная вероятность работает нормирующим знаменателем. Урок 233 — схема Бернулли: там гипотезами становится число успехов, и формула полной вероятности регулярно используется в комбинированных задачах («сначала выбрали монету, потом бросили её $n$ раз»). Уроки 234-237 введут случайные величины и математическое ожидание — и там появится прямой аналог нашей формулы, закон полного математического ожидания $E[X] = \sum_i P(H_i)\, E[X \mid H_i]$, устроенный по абсолютно той же логике. Урок 243 про многомерные случайные величины сделает маргинализацию основным рабочим инструментом.

Где применяется. В надёжности — расчёт отказа системы, работающей в разных режимах. В медицине — интерпретация скрининговых тестов. В связи — вероятность ошибки декодирования в шумном канале (мы её посчитали в задаче 23). В страховании — тарификация по группам риска. В машинном обучении — маргинализация в графических моделях, EM-алгоритм для смесей, вариационный вывод в VAE, оценка метрик по срезам данных, расчёт качества каскадных систем и правило полной вероятности в policy evaluation для обучения с подкреплением. Если ты когда-нибудь напишешь probs = (weights[:, None] * cond_probs).sum(axis=0) — ты напишешь именно эту формулу.


Интересные факты

1. Формулу вывели, чтобы решить обратную задачу. Историческая ирония: полная вероятность интересовала Байеса и Лапласа не сама по себе, а как необходимый шаг к вопросу «какая причина вызвала наблюдение?». Она родилась как знаменатель — и только потом её оценили как самостоятельный инструмент.

2. Она объясняет парадокс Симпсона. Если разбить данные на группы, направление зависимости внутри каждой группы может быть противоположно направлению на объединённых данных. Механика ровно та, что мы обсуждали: итог — это взвешенная сумма, и изменение весов гипотез способно перевернуть картину, даже если все условные вероятности остались на месте. Классический пример — приём в Беркли в 1973 году: на уровне университета женщин принимали реже, а на уровне почти каждого факультета — чаще или наравне. Разгадка была в том, что женщины чаще подавали на факультеты с низким процентом приёма.

3. Стационарное распределение цепи Маркова — это неподвижная точка формулы полной вероятности. Каждый шаг цепи — одно применение $P(\text{завтра}) = \sum P(\text{сегодня}_i) P(\text{завтра} \mid \text{сегодня}_i)$. Стационарное распределение — то, которое этот шаг не меняет. В задаче 27 мы наткнулись на такое распределение случайно; в теории цепей Маркова его ищут специально, и на этом стоит PageRank.

4. Три требования к полной группе гипотез — это ровно требования к весам смеси в ML. Когда в коде GMM пишут weights = softmax(logits), softmax гарантирует именно положительность и сумму, равную единице. Несовместность обеспечивается тем, что латентная переменная принимает ровно одно значение. Условия XVIII века из трактата Лапласа буквально закодированы в одной строке современного фреймворка.


Лайфхаки и полезные трюки

1. Начинай с вопроса «что мне мешает?». Гипотезы почти всегда — это ответы на вопрос «чего именно я не знаю, но если бы знал, задача стала бы простой?». Не знаю, из какой урны тянули → гипотезы про урны. Не знаю, какой станок сделал деталь → гипотезы про станки. Не знаю, сколько было визитов → гипотезы про число визитов. Сформулировал этот вопрос — считай, решил задачу.

2. Заводи таблицу из трёх столбцов. Гипотеза | $P(H_i)$ | $P(A \mid H_i)$ | произведение. Заполнил — просуммировал столбец весов (должна быть 1), просуммировал столбец произведений (это ответ). Такая табличка полностью убирает шанс перепутать множители местами и заодно сразу показывает вклад каждой гипотезы.

3. Считай вклады отдельно, не сворачивая в одну строку. Запись $0{,}25 \cdot 0{,}05 = 0{,}0125$ отдельной строкой стоит лишних десяти секунд, зато даёт бесплатный ответ на вопрос «кто вносит больше всех» и делает проверку арифметики тривиальной. Плюс это уже половина работы для формулы Байеса.

4. Проверяй ответ границами. Результат обязан лежать между минимальной и максимальной условной вероятностью. Более того, он должен быть ближе к той, у которой больше вес. Две секунды проверки — и половина ошибок отсеивается сразу.

5. Когда события «хотя бы одно» — переходи к противоположному. Внутри гипотезы почти всегда легче посчитать «ни одного», а потом взять $1 - p$. Мы так делали в задаче 25 и превратили страшный ряд в геометрическую прогрессию.

6. Считай сумму листьев дерева. Если все пути перемножены и просуммированы, итог обязан быть равен единице. Это самая мощная проверка из существующих: она контролирует одновременно и веса, и условные вероятности, и арифметику.

7. В коде — ассерт на нормировку. Одна строка assert abs(weights.sum() - 1) < 1e-9 рядом с любым массивом весов гипотез окупается многократно. Веса приходят из конфигов, выгрузок и обучения — и ломаются там регулярно.

8. Помни про «прочее». В реальных данных всегда есть категория, которую забыли: «другой браузер», «неизвестный источник», «пропущенное значение». Если сумма долей не дотягивает до единицы — не нормируй молча, а выясни, что именно потерялось. Иногда именно в «прочем» и живёт вся проблема.


Заключение

Формула полной вероятности — из тех вещей, которые сначала кажутся почти обидно простыми, а потом всплывают везде. Мы вывели её в шесть строк из двух теорем, которые ты уже знал. Мы посчитали ею урны, станки, шумный канал и каскад из трёх фильтров. Мы увидели, что маргинализация совместного распределения, плотность гауссовой смеси, взвешенная метрика по срезам данных и шаг цепи Маркова — это одно и то же выражение в разных декорациях.

И главное, что стоит унести с собой: сложную вероятность почти никогда не считают в лоб. Её разрезают. Хороший специалист по данным отличается от новичка не тем, что быстрее умножает, а тем, что видит правильное разбиение — набор сценариев, внутри каждого из которых задача становится элементарной. Умение задать себе вопрос «чего я не знаю, и что было бы, если бы знал?» — это и есть вероятностное мышление в чистом виде.

А теперь самое интересное. Ты научился считать вперёд: от причин к следствию. В следующем уроке мы развернём стрелку и научимся считать назад — от наблюдения к причине. Тест положителен, деталь бракованная, модель выдала «спам» — что за этим стоит? Формула Байеса ответит на этот вопрос, и её знаменателем будет ровно то, что ты уже умеешь считать. Так что половина работы уже сделана. Погнали дальше! 🚀

Понял тему? Закрепи в боте! 🚀

Попрактикуйся на задачах и получи персональные рекомендации от AI

💪 Начать тренировку
💬 Есть вопрос? Спроси бота!