Теория вероятностей
Условное математическое ожидание
Netflix платит 1 миллион долларов за алгоритм рекомендаций - и в основе финалиста лежит одна формула: E[оценка|профиль пользователя]. Фильтр Калмана в навигации SpaceX вычисляет E[позиция|измерения датчиков] каждые 10 миллисекунд. Gradient Boosting, выигравший Criteo CTR Challenge 2014, строит деревья для E[residual|features]. Условное математическое ожидание - не абстракция из учебника, а рабочий инструмент, генерирующий миллиарды долларов.
- Netflix Recommender: E[rating|user_profile] для каждой пары пользователь-фильм
- Фильтр Калмана: E[state|observations] для навигации и управления
- GBDT: каждое дерево = E[residual|features], Criteo CTR dataset
- Байесовская статистика: E[theta|data] как точечная оценка параметра
Предварительные знания
- Условная вероятность P(A|B) и условное распределение
- Математическое ожидание E[X] для дискретных и непрерывных СВ
- Совместные распределения, маргинализация
E[X|Y] как случайная величина
E[X|Y=y] - число, E[X|Y] - случайная величина
Разница принципиальная. Пусть X - оценка фильма (1-5), Y - жанр. Тогда E[X|Y=drama] = 3.8 - конкретное число для жанра 'драма'. Но E[X|Y] - случайная величина: принимает значение 3.8 когда жанр drama, 4.1 когда жанр thriller, 2.9 когда жанр horror. Эта величина живёт на том же вероятностном пространстве, что и Y.
X = оценка за экзамен, Y = факультет (1=мат, 2=гум) P(Y=1) = 0.4, P(Y=2) = 0.6 P(X=5|Y=1) = 0.6, P(X=3|Y=1) = 0.4 P(X=5|Y=2) = 0.3, P(X=3|Y=2) = 0.7 E[X|Y=1] = 5·0.6 + 3·0.4 = 3.0 + 1.2 = 4.2 E[X|Y=2] = 5·0.3 + 3·0.7 = 1.5 + 2.1 = 3.6 E[X|Y] - случайная величина: принимает значение 4.2 с вероятностью 0.4 принимает значение 3.6 с вероятностью 0.6
Непрерывный случай
Для непрерывных X и Y совместная плотность $f_{X,Y}(x,y)$ порождает условную плотность $f_{X|Y}(x|y) = f_{X,Y}(x,y) / f_Y(y)$. Тогда $E[X|Y=y] = \int x \cdot f_{X|Y}(x|y) \, dx$. Если X и Y совместно нормальны с корреляцией $\rho$, то $E[X|Y=y] = \mu_X + \rho \frac{\sigma_X}{\sigma_Y}(y - \mu_Y)$ - линейная функция от y.
Для совместно нормального вектора $(X, Y)$ с нулевыми средними: $E[X|Y=y] = \frac{Cov(X,Y)}{Var(Y)} \cdot y$. Коэффициент $Cov(X,Y)/Var(Y)$ - это в точности коэффициент наклона в линейной регрессии X на Y.
Numpy: вычисление E[X|Y] на симуляции
X - время ответа сервера (мс), Y - количество запросов в секунду. E[X|Y=100] = 450. Что означает E[X|Y] как случайная величина?
Башенное свойство (Tower Property)
Прогноз завтрашней погоды зависит только от сегодняшней - не от погоды месяц назад. Формально: если взять условное ожидание по двум переменным Y и Z, а затем ещё раз усреднить по Y, получится условное ожидание только по Y. Дополнительная информация Z 'стирается' усреднением.
Доказательство за 3 шага
Числовой пример с башенным свойством
X = выручка (тыс. руб.), Y = день (будни/выходные), Z = погода (солнце/дождь) P(Y=будни) = 5/7, P(Y=выходные) = 2/7 P(Z=солнце|Y=будни) = 0.7, P(Z=дождь|Y=будни) = 0.3 P(Z=солнце|Y=выходные)= 0.6, P(Z=дождь|Y=выходные) = 0.4 E[X|Y=будни, Z=солнце] = 80 E[X|Y=будни, Z=дождь] = 50 E[X|Y=выходные,Z=солнце] = 150 E[X|Y=выходные,Z=дождь] = 90 E[X|Y=будни] = 80·0.7 + 50·0.3 = 56 + 15 = 71 E[X|Y=выходные] = 150·0.6 + 90·0.4 = 90 + 36 = 126 E[X] = 71·(5/7) + 126·(2/7) = 50.7 + 36.0 = 86.7 тыс. руб.
**Иерархические модели в байесовском ML** используют tower property постоянно. Если theta ~ Prior, X|theta ~ Likelihood, то E[X] = E[E[X|theta]] = E[mu(theta)] - среднее по параметрам от условных средних. Stan и PyMC3 вычисляют такие иерархические ожидания через MCMC.
Эмпирическая проверка в numpy
Клиент заходит на сайт. P(купит) неизвестна. Знаем: если клиент увидел рекламу Y=1, то E[купит|Y=1]=0.15; если не увидел Y=0, то E[купит|Y=0]=0.04. P(Y=1)=0.3. Чему равно E[купит]?
Закон полной дисперсии (Law of Total Variance)
A/B тест запущен: версия A конвертирует 5%, версия B - 8%. Часть пользователей видит A, часть B. Полная дисперсия конверсии складывается из двух частей: разброс внутри каждой группы (within-group) плюс разброс между группами (between-group). Это закон полной дисперсии.
Доказательство через разложение
A/B тест: числовой пример
X = конверсия (0 или 1), Y = вариант (A или B) P(Y=A) = 0.5, P(Y=B) = 0.5 p_A = E[X|Y=A] = 0.05 (конверсия в группе A) p_B = E[X|Y=B] = 0.08 (конверсия в группе B) Var(X|Y=A) = 0.05·0.95 = 0.0475 (Бернулли) Var(X|Y=B) = 0.08·0.92 = 0.0736 Within-group: E[Var(X|Y)] = 0.0475·0.5 + 0.0736·0.5 = 0.0606 E[X] = 0.05·0.5 + 0.08·0.5 = 0.065 E[X|Y] принимает значения {0.05, 0.08} с вер. {0.5, 0.5} Var(E[X|Y]) = (0.05-0.065)^2·0.5 + (0.08-0.065)^2·0.5 = 0.000225·0.5 + 0.000225·0.5 = 0.000225 Between-group: Var(E[X|Y]) = 0.000225 Var(X) = 0.0606 + 0.000225 = 0.0608 Проверка: E[X]·(1-E[X]) = 0.065·0.935 = 0.0608 ✓ Between / Total = 0.000225 / 0.0608 = 0.37% - эффект от варианта мал Within / Total = 99.63% - доминирует шум Бернулли
Это прямой аналог **ANOVA** (Analysis of Variance): SS_total = SS_within + SS_between. Закон полной дисперсии - вероятностная основа ANOVA. В sklearn: метрика R^2 = 1 - Var(residuals)/Var(y) = Between/(Between+Within) при идеальной группировке.
Var(X) = 100. После узнавания Y оказалось Var(E[X|Y]) = 60. Чему равно E[Var(X|Y)]? Что это означает содержательно?
Байесовский оптимальный предсказатель и применения в ML
**Gradient boosting на датасете Criteo (11 млрд строк, CTR предсказание) занял первое место на Kaggle 2014.** Каждое дерево в GBDT вычисляет E[residual|features] - условное ожидание остатков. Это не случайность: теория гарантирует, что E[Y|X=x] - наилучший предсказатель Y по X в смысле MSE.
Доказательство оптимальности
Gradient Boosting как итеративное вычисление E[X|Y]
GradientBoostingRegressor из scikit-learn на каждом шаге строит дерево, предсказывающее отрицательный градиент MSE-потери. При MSE-потере градиент = -(y - f(x)), то есть residual. Каждое дерево аппроксимирует E[residual|features] - условное ожидание остатка по признакам. Суммируя деревья, модель приближается к E[Y|X].
**Irreducible error** в этом примере - дисперсия шума noise=30, т.е. 30^2 = 900. Достигнутый MSE=929 близок к теоретическому минимуму E[Var(Y|X)] = 900. GBDT практически достиг байесовского оптимума.
Interview: условное ожидание на ML-собеседованиях
Interview: условное ожидание на ML-собеседованиях
- **Q: Нейросеть обучается с MSE-лоссом. Что аппроксимирует предсказание при сходимости?** - При глобальном минимуме MSE сеть аппроксимирует E[Y|X=x]. Это байесовский оптимальный предсказатель. Irreducible error = E[Var(Y|X)] - шум который не убрать никакой моделью.
- **Q: Объяснить закон полной дисперсии применительно к A/B тесту.** - Within-group: случайный Бернулли-шум внутри каждого варианта. Between-group: различие средних конверсий между A и B. t-статистика связана с between-group компонентой. Стратификация уменьшает within-group шум.
- **Q: E[X|Y] и E[Y|X] - разные величины. Когда они совпадают?** - Когда X и Y одинаково распределены и совместное распределение симметрично относительно диагонали. Пример: X=Y дает E[X|Y=y] = y = E[Y|X=y]. В общем случае это разные функции - подмена является частой ошибкой.
Дано: MSE модели = 150, Var(Y) = 500. Чему равен R^2? Что значит E[Var(Y|X)] = 100 в этом контексте?
Условное ожидание - центр современной вероятности
E[X|Y] соединяет статистику, ML и стохастический анализ.
- Мартингалы — Мартингал: E[X_{n+1}|F_n] = X_n. Определение невозможно без условного ожидания
- Байесовская статистика — E[theta|data] - байесовская точечная оценка; posterior mean минимизирует posterior MSE
- Фильтр Калмана — Линейный оптимальный фильтр: E[state|observations] при линейной гауссовской модели
- Gradient Boosting — Каждая итерация GBDT вычисляет E[отрицательный градиент потери|признаки]
Ключевые идеи
- **E[X|Y=y]** - число (взвешенное среднее при фиксированном Y=y); **E[X|Y]** - случайная величина (функция от Y)
- **Tower Property:** E[E[X|Y,Z]|Y] = E[X|Y]; частный случай: E[E[X|Y]] = E[X]
- **Закон полной дисперсии:** Var(X) = E[Var(X|Y)] + Var(E[X|Y]) = within + between
- **Байесовский оптимальный предсказатель:** f*(x) = E[Y|X=x] минимизирует MSE среди всех g(X)
- **Irreducible error** = E[Var(Y|X)] - минимально достижимый MSE при любой модели
- **GBDT:** на каждом шаге строит дерево для E[residual|X], суммой приближая E[Y|X]
- **Нормальный случай:** E[X|Y=y] = mu_X + Cov(X,Y)/Var(Y) * (y - mu_Y) - линейная функция от y
Связанные уроки
- prob-16-martingales — Мартингал - последовательность с E[X_{n+1}|F_n] = X_n; без E[X|Y] его не определить
- stats-21