В этом посте я описываю непрерывный конвейер машинного обучения для прогнозирования цены биткойнов с использованием Google Cloud Platform (GCP), TensorFlow, набора исторических данных о ~ 4 миллиардах заказов и биржевой книги заказов в реальном времени в США.
За последние 3 года я увлекся этой темой, которая существует на пересечении облачных вычислений, машинного обучения и криптовалют.
Вот основные результаты на пару дней в мае 2019 года.
Вы можете подумать, что это еще одна модель прогнозирования цен на биткойны с помощью TensorFlow. На самом деле речь идет не столько о биткойнах, сколько о машинном обучении.
Прежде чем вдаваться в подробности, давайте кратко рассмотрим архитектуру высокого уровня.
Это пример, а не инвестиционный совет.
Между этой и другими подобными статьями есть несколько заметных отличий:
- Большой и богатый набор данных - я транслировал и собирал около 4 миллиардов заказов BTC-USD; этот набор данных был использован для обучения модели
- Архитектура - большое внимание уделяется интеграции многих компонентов, которые предлагает GCP.
- Стоимость - это не предусмотрено ИТ-отделом, стойками с оборудованием или бюджетом в миллион долларов. Я просто изучаю GCP (когда я не работаю в отделе аналитики финансового учреждения)
Теперь, возвращаясь к 4 шагам, коротко говоря, я сделал следующее:
- Транслируйте и храните полную книгу заказов в реальном времени
- Выполняйте исследовательский анализ и преобразуйте необработанные данные в значимые переменные
- Разработка и обучение модели глубокого обучения
- Оцените модель в реальном времени
Давайте углубимся в подробности, но для краткости в формате списка дел.
- Транслируйте и храните полную книгу заказов в реальном времени
- Выберите обмен. Данные бесплатны. Мне нравится Coinbase
- Определитесь с уровнями книги заказов. Если вы покупаете микроструктуру рынка и теорию ценообразования, выберите уровень, который дает вам наибольшее количество данных (полная книга заявок). Я остановился на уровне 3, потому что я могу создавать переменные для сделок и (рыночных и лимитных) ордеров отдельно.
- Выберите хранилище данных. BigQuery - отличный продукт для потоковой передачи данных. Я пробовал (и потратил много времени) на запуск собственных хранилищ данных в вычислительном экземпляре.
- Определитесь с компонентом потоковой передачи. В этом пространстве есть много отличных продуктов. Я остановился на node.js / websockets, потому что интеграция с BigQuery отличная
- Используйте небольшой вычислительный экземпляр для круглосуточной потоковой передачи данных. Небольшие экземпляры Linux надежны. Они просто бегают месяцами. Время от времени я останавливаю их на несколько минут, чтобы обновить пакеты, но обычно я устанавливаю экземпляр и забываю его.
2. Проведите исследовательский анализ и преобразуйте необработанные данные в значимые переменные
- Используйте Data Studio или Tableau для подключения к BigQuery. Я много лет пользуюсь Tableau, и это отличный инструмент. Но я был приятно удивлен Data Studio, а интеграция с продуктами Google не имеет себе равных. Я все чаще и чаще использую Студию данных
- Используйте Dataproc для извлечения данных из BigQuery и сохранения их в облачном хранилище. Затем преобразуйте набор данных: выполните повторную выборку (например, 10-минутный интервал), нормализуйте, создайте переменные. Сохраните вывод в облачное хранилище в формате TFRecord. Dataproc в порядке, но я думаю переключить эту часть на Dataflow по двум причинам:
- Мне нужно определить размер кластера перед запуском кластера; несколько раз я недооценивал необходимые мне ресурсы и сталкивался с ошибками нехватки памяти с помощью Spark
- Я использую scala с Dataproc, но для компонента реального времени я использую python. Два языка для выполнения одного и того же неоптимально. Плюс есть нюансы (см. Более простые моменты pdf), которые нужно учитывать.
3. Разработка и обучение модели глубокого обучения
- Используйте Cloud ML Engine / CMLE для обучения и развертывания модели TensorFlow - как только обучающий набор готов, я использую TensorFlow и его мощные возможности нейронной сети для обучения модели последовательности. Здесь стоит упомянуть, что я был удивлен, как настройка гиперпараметров улучшила мою модель, снизив RMSE на 50% после нескольких испытаний.
4. Оцените модель в режиме реального времени
- Используйте книгу заявок биржи в реальном времени, чтобы предсказать цену биткойна на 5 минут вперед.
Приведенная ниже диаграмма была создана с помощью Data Studio и показывает прогнозы на 5 минут вперед в реальном времени. Ось x отображает временную шкалу (с шагом 5 минут и часовой пояс UTC), а ось y показывает два временных ряда: фактическую и прогнозируемую цены. Обратите внимание, что фактическая цена не связана с последней прогнозируемой ценой, поскольку модель прогнозирует в режиме реального времени!
Прогнозы отслеживаются довольно хорошо, но они не фиксируют постоянное изменение направления (например, первую точку на графике). Это то, к чему я планирую обратиться.
В заключение я думаю о том, чтобы представить выходные данные модели как API, но я не уверен на этом этапе. Если вам это интересно, напишите мне.