Прогнозирование временных рядов — это процесс использования модели для прогнозирования будущих значений временного ряда на основе его прошлых значений.
Данные временных рядов используются в самых разных областях, таких как финансы, экономика и метеорология, и способность прогнозировать будущие значения может быть невероятно ценной.
В этом сообщении блога мы рассмотрим основы прогнозирования временных рядов и то, как его можно реализовать в Python с использованием некоторых из наиболее распространенных библиотек.
Прежде чем мы углубимся в детали прогнозирования временных рядов в Python, давайте сначала определим некоторые термины, которые будут использоваться в этом посте.
Временная последовательность
Временной ряд — это ряд точек данных, проиндексированных (или перечисленных, или нарисованных на графике) во временном порядке. Чаще всего временной ряд представляет собой последовательность, полученную в последовательных равноотстоящих точках времени. Например, дневная цена закрытия акции будет временным рядом.
Компоненты временного ряда
Временной ряд можно разложить на три компонента: тренд, сезонность и шум.
- Тенденция: базовая закономерность в данных с течением времени. Тренд может быть восходящим, нисходящим или плоским.
- Сезонность: регулярные модели, которые повторяются во времени, например ежемесячные или годовые модели.
- Шум: случайные колебания данных, которые нельзя объяснить тенденцией или сезонностью.
Прогнозирование временных рядов
Прогнозирование временных рядов — это процесс использования модели для прогнозирования будущих значений временного ряда на основе его прошлых значений. Цель прогнозирования временных рядов состоит в том, чтобы сделать точные прогнозы о будущем, чтобы мы могли предпринять соответствующие ответные действия.
Типы моделей прогнозирования временных рядов
Существует несколько типов моделей прогнозирования временных рядов, каждая из которых имеет свои сильные стороны и ограничения. К наиболее распространенным типам моделей относятся:
- Авторегрессионные (AR) модели: эти модели предполагают, что будущее значение временного ряда является линейной функцией его прошлых значений.
- Модели скользящего среднего (MA): в этих моделях предполагается, что будущее значение временного ряда является линейной функцией члена ошибки (т. е. разницы между фактическим значением и прогнозируемым значением).
- Модели авторегрессионного скользящего среднего (ARMA): эти модели сочетают в себе модели авторегрессии и скользящего среднего и используются, когда тренд и сезонность временного ряда являются линейными.
- Модели авторегрессионного интегрированного скользящего среднего (ARIMA): эти модели используются, когда тренд и сезонность временного ряда не являются линейными.
- Сезонная декомпозиция: это метод разделения тренда, сезонности и шумовых компонентов временного ряда.
Теперь, когда у нас есть общее представление о прогнозировании временных рядов, давайте посмотрим, как его можно реализовать в Python.
Прогнозирование временных рядов в Python
Существует несколько библиотек Python, которые можно использовать для прогнозирования временных рядов, включая pandas
, statsmodels
и fbprophet
. В этом разделе мы рассмотрим, как использовать каждую из этих библиотек для прогнозирования временных рядов.
Панды
Pandas
— популярная библиотека Python для обработки и анализа данных. Он предоставляет широкий спектр инструментов для работы с данными временных рядов, включая функции повторной выборки, расчеты скользящего окна и сдвиг времени.
Чтобы начать работу с pandas
, вам сначала нужно установить его с помощью pip
:
pip install pandas
и начните работать с данными временных рядов.
Вот пример того, как использовать pandas
для прогнозирования будущих значений временного ряда:
import pandas as pd from statsmodels.tsa.arima_model import ARIMA # Load the time series data data = pd.read_csv(“time_series_data.csv”) # Fit the ARIMA model model = ARIMA(data[“values”], order=(1, 0, 0)) model_fit = model.fit() # Forecast the next 10 time steps forecast = model_fit.forecast(steps=10)[0] print(forecast)
В этом примере мы используем класс ExponentialSmoothing
из statsmodels
, чтобы подогнать модель к нашим данным временного ряда. Класс ExponentialSmoothing
имеет несколько необязательных аргументов, которые можно использовать для настройки модели, таких как тренд, сезонность, демпфирование и т. д.
Как только модель подходит, мы используем метод forecast()
для прогнозирования следующих 10 временных шагов. Результатом является массив прогнозируемых значений.
Фейсбук пророк
Prophet
— популярная библиотека с открытым исходным кодом для прогнозирования временных рядов, разработанная Facebook. Он предназначен для анализа данных временных рядов с несколькими сезонами и особенно хорошо подходит для данных бизнес-временных рядов.
Вот пример того, как использовать Prophet
для прогнозирования будущих значений временного ряда:
from fbprophet import Prophet # Load the time series data data = pd.read_csv(“time_series_data.csv”) data = data.rename(columns={‘timestamp’: ‘ds’, ‘value’: ‘y’}) # Fit the Prophet model model = Prophet() model.fit(data) print(forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']])
В этом примере мы используем Prophet
class, чтобы подогнать модель к нашим данным временных рядов, которые должны быть отформатированы с двумя столбцами: ds
как дата и y
как значение.
Затем мы создаем новый фрейм данных для хранения будущих прогнозов и используем метод make_future_dataframe()
для создания прогнозов.
Метод make_future_dataframe()
использует несколько периодов для прогнозирования будущего.
Затем мы используем метод predict()
для модели _20 для прогнозирования будущих значений временного ряда, и он возвращает несколько столбцов, включая дату, yhat
прогнозируемое значение, yhat_lower
нижнюю границу прогноза и yhat_upper
верхнюю границу прогноза.
Выводы
В этом сообщении блога я объяснил основы прогнозирования временных рядов и привел примеры того, как его можно реализовать в Python с использованием некоторых из наиболее распространенных библиотек: pandas
, statsmodel
и Prophet
.
Эти библиотеки предоставляют широкий спектр инструментов для работы с данными временных рядов и реализации моделей прогнозирования и могут быть очень мощными при правильном использовании.
Важно отметить, что прогнозирование временных рядов является сложной задачей, и не существует единой модели, которую можно использовать во всех случаях, выбор модели сильно зависит от характера и характеристик временного ряда.
Также важно оценивать прогнозируемые результаты и проверять модели на основе различных показателей оценки.
Я надеюсь, что эта запись в блоге была полезна для обзора прогнозирования временных рядов и того, как его можно реализовать в Python. Если у вас есть дополнительные вопросы или комментарии, пожалуйста, не стесняйтесь спрашивать!