Перейти к содержанию

Модуль 2. Данные и вероятность

Чему вы научитесь в этом модуле

  • Чётко различать параметр распределения (истинное значение) и его оценку по выборке — и не смешивать эти понятия при обсуждении результатов.
  • Понимать, откуда в формуле стандартной ошибки появляется множитель \(\sqrt{n}\) и что это означает на практике.
  • Рассчитывать необходимое количество зёрен (запусков эксперимента), чтобы обнаружить разницу заданного размера — уже не перебором, а по формуле.
  • Применять формулу Байеса к задачам, в которых интуитивный ответ оказывается неверным.
  • Объяснять суть переобучения через понятие шума — даже без упоминания конкретных моделей.

Время: примерно две недели. Пререквизиты: модуль 1. Ноутбук: открыть в Colab · notebooks/02-data-and-probability.ipynb

Зачем нужен этот модуль

Модуль 1 закончился утверждением: число, полученное из одного запуска, — это одно наблюдение случайной величины. Слова были произнесены, но не определены. В этом модуле мы их определим.

Кроме того, остался один неоплаченный долг. В модуле 1 на вопрос «сколько зёрен нужно для надёжного результата» ответ был получен методом перебора: мы вычислили долю ошибочных выводов для 1, 3, 5, 10, 20, 50 и 100 зёрен и оценили результат на глаз. Так делать можно, но пересчитывать каждый раз — непрактично. К концу этого модуля на тот же вопрос мы сможем ответить одной формулой.

Случайная величина

Бросок кубика даёт число. До броска неизвестно, какое именно, после броска — известно. Величина, которая ведёт себя таким образом, называется случайной.

Один прогон обучения модели ведёт себя ровно так же. До запуска мы не знаем, какая получится точность; после запуска — это конкретное число. Но если запустить снова, число будет другим, потому что изменились начальное зерно генератора, порядок подачи данных, начальная инициализация весов сети.

Распределение — это полное описание того, какие значения случайная величина может принимать и с какой вероятностью (или плотностью) каждое из них встречается. Для кубика всё просто: шесть возможных значений, каждое с вероятностью \(1/6\). Для точности обученной модели значения образуют непрерывное множество, и чаще всего их распределение напоминает нормальное — колоколообразную кривую, сосредоточенную вокруг некоторого центрального значения.

Почему распределение так часто оказывается колоколообразным

Точность конкретного прогона складывается из множества мелких независимых влияний: этот мини-батч данных оказался чуть удачнее, тот начальный вес инициализировался чуть лучше, конкретное разбиение данных выдалось чуть более представительным. Математическая теорема, называемая центральной предельной теоремой (ЦПТ), утверждает, что сумма большого числа мелких независимых слагаемых стремится к нормальному распределению — причём вне зависимости от того, как распределено каждое отдельное слагаемое. Именно поэтому колоколообразная кривая возникает в самых разных задачах, где её никто специально не закладывал.

Параметр и оценка

Вот различие, из-за непонимания которого возникает путаница примерно в половине разговоров о статистике.

Параметр — это свойство самого распределения. Истинное среднее \(\mu\), истинная дисперсия \(\sigma^2\). Это фиксированные числа, которые объективно существуют, но нам напрямую недоступны: чтобы узнать их точно, потребовалось бы бесконечно много наблюдений.

Оценка — это то, что мы вычисляем по конечной выборке, которая у нас есть. Выборочное среднее \(\bar{x}\), выборочная дисперсия \(s^2\). Это числа, которые мы реально получаем из данных.

Принципиально важно: оценка сама является случайной величиной. Возьмите другую выборку (другие зёрна, другое разбиение данных) — и получите другое значение \(\bar{x}\). Именно поэтому у оценки есть собственный разброс, и именно этот разброс измеряет стандартная ошибка, с которой мы познакомились в модуле 1.

Параметр Оценка
Обозначение \(\mu\), \(\sigma^2\) \(\bar{x}\), \(s^2\)
Откуда берётся свойство распределения вычислено по конечной выборке
Меняется ли от выборки к выборке нет да
Известно ли нам точное значение нет да

Несмещённость — это свойство оценки, которое означает следующее: если мы повторим процедуру оценивания очень много раз (каждый раз на новой случайной выборке), то в среднем наша оценка попадёт ровно в истинный параметр. Именно это мы проверяли численно в ноутбуке модуля 1: деление суммы квадратов отклонений на \(n\) давало систематическое занижение дисперсии на множитель \(1/n\), а деление на \(n-1\) это занижение устраняло.

Закон больших чисел и корень из n

Два фундаментальных утверждения, на которых держится вся практика измерения в науке и инженерии.

Закон больших чисел. По мере увеличения размера выборки \(n\) выборочное среднее \(\bar{x}\) сходится к истинному среднему \(\mu\). Это математическая гарантия того, что измерять вообще имеет смысл: увеличивая количество наблюдений, мы приближаемся к истине.

Центральная предельная теорема (ЦПТ). Выборочное среднее \(\bar{x}\) само распределено приблизительно нормально с центром в \(\mu\) и стандартным отклонением \(\sigma/\sqrt{n}\) — причём это верно вне зависимости от того, как распределены сами исходные наблюдения \(x_i\).

Именно из второй теоремы и появляется множитель \(\sqrt{n}\) в формуле стандартной ошибки:

\[\mathrm{SE} = \frac{s}{\sqrt{n}} \approx \frac{\sigma}{\sqrt{n}}\]

Эту формулу полезно воспринимать как обменный курс. Хотите получить среднее вдвое точнее — заплатите вчетверо большим числом экспериментальных запусков. Курс невыгодный, и обсуждать его бессмысленно: это математическое свойство, а не недоработка вашего метода.

Сколько зёрен нужно: ответ формулой

Теперь закрываем долг из модуля 1.

Представим ситуацию: есть два метода. Истинная разница между их средними результатами составляет \(\Delta\), а разброс результатов между отдельными запусками (для каждого из них) характеризуется стандартным отклонением \(\sigma\). Вопрос: сколько запусков каждого метода нужно провести, чтобы эту разницу можно было надёжно обнаружить?

Разница выборочных средних \(\bar{x}_A - \bar{x}_B\) сама является случайной величиной, и её стандартная ошибка равна \(\sigma\sqrt{2/n}\). Для того чтобы разница уверенно отличалась от нуля, нужно, чтобы величина \(\Delta\) была существенно больше этой ошибки. Стандартное статистическое требование — обнаруживать эффект в 80 % случаев при уровне значимости 0.05 (то есть при допустимой ложно-положительной частоте 5 %) — приводит к следующей приближённой формуле:

\[n \approx 16\,\frac{\sigma^2}{\Delta^2}\]

Одна формула — и она принципиально меняет отношение к экспериментам.

Подставим конкретные числа из модуля 1

Там были параметры \(\Delta = 2\) (истинная разница между методами) и \(\sigma = 4\) (разброс между зёрнами). Подставляем: \(n \approx 16 \cdot 16 / 4 = 64\).

Шестьдесят четыре запуска каждого метода. А в статьях обычно указывают три.

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

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

Условная вероятность и теорема Байеса

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

Условная вероятность \(P(A \mid B)\) — это вероятность события \(A\) при условии, что событие \(B\) уже произошло (или известно, что оно истинно). Формальное определение:

\[P(A \mid B) = \frac{P(A \cap B)}{P(B)}\]

Из этого определения за два алгебраических шага выводится формула Байеса:

\[P(A \mid B) = \frac{P(B \mid A)\,P(A)}{P(B)}\]

Суть формулы в том, что она «переворачивает» условие. Если мы знаем вероятность \(P(B \mid A)\) (вероятность наблюдать \(B\), если \(A\) истинно), то можем вычислить вероятность \(P(A \mid B)\) (вероятность того, что \(A\) истинно, если мы наблюдаем \(B\)). Именно в этом месте человеческая интуиция систематически ошибается.

Классический пример: тест на редкую болезнь

Некоторая болезнь встречается у одного человека из тысячи. Существует тест, который обнаруживает болезнь у действительно больного человека в 99 % случаев, но при этом ошибочно показывает положительный результат у здорового человека в 5 % случаев. Пациент прошёл тест, и результат оказался положительным. Какова вероятность, что он действительно болен?

Большинство людей интуитивно отвечает «около 95 %». Давайте посчитаем по формуле Байеса.

Исходные данные: \(P(\text{болен}) = 0.001\), \(P(+ \mid \text{болен}) = 0.99\), \(P(+ \mid \text{здоров}) = 0.05\).

Сначала найдём полную вероятность положительного результата:

\[P(+) = 0.99 \cdot 0.001 + 0.05 \cdot 0.999 = 0.0509\]

Теперь применяем формулу Байеса:

\[P(\text{болен} \mid +) = \frac{0.99 \cdot 0.001}{0.0509} \approx 0.019\]

Менее двух процентов. Как такое возможно? Рассмотрим ситуацию на тысяче человек. Больной среди них один, и тест его почти наверняка обнаружит. Здоровых — 999, и примерно на пятидесяти из них тест ошибочно сработает. Итого: один истинно-положительный результат против пятидесяти ложно-положительных.

Проблема не в качестве теста, а в редкости самой болезни. Хороший тест, направленный на обнаружение редкого события, неизбежно выдаёт преимущественно ложные срабатывания. Тот же самый эффект возникает с классификатором на несбалансированных данных, с детектором мошенничества и с любым фильтром, который ищет редкую «иголку в стоге сена».

Переобучение

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

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

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

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

Утечка данных

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

Утечка данных обычно проявляется как приятная неожиданность: метрика качества внезапно и необъяснимо улучшается. Если это произошло — первым делом ищите утечку, а не радуйтесь.

Практическая часть

Часть 1. Работа с ноутбуком

Откройте notebooks/02-data-and-probability.ipynb.

Что содержится внутри:

  1. ЦПТ численно. Мы берём выборки из заведомо ненормального распределения и вычисляем их средние. По мере увеличения числа выборок наблюдаем, как распределение средних всё больше приближается к нормальному колоколу — наглядная демонстрация центральной предельной теоремы.
  2. Проверка закона \(\sigma/\sqrt{n}\). Убеждаемся, что разброс выборочного среднего действительно уменьшается ровно как корень из числа наблюдений.
  3. Формула для необходимого \(n\) против прямого перебора. Проверяем, совпадает ли предсказание формулы с тем, что мы получаем при непосредственном измерении.
  4. Байес на примере с тестом для редкой болезни. Вычисляем и визуализируем, как ответ зависит от распространённости заболевания в популяции.
  5. Переобучение без слова «модель». Подгоняем полином всё возрастающей степени под пятнадцать зашумлённых точек и наблюдаем, как ведёт себя ошибка на новых точках, которые полином при обучении не видел.

Часть 2. Читаем аннотации статей

Возьмите три статьи по любой близкой вам теме. Подойдут статьи с arXiv, из списка литературы к документации библиотеки, которой вы пользуетесь, или из любого другого источника.

По каждой статье, не читая раздел с описанием методов, ответьте:

  1. Какое именно улучшение заявлено в числах.
  2. Указан ли разброс результатов. Указано ли число проведённых прогонов.
  3. Если и то, и другое указано — прикиньте необходимое \(n\) по формуле из этого модуля. Хватило ли авторам запусков, чтобы обоснованно заявлять такое улучшение.
  4. Если разброс не указан — зафиксируйте это как отдельное наблюдение.

Три статьи, полчаса работы. В дальнейшем эта проверка будет занимать пять минут и выполняться автоматически — как привычка.

Задание

Возьмите любой набор данных с числовой целевой переменной. Подойдёт что угодно, вплоть до ваших собственных замеров времени сборки программного проекта.

  1. Оцените среднее значение и его стандартную ошибку. Объясните словами, что означает каждое из этих двух чисел.
  2. Разделите данные пополам случайным образом. Вычислите среднее на каждой половине. Попадают ли средние одной половины в доверительный интервал другой, и наоборот?
  3. Придумайте вопрос вида «какова вероятность \(A\) при условии \(B\)», на который в ваших данных есть ответ. Вычислите эту вероятность двумя способами: напрямую (посчитав долю) и через формулу Байеса. Оба результата обязаны совпасть — это служит проверкой правильности вычислений.
  4. Подгоните под данные многочлен такой степени, которая равна количеству точек минус один. Такой многочлен пройдёт ровно через каждую точку данных. Объясните письменно, почему это наихудшая из возможных «моделей» для предсказания на новых данных.

Проверка усвоения

  1. Чем параметр отличается от оценки? Какой из них является случайной величиной?
  2. Откуда в формуле стандартной ошибки берётся множитель \(\sqrt{n}\)?
  3. Разброс между зёрнами вдвое больше ожидаемого улучшения. Сколько запусков потребуется для обнаружения этого улучшения?
  4. Тест на редкую болезнь показал положительный результат. Почему ответ «пациент почти наверняка болен» неверен?
  5. Что именно запоминает переобученная функция и почему это не помогает при работе с новыми данными?
  6. Почему нормализация, вычисленная до разбиения данных на выборки, является утечкой?

Что дальше

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

Число без разброса — не результат. Разброс без указания числа прогонов — не разброс.