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

# Введение
Работа с данными временных рядов включает в себя целый ряд задач. Исходные данные поступают с нерегулярными интервалами и требуют передискретизации. Аномальные пики необходимо выявлять до того, как они исказят результаты последующего анализа. Тренды и сезонные закономерности необходимо отделять от шума. А когда у вас несколько рядов, понимание того, как они связаны друг с другом, требует большего, чем просто беглый визуальный осмотр.
Эти пять скриптов на Python решают распространенные задачи обработки временных рядов. Они разработаны для работы со стандартными CSV-файлами или файлами Excel, обеспечивают корректный вывод и просты в настройке для различных наборов данных.
Все скрипты можно найти на GitHub .
# 1. Передискретизация и агрегирование нерегулярных временных рядов
// Болевая точка
Данные временных рядов из реального мира редко поступают с равномерными интервалами. Показания датчиков, журналы транзакций и потоки событий содержат пробелы, дубликаты и несогласованные временные метки. Перед проведением любого осмысленного анализа данные необходимо привести к единой частоте.
// Что делает скрипт
Принимает CSV-файл или файл Excel, содержащий столбец с датами и временем, а также один или несколько столбцов со значениями, выполняет передискретизацию до указанной вами частоты и применяет агрегатные функции к каждому столбцу. Заполняет или отмечает пробелы и записывает чистый выходной файл с кратким описанием внесенных изменений.
// Как это работает
Скрипт анализирует столбец datetime с помощью pandas , устанавливает его в качестве индекса и использует функцию resample() с настраиваемыми строками частоты. Методы агрегирования для каждого столбца определены в конфигурации, поэтому для столбца температуры может использоваться среднее значение, а для столбца продаж — сумма. Пропущенные интервалы после перевыборки обрабатываются с помощью прямого заполнения, интерполяции или явного указания NaN в зависимости от ваших настроек. В отчете о пробелах перечислены все интервалы, в которых данные отсутствовали в исходных данных.
⏩ Получите скрипт для передискретизации временных рядов
# 2. Выявление аномалий во временных рядах данных
// Болевая точка
Отдельный аномальный всплеск или падение во временном ряду может исказить средние значения, нарушить работу последующих моделей и замаскировать реальные тенденции. Выявление таких точек вручную путем сканирования графиков или исходных значений нецелесообразно при любом значительном объеме данных.
// Что делает скрипт
Программа сканирует один или несколько числовых столбцов в файле временного ряда и отмечает точки данных, выходящие за пределы ожидаемых значений, используя один из трех методов обнаружения: z-оценка, межквартильный размах (IQR) или скользящая статистика. В результате создается аннотированный файл с отмеченными аномалиями и отдельный сводный отчет.
// Как это работает
Метод z-оценки отмечает точки, где стандартизированное значение превышает настраиваемый порог (по умолчанию ±3). Метод межквартильного размаха (IQR) отмечает точки, выходящие за пределы 1,5× межквартильного размаха. Метод скользящего среднего вычисляет скользящее среднее и стандартное отклонение в настраиваемом окне и отмечает точки, которые значительно отклоняются от локального контекста. Это полезно для рядов с выраженными трендами или сезонностью. Все три метода можно запускать одновременно; в столбце выходных данных указывается, какой метод отметил каждую точку. Дополнительный флаг —plot сохраняет график для каждого столбца с выделенными аномалиями.
⏩ Получите скрипт детектора аномалий
#3. Разложение ряда на тренд, сезонность и остатки
// Болевая точка
Временной ряд обычно представляет собой комбинацию нескольких компонентов: долгосрочного тренда, повторяющегося сезонного паттерна и нерегулярного остаточного шума. Анализ ряда в целом затрудняет четкое понимание какого-либо отдельного компонента.
// Что делает скрипт
Применяет классическое разложение временных рядов к числовому столбцу, разделяя наблюдаемый ряд на трендовую, сезонную и остаточную составляющие. Поддерживает как аддитивные, так и мультипликативные модели разложения. Экспортирует каждую составляющую в виде столбца в выходной файл и сохраняет многопанельную диаграмму.
// Как это работает
Скрипт использует функцию statsmodels.tsa.seasonal.seasonal_decompose() для целевого столбца после передискретизации до постоянной частоты, если это необходимо. Период разложения настраивается. Аддитивное разложение подходит для рядов, где сезонные колебания имеют приблизительно постоянную величину; мультипликативное — для рядов, где они масштабируются в зависимости от уровня тренда. Выходной файл Excel содержит исходный ряд вместе с тремя извлеченными компонентами. Сохраненный график отображает все четыре панели в виде стека.
⏩ Получите скрипт разложения временного ряда
# 4. Прогнозирование с использованием сезонной авторегрессионной интегрированной скользящей средней
// Болевая точка
Создание прогноза на основе временного ряда обычно включает в себя выбор модели, настройку параметров и этапы проверки, для правильного выполнения которых требуются статистические знания. Каждый раз начинать все с нуля отнимает много времени, а неформальный подход приводит к прогнозам, которым трудно доверять или которые трудно воспроизвести.
// Что делает скрипт
Программа строит модель сезонной авторегрессионной интегрированной скользящей средней (SARIMA) на основе столбца временного ряда, генерирует прогноз на настраиваемое количество периодов и записывает результаты в выходной файл, содержащий значения прогноза, доверительные интервалы и основные показатели точности для отложенного периода валидации. При необходимости автоматически выбирает параметры модели с использованием минимизации информационного критерия Акаике (AIC).
// Как это работает
Скрипт использует statsmodels.tsa.statespace.sarimax.SARIMAX для подгонки модели. При установке параметра —auto-order он выполняет облегченный поиск по сетке в настраиваемом диапазоне параметров ARIMA и сезонных параметров, выбирая комбинацию с наименьшим значением AIC. Ряд разбивается на обучающую выборку и отложенную тестовую выборку, количество периодов которой можно настроить. Точность на тестовой выборке оценивается с помощью средней абсолютной ошибки (MAE) и среднеквадратичной ошибки (RMSE) перед повторной подгонкой окончательной модели на весь ряд для получения прогноза на будущее. Результаты включают точечный прогноз и 95% доверительные интервалы. Сохраняется график прогноза, показывающий исторический ряд, фактические значения за тестовый период по сравнению с прогнозами, а также прогноз на будущее с доверительными интервалами.
⏩ Получите скрипт прогнозирования SARIMA
# 5. Сравнение нескольких временных рядов
// Болевая точка
При работе с несколькими связанными временными рядами — различными продуктами, регионами, датчиками или показателями — понимание того, как они движутся вместе, требует большего, чем простое отображение их на одном графике. Корреляционный анализ, анализ запаздывающих связей и согласованные сводные статистические данные требуют вычислений, и выполнение этих вычислений для множества пар рядов быстро становится громоздким.
// Что делает скрипт
Программа принимает файл с несколькими столбцами временных рядов, выравнивает их по общей частоте и создает многовкладочный сравнительный отчет, охватывающий попарные корреляции, анализ запаздывания (кросс-корреляция до настраиваемого запаздывания) и сводную статистическую таблицу. Для пар с наибольшей корреляцией генерируются диаграммы.
// Как это работает
Скрипт использует pandas для выравнивания всех столбцов по общему индексу даты и времени после перевыборки. Вычисляются попарные корреляции Пирсона и Спирмена, которые записываются на вкладку матрицы корреляций. Для каждой пары вычисляется кросс-корреляция до настраиваемого максимального лага, определяя лаг, при котором каждая пара достигает пика, что полезно для поиска опережающих/запаздывающих связей. Вкладка «Сводка» включает среднее значение, стандартное отклонение, минимум, максимум и направление тренда (положительный/отрицательный наклон линейной аппроксимации) для каждого ряда. Для пяти пар с наибольшей корреляцией создается линейный график с двумя осями на отдельной вкладке графиков.
⏩ Получите скрипт для сравнения нескольких серий
# Завершение
Эти пять скриптов охватывают основные задачи, связанные с работой с данными временных рядов. Они предназначены для использования как по отдельности, так и последовательно: сначала передискретизация, обнаружение аномалий, разложение, прогнозирование, а затем сравнение данных по рядам.
Для начала загрузите скрипт, который планируете использовать, и установите все зависимости, перечисленные в его файле README. Затем обновите раздел конфигурации в верхней части скрипта, чтобы он соответствовал вашим конкретным данным и названиям столбцов. Перед запуском на полном наборе данных протестируйте скрипт на небольшой выборке, чтобы убедиться в правильности выходных данных. Как только вы будете удовлетворены результатами, вы можете запланировать запуск или интегрировать его в существующий конвейер обработки данных.
Удачного анализа!
Бала Прия С. — разработчик и технический писатель из Индии. Ей нравится работать на стыке математики, программирования, анализа данных и создания контента. В сферу её интересов и компетенции входят DevOps, анализ данных и обработка естественного языка. Она любит читать, писать, программировать и пить кофе! В настоящее время она работает над изучением и распространением своих знаний среди сообщества разработчиков, создавая учебные пособия, руководства, аналитические статьи и многое другое. Бала также создает увлекательные обзоры ресурсов и обучающие материалы по программированию.
Источник: www.kdnuggets.com

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