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

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

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

Модели машинного обучения для прогнозирования временных рядов

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

Как реализовать модели с использованием программных библиотек с открытым исходным кодом

Обычно я определяю модели своего типа нейронной сети с помощью Keras, который представляет собой высокоуровневый API нейронных сетей, написанный на Python и способный работать поверх TensorFlow, CNTK или Theano. Для других типов моделей я обычно использую Scikit-Learn, бесплатную библиотеку машинного обучения. Она включает в себя различные алгоритмы классификации, регрессии и кластеризации, включая вспомогательные векторные машины, случайные леса, Повышение градиента, k -means и DBSCAN, и предназначен для взаимодействия с числовыми и научными библиотеками Python NumPy и SciPy.

Однако основная тема этой статьи не в том, как реализовать модель прогнозирования временных рядов, а, скорее, как оценивать прогнозы модели. В связи с этим я не буду вдаваться в подробности построения моделей и т. Д., Поскольку есть множество других сообщений в блогах и статей, посвященных этим темам.

Пример случая: прогнозирование данных временных рядов

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

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

Из прогнозов модели мы получаем оценку R2, равную 0,89, и, по-видимому, хорошее соответствие между реальными и прогнозируемыми значениями. Однако, как я сейчас рассмотрю более подробно, эта оценка метрики и модели может вводить в заблуждение.

Это просто НЕПРАВИЛЬНО….

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

Прогнозы с задержкой по времени и автокорреляции

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

В этом конкретном примере я использовал Сеть LSTM, которая делает прогнозы в соответствии с данными в предыдущие разы. Однако при небольшом увеличении прогнозов модели, как показано на рисунке ниже, мы начинаем видеть, что на самом деле делает модель.

Данные временных рядов, как правило, коррелированы во времени и демонстрируют значительную автокорреляцию. В данном случае это означает, что индекс в момент времени t +1 весьма вероятно близок к индексу в момент времени t. Как показано на приведенном выше рисунке справа, на самом деле модель заключается в том, что при прогнозировании значения в момент времени t +1 она просто использует значение в момент времени t в качестве своего прогноза (часто называемого моделью персистентности ). Построив c ross-корреляцию между прогнозируемым и реальным значением (рисунок ниже), мы видим четкий пик с интервалом в 1 день, что указывает на то, что модель просто использует предыдущее значение в качестве прогноза на будущее.

Метрики точности могут вводить в заблуждение при неправильном использовании.

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

Стационарность и разностные данные временных рядов

Стационарный временной ряд - это тот, статистические свойства которого, такие как среднее значение, дисперсия, автокорреляция и т. Д., Являются постоянными во времени. Большинство методов статистического прогнозирования основаны на предположении, что временные ряды могут быть визуализированы приблизительно стационарными (т.е. стационарными) за счет использования математических преобразований. Одним из таких основных преобразований является изменение данных во времени, как показано на рисунке ниже.

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

Определение модели для прогнозирования разницы значений между временными шагами, а не самого значения, является гораздо более сильным тестом на предсказательную способность модели. В этом случае нельзя просто использовать то, что данные имеют сильную автокорреляцию, и использовать значение в момент времени «t» в качестве прогноза для «t + 1». Благодаря этому он обеспечивает лучший тест модели и позволяет ли она узнать что-нибудь полезное на этапе обучения, а также может ли анализ исторических данных действительно помочь модели предсказать будущие изменения.

Модель прогнозирования для данных с разницей во времени

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

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

Ваш временной ряд - это случайное блуждание?

Ваш временной ряд на самом деле может быть случайным блужданием, и некоторые способы проверить это следующие:

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

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

Резюме

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

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

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

Изменить: исходя из интереса и отзывов, я решил написать дополнительную статью на ту же тему: « Как (не) использовать машинное обучение для прогнозирования временных рядов: продолжение »

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

И, если вы хотите стать средним участником для свободного доступа ко всем материалам на платформе, вы также можете сделать это, используя мою реферальную ссылку ниже. (Примечание: если вы зарегистрируетесь по этой ссылке, я также получу часть членского взноса)



Другие работы Вегарда Фловика на Medium:

  1. Переход от физики к науке о данных
  2. Что такое теория графов и почему вам это нужно?
  3. Глубокое трансферное обучение для классификации изображений
  4. Создание ИИ, который может читать ваши мысли
  5. Машинное обучение: от шумихи до реальных приложений
  6. Скрытый риск ИИ и больших данных
  7. AI для управления цепочками поставок: предиктивная аналитика и прогнозирование спроса
  8. Как использовать машинное обучение для оптимизации производства: использование данных для повышения производительности
  9. Как использовать машинное обучение для обнаружения аномалий и мониторинга состояния
  10. Как научить физику системам искусственного интеллекта?
  11. Можем ли мы построить сети искусственного мозга, используя наномасштабные магниты?

Мастер-класс по искусственному интеллекту - от шумихи до реальных приложений