Как использовать будущие праздничные/акционные дни в качестве входных данных для многомерного LSTM-прогнозирования продаж

Вопрос или проблема

Я строю прогноз с помощью LSTM в tensorflow 2.

Мои данные состоят из 7 колонок: дата (ежедневно), валовые продажи (целевая переменная), ежедневные общие запасы, средняя стоимость заказа, ежедневное количество новых клиентов, является ли это праздником (1/0), является ли это днем акции (1/0).

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

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

Это называется многомерным временным рядом. Необходим входной массив (обычно называемый X), в котором каждая временная точка является строкой, а каждая характеристика находится в другой колонке. Одна из колонок будет содержать булевы значения для кодирования акции/без акции для данной временной точки (обычно называемый вектором индикатора).

Для того чтобы сделать будущие прогнозы, будет вызван метод Model.predict() на новом массиве. Этот новый массив будет кодировать новые данные, включая колонку признаков акции/без акции.

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

Ответ или решение

Как использовать будущие праздничные и промо-дни в многомерном прогнозировании продаж с помощью LSTM

Введение

В современных условиях управления бизнесом успешное прогнозирование продаж является критически важным для эффективной работы компаний. Особенно это актуально для розничной торговли, где сезонные изменения и промоакции могут существенно влиять на объемы продаж. Одним из эффективных инструментов для этого является использование моделей на основе рекуррентных нейронных сетей, таких как LSTM (Long Short-Term Memory). В данном ответе мы рассмотрим, как включить информацию о будущих праздничных и промо-днях в многомерные прогнозы продаж с использованием LSTM в TensorFlow 2.

Подготовка данных

Для начала необходимо правильно подготовить данные. В вашем наборе данных есть семь колонок, включая целевую переменную (gross_sales) и факторы, которые могут повлиять на продажи. Важно отметить, что нам нужно создать матрицу входных данных (обычно обозначаемую как X), где каждая временная точка будет представлена одной строкой, а каждое свойство будет в отдельной колонке.

Структура данных

  1. date: Дата (ежедневные данные).
  2. gross_sales: Целевая переменная для предсказания.
  3. daily_total_inventory: Общее количество товара на складе.
  4. avg_daily_order_value: Средняя стоимость заказа за день.
  5. daily_total_new_customers: Общее количество новых клиентов за день.
  6. is_holiday: Индикатор праздника (1/0).
  7. is_promo_day: Индикатор промо-дня (1/0).

Учет будущих промо-дней

Для того чтобы интегрировать информацию о будущих промо-днях в вашу модель LSTM, вам необходимо заранее подготовить данные, которые будут использоваться для предсказания:

  1. Создайте новый набор данных, который будет содержать как исторические, так и будущие значения для переменных, включая is_promo_day.
  2. Заполните колонку is_promo_day значениями на основании вашего плана промо-мероприятий, чтобы модель знала, какие дни будут считаться промо-днями в будущем.

Формирование входных данных для LSTM

Следующий шаг заключается в формировании входного массива для LSTM:

  • Используйте функцию shift(), чтобы создать лаговые переменные. Например, для каждого дня в вашем прогнозируемом периоде создайте лаговые переменные для всех предыдущих дней (например, 7, 14, 30 дней назад).
  • Комбинируйте текущие значения с будущими индикаторами промо-мероприятий (например, если 3 дня спустя будет промо-день, установите это значение в соответствующую ячейку).
# Пример формирования X
X = []
for i in range(window_size, len(data)):
    X.append(data[i-window_size:i])
X = np.array(X)

Модель и обучение

После подготовки входных данных вы можете создать модель LSTM, используя TensorFlow:

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense, Dropout

model = Sequential()
model.add(LSTM(50, return_sequences=True, input_shape=(X.shape[1], X.shape[2])))
model.add(Dropout(0.2))
model.add(LSTM(50))
model.add(Dropout(0.2))
model.add(Dense(1))

model.compile(optimizer='adam', loss='mean_squared_error')
model.fit(X, y, epochs=50, batch_size=32)

Прогнозирование

Для прогноза вы будете использовать метод Model.predict(), давая на вход новую подготовленную матрицу данных, которая включает в себя будущие промо-дни:

predictions = model.predict(X_future)

Альтернатива

Хотя использование LSTM может быть эффективным, я бы также рекомендовал рассмотреть использование библиотеки Prophet от Facebook, так как она предоставляет инструменты для учета праздников и промо-дней, что может упростить процесс прогнозирования.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...