Временные ряды и модели прогнозирования
Традиционно большинство моделей машинного обучения (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.
Готовим тестовые данные и делаем прогнозы
Визуализация результатов
Мы ясно видим, что наша модель работает очень хорошо. Он способен точно проследить за большинством неожиданных скачков / падений, однако для самых последних отметок даты мы можем видеть, что модель ожидала (предсказывала) более низкие значения по сравнению с реальными значениями цены акции.
Заявление об ограничении ответственности Были попытки предсказать цены на акции с использованием алгоритмов анализа временных рядов, но они по-прежнему не могут использоваться для размещения ставок на реальном рынке. Это просто учебная статья, которая никоим образом не предназначена для того, чтобы «направить» людей на покупку акций.
До следующего раза!