1. Введение
  2. Начиная
  3. Сбор данных
  4. Предварительная обработка данных
  5. Построение нейронной сети
  6. Обучение и оценка модели
  7. Заключение

Начиная

Для начала давайте импортируем необходимые библиотеки для этого проекта:

import numpy as np
import pandas as pd
import yfinance as yf
import matplotlib.pyplot as plt
import seaborn as sns
import mplfinance as mpf
import tensorflow as tf
from tensorflow import keras
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler

Сбор данных

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

Давайте начнем с загрузки исторических цен на акции для определенного символа тикера. В этом примере мы будем использовать тикер «AAPL» для Apple Inc.

ticker = "AAPL"
start_date = "2010-01-01"
end_date = "2023-06-30"

data = yf.download(ticker, start=start_date, end=end_date)

Теперь, когда у нас есть данные, давайте посмотрим на первые несколько строк:

print(data.head())

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

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

Во-первых, давайте проверим, есть ли в данных пропущенные значения:

print(data.isnull().sum())

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

data = data.dropna()

Затем давайте разделим данные на входные функции (X) и целевую переменную (y). В этом примере мы будем использовать цену закрытия в качестве целевой переменной:

X = data.drop("Close", axis=1)
y = data["Close"]

Чтобы масштабировать функции, мы будем использовать MinMaxScaler из scikit-learn:

scaler = MinMaxScaler()
X_scaled = scaler.fit_transform(X)

Построение нейронной сети

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

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

model = keras.Sequential([
    keras.layers.Dense(64, activation="relu", input_shape=(X_scaled.shape[1],)),
    keras.layers.Dense(32, activation="relu"),
    keras.layers.Dense(1)
])

Далее нам нужно скомпилировать модель, указав функцию потерь и оптимизатор:

model.compile(loss="mean_squared_error", optimizer="adam")

Обучение и оценка модели

Прежде чем мы сможем обучить модель, нам нужно разделить данные на наборы для обучения и тестирования. Мы будем использовать 80% данных для обучения и 20% для тестирования:

X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)

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

history = model.fit(X_train, y_train, epochs=100, batch_size=32, validation_split=0.2)

Чтобы оценить модель, мы можем построить график потерь при обучении и проверке с течением времени:

plt.plot(history.history["loss"])
plt.plot(history.history["val_loss"])
plt.xlabel("Epoch")
plt.ylabel("Loss")
plt.legend(["Training", "Validation"])

Наконец, давайте оценим модель на данных тестирования:

loss = model.evaluate(X_test, y_test)
print("Test Loss:", loss)

Заключение

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

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

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