В последние годы прогнозирование (prediction) стало одной из ключевых задач в аналитике данных и машинном обучении․ Благодаря широкому набору open‑source библиотек Python можно быстро построить модели, способные предсказывать будущие значения как простых временных рядов, так и сложных многомерных наборов данных․
Что такое предсказание данных?
Под предсказанием (forecasting) понимается процесс построения модели, которая на основе исторических наблюдений умеет оценить будущие значения целевой переменной․ Задачи могут быть различными:
- Прогнозирование спроса на товары;
- Оценка финансовых индексов и валютных курсов;
- Предсказание отказов оборудования;
- Прогнозирование нагрузки на серверы;
- Анализ пользовательского поведения и др․
Классификация подходов к предсказанию
2․1 Статистические модели
Классические методы, такие как ARIMA, SARIMA, Exponential Smoothing, основаны на предположении о стационарности ряда и линейных зависимостях․
2․2 Методы машинного обучения
Регрессионные модели (Linear Regression, Ridge, Lasso), деревья решений (Random Forest, Gradient Boosting), а также бустинговые библиотеки (XGBoost, LightGBM, CatBoost) часто дают более гибкие решения, особенно при наличии множества признаков․
2․3 Глубокое обучение
Для нелинейных и длительных зависимостей используют рекуррентные сети (LSTM, GRU) и трансформеры (Informer, Temporal Fusion Transformer)․ Они способны захватывать сложные паттерны в длинных последовательностях․
Популярные Python‑библиотеки для предсказания
| Библиотека | Тип моделей | Ключевые возможности |
|---|---|---|
| pandas | Предобработка, работа с временными метками | Идеальная основа для построения датасетов, resampling, rolling‑window․ |
| statsmodels | ARIMA, SARIMA, VAR, Exponential Smoothing | Классический статистический пакет, удобный API для тестов стационарности․ |
| Prophet (Facebook) | Аддитивные модели с сезонностями | Прост в использовании, автоматически учитывает годовую, недельную, ежедневную сезонность․ |
| scikit‑learn | Регрессия, деревья, ансамбли | Базовый набор алгоритмов, кросс‑валидация, pipelines․ |
| XGBoost / LightGBM / CatBoost | Градиентный бустинг | Высокая точность, работа с категориальными признаками (CatBoost)․ |
| TensorFlow / Keras | LSTM, GRU, CNN, трансформеры | Гибкость построения нейронных сетей, GPU‑ускорение․ |
| PyTorch | LSTM, Transformer, DeepAR | Исследовательская платформа, динамический граф․ |
| Kats (Facebook) | ARIMA, Prophet, LSTM, Detect Anomalies | Единый интерфейс для нескольких методов, автоматический поиск гиперпараметров․ |
| Merlion | Time‑Series Forecasting, Anomaly Detection | Поддержка мультивариантных рядов, готовые пайплайны․ |
| Skforecast | Обёртка над sklearn, LightGBM, XGBoost и др․ | Упрощённый процесс создания скользящих окон и рекуррентных прогнозов․ |
Практические примеры
4․1 Прогнозирование с помощью ARIMA (statsmodels)
Пример из интернета: ARIMA(2, 1, 1) – авторегрессия порядка 2, один раз дифференцированный ряд, скользящая средняя первого порядка․
import pandas as pd
import numpy as np
import statsmodels․api as sm
import matplotlib․pyplot as plt
df = pd․read_csv('cpi․csv', parse_dates=['date'], index_col='date')
y = df['value']
y_diff = y․diff․dropna
model = sm․tsa․ARIMA(y, order=(2, 1, 1))
result = model․fit
print(result․summary)
forecast = result․get_forecast(steps=12)
conf_int = forecast․conf_int
plt․figure(figsize=(10,4))
plt․plot(y, label='История')
forecast․predicted_mean․plot(label='Прогноз', color='r')
plt․fill_between(conf_int․index,
conf_int․iloc[:,0],
conf_int․iloc[:,1], color='pink', alpha=0․3)
plt․legend
plt․title('ARIMA(2,1,1) – прогноз CPI')
plt․show
4;2 Прогнозирование с помощью Prophet
Prophet удобен, когда в данных присутствует ярко выраженная сезонность (годовая, недельная, дневная)․
from prophet import Prophet
import pandas as pd
import matplotlib․pyplot as plt
df = pd․read_csv('ua_h_usd․csv')
df․rename(columns={'date':'ds', 'rate':'y'}, inplace=True)
m = Prophet(
yearly_seasonality=True,
weekly_seasonality=True,
daily_seasonality=False,
seasonality_mode='additive' # или 'multiplicative'
)
m․fit(df)
future = m․make_future_dataframe(periods=180)
forecast = m․predict(future)
fig1 = m․plot(forecast)
plt․title('Прогноз курса UAH/USD (Prophet)')
plt․show
fig2 = m․plot_components(forecast)
plt․show
4․3 Прогнозирование с помощью LSTM (Keras)
Для нелинейных зависимостей и длинных историй полезны рекуррентные сети․
import numpy as np
import pandas as pd
import tensorflow as tf
from tensorflow․keras․models import Sequential
from tensorflow․keras․layers import LSTM, Dense
from sklearn․preprocessing import MinMaxScaler
import matplotlib․pyplot as plt
df = pd․read_csv('sales․csv', parse_dates=['date'], index_col='date')
values = df['sales']․values․reshape(-1,1)
scaler = MinMaxScaler
scaled = scaler․fit_transform(values)
def create_dataset(data, window=30):
X, y = [], []
for i in range(len(data)-window):
X․append(data[i:i+window])
y․append(data[i+window])
return np․array(X), np․array(y)
window = 30
X, y = create_dataset(scaled, window)
split = int(0․8*len(X))
X_train, X_test = X[:split], X[split:]
y_train, y_test = y[:split], y[split:]
model = Sequential([
LSTM(64, activation='tanh', input_shape=(window,1)),
Dense(1)
])
model․compile(optimizer='adam', loss='mse')
model․fit(X_train, y_train, epochs=30, batch_size=32, validation_split=0;1)
pred_scaled = model․predict(X_test)
pred = scaler․inverse_transform(pred_scaled)
y_true = scaler․inverse_transform(y_test)
plt․figure(figsize=(12,4))
plt․plot(y_true, label='Истинные продажи')
plt․plot(pred, label='Прогноз LSTM')
plt․legend
plt․title('Продажи: LSTM‑прогноз')
plt․show
4․4 Быстрый старт с Skforecast
Skforecast позволяет использовать любые модели scikit‑learn в качестве «базовых» регрессоров и автоматически формировать скользящие окна․
from skforecast․ForecasterAutoreg import ForecasterAutoreg
from sklearn․ensemble import RandomForestRegressor
import pandas as pd
import numpy as np
import matplotlib․pyplot as plt
df = pd․read_csv('energy_consumption․csv', parse_dates=['date'], index_col='date')
y = df['consumption']
regressor = RandomForestRegressor(n_estimators=200, random_state=42)
forecaster = ForecasterAutoreg(
regressor = regressor,
lags = 24, # использовать 24 последних часа
transformer_y = None
)
forecaster․fit(y=y)
pred = forecaster․predict(steps=48)
plt․figure(figsize=(10,4))
y․plot(label='История')
pred․plot(label='Прогноз', color='red')
plt․legend
plt․title('Прогноз потребления энергии (Skforecast + RandomForest)')
plt․show
Как выбрать модель?
- Анализ данных․ Посмотрите на автокорреляцию (ACF/PACF), наличие тренда и сезонности․ Если ряд явно сезонный – рассмотрите Prophet или SARIMA․
- Объём и частота․ Для небольших наборов (до нескольких тысяч точек) часто хватает ARIMA/Prophet․ При больших объёмах и множестве признаков лучше использовать градиентный бустинг или LSTM․
- Требования к интерпретируемости․ Статистические модели дают понятные коэффициенты, в то время как нейросети – «чёрный ящик»․ Если нужен бизнес‑отчет, предпочтение ARIMA/Prophet․
- Вычислительные ресурсы․ LSTM и трансформеры требуют GPU и более длительного обучения․
- Наличие мультивариантных рядов․ Для нескольких связанных временных рядов удобно использовать Merlion или Kats, которые умеют работать с корреляциями между рядами․
Лучшие практики
- Разделяйте данные по времени․ Тестовый набор должен идти после тренировочного (time‑based split)․
- Проверяйте стационарность․ Тест Дики–Фуллера, KPSS – помогут понять, нужен ли дифференцирование․
- Контролируйте переобучение․ Используйте кросс‑валидацию «скользящее окно» (TimeSeriesSplit)․
- Оценивайте качество метриками․ MAE, RMSE, MAPE – выбирайте в зависимости от бизнес‑требований․
- Автоматизируйте подбор гиперпараметров․ Библиотеки optuna, gridsearchCV (sklearn) или встроенный поиск в Prophet помогут найти оптимальные параметры․
- Визуализируйте остатки․ Если остатки не белый шум – модель недостаточно хороша․
Python предлагает полный стек инструментов для предсказания данных – от простых статистических моделей (ARIMA, Exponential Smoothing) до мощных нейронных сетей (LSTM, Transformers) и гибридных решений (Prophet, Kats, Merlion)․ Выбор подхода зависит от структуры вашего ряда, объёма данных и требований к интерпретируемости․
Ниже приведена короткая чек‑лист‑таблица, которая поможет быстро определиться с инструментом:
| Сценарий | Рекомендуемая библиотека | Ключевая модель |
|---|---|---|
| Явная сезонность, небольшие данные | Prophet | Ad‑ditive (или multiplicative) model |
| Требуется строгий статистический анализ | statsmodels | ARIMA / SARIMA / VAR |
| Много признаков, требуется высокая точность | scikit‑learn / XGBoost / LightGBM / CatBoost | Gradient Boosting Regressor |
| Длинные нелинейные зависимости | TensorFlow‑Keras / PyTorch | LSTM / GRU / Transformer |
| Мультивариантные временные ряды | Merlion / Kats / Skforecast | Multivariate ARIMA, DeepAR, etc․ |
С помощью этих инструментов любой аналитик или data‑scientist может построить надёжную систему предсказания, адаптировать её под конкретный бизнес‑кейс и внедрить в продакшн․
Дата генерации статьи: 2026‑04‑27 09:48:46