Как вводить будущий последовательный ввод для многошаговых прогнозов временных рядов в сетях LSTM

#tensorflow #keras #time-series #lstm #forecasting

#tensorflow #keras #временные ряды #lstm #прогнозирование

Вопрос:

Я пытаюсь делать многоэтапные (т. Е. Последовательные) Прогнозы продаж продуктов, используя как (многомерные) последовательные, так и непоследовательные входные данные.

В частности, я использую цифры продаж, а также некоторые другие последовательные входные данные (например, цена, за день до праздника и т. Д.) За последние n дней, Чтобы предсказать продажи на будущие m дней. Кроме того, у меня есть некоторые непоследовательные функции, характеризующие сам продукт.

Определения:

  • n_seq_features <- количество последовательных функций (в многомерном временном ряду), включая продажи
  • n_non_seq_features <- количество непоследовательных функций, характеризующих продукт

Я дошел до построения гибридной модели, где сначала последовательный ввод передается через некоторые уровни LSTM. Выходные данные конечного слоя LSTM затем объединяются с непоследовательными объектами и подаются в некоторые плотные слои.

Однако я не могу понять, как вводить будущий последовательный ввод (все, кроме данных о продажах за следующие m дней) таким образом, Чтобы эффективно использовать последовательную информацию (т. Е. Причинно-следственную связь и т. Д.). Для m = 1 я могу просто ввести последовательные данные за этот день вместе с непоследовательным вводом после слоев LSTM, однако, как только m становится больше 1, это, по-видимому, пустая трата причинно-следственной информации.

Единственными способами, о которых я мог думать, были:

  • чтобы включить последовательную информацию для будущих m дней в качестве объектов во ввод LSTM, раздув форму ввода от (…, n, n_seq_features) до (…, n, n_seq_features m *(n_seq_features-1))
  • добавьте отдельную ветвь LSTM, обрабатывающую будущие данные, выходные данные которых затем «каким-то образом» передаются в плотные слои на последнем этапе модели

Я только начал использовать сети LSTM некоторое время назад, поэтому, к сожалению, у меня ограниченная интуиция относительно того, как их лучше всего использовать (особенно в гибридных подходах). По этой причине я хотел бы спросить:

  1. Полезен ли общий подход к вводу последовательного и непоследовательного ввода на разных этапах одной и той же модели (т. Е. Обучаемой Одновременно) или лучше разделить ее на отдельные модели, которые можно обучать независимо для более детального контроля?
  2. Как будущий последовательный ввод вводится в сеть LSTM для сохранения причинно-следственной информации? Может ли это быть достигнуто с помощью высокоуровневого интерфейса, такого как KERAS, или для этого требуется очень глубокое погружение в серверную часть tensorflow?
  3. Сети LSTM не подходят для решения этой конкретной проблемы в первую очередь?

Приветствия и заранее спасибо за любые советы, ресурсы или мысли по этому вопросу. 🙂

Ответ №1:

На случай, если у кого-то возникнет аналогичная проблема с будущими последовательными (или временными) данными, Оксфордский университет и Google Cloud AI разработали новую архитектуру для обработки всех трех типов входных данных (прошлых временных, будущих временных, а также статических).). Он называется Temporal Fusion Transformer и, по крайней мере, из чтения статьи, выглядит как аккуратный. Тем не менее, мне еще предстоит реализовать и протестировать его. Также доступно руководство по PyTorch.