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

# Введение
Данные временных рядов повсюду — потребление энергии регистрируется ежечасно, транзакции записываются с точностью до миллисекунды, жизненно важные показатели пациентов отслеживаются на протяжении всего пребывания в больнице, уровни запасов обновляются ежедневно и многое другое. Анализ, моделирование и прогнозирование такого рода данных — один из самых востребованных навыков в различных отраслях.
Отличием анализа временных рядов от общей науки о данных является то, что на каждом этапе он требует иной ментальной модели. Временная упорядоченность, автокорреляция, сезонность и нестационарность — это структурные свойства, которых нет в табличных данных, но которые определяют все особенности поведения временных рядов. Семь шагов, описанных в этой статье, помогут вам изучить и освоить анализ временных рядов с помощью Python.
# Шаг 1: Понимание того, чем отличаются данные временных рядов
Для начала необходимо понять свойства, которые структурно отличают временные ряды от табличных данных. Многие специалисты пропускают этот шаг, полагая, что общие знания в области машинного обучения применимы напрямую. Это не так, по крайней мере, без корректировок.
Ниже кратко описаны три наиболее важных структурных свойства:
| Свойство | Что это значит | Почему это важно |
|---|---|---|
| Временная зависимость | Наблюдения не являются независимыми; то, что произошло вчера, коррелирует с тем, что произошло сегодня. | Стандартные задачи машинного обучения предполагают независимость строк, поэтому их наивное применение приводит к вводящим в заблуждение результатам. |
| Стационарность | Статистические свойства остаются неизменными с течением времени. | Большинство классических моделей требуют стационарности; большинство рядов реального мира её не имеют и требуют дифференцирования или преобразования. |
| Сезонность и тренд | Регулярно повторяющиеся закономерности или сезонность в сочетании с долгосрочным направленным движением или трендом. | Отделение этих составляющих от нерегулярных остатков часто является основной аналитической задачей. |
Ресурс : Бесплатный онлайн-учебник Роба Хайндмана и Джорджа Атанасопулоса «Прогнозирование: принципы и практика» (3-е изд.) — это исчерпывающий справочник. Если вас интересует серьезный анализ временных рядов, вы можете добавить его в закладки, прежде чем переходить к каким-либо этапам моделирования.
# Шаг 2: Освоение структур данных временных рядов в Python
Работа с временными рядами в Python требует уверенного владения структурами данных pandas, учитывающими время: DatetimeIndex, PeriodIndex, операции передискретизации и скользящего окна.
Различие между DatetimeIndex и PeriodIndex имеет большее значение, чем кажется на первый взгляд.
- DatetimeIndex представляет собой конкретные моменты времени.
- PeriodIndex обозначает временные промежутки.
Знание того, когда использовать каждый из них, как преобразовывать данные между ними, а также как анализировать, сегментировать и передискретизировать данные с временной индексацией, значительно упрощает дальнейшую работу, поскольку большинство библиотек моделирования имеют свои собственные специфические требования к формату.
Передискретизация и агрегирование — это то, где многие аналитики допускают незаметные, но важные ошибки. Уменьшение выборки с поминутного уровня до почасового требует выбора правильной функции агрегирования, и неправильный выбор искажает анализ. Практика передискретизации с использованием нескольких стратегий агрегирования на одном и том же наборе данных до тех пор, пока логика не станет интуитивно понятной, — это хорошо потраченное время.
Скользящие и расширяющиеся окна — .rolling() и .expanding() — это примитивы pandas для отображения признаков задержки и кумулятивной статистики. Важно создавать скользящие средние, стандартные отклонения и смещения задержки вручную, прежде чем полагаться на абстракции библиотек: понимание того, что делают эти операции на уровне индекса, предотвращает целый класс скрытых ошибок утечки данных, которые, как известно, очень трудно диагностировать постфактум.
Рекомендация : Перед продолжением изучите руководство по функционалу pandas для работы с временными рядами и датами, используя реальный набор данных.
# Шаг 3: Изучение методов очистки и подготовки данных временных рядов
В реальных временных рядах встречаются пропущенные временные метки, сбои датчиков, дублирующиеся показания и выбросы. Принятые здесь решения по очистке влияют на все последующие этапы, и очистка временных рядов требует иных методов, чем очистка таблиц, поскольку временной порядок ограничивает каждую операцию.
Отсутствие временной метки и значение NaN в текущей временной метке — это разные проблемы. В первом случае требуется переиндексация в каноническую частотную сетку, прежде чем метод импутации сможет её обнаружить. Для значений NaN стратегия должна соответствовать длине промежутка и типу сигнала: временная интерполяция для коротких промежутков в непрерывных сигналах, прямое заполнение для переменных ступенчатой функции, таких как состояние оборудования, и сезонная импутация для длинных промежутков в сильно сезонных рядах.
Выявление выбросов во временных рядах требует локального, а не глобального подхода:
- Глобальные статистические пороговые значения могут не выявлять аномалии в нестационарных рядах.
- Использование скользящих Z-баллов и границ межквартильного размаха (IQR) в скользящих окнах помогает выявлять значения, необычные в пределах их локального окружения.
- В случае многомерных данных с датчиков, алгоритм Isolation Forest обнаруживает аномалии, которые могут не проявляться в отдельных каналах, но возникают в совокупности различных признаков.
При объединении рядов данных, записанных с разной частотой, — например, почасовых показаний счетчиков, объединенных с ежедневными данными о погоде, — следует уделить особое внимание выравниванию частот. Функция агрегирования имеет такое же значение, как и само объединение, и документирование логики понижения частоты дискретизации заслуживает внимания, поскольку ее выбор влияет на входные данные модели таким образом, что это не отражается в объединенном результате.
Ресурс : Документация по преобразованиям sktime содержит описание наиболее распространенных преобразований предварительной обработки с полезными примерами.
# Шаг 4: Развитие интуиции посредством исследовательского анализа
Невозможно смоделировать то, чего вы не понимаете, а для понимания временного ряда необходим структурированный исследовательский анализ, прежде чем будет построена какая-либо модель. Исследовательский анализ данных временных рядов выходит далеко за рамки сводной статистики.
Разложение должно быть первым шагом в любом серьезном анализе. Использование statsmodels.tsa.seasonal.seasonal_decompose или более устойчивого к выбросам разложения STL разделяет временной ряд на трендовую, сезонную и остаточную составляющие, каждая из которых заслуживает независимого изучения.
- Тенденция линейная или нелинейная?
- Стабильна ли сезонная амплитуда, или она меняется со временем?
- Остаточные значения представляют собой приблизительно белый шум, или же они содержат структуру, которую не удалось выявить при разложении?
Автокорреляционный анализ — еще один важный диагностический метод. Графики автокорреляционной функции (АКФ) и частичной автокорреляционной функции (ЧАКФ) являются основными инструментами для понимания временной зависимости:
- Медленно затухающая автокорреляционная функция свидетельствует о нестационарности.
- Значительные всплески с задержкой в 24 секунды в почасовых данных свидетельствуют о суточной сезонности.
- Пороговые значения PACF указывают на авторегрессионный (AR) порядок.
Умение бегло читать эти графики имеет важное значение для любой работы по классическому моделированию.
Проверка стационарности завершает исследовательский процесс. Расширенный тест Дики-Фуллера (ADF) и тест Квятковского-Филлипса-Шмидта-Шина (KPSS) предоставляют статистические доказательства в пользу или против стационарности, и проведение обоих тестов целесообразно, поскольку они проверяют взаимодополняющие гипотезы. Результаты показывают, необходимо ли проводить дифференцирование или преобразование перед началом моделирования.
Ресурс : В документации по анализу временных рядов statsmodels описаны функции разложения, построения графиков автокорреляционной/частичной автокорреляционной функции и проверки стационарности, которые вы будете использовать чаще всего.
Шаг 5: Построение классических статистических моделей прогнозирования
Классические статистические модели — ARIMA, экспоненциальное сглаживание и их расширения — должны быть первыми моделями, которые вы строите. Зачастую они оказываются на удивление конкурентоспособными по сравнению с более сложными подходами на чистых, хорошо изученных временных рядах и заставляют взаимодействовать со структурой данных способами, недоступными моделям машинного обучения.
Экспоненциальное сглаживание (ETS) — это правильная отправная точка. Модели ETS присваивают экспоненциально убывающие веса прошлым наблюдениям и охватывают широкий спектр поведения с помощью аддитивных и мультипликативных компонентов для тренда и сезонности. Подгонка модели с использованием statsmodels.tsa.holtwinters.ExponentialSmoothing и изучение ее компонентов сразу же дают представление о структуре временного ряда.
ARIMA и SARIMA являются естественными моделями. ARIMA моделирует структуру автокорреляции стационарного ряда с помощью авторегрессионных и скользящих средних; SARIMA расширяет эту модель для учета сезонных закономерностей.
Дисциплина оценки так же важна, как и выбор модели. Случайная перекрестная проверка временных рядов приводит к оптимистичным и ненадежным оценкам; проверка методом «продвижения вперед» — обучение на прошлом, прогнозирование следующего окна, продвижение окна — имитирует реальную работу модели в производственной среде. TimeSeriesSplit из scikit-learn или утилиты перекрестной проверки прогнозирования sktime корректно реализуют этот подход.
Источник : «Прогнозирование: принципы и практика», главы 7–9 для ETS и ARIMA, а также документация по пространству состояний statsmodels для получения подробной информации о реализации на Python.
# Шаг 6: Переход к моделям машинного обучения и глубокого обучения
После того как появились надежные классические базовые модели, модели машинного обучения позволяют использовать более богатые наборы признаков, обрабатывать сложные нелинейности и масштабироваться до больших наборов рядов, моделирование которых по отдельности было бы нецелесообразным.
Модели на основе деревьев решений, такие как LightGBM и XGBoost, обеспечивают точные прогнозы при использовании хорошо продуманных признаков запаздывания, скользящей статистики и календарных переменных. Они автоматически обрабатывают нелинейность и взаимодействие признаков, но основной риск заключается в утечке данных; запаздывания должны строиться строго на основе прошлых значений относительно метки времени прогнозирования. Функция make_reduction из библиотеки sktime безопасно использует регрессоры scikit-learn в качестве прогнозаторов и корректно обрабатывает этот процесс.
Глобальные модели становятся актуальными, когда задача включает сотни или тысячи связанных временных рядов — данные о продажах на уровне магазинов, показания датчиков на уровне устройств, региональный спрос на энергию. Обучение единой глобальной модели для всех рядов часто превосходит индивидуальные модели для каждого ряда за счет обмена статистическими данными, и NeuralForecast поддерживает этот подход изначально.
Архитектуры глубокого обучения демонстрируют наилучшие результаты на эталонных наборах данных и лучше, чем классические модели, справляются с многосезоньем, ковариатами и прогнозированием на долгосрочный период. NeuralForecast реализует все это с помощью согласованного API и надлежащей поддержки временной перекрестной проверки. Лучшее время для использования глубокого обучения — после того, как более простые модели достигли своего предела, а не раньше.
Ресурс : Блокноты с заданиями конкурса прогнозирования Kaggle M5 — хорошая отправная точка, а лучшие решения охватывают весь цикл от разработки признаков до ансамблевого анализа на реальной задаче прогнозирования в розничной торговле и доступны бесплатно.
Шаг 7: Развертывание и мониторинг систем прогнозирования
Операционные проблемы, специфичные для работы с временными рядами, отличаются от проблем, возникающих при развертывании систем машинного обучения в целом.
Смещение концепции и изменение распределения являются неотъемлемыми рисками, а не исключительными случаями во временных рядах, поскольку ряды по своей природе нестационарны. Мониторинг показателей ошибок прогнозирования на постоянной основе и настройка автоматических оповещений при превышении пороговых значений ошибок являются базовым уровнем. Запланированные конвейеры переобучения являются обязательными в любой системе прогнозирования производственных данных.
Для хранения и версионирования прогнозов требуется продуманное проектирование. Системы прогнозирования производства генерируют прогнозы непрерывно, и хранение прогнозов вместе с фактическими результатами, которые они предсказали, — а не только с окончательными результатами модели — позволяет вычислять ретроспективную точность на каждом горизонте и точно понимать, где модель ухудшается с течением времени.
Тестирование на исторических данных как этап развертывания — это дисциплина, которая отделяет эксперименты от готовых к производству систем. Прежде чем любая модель будет запущена, необходимо провести тщательное тестирование на исторических данных, имитирующее весь период развертывания, используя только те данные, которые были бы доступны на каждом этапе. Модель, которая хорошо выглядит на отложенном тестовом наборе, но не проходит надлежащее тестирование на исторических данных, не готова.
Источник : Руководство по мониторингу моделей искусственного интеллекта для мониторинга машинного обучения, включая обнаружение отклонений в данных и прогнозах.
# Завершение
Анализ временных рядов поощряет последовательное обучение больше, чем большинство дисциплин в области анализа данных.
| Шаг | Почему это важно |
|---|---|
| Основные свойства данных временных рядов | Без понимания временной зависимости, стационарности и сезонности каждое последующее решение будет основываться на шатких основаниях. |
| Структуры данных Pandas, учитывающие время | Правильное индексирование, передискретизация и оконные операции являются необходимыми условиями для любой задачи анализа и моделирования. |
| Очистка и подготовка | Ошибки, возникающие здесь, незаметно распространяются по всему конвейеру обработки данных; временная последовательность затрудняет их обнаружение по сравнению с очисткой таблиц. |
| Исследовательский анализ | Разложение, графики автокорреляции и тесты на стационарность выявляют структуру, определяющую, какие модели являются подходящими. |
| Классические статистические модели | Способствует структурному взаимодействию с данными; часто конкурирует со сложными подходами и всегда полезен в качестве отправной точки. |
| Модели машинного обучения и глубокого обучения | Расширяет возможности обработки нелинейных паттернов, богатых наборов функций и больших коллекций рядов данных после освоения классических базовых моделей. |
| Развертывание и мониторинг | Модель, которую невозможно поддерживать в производственной среде, не является готовым продуктом; системы анализа временных рядов требуют специфической для данной области операционной дисциплины. |
Базовые модели для анализа временных рядов — предварительно обученные на больших массивах разнообразных данных и доработанные для решения конкретных задач — существенно меняют подход специалистов к прогнозированию. Создание прочных базовых моделей в классических подходах и подходах, основанных на машинном обучении, безусловно, будет полезно в будущем.
Бала Прия С. — разработчик и технический писатель из Индии. Ей нравится работать на стыке математики, программирования, анализа данных и создания контента. В сферу её интересов и компетенции входят DevOps, анализ данных и обработка естественного языка. Она любит читать, писать, программировать и пить кофе! В настоящее время она работает над изучением и распространением своих знаний среди сообщества разработчиков, создавая учебные пособия, руководства, аналитические статьи и многое другое. Бала также создает увлекательные обзоры ресурсов и обучающие материалы по программированию.
Источник: www.kdnuggets.com

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