Пример исследования одноэтапной реализации модели прогноза временных рядов с использованием RNN-LSTM.
В этой статье мы рассмотрим концепцию временных рядов, но добавим в нее некоторое машинное обучение. Я обещаю, что в конце этого чтения вы почувствуете больше интереса к машинному обучению и к тому, как вы можете применять прогнозирование временных рядов с любой моделью нейронной сети, и кто знает? возможно, вы станете следующим волком с Уолл-стрит, предсказывая цены на акции, ETF, обмен валюты и многое другое.
Если вы новичок в машинном обучении, не стесняйтесь читать некоторые из моих предыдущих статей, где я всесторонне объясняю некоторые сложные темы таким образом, чтобы вы могли понять, не чувствуя разочарования.
Основы
Временной ряд — это упорядоченная последовательность значений переменной через равные промежутки времени. Применение временных рядов в настоящее время широко распространено, но в основном эти модели направлены на получение понимания основных сил и структуры, которые привели к получению наблюдаемых данных, и подгонку модели, а также переход к прогнозированию, мониторингу или даже управлению с обратной связью и упреждением.
Анализ временных рядов учитывает тот факт, что точки данных, взятые с течением времени, могут иметь внутреннюю структуру (например, автокорреляцию, тенденцию или сезонные колебания), которую необходимо учитывать.
Контекст
Определив концепцию временных рядов, пришло время посмотреть, какие из этих моделей приложений машинного обучения могут подойти для улучшения прогнозирования временных рядов. Одно из основных преимуществ применения методов нейронных сетей к реальным задачам заключается в том, что мы можем создать модель, которую можно обучать самостоятельно, а не ограничивать определенным диапазоном данных. Другими словами, наша модель может получать столько параметров, сколько мы хотим, пока наши вычислительные затраты могут поддерживаться машиной.
Еще одно преимущество использования нейронных сетей во временных рядах заключается в том, что входные данные хранятся в собственной сети, а не в базе данных, поэтому потеря данных не пострадает. Наиболее распространенными нейронными сетями, которые могут реализовать прогнозирование временных рядов, являются сверточные нейронные сети, глубокие нейронные сети и рекуррентные нейронные сети.
Еще один особый аспект при работе с ИНС (искусственными нейронными сетями) заключается в том, что при прогнозировании модель может быть обучена методу, называемому одной функцией, в котором режим будет выполнять обучение и прогнозирование одной переменной по сравнению с несколькими переменными. Эта оценка «один ко многим» является первым шагом при реализации ИНС для временных рядов. Если вы хотите перевести модель на другой шаг, другой метод выполняет прогнозирование в несколько шагов.
Многоэтапное прогнозирование с помощью ИНС может выполнять однократное прогнозирование всех параметров одновременно. Например, в прогнозе для логистической компании модель предназначена для прогнозирования корреляции нескольких переменных, например. предложение, спрос, запасы, производство одновременно и между ними. Это может показаться ненужным или бессвязным, но в зависимости от проблемы, которую необходимо решить, прогнозирование времени с помощью ИНС с использованием нескольких шагов может дать конкретную информацию, которую может предоставить традиционная модель, и даже больше, она может делать один прогноз за раз и возвращать результат обратно. к модели.
Проблема
Биткойн окружен тайной о том, кто создал эту цифровую валюту; Кроме того, это очень нестабильный актив, и некоторые правительства до сих пор отрицают использование этой валюты в своей модели децентрализации торговли. Тем не менее, ажиотаж и тот же факт децентрализованной валюты поддерживали эту цифровую валюту, и теперь банки инвестируют в нее и начали использовать ее для предоставления услуг, связанных с биткойнами.
В 2018 году Биткойн достиг пика цены транзакции, и многие люди начали видеть способ узнать больше о тенденции этой валюты, чтобы инвестировать и получать большую прибыль от этих инвестиций. Мы собираемся использовать набор данных из coinbase.com исторических данных по минутам транзакции биткойн BTC в долларах США с 2017 по 2020 год. Исходя из этого, мы собираемся использовать ИНС для прогнозирования на основе последних 24 часов. цена закрытия следующего часа BTC.
EDA и инженерия данных
Набор данных из coinbase содержит около 1 485 982 миллионов записей, распределенных по цене открытия, цене закрытия, высокому и низкому объему в BTC, объему в долларах США, взвешенной цене и времени транзакции в одну минуту. Это много данных, и нам нужно сначала изучить эти данные, чтобы собрать как можно больше точной информации о данных.
При выполнении этого EDA (анализа разведочных данных) было обнаружено много значений NaN, но эти значения NaN относились к первым четырем годам, когда биткойн не был так популярен, как сегодня. Поэтому, принимая это во внимание, первым шагом обработки этих данных является использование записей с 01–01–2017 до последней даты 02–02–2020.
Поскольку задача предназначена для прогнозирования цены закрытия BTC каждый час на основе последних 24 часов, данные будут учитывать каждый час с 01:00:00 до 00:00:00. Это также уменьшит набор данных, но количество записей не повлияет на производительность модели.
На этом этапе можно провести любое другое исследование, от корреляционной тепловой карты до анализа распределения для выявления других шаблонов, которые могут служить для обучения реальной модели ИНС.
Настройка модели: разделение данных и нормализация
После выполнения начальной исследовательской очистки данных пришло время решить, какие окончательные данные будут помещены в модель нейронной сети. В этом случае столбец объемной валюты был удален из-за того, что он имел меньшую корреляцию с другими переменными. Новое общее количество параметров, которые должны быть оценены с помощью модели нейронной сети, составляет 17,687.
Процесс разделения данных для модели заключался в том, чтобы выбрать 70% всех данных для обучения, 20% для проверки и 10% для тестовых данных. Эта пропорция стандартная, но если вы хотите работать с соотношением 80% — 20%, то это возможно. Окончательное количество параметров для обучения:
column_indices = {name: i for i, name in enumerate(df.columns)} n = len(df) train_df = df[0:int(n*0.7)] val_df = df[int(n*0.7):int(n*0.9)] test_df = df[int(n*0.9):]
- Набор поездов: 12380 параметров с шестью метками
- Допустимый набор: 3538 параметров с шестью метками.
- Тестовый набор: 1769 параметров с шестью метками
Кроме того, важно масштабировать данные (процесс нормализации), это можно сделать, вычитая среднее значение и разделив его на стандартное отклонение.
train_mean = train_df.mean() train_std = train_df.std() train_df = (train_df - train_mean) / train_std val_df = (val_df - train_mean) / train_std test_df = (test_df - train_mean) / train_std
На этом графике видно, что только колонка Volume_BTC имеет длинный хвост, но эта функция не самая актуальная, поэтому она не повлияет на обучение модели.
Прогнозирование с помощью TF: введение в работу с окнами данных
После набора, разделения и нормализации данных следующим шагом является определение переменной, которая будет оцениваться в одноэтапной модели. Для прогнозирования временных рядов библиотека, реализующая эту реализацию, представляет собой тензорный поток, и сначала необходимо выполнить процесс, называемый Data Windowing.
Окно данных заключается в создании окна (массива), которое затем будет содержать количество шагов (ширину) функций. Это означает, что если мы собираемся предсказывать цену закрытия BTC каждый час, используя запись о последней 24-часовой транзакции, ширина будет равна 24. Следующий графический пример может дать интуитивное представление об этом.
w1 = WindowGenerator(input_width=24, label_width=1, shift=1, label_columns=['Close']) w1 Total window size: 25 Input indices: [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23] Label indices: [24] Label column name(s): ['Close']
Этот фрагмент кода показывает результат реализации окон данных, использующих основной признак (цена закрытия) в качестве метки столбца.
Следующим шагом после определения окна, которое мы должны построить, является разделение окна на пары функций и меток. Чтобы достичь этого, наиболее эффективным способом является создание класса Python с именем Генератор Windows, а затем создание пакетов этих окон из данных обучения, оценки и тестирования с использованием tf.data.Dataset.
Также были созданы два метода, split_window и make_dataset. Оба они служат для обработки столбцов label_columns, сгенерированных в функции генератора окон, поэтому они могут быть полезны для одноэтапного обучения метода с помощью ANN.
Наконец, модель собирается вычислить три разных сценария, в которых будет происходить предсказание.
Реализовать архитектуру в одношаговой модели RNN-LSTM
В последнее время для принятия бизнес-решений, логистического мониторинга и финансового прогнозирования среди других целей сложность задач прогнозирования требовала умных решений для решения этих проблем. Благодаря постоянному совершенствованию моделей ИНС и их правильному применению теперь доступна надежная альтернатива для точного прогнозирования и извлечения невидимых функций и взаимосвязей в такого рода проблемах временных рядов.
В качестве ANN для этого примера была выбрана RNN, использующая сеть LSTM. Эта сеть похожа на RNN (рекуррентную нейронную сеть); большая разница в том, что LSTM (Long Short-Term Memory) — это модифицированная версия RNN, позволяющая легко запоминать прошлые данные. LSTM популярен для прогнозирования временных рядов с учетом временных задержек неизвестной продолжительности. Процесс обучения осуществляется с использованием обратного распространения. Ниже схема RNN-LSTM
Для этой реализации модель будет состоять из 16-уровневой архитектуры LSTM, оптимизированной с помощью ADAM. Поскольку создано окно (24-часовой шаг), это окно будет вводом измерений в ячейках сети. Кроме того, модель будет иметь плотный слой для вывода прогноза.
Наконец, был выбран обратный вызов, чтобы сохранить MSE потерь (среднеквадратическую ошибку) и собрать наиболее точную точку прогнозирования на основе наименьшей возможной ошибки полного обучения в допустимом наборе.
Базовый результат
Базовым результатом является прогнозирование временных рядов набора данных без какой-либо реализованной модели ANN. Абсолютная ошибка этого обучения составила 0,0051. Чтобы понять эти диаграммы, посмотрите на шаблон между точками меток и прогнозами. Когда обе точки данных соединены между собой, это означает, что цена закрытия этой точки данных будет определяться на основе вычисленной MSE.
Однако характер трех различных сценариев различен. Способ улучшить это — объединить три прогноза в один линейный график, чтобы увидеть, какая точка, скорее всего, соединится, и это должен быть инвестиционный импульс (прогноз) модели.
Результат RNN-LSTM
Модель ИНС, использованная для этого прогнозирования, дала результат 0,089. Существенной разницы по сравнению с базовой моделью нет, за исключением графика третьей линии, где поезд BTC не имеет значения. Гипотеза в этой ситуации связана с тем, что некоторые входные данные не имеют более высокой корреляции с закрытием BTC (параметр, определенный для прогнозирования), поэтому при нормализации данных некоторые выбросы повлияли на это обучение. Вы можете удалить те столбцы, которые не имеют хорошей корреляции или вообще не имеют корреляции, но идея этого метода заключается в создании прогноза на основе оценки нескольких переменных с ценой закрытия BTC.
Производительность модели
Базовая модель без реализации ИНС получила лучший показатель MSE потерь — 0,0051. Напротив, потеря RNN-LSTM составила 0,0089 в обеих моделях, что превышает производительность, и обратите внимание, что RNN-LSTM является гораздо более сложной моделью, которая учитывает регрессию нескольких переменных. Следовательно, небольшая разница в потерях соответствует наивной реализации.
Идея сравнить обе модели состоит в том, чтобы понять поведение между традиционной реализацией и подходом машинного обучения и на основе обеих моделей создать стратегию, которая может выполнить прогнозное решение, в данном случае, расширенное решение о покупке биткойнов в будущем. от 24 часов.
Последние мысли
Прогнозирование временных рядов является горячей темой в наши дни, и кажется, что овладение этой техникой станет работой мечты и будет похоже на волка с Уолл-стрит. Однако прогнозирование временных рядов все еще имеет ограничения; прогнозирование с наивной реализацией подхода машинного обучения будет вычислять данные исторической записи, введенной в модель. В реальном сценарии, в случае с фондовым или валютным рынком, волатильность дикая, это своего рода энтропия, которую довольно сложно измерить для этого конкретного случая. Таким образом, все новое, что происходит за пределами среды, созданной для обучения модели прогнозирования, будет иметь результат, отличный от предсказанного.
Надеюсь, вам понравилась эта забавная статья, и если вы разбогатеете на этом, купите мне кофе, а почему бы и нет? пожертвуйте мне биткойн, я буду мотивирован делать больше сумасшедших прогнозов, используя ML
Просмотр кода
Не стесняйтесь использовать код этого примера и попытаться понять интуицию, чтобы вы могли самостоятельно реализовать прогнозирование связанных серий в валютах, ETF или акциях.