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

Что такое временные ряды?

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

Временные ряды - это сложные объекты, которые могут демонстрировать очень тонкое поведение.

Не очень хорошо определить проблему

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

Возьмем действительно хорошо известную область проблемы: классификация.

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

  • Сбор данных
  • Исследование данных и некоторая статистика по ним
  • Очистка данных
  • В некоторых случаях какое-то преобразование (одно горячее кодирование и т. Д.)
  • Обучите модель
  • Оцените модель на тестовом наборе, основанном на огромном наборе доступных метрик.
  • Если результаты плохие, измените модель и выберите одну из огромной коллекции доступных моделей классификации.
  • И бум, вы сделали

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

Почему это хорошо известная проблема? На мой взгляд: наша работа - решать проблему. Сформулировать задачу классификации несложно: мы хотим отнести объект к категории. И процесс проверки правильности решения также довольно прост: находится ли объект в правильной категории? Да или нет. Поэтому, когда кто-то говорит вам решить задачу классификации, вы в большинстве случаев легко поймете, что вас просят решить.

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

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

Примеры обескураживающих игрушек

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

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

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

Кроме того, довольно часто, даже если вы не так много найдете в Интернете, я считаю, что вы имеете дело не с одним временным рядом, а с временным рядом S. Например, в настоящее время я работаю над проблемой, в которой мне нужно обработать более 17 000 временных рядов. И я не думаю, что это единичный случай: возьмем компанию, которая продает другой товар. Если у нее 100 продуктов, у вас будет 100 временных рядов. И многие компании продают не только 100 товаров. И когда вы имеете дело с таким большим количеством временных рядов, вы столкнетесь с этой проблемой, я обещаю: «Хорошо, у меня есть n временных рядов. Я хочу составить прогноз, но не могу настроить ни одну модель ». И вы обнаружите, что ищете несколько подходов auto (кстати, я рекомендую auto_arima из pmdarima в python ). Есть некоторые, но в основном есть решения, которые (очевидно) сделаны для отдельных временных рядов. И даже если вы используете это решение для нескольких временных рядов, возникнут огромные вычислительные затраты. Например, для около 250 временных рядов вычисление auto_arima заняло несколько часов.

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

Преобразование, прогноз и аддитивность ошибок

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

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

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

Метрики

Чтобы завершить свой небольшой обзор того, почему этот временной ряд такой сложный и разочаровывающий, я хотел бы поговорить о показателях. При проведении классификации проверка результата довольно удобна. Я вспомнил проект, в ходе которого мне приходилось классифицировать объекты, у меня было около 7 показателей для поддержки моего теста, и я протестировал 15 моделей, каждая из которых дала мне довольно хорошие результаты. Сложность временных рядов в том, что это не бинарная задача. Если ваш тестовый прогноз совпадает с вашими исходными данными, велика вероятность того, что ваша модель переоценивает ваши данные.

А как оценить свой прогноз? Вы можете использовать некоторые метрики, такие как RMSE, MAE, MAPE, но сложная часть - это когда вы должны сказать, комбинируя эти метрики, если это хороший прогноз, и для меня самое сложное, сравнивая 2 модели на основе этих метрик. Что ж, еще одна сложная задача для временного ряда.

Вывод

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