Вопрос или проблема
У меня есть данные по дневным временным рядам продуктов, потребляемым в отеле. У меня есть 30 временных рядов потребления продуктов (целевая переменная) и множество объясняющих переменных для каждого продукта, связанных с отелем (заполненность номеров, демография клиентов…) и данные о погоде. Временной диапазон составляет около 2 лет. Датасет выглядит следующим образом:
Продукт Отель Погода Цель
------------------- ---------------------------------------- -------------- ----------
product_id cat_prod rooms_filled_ratio guest_age_gap_ratio1 ... Дождь min_temp ... Потребление
2025-01-01 001 A 0.25 0.9 0 20 10
2025-01-02 001 A 0.33 0.8 25 16 26
2025-01-02 002 B 0.33 0.8 25 16 56
2025-01-03 001 A 0.72 0.71 3 18 20
2025-01-03 002 B 0.72 0.71 3 18 19
2025-01-03 003 A 0.72 0.71 3 18 18
Я исследовал данные и сделал некоторые выводы:
- Поля ПОГОДА и ОТЕЛЬ влияют на целевую переменную
- Каждый временной ряд продуктов имеет определенный авторегрессионный характер (до 2 лагов)
- Потребление некоторых продуктов коррелировано по одной и той же дате (т.е. каждый временной ряд влияет друг на друга)
Мне нужно предсказать потребление(t + 1) для каждого из продуктов.
Я видел некоторые подходы архитектур RNN для прогнозирования временных рядов (этот), в этом случае используя только временные ряды, без объясняющих данных. Я знаю, что это тривиально расширить этот подход, добавив объясняющие переменные так же, как при использовании нескольких временных шагов.
Однако, что я не могу понять, так это как включить более одного продуктового ряда в сеть. Я мог бы обучить одну модель на продукт, однако я бы упустил связь между продуктами.
Есть идеи?
Ответ или решение
Конечно, задачу предсказания многомерных временных рядов с использованием RNN (рекуррентных нейронных сетей) или LSTM (долговременной кратковременной памяти) можно решать с учетом предоставленных данных и особенностей. Рассмотрим решение этой задачи по методике TEA (Theory, Example, Application), где мы начнем с теоретического обоснования, приведем примеры и завершим практическим применением предложенной методологии.
Теория
Рекуррентные нейронные сети и LSTM
Рекуррентные нейронные сети (RNN) и их эффективные модификации, такие как Long Short-Term Memory (LSTM) и Gated Recurrent Units (GRU), обычно применяются для обработки данных, которые имеют временную динамику. Эти модели специально разработаны для работы с последовательностями, где важен сохранение информации о предыдущих состояниях.
LSTM особенно интересны, когда имеются длинные зависимости в данных, то есть когда необходимо учитывать информацию, приходящую из предыдущих временных шагов для предсказания нынешнего состояния. В случае многомерных временных рядов, таких как ваши данные с гостиничным потреблением, LSTM может быть адаптирован для анализа временных зависимостей как внутри отдельных стационарных рядов (авторегрессия), так и между разными продуктами на одном шаге времени.
Предусмотрение зависимостей между разными временными рядами
Ваша задача требует учета зависимости, не только временных взаимосвязей в пределах одного ряда, но и взаимосвязей между рядами. Это можно эффективно сделать, если использовать многомерную архитектуру сети. В этом подходе входные данные представляются как матрица, где одна ость соответствует времени, а другая измеряет различные мульти-дименсиональные атрибуты, такие как характеристики гостиницы, погода и различие продуктов.
Пример
В качестве размышления стоит обратить внимание на подход, использующий сети типа "многие ко многим" (Many-To-Many). В этих сетях каждый элемент времени одной последовательности соотносится с несколькими объектами (в данном случае, различными продуктами).
Пример архитектуры
- Входной слой (Input Layer): Данные поступают в виде временных секвенций с несколькими признаками, включая идентификатор продукта, погодные данные, данные гостиницы и фактическое потребление из предыдущих дней.
- Скрытые слои (Hidden Layers): Многослойная LSTM сеть может быть использована для анализа данных. Первый скрытый слой может извлекать внутренние временные паттерны одного ряда, а последующие могут обучаться соотношениям между изделиями.
- Выходной слой (Output Layer): Выходной слой формирует сигналы о будущем потреблении каждого продукта по аналогии с входными временными рядами.
Применение
Подготовка данных
Начните с предобработки данных. Необходимо нормализовать или стандартизировать их, чтобы избежать избыточного веса конкретной переменной в модели. Кодирование категориальных признаков, таких как идентификатор продукта и категории, также повысит эффективность модели.
Создание и обучение модели
Ваш набор данных нужно разделить на тренировочные и тестовые выборки, чтобы избежать переобучения модели.
from keras.models import Sequential
from keras.layers import LSTM, Dense, Dropout, BatchNormalization
from keras.optimizers import Adam
input_shape = (timesteps, num_features)
model = Sequential()
model.add(LSTM(128, return_sequences=True, input_shape=input_shape))
model.add(Dropout(0.2))
model.add(BatchNormalization())
model.add(LSTM(64, return_sequences=True))
model.add(Dropout(0.1))
model.add(BatchNormalization())
model.add(LSTM(32, return_sequences=False))
model.add(Dropout(0.1))
model.add(Dense(30, activation='linear')) # количество продуктов
model.compile(optimizer=Adam(), loss='mean_squared_error')
# обучение модели
model.fit(X_train, y_train, epochs=50, validation_split=0.2)
Проверка и тестирование модели
Убедитесь, что вы проверяете производительность модели на тестовой выборке и регулируйте гиперпараметры, такие как количество нейронов и слоев, в зависимости от результатов.
Множественный доступ ко временным и продуктовым изменениям
Один из способов эффективно интегрировать временные ряды различных продуктов заключается в создании перекрестных сетей для изучения межпродуктовых взаимосвязей. Применяя подобные модели, вы можете учитывать не только временную динамику, но и когерентность потребления продуктов.
Описанная стратегия позволит вам не только учесть временные изменения одного продукта, но и взаимосвязи между разными продуктами и дополнительными признаками. Это высветит скрытые факторы, влияющие на тенденции потребления, и позволит более точно предсказывать будущие значкения.