Модели предсказания временных рядов

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

Что такое модель предсказания временного ряда?

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

Ключевые свойства модели

  • «Точность» – насколько предсказания близки к реальным значениям.
  • «Обобщающая способность» – как хорошо модель работает на новых данных.
  • «Интерпретируемость» – степень понимания человеком того, как модель принимает решения.
  • «Скорость обучения и предсказания» – важна для реального времени.

Шаги построения модели

  1. Сбор и подготовка данных – очистка от пропусков, дубликаций, аномалий; приведение к единому масштабу.
  2. Анализ и визуализация – графики, автокорреляционные функции (ACF), частотные спектры.
  3. Проверка стационарности – тесты Дики-Фуллера, KPSS; при необходимости дифференцирование.
  4. Выбор модели – ARIMA, SARIMA, экспоненциальное сглаживание, нейронные сети, трансформеры.
  5. Оптимизация параметров – перебор, автопараметризация (auto_arima), кросс‑валидация.
  6. Обучение модели – оценка коэффициентов, обучение нейронных сетей.
  7. Оценка качества – метрики (MAE, RMSE, MAPE) и визуальная проверка.
  8. Прогнозирование – получение точек и доверительных интервалов.
  9. Постоянный мониторинг – переобучение, адаптация под новые данные.

Популярные модели и их особенности

3.1 ARIMA и SARIMA

ARIMA(p,d,q) – авторегрессионная интегрированная скользящая средняя модель. Пример: ARIMA(2,1,1) предполагает два лаговых значения, одно дифференцирование и один порядок скользящей средней.

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

3.2 Экспоненциальное сглаживание (Holt–Winters)

Модели SimpleExpSmoothing, ExponentialSmoothing с уровнем, трендом и сезонностью. Отлично подходят для рыночных и сезонных данных.

3.3 Нейронные сети

Нейронные сети (MLP, LSTM, GRU) позволяют захватывать сложные нелинейные зависимости. Они часто применяются в сочетании с традиционными моделями (híbridos).

3.4 Трансформеры

Модели на основе трансформеров (Informer, Autoformer) используют механизм внимания для высокоточной прогнозирования на больших временных горизонтах.

Оценка и валидация

Для оценки модели применяются различные стратегии кросс‑валидации.

4.1 Скользящее окно (Rolling Forecast Origin)

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

4.2 Расширяющее окно (Expanding Window)

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

4.3 Метрики оценки

  • MAE – средняя абсолютная ошибка.
  • RMSE – среднеквадратичная ошибка.
  • MAPE – средний абсолютный процент ошибки.
  • SMAPE – симметричный MAPE.

Практический пример на Python

Ниже приведён минимальный пример прогнозирования с использованием statsmodels и pmdarima для модели ARIMA, а также простого экспоненциального сглаживания.

# Устанавливаем зависимости

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.arima.model import ARIMA
import pmdarima as pm


rng = pd.date_range('2015-01-01', periods=120, freq='M')
data = pd.Series(100 + np.sin(np.linspace(0, 20, 120)) * 20 + np.random.randn(120)*5, index=rng)

from statsmodels.tsa.stattools import adfuller
adf_result = adfuller(data)
print(f"ADF p-value: {adf_result[1]}")

model_auto = pm.auto_arima(data, seasonal=True, m=12, stepwise=True, suppress_warnings=True)
print(model_auto.summary)

model = ARIMA(data, order=model_auto.order)
results = model.fit
print(results.summary)

forecast = results.get_forecast(steps=12)
mean_forecast = forecast.predicted_mean
conf_int = forecast.conf_int

plt.figure(figsize=(12,6))
plt.plot(data, label='История')
plt.plot(mean_forecast, label='Прогноз', color='red')
plt.fill_between(mean_forecast.index, conf_int.iloc[:,0], conf_int.iloc[:,1], color='pink', alpha=0.3)
plt.legend
plt.title('Прогноз ARIMA(2,1,1) на 12 месяцев')
plt.show

Экспоненциальное сглаживание

from statsmodels.tsa.holtwinters import ExponentialSmoothing

model_es = ExponentialSmoothing(data, seasonal='add', seasonal_periods=12).fit
forecast_es = model_es.forecast(12)
plt.figure(figsize=(12,6))
plt.plot(data, label='История')
plt.plot(forecast_es, label='ES Прогноз', color='green')
plt.legend
plt.title('Прогноз SimpleExpSmoothing')
plt.show

Список ключевых терминов

Стационарность
Свойство временного ряда, при котором статистические характеристики (среднее, дисперсия) не меняются во времени.
Дифференцирование
Процесс вычисления разницы между последовательными наблюдениями для достижения стационарности.
ARIMA
Модель авторегрессии–интегрированной–скользящей средней, описывающая линейные зависимости в данных.
Holt–Winters
Метод экспоненциального сглаживания с уровнем, трендом и сезонностью.
Трансформер
Архитектура нейронной сети, использующая механизм внимания для обработки последовательностей.
Кросс‑валидация
Метод оценки модели, при котором данные разделяются на обучающую и тестовую части, часто с использованием скользящего окна.
MAE, RMSE, MAPE
Метрики ошибки, измеряющие отклонение предсказания от реальных значений.

Практические рекомендации

  • Никогда не «переобучайте» модель на небольшом объёме данных – используйте кросс‑валидацию.
  • Проверяйте стационарность до применения ARIMA; иначе результаты будут бессмысленны.
  • Для сезонных данных используйте модели с сезонным компонентом (SARIMA, ExponentialSmoothing).
  • Нейронные сети и трансформеры требуют большого объёма данных и тщательной настройки гиперпараметров.
  • Интегрируйте прогнозы в бизнес‑процессы через dashboards (Power BI, Tableau) или API.
  • Регулярно переобучайте модели, особенно в быстро меняющихся средах.

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

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