Временные ряды и модели прогнозирования

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

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

Эти нестационарные входные данные (используемые в качестве входных данных для этих моделей) обычно называются временными рядами. Некоторые примеры временных рядов включают значения температуры с течением времени, цену акций с течением времени, цену дома с течением времени и т. д. Таким образом, входными данными является сигнал (временной ряд), который определяется последовательными во времени наблюдениями.

Модель LSTM

Долгая краткосрочная память (LSTM) - это архитектура искусственной рекуррентной нейронной сети (RNN), используемая в области глубокого обучения. В отличие от стандартных нейронных сетей с прямой связью, LSTM имеет обратную связь. Он может обрабатывать не только отдельные точки данных (например, изображения), но и целые последовательности данных (например, речь или видеовходы).

Модели LSTM могут хранить информацию в течение определенного периода времени.

Приступим к кодированию!

Мы собираемся построить многоуровневую рекуррентную нейронную сеть LSTM для предсказания последнего значения последовательности значений, т. Е. Цены акций AAPL в этот пример.

Необходимые модули: Keras, Tensorflow, Pandas, Scikit-Learn и Numpy

Давайте загрузим данные и проверим их:

Мы возьмем данные EOD AAPL за последние 20 лет, чем больше, тем лучше.

Я использую набор данных AAPL, который уже разделен на набор для обучения и набор тестов, но вы можете выполнить разделение с помощью простой команды!

training_set = df.iloc[:4780, 1:2].values
test_set = df.iloc[4780:, 1:2].values

Давайте визуализируем набор данных

Прогнозируемое целевое значение будет значением цены акции «Close». Отсюда следующее утверждение.

training_set = dataset_train.iloc[:, 1:2].values

Перед подгонкой модели рекомендуется нормализовать данные. Это повысит производительность.

Создание входной переменной

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

Теперь мы преобразовали данные в следующий формат (# значения, # временные шаги, # 1 размерный результат).

Теперь пора построить модель. Мы построим LSTM со 100 нейронами и 5 скрытыми слоями. Наконец, мы назначим 1 нейрон в выходном слое для прогнозирования нормализованной цены акций. Мы будем использовать функцию потерь MSE и оптимизатор стохастического градиентного спуска Adam.

Готовим тестовые данные и делаем прогнозы

Визуализация результатов

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

Заявление об ограничении ответственности Были попытки предсказать цены на акции с использованием алгоритмов анализа временных рядов, но они по-прежнему не могут использоваться для размещения ставок на реальном рынке. Это просто учебная статья, которая никоим образом не предназначена для того, чтобы «направить» людей на покупку акций.

До следующего раза!