Цель этого руководства — построить модель нейронной сети, которая может прогнозировать цены на акции с помощью искусственного интеллекта. Мы надеемся, что сможем удовлетворить Элона Маска, работая с акциями Tesla.

Следующие предварительные условия помогут вам извлечь максимальную пользу из этого руководства.

Требования

  • Язык программирования Python должен быть хорошо понят.
  • Умение хорошо разбираться в нейронных сетях.

Среда для развития

  • Python и Tensorflow должны быть установлены локально.
  • Рекомендуется использовать Google Colab.

Как работает РНН?

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

Чтобы лучше понять, как работают RNN, давайте рассмотрим несколько примеров.

Ht будет выходом, когда A получит вход Xt.

Рекуррентные нейронные сети передают сообщения своим преемникам через несколько копий одной и той же сети. Если развернуть предыдущий цикл, мы увидим следующее:

В результате RNN не может работать с большими последовательностями из-за проблемы исчезающего градиента. Для обработки долговременных зависимостей разработана долговременная кратковременная память (LSTM).

ЛСТМ — что это?

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

LSTM — это нейронная сеть с обратной связью, в отличие от традиционных нейронных сетей с прямой связью, которые последовательно передают значения через слои, что делает ее идеальной моделью для анализа данных временных рядов.

Выбор данных

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

Это также мощный инструмент, поэтому я буду использовать Google Colab, но вы можете использовать все, что вам нравится.

Библиотеки для импорта

Numpy будет использоваться для научных вычислений, pandas для обработки данных, matplotlib для отображения наших результатов, sklearn будет использоваться для масштабирования нашего набора данных, а Keras будет использоваться для обертывания низкоуровневых библиотек, таких как TensorFlow или высокоуровневые библиотеки нейронных сетей Theano. .

Давайте создадим наше приложение вместе!

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

Загрузка данных

Следующий код не следует использовать, если вы не используете Google Colab):

Выберите набор данных и нажмите «выбрать файлы».

Ваш файл данных можно поместить в ту же папку, что и ваш код, если вы не используете Google Colab.

Чтение данных

Нам нужно создать фрейм данных после загрузки наших данных:

Извлечение признаков

Далее, давайте узнаем, сколько существует торговых дней:

В результате получится результат (2392, 7).

Нашей единственной переменной будет «цена открытия», чтобы все было как можно проще.

При изменении формы вы можете добавить размеры и изменить количество элементов в каждом измерении. Из-за того, что у нас есть только одно измерение в нашем массиве, мы используем reshape(-1, 1) для создания новых строк и добавления второй оси: 1.

Теперь данные можно разделить на наборы для обучения и тестирования следующим образом:

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

Для создания наборов данных нам потребуется создать следующую функцию:

Всякий раз, когда мы добавляем функцию (x), мы добавляем последние 50 цен, а когда мы добавляем метку (y), мы добавляем следующую цену. После этого мы преобразуем его в массив с помощью numpy.

Вызывая нашу функцию для каждого, мы создадим данные для обучения и тестирования:

Наши данные должны быть изменены, чтобы их можно было использовать в слое LSTM в виде трехмерного массива.

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

Наша последовательная модель изначально была инициализирована с 96 единицами выходной размерности. Наш набор данных был сформирован с использованием input_shape и return_sequences=True, чтобы создать слой LSTM с трехмерным вводом.

Отбрасывание 20% слоев на 0,2 делает долю отсева 0,2. Поскольку мы хотим вывести одно значение, мы добавили плотный слой 1.

Затем нам нужно изменить нашу функцию для слоя LSTM, потому что sequence_3 ожидает три измерения вместо двух:

Чтобы скомпилировать нашу модель, нам нужно сделать следующее:

Оптимизатор Адама использовался для итеративного обновления весов сети на основе обучающих данных для loss='mean_squared_error'.

Пора!

Начните обучение, сохранив нашу модель:

Итерации определяются как итерации через одну итерацию полного набора обучающих данных, а эпохи определяются как цикл через полный набор данных.

Наша модель готова к загрузке:

Визуализация результатов

Визуализация наших данных — последний шаг.

Это приведет к:

Подведение итогов

Наш прогноз оказался очень точным! Можете ли вы представить, насколько более точным был бы результат, если бы вы работали с несколькими переменными?

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