Фаза 01 · урок 15
Статистика для машинного обучения
Цель урока: Вы обучили две модели. Модель A набрала 0.87 на тестовом наборе. Модель B — 0.89. Вы разворачиваете модель B. Через три недели производственные метрики становятся хуже, чем были. Что произошло?
Текущий релиз AlexBred.com: первые 100 уроков русскоязычной программы.
Содержание урока
- Цели обучения
- Проблема
- Концепция
- Описательная статистика: краткое представление данных
- Корреляция: как переменные меняются вместе
- Ковариационная матрица
- Проверка гипотез
- t-тест
- Критерий хи-квадрат
- A/B-тестирование ML-моделей
- Статистическая и практическая значимость
- Проблема множественных сравнений
- Bootstrap-методы
- Параметрические и непараметрические тесты
- Центральная предельная теорема: практические следствия
- Распространённые статистические ошибки в ML-статьях
- Соберите это
- Ключевые термины
Статистика позволяет понять, действительно ли ваша модель работает или ей просто повезло.
Тип: Сборка Язык: Python Предварительные требования: Фаза 1, уроки 06 (Вероятность и распределения), 07 (Теорема Байеса) Время: ~120 минут
Цели обучения
- Вычислять с нуля описательные статистики, корреляцию Пирсона/Спирмена и ковариационные матрицы
- Выполнять проверки гипотез (t-тест, критерий хи-квадрат) и правильно интерпретировать p-значения и доверительные интервалы
- Использовать bootstrap-ресемплирование для построения доверительных интервалов любой метрики без предположений о распределении
- Отличать статистическую значимость от практической с помощью мер размера эффекта
Проблема
Вы обучили две модели. Модель A набрала 0.87 на тестовом наборе. Модель B — 0.89. Вы разворачиваете модель B. Через три недели производственные метрики становятся хуже, чем были. Что произошло?
Модель B на самом деле не превзошла модель A. Разница 0.02 была шумом. Ваш тестовый набор был слишком мал, дисперсия — слишком велика, или верно и то и другое. Вы выкатили случайность, выдав её за улучшение.
Это происходит постоянно: перестановки в таблицах лидеров Kaggle, статьи, результаты которых не удаётся воспроизвести, A/B-тесты, объявляющие победителя на основании нескольких сотен наблюдений. Коренная причина всегда одна: кто-то пропустил статистику.
Статистика даёт инструменты, чтобы отличать сигнал от шума. Она говорит, когда различие реально, насколько вы должны быть уверены и сколько данных нужно, прежде чем результату можно доверять. Каждому ML-конвейеру, каждому сравнению моделей, каждому эксперименту нужна статистика. Без неё вы просто гадаете.
Концепция
Описательная статистика: краткое представление данных
Прежде чем что-либо моделировать, нужно понять, как выглядят ваши данные. Описательная статистика сжимает набор данных до нескольких чисел, которые передают его форму.
Меры центральной тенденции отвечают на вопрос «где середина?»
Среднее: сумма всех значений / количество
mu = (1/n) * sum(x_i)
Медиана: среднее по позиции значение в отсортированном наборе
Устойчива к выбросам. Для [1, 2, 3, 4, 1000] среднее равно 202,
а медиана равна 3.
Мода: самое частое значение
Полезна для категориальных данных. Для непрерывных данных редко информативна.
Среднее — это точка баланса. Медиана — отметка, делящая данные пополам. Когда они расходятся, распределение скошено. У распределений дохода среднее >> медианы (правый хвост из-за миллиардеров). Распределения потерь во время обучения часто имеют среднее << медианы (левый хвост из-за лёгких примеров).
Меры разброса отвечают на вопрос «насколько рассеяны данные?»
Дисперсия: среднее квадратичных отклонений от среднего
sigma^2 = (1/n) * sum((x_i - mu)^2)
Стандартное отклонение: квадратный корень из дисперсии
sigma = sqrt(sigma^2)
Те же единицы, что у данных, поэтому интерпретировать проще.
Размах: max - min
Чувствителен к выбросам. Почти никогда не полезен сам по себе.
IQR: Q3 - Q1 (межквартильный размах)
Размах средних 50% данных.
Устойчив к выбросам. Используется в box plot и для поиска выбросов.
Перцентили делят отсортированные данные на 100 равных частей. 25-й перцентиль (Q1) означает, что 25% значений лежат ниже этой точки. 50-й перцентиль — это медиана. 75-й перцентиль — Q3.
Для мониторинга задержки:
P50 = медианная задержка (типичный пользовательский опыт)
P95 = 95-й перцентиль (плохо, но не худший случай)
P99 = 99-й перцентиль (хвостовая задержка, часто в 10 раз больше медианы)
В ML перцентили важны для задержки инференса, распределений уверенности предсказаний и понимания распределений ошибок. Модель с малой средней ошибкой, но ужасной ошибкой P99 может оказаться бесполезной в критичных к безопасности приложениях.
Статистики выборки и популяции. Вычисляя дисперсию по выборке, делите на (n-1), а не на n. Это поправка Бесселя. Она компенсирует то, что выборочное среднее не является истинным средним популяции. При n в знаменателе вы систематически недооцениваете истинную дисперсию. При (n-1) оценка несмещённа.
Дисперсия популяции: sigma^2 = (1/N) * sum((x_i - mu)^2)
Дисперсия выборки: s^2 = (1/(n-1)) * sum((x_i - x_bar)^2)
На практике: если n велико (тысячи наблюдений), различие пренебрежимо. Если n мало (десятки наблюдений), оно существенно.
Корреляция: как переменные меняются вместе
Корреляция измеряет силу и направление линейной связи между двумя переменными.
Коэффициент корреляции Пирсона измеряет линейную связь:
r = sum((x_i - x_bar)(y_i - y_bar)) / (n * s_x * s_y)
r = +1: идеальная положительная линейная связь
r = -1: идеальная отрицательная линейная связь
r = 0: нет линейной связи (но может существовать нелинейная!)
Диапазон: [-1, 1]
Пирсон предполагает линейность связи и приблизительно нормальное распределение обеих переменных. Он чувствителен к выбросам. Одна экстремальная точка способна сдвинуть r с 0.1 до 0.9.
Ранговая корреляция Спирмена измеряет монотонную связь:
1. Замените каждое значение его рангом (1, 2, 3, ...)
2. Вычислите корреляцию Пирсона для рангов
Спирмен улавливает любую монотонную связь, а не только линейную.
Если y = x^3, Пирсон даёт r < 1, а Спирмен даёт rho = 1.
Когда использовать каждый вариант:
Пирсон: Обе переменные непрерывны и приблизительно нормальны.
Вас интересует именно линейная связь.
Нет экстремальных выбросов.
Спирмен: Порядковые данные (рейтинги, оценки).
Данные распределены не нормально.
Вы подозреваете монотонную, но не линейную связь.
Есть выбросы.
Золотое правило: корреляция не означает причинности. Продажи мороженого и смерти от утопления коррелируют, потому что летом растут и те и другие. Точность вашей модели и число параметров коррелируют, но добавление параметров не улучшает точность автоматически (см.: переобучение).
Ковариационная матрица
Ковариация двух переменных измеряет, как они меняются вместе:
Cov(X, Y) = (1/n) * sum((x_i - x_bar)(y_i - y_bar))
Cov(X, Y) > 0: X и Y обычно растут вместе
Cov(X, Y) < 0: когда X растёт, Y обычно уменьшается
Cov(X, Y) = 0: нет совместного линейного изменения
Для d признаков ковариационная матрица C — это матрица d x d, где C[i][j] = Cov(feature_i, feature_j). Диагональные элементы C[i][i] — дисперсии соответствующих признаков.
C = | Var(x1) Cov(x1,x2) Cov(x1,x3) |
| Cov(x2,x1) Var(x2) Cov(x2,x3) |
| Cov(x3,x1) Cov(x3,x2) Var(x3) |
Свойства:
- Симметрична: C[i][j] = C[j][i]
- Положительно полуопределена: все собственные значения >= 0
- Диагональ = дисперсии
- Внедиагональные элементы = ковариации
Связь с PCA. PCA выполняет спектральное разложение ковариационной матрицы. Собственные векторы — главные компоненты (направления максимальной дисперсии). Собственные значения показывают, какую дисперсию захватывает каждая компонента. Именно это рассмотрено в уроке 10; теперь понятно, почему разлагать нужно именно ковариационную матрицу: она кодирует все попарные линейные связи в данных.
Связь с корреляцией. Корреляционная матрица — это ковариационная матрица стандартизированных переменных (каждая разделена на своё стандартное отклонение). Корреляция нормализует ковариацию, так что все значения лежат в [-1, 1].
Проверка гипотез
Проверка гипотез — это схема принятия решений в условиях неопределённости. Вы начинаете с утверждения, собираете данные и определяете, согласуются ли данные с ним.
Постановка:
Нулевая гипотеза (H0): исходное допущение, обычно «нет эффекта»
Альтернативная гипотеза (H1): то, что вы пытаетесь показать
Пример:
H0: Модель A и модель B имеют одинаковую точность
H1: Модель B имеет более высокую точность, чем модель A
p-значение — вероятность увидеть данные не менее экстремальные, чем наблюдаемые, при условии, что H0 истинна. Это НЕ вероятность того, что H0 истинна. Это самое распространённое недоразумение в статистике.
p-value = P(данные такой экстремальности | H0 истинна)
Если p-value < alpha (обычно 0.05):
Отклоните H0. Результат «статистически значим».
Если p-value >= alpha:
Не отклоняйте H0. Доказательств недостаточно.
Это НЕ означает, что H0 истинна.
Доверительные интервалы задают диапазон правдоподобных значений параметра:
95% доверительный интервал для среднего:
x_bar +/- z * (s / sqrt(n))
где z = 1.96 для доверительного уровня 95%
Интерпретация: если повторять этот эксперимент много раз, 95% вычисленных
интервалов будут содержать истинное среднее. Это НЕ означает, что вероятность
нахождения истинного среднего в данном конкретном интервале равна 95%.
Ширина доверительного интервала говорит о точности. Широкие интервалы означают высокую неопределённость. Узкие интервалы означают, что оценка точна (но не обязательно верна, если данные смещены).
t-тест
t-тест сравнивает средние. Существует несколько разновидностей.
Одновыборочный t-тест: отличается ли среднее популяции от предполагаемого значения?
t = (x_bar - mu_0) / (s / sqrt(n))
степени свободы = n - 1
Двухвыборочный t-тест (независимые выборки): различаются ли средние двух групп?
t = (x_bar_1 - x_bar_2) / sqrt(s1^2/n1 + s2^2/n2)
Это t-тест Уэлча, который не предполагает равенства дисперсий.
Всегда используйте вариант Уэлча, если нет особой причины считать дисперсии равными.
Парный t-тест: когда измерения образуют пары (одна и та же модель оценена на одинаковых разбиениях данных):
Вычислите d_i = x_i - y_i для каждой пары
Затем выполните одновыборочный t-тест значений d_i относительно mu_0 = 0
В ML парный t-тест распространён: обе модели запускают на одних и тех же 10 фолдах перекрёстной проверки и попарно сравнивают результаты.
Критерий хи-квадрат
Критерий хи-квадрат проверяет, соответствуют ли наблюдаемые частоты ожидаемым. Полезен для категориальных данных.
chi^2 = sum((observed - expected)^2 / expected)
Пример: соответствует ли распределение выходов языковой модели
распределению обучающих данных по категориям?
Категория Наблюдаемое Ожидаемое
Позитивная 120 100
Негативная 80 100
chi^2 = (120-100)^2/100 + (80-100)^2/100 = 4 + 4 = 8
При 1 степени свободы chi^2 = 8 даёт p < 0.005.
Различие значимо.
A/B-тестирование ML-моделей
A/B-тестирование в ML не совпадает с веб-A/B-тестированием. У сравнения моделей есть особые трудности:
1. Одинаковый тестовый набор: Обе модели нужно оценивать на идентичных данных.
Разные тестовые наборы делают сравнение бессмысленным.
2. Несколько метрик: Одной точности недостаточно. Нужны precision,
recall, F1, задержка и метрики справедливости.
3. Дисперсия: Используйте перекрёстную проверку или bootstrap,
чтобы оценить дисперсию каждой метрики, а не только точечные оценки.
4. Утечка данных: Если тестовый набор использовался при выборе модели,
сравнение смещено. Отложите финальный тестовый набор.
Процедура:
1. Определите метрику и уровень значимости (alpha = 0.05)
2. Запустите обе модели на одинаковых разбиениях k-fold cross-validation
3. Соберите парные оценки: [(a1, b1), (a2, b2), ..., (ak, bk)]
4. Вычислите разности: d_i = b_i - a_i
5. Выполните парный t-тест разностей
6. Проверьте: значимо ли отличается средняя разность от 0?
7. Вычислите доверительный интервал средней разности
8. Вычислите размер эффекта (d Коэна), чтобы судить о практической значимости
Статистическая и практическая значимость
Результат может быть статистически значимым, но практически бессмысленным. При достаточном количестве данных даже ничтожное различие становится статистически значимым.
Пример:
Точность модели A: 0.9234
Точность модели B: 0.9237
n = 1,000,000 тестовых примеров
p-value = 0.001
Статистически значимо? Да.
Практически значимо? Улучшение на 0.03% не оправдывает
инженерские затраты на развёртывание новой модели.
Размер эффекта показывает величину различия независимо от размера выборки:
Cohen's d = (mean_1 - mean_2) / pooled_std
d = 0.2: малый эффект
d = 0.5: средний эффект
d = 0.8: большой эффект
Всегда сообщайте и p-значение, и размер эффекта. p-значение говорит, реально ли различие. Размер эффекта говорит, имеет ли оно значение.
Проблема множественных сравнений
Когда вы проверяете много гипотез, некоторые окажутся «значимыми» случайно. Если проверить 20 утверждений при alpha = 0.05, вы ожидаете один ложноположительный результат, даже если ничего реального нет.
P(хотя бы один ложноположительный результат) = 1 - (1 - alpha)^m
m = 20 тестов, alpha = 0.05:
P(ложноположительный результат) = 1 - 0.95^20 = 0.64
Вероятность хотя бы одного ложноположительного результата равна 64%.
Поправка Бонферрони: разделите alpha на количество тестов.
Скорректированное alpha = alpha / m = 0.05 / 20 = 0.0025
Отклоняйте H0 только если p-value < 0.0025.
Консервативный, но простой метод. Работает, когда тесты независимы.
В ML это важно, когда вы сравниваете модель по нескольким метрикам, тестируете много конфигураций гиперпараметров или оцениваете несколько наборов данных.
Bootstrap-методы
Bootstrap оценивает выборочное распределение статистики, повторно выбирая данные с возвращением. Предположений о лежащем в основе распределении не требуется.
Алгоритм:
1. У вас есть n точек данных
2. Выберите n наблюдений С возвращением (некоторые точки появятся несколько раз,
а некоторые не появятся вовсе)
3. Вычислите статистику на этой bootstrap-выборке
4. Повторите B раз (обычно B = 1000–10000)
5. Распределение bootstrap-статистик приближает
выборочное распределение
Bootstrap-доверительный интервал (метод перцентилей):
Отсортируйте B bootstrap-статистик
95% CI = [2.5-й перцентиль, 97.5-й перцентиль]
Почему bootstrap важен для ML:
- Точность на тестовом наборе — точечная оценка. Bootstrap даёт
доверительные интервалы.
- Нельзя считать распределения метрик нормальными (особенно для
AUC, F1, precision at k).
- Bootstrap работает для ЛЮБОЙ статистики: медианы, отношения двух средних,
разности AUC двух моделей.
- Не нужна формула в замкнутом виде.
Bootstrap для сравнения моделей:
1. У вас есть предсказания моделей A и B на одном тестовом наборе
2. Для каждой bootstrap-итерации:
a. Повторно выберите индексы тестового набора с возвращением
b. Вычислите metric_A и metric_B на повторной выборке
c. Сохраните diff = metric_B - metric_A
3. 95% CI для разности:
[2.5-й перцентиль diffs, 97.5-й перцентиль diffs]
4. Если CI не содержит 0, различие значимо
Этот подход устойчивее парного t-теста, поскольку не делает предположений о распределении.
Параметрические и непараметрические тесты
Параметрические тесты предполагают конкретное распределение (обычно нормальное):
t-test: предполагает нормально распределённые данные (или большое n благодаря CLT)
ANOVA: предполагает нормальность и равенство дисперсий
Pearson r: предполагает двумерную нормальность
Непараметрические тесты не делают предположений о распределении:
Mann-Whitney U: сравнивает две группы (заменяет независимый t-тест)
Wilcoxon signed-rank: сравнивает парные данные (заменяет парный t-тест)
Spearman rho: корреляция рангов (заменяет Пирсона)
Kruskal-Wallis: сравнивает несколько групп (заменяет ANOVA)
Когда использовать непараметрические методы:
- Малый размер выборки (n < 30), и данные явно не нормальны
- Порядковые данные (оценки, ранжирования)
- Тяжёлые выбросы, которые нельзя удалить
- Скошенные распределения
Когда использовать параметрические методы:
- Большой размер выборки (CLT делает статистику теста приблизительно нормальной)
- Данные приблизительно симметричны без экстремальных выбросов
- Большая статистическая мощность (лучше обнаруживают реальные различия)
В ML-экспериментах обычно n мало (5 или 10 фолдов перекрёстной проверки), поэтому непараметрические тесты, такие как знаково-ранговый критерий Уилкоксона, часто уместнее t-тестов.
Центральная предельная теорема: практические следствия
CLT утверждает, что распределение выборочных средних приближается к нормальному распределению по мере роста n, независимо от распределения исходной популяции.
Если X_1, X_2, ..., X_n независимы и одинаково распределены с средним mu и дисперсией sigma^2:
X_bar ~ Normal(mu, sigma^2 / n) при n -> infinity
В большинстве случаев работает при n >= 30.
Для сильно скошенных распределений может понадобиться n >= 100.
Почему это важно для ML:
1. Обосновывает доверительные интервалы и t-тесты для агрегированных метрик
2. Объясняет, почему усреднение по фолдам перекрёстной проверки даёт устойчивые
оценки, даже когда отдельные фолды сильно различаются
3. Градиентный спуск по мини-батчам работает, поскольку средний градиент
батча приближает истинный градиент (CLT в действии)
4. Ансамблевые методы: усреднение предсказаний многих моделей даёт
более устойчивый результат, чем любая отдельная модель
Чего CLT НЕ делает:
- НЕ делает ваши данные нормальными. Она делает нормальным СРЕДНЕЕ выборок.
- НЕ работает для распределений с тяжёлыми хвостами и бесконечной дисперсией
(распределение Коши).
- НЕ применяется к зависимым данным (временные ряды без поправки).
Распространённые статистические ошибки в ML-статьях
-
Тестирование на обучающем наборе. Гарантирует переобучение. Всегда откладывайте данные, которые модель никогда не видит во время обучения.
-
Нет доверительных интервалов. Сообщение одного числа точности без неопределённости делает результаты невоспроизводимыми и непроверяемыми.
-
Игнорирование множественных сравнений. Тестирование 50 конфигураций и сообщение лучшей без поправки увеличивает частоту ложноположительных результатов.
-
Путаница статистической и практической значимости. p-значение 0.001 для улучшения точности на 0.01% не имеет смысла.
-
Использование точности на несбалансированных данных. 99% точности на наборе, где 99% принадлежит отрицательному классу, означает, что модель ничему не научилась. Используйте precision, recall, F1 или AUC.
-
Выбор метрик под результат. Сообщение только той метрики, по которой ваша модель победила. Честная оценка сообщает все релевантные метрики.
-
Утечка информации между train/test-разбиениями. Нормализация до разбиения или использование будущих данных для предсказания прошлого.
-
Малые тестовые наборы без оценок дисперсии. Оценка на 100 примерах и заявление об улучшении на 2% — это шум, а не сигнал.
-
Предположение независимости, когда данные зависимы. Медицинские изображения одного пациента, несколько предложений одного документа. Наблюдения внутри группы коррелируют.
-
p-hacking. Перебор тестов, подмножеств или критериев исключения, пока не получится p < 0.05. Результат — артефакт поиска.
Соберите это
Вы реализуете:
- Описательную статистику с нуля (среднее, медиана, мода, стандартное отклонение, перцентили, IQR)
- Функции корреляции (Пирсона и Спирмена вместе с ковариационной матрицей)
- Проверки гипотез (одновыборочный t-тест, двухвыборочный t-тест, критерий хи-квадрат)
- Bootstrap-доверительные интервалы (для любой статистики, без предположений)
- Симулятор A/B-теста (генерировать данные, тестировать, проверять ошибки I и II рода)
- Демонстрацию статистической и практической значимости (показывающую, что большое n делает «значимым» почти всё)
Всё с нуля, только с math и random. Без numpy и scipy.
Ключевые термины
| Термин | Определение |
|---|---|
| Среднее | Сумма значений, делённая на количество. Чувствительно к выбросам. |
| Медиана | Среднее по позиции значение отсортированных данных. Устойчива к выбросам. |
| Стандартное отклонение | Квадратный корень из дисперсии. Измеряет разброс в исходных единицах. |
| Перцентиль | Значение, ниже которого находится заданная доля данных. |
| IQR | Межквартильный размах. Q3 минус Q1. Разброс средних 50% данных. |
| Корреляция Пирсона | Измеряет линейную связь двух переменных. Диапазон [-1, 1]. |
| Корреляция Спирмена | Измеряет монотонную связь с использованием рангов. |
| Ковариационная матрица | Матрица попарных ковариаций всех признаков. |
| Нулевая гипотеза | Исходное предположение об отсутствии эффекта или различия. |
| p-значение | Вероятность данных такой экстремальности при истинности нулевой гипотезы. |
| Доверительный интервал | Диапазон правдоподобных значений параметра при заданном уровне доверия. |
| t-тест | Проверяет, существенно ли различаются средние. Использует t-распределение. |
| Критерий хи-квадрат | Проверяет, отличаются ли наблюдаемые частоты от ожидаемых. |
| Размер эффекта | Величина различия, независимая от размера выборки. Часто используется d Коэна. |
| Поправка Бонферрони | Делит порог значимости на число тестов, чтобы контролировать ложноположительные результаты. |
| Bootstrap | Ресемплирование с возвращением для оценки выборочных распределений. |
| Ошибка I рода | Ложноположительный результат. Отклонение H0, когда она истинна. |
| Ошибка II рода | Ложноотрицательный результат. Неотклонение H0, когда она ложна. |
| Статистическая мощность | Вероятность правильно отклонить ложную H0. Мощность = 1 минус вероятность ошибки II рода. |
| Центральная предельная теорема | Выборочные средние сходятся к нормальному распределению с ростом выборки. |
| Параметрический тест | Предполагает конкретное распределение данных (обычно нормальное). |
| Непараметрический тест | Не делает предположений о распределении. Работает с рангами или знаками. |
Источник: оригинальная статья
01.14 — Нормы и расстояния · Фаза 1 — Математические основы · Полный каталог · 01.16 — Методы сэмплирования