В этом посте я описываю непрерывный конвейер машинного обучения для прогнозирования цены биткойнов с использованием Google Cloud Platform (GCP), TensorFlow, набора исторических данных о ~ 4 миллиардах заказов и биржевой книги заказов в реальном времени в США.

За последние 3 года я увлекся этой темой, которая существует на пересечении облачных вычислений, машинного обучения и криптовалют.

Вот основные результаты на пару дней в мае 2019 года.

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

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

Это пример, а не инвестиционный совет.

Между этой и другими подобными статьями есть несколько заметных отличий:

  1. Большой и богатый набор данных - я транслировал и собирал около 4 миллиардов заказов BTC-USD; этот набор данных был использован для обучения модели
  2. Архитектура - большое внимание уделяется интеграции многих компонентов, которые предлагает GCP.
  3. Стоимость - это не предусмотрено ИТ-отделом, стойками с оборудованием или бюджетом в миллион долларов. Я просто изучаю GCP (когда я не работаю в отделе аналитики финансового учреждения)

Теперь, возвращаясь к 4 шагам, коротко говоря, я сделал следующее:

  1. Транслируйте и храните полную книгу заказов в реальном времени
  2. Выполняйте исследовательский анализ и преобразуйте необработанные данные в значимые переменные
  3. Разработка и обучение модели глубокого обучения
  4. Оцените модель в реальном времени

Давайте углубимся в подробности, но для краткости в формате списка дел.

  1. Транслируйте и храните полную книгу заказов в реальном времени
  • Выберите обмен. Данные бесплатны. Мне нравится Coinbase
  • Определитесь с уровнями книги заказов. Если вы покупаете микроструктуру рынка и теорию ценообразования, выберите уровень, который дает вам наибольшее количество данных (полная книга заявок). Я остановился на уровне 3, потому что я могу создавать переменные для сделок и (рыночных и лимитных) ордеров отдельно.
  • Выберите хранилище данных. BigQuery - отличный продукт для потоковой передачи данных. Я пробовал (и потратил много времени) на запуск собственных хранилищ данных в вычислительном экземпляре.
  • Определитесь с компонентом потоковой передачи. В этом пространстве есть много отличных продуктов. Я остановился на node.js / websockets, потому что интеграция с BigQuery отличная
  • Используйте небольшой вычислительный экземпляр для круглосуточной потоковой передачи данных. Небольшие экземпляры Linux надежны. Они просто бегают месяцами. Время от времени я останавливаю их на несколько минут, чтобы обновить пакеты, но обычно я устанавливаю экземпляр и забываю его.

2. Проведите исследовательский анализ и преобразуйте необработанные данные в значимые переменные

  • Используйте Data Studio или Tableau для подключения к BigQuery. Я много лет пользуюсь Tableau, и это отличный инструмент. Но я был приятно удивлен Data Studio, а интеграция с продуктами Google не имеет себе равных. Я все чаще и чаще использую Студию данных

  • Используйте Dataproc для извлечения данных из BigQuery и сохранения их в облачном хранилище. Затем преобразуйте набор данных: выполните повторную выборку (например, 10-минутный интервал), нормализуйте, создайте переменные. Сохраните вывод в облачное хранилище в формате TFRecord. Dataproc в порядке, но я думаю переключить эту часть на Dataflow по двум причинам:
  1. Мне нужно определить размер кластера перед запуском кластера; несколько раз я недооценивал необходимые мне ресурсы и сталкивался с ошибками нехватки памяти с помощью Spark
  2. Я использую scala с Dataproc, но для компонента реального времени я использую python. Два языка для выполнения одного и того же неоптимально. Плюс есть нюансы (см. Более простые моменты pdf), которые нужно учитывать.

3. Разработка и обучение модели глубокого обучения

  • Используйте Cloud ML Engine / CMLE для обучения и развертывания модели TensorFlow - как только обучающий набор готов, я использую TensorFlow и его мощные возможности нейронной сети для обучения модели последовательности. Здесь стоит упомянуть, что я был удивлен, как настройка гиперпараметров улучшила мою модель, снизив RMSE на 50% после нескольких испытаний.

4. Оцените модель в режиме реального времени

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

Приведенная ниже диаграмма была создана с помощью Data Studio и показывает прогнозы на 5 минут вперед в реальном времени. Ось x отображает временную шкалу (с шагом 5 минут и часовой пояс UTC), а ось y показывает два временных ряда: фактическую и прогнозируемую цены. Обратите внимание, что фактическая цена не связана с последней прогнозируемой ценой, поскольку модель прогнозирует в режиме реального времени!

Прогнозы отслеживаются довольно хорошо, но они не фиксируют постоянное изменение направления (например, первую точку на графике). Это то, к чему я планирую обратиться.

В заключение я думаю о том, чтобы представить выходные данные модели как API, но я не уверен на этом этапе. Если вам это интересно, напишите мне.