Вопрос или проблема
Я работаю над прогнозированием многомерного временного ряда, используя несколько алгоритмов машинного обучения (нейронные сети, метод опорных векторов и алгоритмы градиентного бустинга). Мне нужно измерить производительность каждой модели.
Я реализовал первую модель с использованием Tensorflow 2.0. Данные для обучения и тестирования были созданы с помощью API tf.Dataset
.
Формат данных – (window_data, forecast)
, где window_data
представляет собой набор из 24 временных шагов, а forecast
– следующий временной шаг.
Теперь мне нужно обучить вторую и третью модель с использованием SVR (точнее, LinearSVR) и LightGBM.
Возможно ли подавать модели данные в оконном формате, как в моей первой модели?
Tensorflow предназначен для того, чтобы действительно облегчить вам жизнь (особенно с новыми замечательными дополнениями в версии 2.0). Я думаю, вам стоит использовать pandas для генерации скользящих окон: я бы предположил, что для временного ряда размером N с окном обратного просмотра K вы получите N-K+1 примеров, скользя по окну обратного просмотра.
И пока вы этим занимаетесь, рассматривали ли вы ваше окно обратного просмотра как гиперпараметр? То есть оптимизировали ли вы производительность вашей модели на валидационном тесте, ищя лучшее окно обратного просмотра?
Ответ или решение
Для реализации временного ряда с использованием подхода скользящего окна (sliding window) и алгоритмов Machine Learning, таких как LinearSVR и LightGBM, необходимо применить методику, аналогичную той, что использовалась в вашей первой модели на TensorFlow. Давайте разберем этот подход более подробно.
1. Подготовка данных
Перед тем как начать, важно понять, что временные ряды представляют собой последовательные данные, где каждая запись зависит от предыдущих значений. Использование скользящего окна позволяет создать набор обучающих примеров, где каждый пример включает последовательность входных данных с заранее определённым размером окна (lookback) и соответствующую метку (в данном случае — это значение следующего временного шага).
Формат данных:
- window_data: набор из
n
временных шагов (например, 24). - forecast: значение, которое нужно предсказать (значение на следующем шаге после скользящего окна).
Если у вас есть временной ряд длиной N
и размер окна K
, вы получите N - K + 1
примеров, что позволяет эффективно структурировать ваши данные для обучения модели.
2. Использование Pandas для генерации скользящего окна
Рекомендуется использовать библиотеку Pandas, так как она предоставляет мощный и удобный функционал для работы с данными. Вы можете воспользоваться функцией rolling()
совместно с другими методами для создания нового DataFrame, который будет содержать ваши окна и метки.
Пример кода на Python с использованием Pandas:
import pandas as pd
# Предположим, что df - ваш DataFrame с временным рядом
df['target'] = df['value'].shift(-1)
# Генерация скользящих окон
def create_sliding_windows(data, window_size):
X, y = [], []
for i in range(len(data) - window_size):
X.append(data[i:(i + window_size)])
y.append(data[i + window_size])
return np.array(X), np.array(y)
window_size = 24 # Например, 24 часовых таймстепа
X, y = create_sliding_windows(df['value'].values, window_size)
3. Обучение моделей
Теперь, когда ваши данные подготовлены, вы можете обучить LinearSVR и LightGBM. Оба метода могут работать с многомерными данными и принимают массивы как входящие данные.
Обучение LinearSVR:
from sklearn.svm import LinearSVR
model_svr = LinearSVR()
model_svr.fit(X, y)
Обучение LightGBM:
import lightgbm as lgb
model_lgb = lgb.LGBMRegressor()
model_lgb.fit(X, y)
4. Оценка производительности
Чтобы оценить производительность моделей, вы можете использовать стандартные метрики, такие как RMSE (корень из среднеквадратичной ошибки) или MAE (средняя абсолютная ошибка). Разделите данные на обучающую и тестовую выборки, а затем выполните предсказания и выведите показатели эффективности.
5. Подбор гиперпараметров
Не забывайте, что размер окна K
можно рассматривать как гиперпараметр. Включение процесса подбора гиперпараметров может значительно улучшить качество модели. Используйте технику, такую как Grid Search или Random Search из библиотеки scikit-learn
.
Заключение
Использование подхода скользящего окна с LinearSVR и LightGBM является весьма эффективным для прогнозирования временных рядов. С помощью Pandas создание таких наборов данных становится простым и удобным. Не упускайте возможность оптимизировать модели, используя гиперпараметры, и не забывайте о важности проверки производительности моделей на тестовых данных для обеспечения их надежности.
Ваша работа по прогнозированию временных рядов будет более успешной, если вы будете следовать этим рекомендациям и учитывать уникальные особенности каждого из алгоритмов.