Долговременная кратковременная память (LSTM) - это один из типов рекуррентной нейронной сети, которая используется для изучения зависимости порядка в задачах прогнозирования последовательности. Благодаря способности хранить прошлую информацию, LSTM очень полезен при прогнозировании цен на акции. Это связано с тем, что прогноз будущей цены акций зависит от предыдущих цен.

В этой статье мы рассмотрим шаги по созданию модели LSTM для прогнозирования цен на акции в Python.

Заявление об ограничении ответственности: цель написания этой статьи - продемонстрировать шаги по построению модели LSTM для прогнозирования цен на акции в Python. Он не служит ни для рекламы акций, ни для предоставления каких-либо конкретных рекомендаций по инвестициям.

Необходимые пакеты Python

  1. yFinance - https://pypi.org/project/yfinance/
  2. Numpy - https://numpy.org/
  3. Matplotlib - https://matplotlib.org/
  4. Панды - https://pandas.pydata.org/
  5. Scikit-Learn - https://scikit-learn.org/stable/
  6. Tensorflow - https://www.tensorflow.org/

Github

Оригинальные полные исходные коды, представленные в этой статье, доступны на моем Github Repo. Не стесняйтесь загрузить его (stock_price_lstm.ipynb), если хотите использовать его, чтобы следить за моей статьей.

Прогноз цен на акции с использованием LSTM

1. Сбор данных о запасах

Во-первых, мы собираемся использовать yFinance для получения данных о запасах. yFinance - это библиотека Python с открытым исходным кодом, которая позволяет нам получать данные об акциях из Yahoo Finance без каких-либо затрат.

В этом случае мы собираемся получить цены на акции AAPL за последние 5 лет.

Строка 1–9: Импортируйте все необходимые библиотеки.

Строка 11–12: Используйте метод загрузки yFinance, чтобы получить данные о запасах, начиная с 1 января 2016 г. по 1 октября 2021 г., а затем предварительно просмотреть данные.

2. Визуализация истории цен на акции

Прежде чем готовиться к построению модели LSTM, давайте посмотрим на историческое движение цен AAPL, построив линейный график.

Строка 1–2: задайте размер и название рисунка на графике.

Строка 3: используйте метод Matplotlib plot, чтобы создать линейный график для исторических цен закрытия AAPL.

Строка 4–5: установите метки для оси x и оси y.

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

3. Предварительная обработка данных

Чтобы построить модель LSTM, нам нужно разделить наши данные о ценах на акции на обучающий набор и тестовый набор. Кроме того, мы также нормализуем наши данные, чтобы все значения находились в диапазоне от 0 до 1.

3.1 Подготовка обучающего набора

Здесь нам понадобятся только цены закрытия из нашего набора данных для обучения нашей модели LSTM. Мы собираемся извлечь 80% цен закрытия из полученных нами данных об акциях в качестве обучающей выборки.

Строка 1–2: извлеките цены закрытия из полученных данных об акциях и преобразуйте их в числовой ряд.

Строка 3. Рассчитайте размер данных для 80% набора данных. Метод math.ceil обеспечивает округление размера данных до целого числа.

Строка 5–6: Используйте Scikit-Learn MinMaxScaler для нормализации всех наших данных о запасах в диапазоне от 0 до 1. Мы также преобразовываем наши нормализованные данные в двумерный массив.

Строка 7: выделите первые 80% данных акций в качестве обучающей выборки.

Строка 9–10: Создайте пустой список для последовательности данных функций (x_train) и последовательности данных меток (y_train).

Строка 12–14: Создайте 60-дневное окно исторических цен (i-60) в качестве данных нашей функции (x_train) и следующих 60-дневное окно в виде данных метки (y_train).

Строка 16–17. Преобразуйте данные объекта (x_train) и данные метки (y_train) в массив Numpy как это формат данных, принимаемый Tensorflow при обучении модели нейронной сети. Снова измените форму x_train и y_train в трехмерный массив как часть требования для обучения модели LSTM.

3.2 Подготовка тестового набора

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

Строка 1: извлеките цены закрытия из нашего нормализованного набора данных (последние 20% набора данных).

Строка 2–6: Как и в обучающем наборе, нам нужно будет создать данные функций (x_test) и пометить данные (y_test) из нашего набор тестов.

Строка 8–9: Преобразуйте данные функции (x_test) и данные метки (y_test) в массив Numpy. Снова преобразовать x_test и y_test в трехмерный массив

3.3 Настройка сетевой архитектуры LSTM

Теперь мы готовы использовать библиотеку машинного обучения с открытым исходным кодом Tensorflow для настройки сетевой архитектуры LSTM.

Строка 1: определите последовательную модель, которая состоит из линейного набора слоев.

Строка 2: добавьте слой LSTM, присвоив ему 100 сетевых единиц. Установите для return_sequence значение true, чтобы на выходе слоя была другая последовательность такой же длины.

Строка 3: добавьте еще один уровень LSTM с 100 сетевыми модулями. Но мы устанавливаем для return_sequence значение false на этот раз, чтобы возвращать только последний вывод в выходной последовательности.

Строка 4: добавьте плотно связанный слой нейронной сети с 25 сетевыми модулями.

Строка 5: наконец, добавьте плотно связанный слой, определяющий выход 1 сетевого устройства.

Строка 6: покажите сводку нашей сетевой архитектуры LSTM.

3.4 Обучение модели LSTM

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

Строка 1: используйте оптимизатор «adam» и установите среднеквадратичную ошибку как функцию потерь.

Строка 2. Обучите модель, сопоставив ее с обучающим набором. Мы можем попробовать с batch_size равным 1 и запустить обучение для 3 эпох.

3.5 Оценка модели

Наша следующая задача - оценить нашу обученную модель LSTM с помощью набора тестов, а затем применить метрику среднеквадратичной ошибки (RMSE) для проверки производительности модели.

Строка 1: примените модель для прогнозирования цен на акции на основе набора тестов.

Строка 2: используйте метод inverse_transform, чтобы денормализовать прогнозируемые цены на акции.

Строка 3–4: Примените формулу RMSE, чтобы вычислить степень расхождения между прогнозируемыми ценами и реальными ценами (y_test) и отобразить результат.

Результат показывает, что RMSE составляет всего 1,74. Модель вроде бы работает хорошо.

3.6 Визуализация прогнозируемых цен

Всегда полезно визуализировать прогнозируемые цены в графическом виде. Здесь мы снова собираемся построить график нашей прогнозируемой цены акций и реальной цены акций, используя Python Matplolib.

Строка 1: используйте метод фильтрации, чтобы сохранить в фрейме данных только столбец цены закрытия.

Строка 2–4: разделите наши данные о запасах на три области построения: обучение, проверка и прогноз.

Строка 5–12: настройте размер рисунка диаграммы, заголовок, метку оси X и оси Y и легенды.

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

Выводы

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

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

Желаю вам приятного чтения этой статьи.

Подписаться на Medium

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

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

  1. Https://en.wikipedia.org/wiki/Long_short-term_memory
  2. Https://www.ibm.com/cloud/learn/recurrent-neural-networks