Фаза 01 · урок 15

Статистика для машинного обучения

Цель урока: Вы обучили две модели. Модель A набрала 0.87 на тестовом наборе. Модель B — 0.89. Вы разворачиваете модель B. Через три недели производственные метрики становятся хуже, чем были. Что произошло?

Текущий релиз AlexBred.com: первые 100 уроков русскоязычной программы.

Курс
AI Engineering from Scratch
Фаза
Математические основы
Чтение
15 мин.
Проверено
Содержание урока
  1. Цели обучения
  2. Проблема
  3. Концепция
  4. Описательная статистика: краткое представление данных
  5. Корреляция: как переменные меняются вместе
  6. Ковариационная матрица
  7. Проверка гипотез
  8. t-тест
  9. Критерий хи-квадрат
  10. A/B-тестирование ML-моделей
  11. Статистическая и практическая значимость
  12. Проблема множественных сравнений
  13. Bootstrap-методы
  14. Параметрические и непараметрические тесты
  15. Центральная предельная теорема: практические следствия
  16. Распространённые статистические ошибки в ML-статьях
  17. Соберите это
  18. Ключевые термины

Статистика позволяет понять, действительно ли ваша модель работает или ей просто повезло.

Тип: Сборка Язык: 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-статьях

  1. Тестирование на обучающем наборе. Гарантирует переобучение. Всегда откладывайте данные, которые модель никогда не видит во время обучения.

  2. Нет доверительных интервалов. Сообщение одного числа точности без неопределённости делает результаты невоспроизводимыми и непроверяемыми.

  3. Игнорирование множественных сравнений. Тестирование 50 конфигураций и сообщение лучшей без поправки увеличивает частоту ложноположительных результатов.

  4. Путаница статистической и практической значимости. p-значение 0.001 для улучшения точности на 0.01% не имеет смысла.

  5. Использование точности на несбалансированных данных. 99% точности на наборе, где 99% принадлежит отрицательному классу, означает, что модель ничему не научилась. Используйте precision, recall, F1 или AUC.

  6. Выбор метрик под результат. Сообщение только той метрики, по которой ваша модель победила. Честная оценка сообщает все релевантные метрики.

  7. Утечка информации между train/test-разбиениями. Нормализация до разбиения или использование будущих данных для предсказания прошлого.

  8. Малые тестовые наборы без оценок дисперсии. Оценка на 100 примерах и заявление об улучшении на 2% — это шум, а не сигнал.

  9. Предположение независимости, когда данные зависимы. Медицинские изображения одного пациента, несколько предложений одного документа. Наблюдения внутри группы коррелируют.

  10. p-hacking. Перебор тестов, подмножеств или критериев исключения, пока не получится p < 0.05. Результат — артефакт поиска.

Соберите это

Вы реализуете:

  1. Описательную статистику с нуля (среднее, медиана, мода, стандартное отклонение, перцентили, IQR)
  2. Функции корреляции (Пирсона и Спирмена вместе с ковариационной матрицей)
  3. Проверки гипотез (одновыборочный t-тест, двухвыборочный t-тест, критерий хи-квадрат)
  4. Bootstrap-доверительные интервалы (для любой статистики, без предположений)
  5. Симулятор A/B-теста (генерировать данные, тестировать, проверять ошибки I и II рода)
  6. Демонстрацию статистической и практической значимости (показывающую, что большое 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 — Методы сэмплирования