Возможно, вы имели дело с прогнозной моделью, задача которой - прогнозировать будущую стоимость на основе исторических данных. Подготовить входные и выходные пары с учетом данных временного ряда утомительно. Недавно я наткнулся на встроенную в Keras утилиту TimeseriesGenerator, которая делает именно то, что я хочу.

В следующей демонстрации вы узнаете, как применить его к вашему набору данных.

Исходный код доступен в моем репозитории GitHub.

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

Вместо использования абсолютного значения индекса DJI, которое увеличилось на 60% за последние несколько лет, мы будем использовать значение дневного изменения в качестве данных временного ряда. Поскольку набор данных_DJI представляет собой абсолютный индекс DJI, значения дневного изменения могут быть вычислены с помощью

dataset = dataset_DJI[1:]- dataset_DJI[:-1]

Мы можем дополнительно нормализовать все значения и разделить их на наборы данных для поездов / тестов.

Прогнозирование одного временного ряда

Вы знаете о RNN, или, точнее, о сети LSTM, которая фиксирует шаблоны временных рядов, мы можем построить такую ​​модель, в которой входными данными являются значения изменений за последние три дня, а выходными данными являются значения изменения текущего дня. Число три - это длина ретроспективного обзора, которую можно настроить для различных наборов данных и задач. Проще говоря, значение дня T предсказывается днями T-3, T-2 и T-1. Но как мы можем построить пары ввода / вывода для обучения и тестирования для модели? TimeseriesGenerator Кераса упрощает нашу жизнь, удаляя шаблонный код, который мы использовали для выполнения этого шага.

Давайте создадим два генератора временных рядов: один для обучения, а другой - для тестирования. Мы используем частоту дискретизации как единицу, так как мы не хотим пропускать какие-либо образцы в наборах данных.

После того, как простая модель Keras появится на месте, мы можем запустить процесс обучения.

После обучения можно сделать оценку и окончательный прогноз таким же образом.

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

Множественные временные ряды в качестве входных данных

Вы могли заметить, что аргументы «данные» и «цели» всех предыдущих TimeseriesGenerator совпадают, что означает, что все входные и выходные данные относятся к одному и тому же временному ряду. Что, если в реальной жизни сегодняшняя цена закрытия DJI может зависеть от предыдущих курсов акций некоторых крупных фирм, таких как Apple и Amazon? Мы также хотим включить эти значения дневного изменения запасов во входные данные модели. Для этого вы можете сначала объединить все три временных ряда, чтобы создать массив numpy в форме (T, 3), а затем передать предварительно обработанный результат в аргумент «данные» TimeseriesGenerator.

Наконец, не забудьте изменить форму ввода модели, чтобы она соответствовала форме ввода (None, look_back, 3).

Заключение

В этом кратком руководстве показано, как использовать Keras 'TimeseriesGenerator для облегчения работы при работе с задачами прогнозирования временных рядов. Это позволяет вам применять одинаковые или разные временные ряды в качестве входных и выходных данных для обучения модели. Исходный код доступен в моем репозитории GitHub.

Первоначально опубликовано на www.dlology.com.