Вы уже сделали свой выбор. Вы здесь, чтобы понять, почему вы это сделали. - Оракул, Матрица

Таймсерии - одна из очень немногих дисциплин данных, где моделировать становится все труднее почти каждый день.

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

Для многих других дисциплин моделирование и прогнозирование идут рука об руку. Для таймсерий они часто являются заклятыми врагами. Возьмем, к примеру, гипотезу эффективного рынка (EMH). Это теоретическая основа в финансах, однако она была (и остается) сильным ударом по прогнозированию финансовых временных рядов. Потому что он говорит, что цены на акции - это просто случайные колебания из-за эффективности рынка. Моделировать случайные блуждания очень просто. Однако прогнозирование - бесполезная попытка (держится ли EMH или нет - это другой разговор, но многие умные люди отказываются верить EMH).

В этой статье я буду обсуждать утечку данных, которая широко распространена в широком спектре задач машинного обучения. Утечка данных может закрасться в ваш жизненный цикл машинного обучения и оставаться незамеченной до тех пор, пока вы не отправите модель в производство, и все начнется. Но что такое утечка данных?

Википедия предлагает подходящее определение утечки данных. Я взял на себя смелость немного изменить его следующим образом: утечка данных - это использование информации во время обучения модели и проверки, которая была бы недоступна на этапе прогнозирования. Когда дело доходит до временных рядов, недостаток доступности может проявляться во многих формах, особенно при большом горизонте прогнозирования. Это может быть связано со следующими причинами:

  1. Эта функция просто недоступна в будущем. Во время перекрестной проверки эта недоступность может остаться незамеченной, поскольку мы проверяем наборы данных, которые сами состоят из прошлых наблюдений. Следовательно, до начала производства у нас всегда есть доступ к этим функциям. Основное влияние такого рода утечки данных заключается в том, что они считают часы, потраченные на создание функций, бессмысленными.
  2. Для аргументации предположим, что функции могут быть доступны в течение горизонта прогнозирования с помощью прогнозов / ожиданий самих функций. В этом случае есть два предостережения: (а) надежные прогнозы очень дороги (б) прогнозы содержат множество неопределенностей / ошибок, так что приготовьтесь к резкому снижению производительности модели в процессе производства.

Типичным примером утечки данных может быть использование данных о движении запасов для прогнозирования объема некоторого производства. На этапе перекрестной проверки данные о движении запасов могут демонстрировать отличную ОБРАЗНУЮ ценность, что делает их важной функцией моделирования. Но когда дело доходит до предсказания в реальном времени, его полезность становится очень маленькой, если не совсем бесполезной.

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

Сначала разделите, потом нормализуйте.

Эта практика хорошо известна среди практикующих ОД. Это также в некоторой степени актуально для анализа временных рядов, особенно когда применяются методы с использованием нейронных сетей (например, AR-Net, NeuralProphet, RNN-LSTM). Это связано с тем, что нейронные сети трудно, если не невозможно, обучать с наборами данных, которые не нормализованы.

Эта практика состоит из следующих шагов:

  1. Разделите набор данных на набор для обучения, проверки и тестирования.
  2. Определите коэффициенты нормализации, используя только обучающую выборку. Нормализовать тренировочный набор
  3. Используя те коэффициенты нормализации, которые были найдены на предыдущем этапе, нормализуйте валидацию и набор тестов.

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

Есть несколько важных предостережений, на которые следует обратить внимание. Если моделируемый процесс не является стационарным, то перенос коэффициентов нормализации в далекое будущее (проверка + тест) может иметь свои собственные пагубные последствия для производительности модели. Однако это другой разговор.

Погрузитесь прямо в MVP, сделайте перекрестную проверку позже!

Звучит немного нелогично, но позвольте мне объяснить.

MVP означает минимально жизнеспособный продукт. По сути, это урезанная версия разрабатываемой нами системы машинного обучения (например, механизм рекомендаций или механизм прогнозирования), способный предоставлять комплексное решение в режиме реального времени. Его не обязательно развертывать.

Жизненный цикл обычного эксперимента по машинному обучению состоит из следующих этапов:

  1. Подготовить наборы данных (разделение + нормализация + создание объектов)
  2. Быстро построить серию моделей
  3. Перекрестная проверка с последующей настройкой гиперпараметров
  4. Выбор модели / ансамбль
  5. Создать MVP

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

Чтобы избежать всех этих ловушек, позвольте мне немного изменить и изменить жизненный цикл эксперимента:

  1. Подготовить наборы данных (разделение + нормализация + создание объектов)
  2. Обучите простую модель. Почему не сложные сложные модели? Это будет ясно на следующем шаге.
  3. Создайте MVP. Невозможно измерить производительность модели, поскольку MVP прогнозирует в реальном времени (например, следующие 7 дней). Следовательно, сложность модели не имеет значения.
  4. Предполагая, что функции, вызывающие утечку данных, идентифицированы, переходите к дальнейшим итерациям (более сложные модели, выбор / объединение моделей).

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

Не разделяйте обучение модели и прогнозирование / вывод

Для многих задач машинного обучения обучение модели и прогнозирование / вывод могут быть полностью разделены. Возьмем, к примеру, так называемый классификатор кошек. Можно полностью разделить процесс обучения классификатора и классификации. Можно с уверенностью предположить, что доступность функций (представляющих собой массив значений пикселей), необходимых для прогнозирования, не является функцией времени.

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

Я, например, обнаружил, что описанные выше практики чрезвычайно полезны на протяжении всего моего путешествия по анализу временных рядов. Я надеюсь, что вы тоже кое-что сделаете. Всего хорошего. Ваше здоровье!