Предсказание данных о ценных бумагах с использованием Cassandra и TensorFlow

Предсказание данных о ценных бумагах с Cassandra и TensorFlow

Сценарий, описанный в этом блоге, является прогнозированием временных рядов определенной цены акций. Сама проблема очень распространена и широко известна. Однако следует отметить, что это техническая демонстрация и ни в коей мере не является рекомендацией по инвестированию. Цель демонстрации – показать, как Astra и TensorFlow могут работать вместе для прогнозирования временных рядов. Первый набор – настройка базы данных.

Получение тестовых данных

Теперь, когда у вас есть база данных, учетные данные и файл пакета на вашем компьютере, давайте убедимся, что у вас есть данные, необходимые для выполнения этого руководства. Эти данные являются открытыми и доступными на многих платформах. Одной из таких платформ является Kaggle, где люди уже сделали работу по сбору этих данных через API.

Вот ссылка на эти данные.

Другим источником данных, которые могут подойти для решения этой проблемы, является набор данных Tesla, который также открыт на GitHub.

Самый простой вариант, который мы также рекомендуем, – клонировать наш репозиторий на GitHub (о чем мы все равно расскажем), где мы также добавили образец данных, чтобы вы могли сразу перейти к коду.

Теперь давайте перейдем прямо к коду!

Код для руководства

Код для этого руководства можно найти по ссылке нашего репозитория на GitHub. Если вы уже знакомы с Git и JupyterLabs, просто клонируйте и запустите шаги блокнота, используя команду Git clone.

В readme-файле репозитория также должны быть указаны все необходимые детали для начала работы с этим кодом.

Использование репозитория

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

После клонирования кода перейдите в каталог проекта и начните с установки зависимостей (обратите внимание, что если вы используете метод развертывания GitPod, это произойдет автоматически) с помощью следующей команды:

pip install -r requirements.txt

Обратите внимание, что в этом примере используется версия Python 3.10.11, поэтому убедитесь, что она установлена или создайте виртуальное окружение с помощью pyenv (что удобнее для вас).

Установка Jupyter[Lab]

Последнее, но не менее важное, перед переходом к запуску кода убедитесь, что у вас установлен Jupyter на вашем компьютере. Вы можете сделать это, запустив следующую команду.

pip install jupyterlab

Обратите внимание, что здесь мы устанавливаем JupyterLab, который является более продвинутой версией Jupyter-блокнотов. Он предлагает множество функций, помимо традиционных блокнотов.

После установки введите jupyter-lab в терминале. Откроется окно в вашем браузере со списком файлов вашего рабочего каталога. Если вы находитесь в клонированном каталоге, вы должны увидеть блокнот и должны иметь возможность следовать шагам.

Если он не запускается автоматически, вы можете перейти на сервер JupyterLabs, щелкнув на URL-адреса в вашем терминале:

Теперь, когда вы выполнили команду Jupyter из вашего рабочего каталога, вы должны увидеть дерево проекта в вашем браузере и перейти к файлам. Сначала давайте убедимся, что мы настроили секреты перед началом кодирования, поэтому убедитесь, что вы открыли файл local_secrets.py и заполнили предоставленные/извлеченные из веб-сайта AstraDB данные после настройки деталей базы данных.

Теперь мы можем перейти к блокноту. Начнем с чтения данных и их сохранения в AstraDB.

Сохранение данных в AstraDB

Этот шаг не делает ничего, кроме того, что показывает, что вы можете использовать AstraDB для передачи данных вашим моделям. AstraDB, прежде всего, является мощной и масштабируемой базой данных. Данные должны где-то храниться, и независимо от того, находитесь вы уже на Astra или Cassandra или только начинаете работу с этими инструментами, в этом руководстве показано, насколько легко использовать Astra для вашей бэкэнда.

Для создания таблицы и загрузки образца данных из этого руководства можно использовать язык CQL. Логика должна быть следующей:

После выполнения предыдущего шага давайте снова прочитаем данные и убедимся, что они упорядочены для проблемы прогнозирования временных рядов. Это шаг управления данными, чтобы убедиться, что данные упорядочены для ряда.

Используйте следующий код для чтения данных вашего временного ряда и подготовки их к использованию TensorFlow:

Анализ данных

Теперь мы можем написать некоторый код, чтобы понять и проанализировать данные с помощью графиков. Нижний график, например, показывает цены открытия и закрытия акций (цена при открытии рынка и при закрытии рынка) за период в 4 года с 2016 по 2020 год.

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

Давайте перейдем к созданию самой модели.

Построение модели

В этом примере мы будем использовать модель LSTM (или Long Short Term Model), модель глубокого обучения, известную своей способностью распознавать паттерны в данных, что хорошо подходит для решаемой нами проблемы.

Также важно отметить, что мы будем использовать Keras (библиотеку глубокого обучения для Python) в качестве бэкэнда для нашего примера TensorFlow. Модель состоит из 2 слоев LSTM: одного плотного слоя, одного слоя исключения и, наконец, еще одного плотного слоя.

Еще одним важным аспектом является нормализация и масштабирование данных.

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

В данном случае, и в целях демонстрации, мы использовали 95% данных для обучения, а остальные 5% – для тестирования.

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

Использование данных

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

Запуск следующей команды сгенерирует прогнозируемые данные:

predictions = model.predict(x_test)

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

predictions = scaler.inverse_transform(predictions)

Следующий график показывает развитие обучающих данных со временем, а также тестовые данные по сравнению с прогнозом, сгенерированным нашей моделью.

Обратите внимание на разные цвета в крайней правой части графика. Оранжевый цвет – это тестовый поднабор фактических данных. Зеленая линия представляет собой прогнозируемую цену акций. В данном случае наш прогноз достаточно хорошо предсказал снижение цены акции. Эта линия прогнозов является основным результатом любого прогноза.

Обратите внимание, что для этой задачи регрессии мы также использовали некоторые метрики оценки модели. Для этого были использованы MSE и RMSE, и вот отрывок кода, соответствующий их реализации:

# метрики оценки модели

mse = np.mean(((predictions - y_test) ** 2))

rmse = np.sqrt(mse)

Хранение модели

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

Схема таблицы выглядит следующим образом:

Сами данные модели будут храниться как блоб; для этого нам нужно будет взять наши данные модели, преобразовать их в JSON и затем сохранить в нашей таблице. Нижеприведенный код описывает, как вы можете сделать это легко:

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

Чтение модели

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

Мы также можем посмотреть сводку модели и убедиться, что она полностью соответствует тому, что мы обучили и сохраняли ранее:

loaded_model.summary()

Вы должны увидеть что-то вроде этого:

И вы добрались до конца этого руководства!

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

Заключение

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

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