1-Сбор данных. Во-первых, вы можете использовать API для сбора данных, связанных с финансовыми рынками. Например, вы можете выбрать API, который предоставляет финансовые данные, такие как курсы акций, индексы, курсы обмена валют и многое другое, например, Yahoo Finance или Alpha Vantage.

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

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

Обучение 4 моделей. Вы можете использовать собранные финансовые данные для обучения выбранной модели. При обучении модели не забудьте разделить данные на наборы для обучения и тестирования. Это обеспечит правильное обучение модели и предотвратит проблемы переобучения.

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

6-Оценка результатов. Наконец, вам необходимо оценить производительность модели. Это можно сделать с помощью различных показателей, таких как точность, средняя абсолютная ошибка (MAE) и среднеквадратическая ошибка (MSE).

7 – Делайте прогнозы. Используйте модель, чтобы делать прогнозы.

8–Оцените модель.Оцените производительность модели.

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

# Import libraries
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, LSTM

# 1. Data Collection
# Collect data from a data source
df = pd.read_csv("AAPL.csv")

# Preview the data
print(df.head())

# 2. Data Analysis
# Explore the data and understand its features
print(df.describe())

# 3. Data Preprocessing
# Preprocess the data to make it suitable for analysis
df["Date"] = pd.to_datetime(df["Date"])
df.fillna(method='ffill', inplace=True)
df.drop(["Adj Close", "Volume"], axis=1, inplace=True)
print(df.head())

# 4. Data Normalization
# Scale the data to a smaller range
scaler = MinMaxScaler()
df_scaled = scaler.fit_transform(df)

# 5. Data Preparation
# Prepare the data for training the model
X_train = []
y_train = []

for i in range(60, len(df)):
    X_train.append(df_scaled[i-60:i, 0])
    y_train.append(df_scaled[i, 0])

X_train, y_train = np.array(X_train), np.array(y_train)
X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], 1))

# 6. Build and Train the Model
# Build and train the LSTM model
model = Sequential()
model.add(LSTM(units=50, return_sequences=True, input_shape=(X_train.shape[1], 1)))
model.add(LSTM(units=50))
model.add(Dense(1))

model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(X_train, y_train, epochs=1, batch_size=1)

# 7. Make Predictions
# Use the model to make predictions
inputs = df_scaled[len(df)-60:]
inputs = inputs.reshape(-1,1)
inputs = scaler.transform(inputs)

X_test = []
for i in range(60, inputs.shape[0]):
    X_test.append(inputs[i-60:i, 0])

X_test = np.array(X_test)
X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1))

closing_price = model.predict(X_test)
closing_price = scaler.inverse_transform(closing_price)

# 8. Evaluate the Model
# Evaluate the performance of the model
rms = np.sqrt(np.mean(np.power((closing_price-actual_price),2)))
print(rms)

Теперь давайте рассмотрим наш код шаг за шагом.

1-Сбор данных

Этот шаг включает сбор данных с финансовых рынков, которые можно использовать для анализа. В этом случае мы будем собирать исторические данные о ценах на акции конкретной компании, например Apple или Amazon. Для сбора финансовых данных доступны различные источники, такие как Yahoo Finance, Google Finance или специализированные поставщики финансовых данных.

Как только мы соберем данные, мы загрузим их в нашу среду Python, используя библиотеку обработки данных, такую ​​​​как Pandas. Затем мы изучим данные, чтобы получить представление о различных доступных функциях, таких как цена открытия, цена закрытия, максимум, минимум, объем и т. д.

# 1. Data Collection
# Collect data from a data source
df = pd.read_csv("AAPL.csv")

# General characteristics of the dataset
print(df.head())
print(df.info())

На этом этапе мы сначала собрали данные о ценах на акции Apple из источника данных. Затем мы загрузили данные в Pandas DataFrame, что позволяет нам легко манипулировать данными. Мы также изучили данные, используя такие функции, как head() и info(), чтобы понять, как выглядят данные и с какими типами данных мы работаем.

2-анализ данных

# 2. Data Analysis
# Explore the data and understand its features
print(df.describe())

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

Метод describe() вызывается для объекта DataFrame df, который создает сводку данных, включая показатели центральной тенденции (среднее значение, медиана), показатели разброса (стандартное отклонение, диапазон) и другие полезные статистические данные, такие как количество и процентили. данных. Метод describe() обеспечивает быстрый способ получить общее представление о данных и может помочь выявить потенциальные выбросы, аномалии и проблемы с данными, требующие дальнейшего изучения.

Функция print() используется для отображения вывода метода describe() в консоли или терминале, чтобы пользователь мог просмотреть и проанализировать сводную статистику. Просматривая сводную статистику, пользователь может получить представление о данных и определить, требуется ли какая-либо дополнительная очистка данных, предварительная обработка или разработка функций, прежде чем приступить к построению модели финансового прогнозирования.

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

# 3. Data Preprocessing
# Preprocess the data to make it suitable for analysis
df["Date"] = pd.to_datetime(df["Date"])
df.fillna(method='ffill', inplace=True)
df.drop(["Adj Close", "Volume"], axis=1, inplace=True)
print(df.head())

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

Первая строка кода преобразует столбец «Дата» DataFrame в тип данных datetime с помощью метода pd.to_datetime(). Это полезно для работы с данными временных рядов, поскольку позволяет нам легко выполнять такие операции, как фильтрация данных по дате, агрегирование данных по периодам времени и отображение данных во времени.

Следующая строка кода заполняет все пропущенные значения в DataFrame, используя метод прямого заполнения (ffill), который заполняет пропущенные значения предыдущим значением в столбце. Это полезно для данных временных рядов, поскольку сохраняет временной порядок данных и предполагает, что отсутствующие значения вызваны некоторым временным прерыванием или задержкой.

Третья строка кода удаляет столбцы «Adj Close» и «Volume» из DataFrame с помощью метода drop(). Это связано с тем, что эти столбцы не имеют отношения к нашей модели финансового прогнозирования и могут быть удалены для упрощения набора данных.

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

4-нормализация данных

# 4. Data Normalization
# Scale the data to a smaller range
scaler = MinMaxScaler()
df_scaled = scaler.fit_transform(df)

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

Первая строка кода инициализирует объект MinMaxScaler() из модуля sklearn.preprocessing. Этот масштабатор используется для масштабирования данных до меньшего диапазона, обычно от 0 до 1. Нормализация — важный этап предварительной обработки в машинном обучении, поскольку он может повысить производительность некоторых моделей и упростить работу с данными.

Вторая строка кода применяет метод fit_transform() объекта MinMaxScaler() к df DataFrame, который масштабирует данные до нужного диапазона и возвращает новый массив той же формы, что и df. Этот новый массив хранится в переменной df_scaled.

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

5-Подготовка данных

# 5. Data Preparation
# Prepare the data for training the model
X_train = []
y_train = []

for i in range(60, len(df)):
    X_train.append(df_scaled[i-60:i, 0])
    y_train.append(df_scaled[i, 0])

X_train, y_train = np.array(X_train), np.array(y_train)
X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], 1))

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

Первые две строки кода инициализируют пустые списки для хранения обучающих данных X_train и меток y_train.

Цикл for выполняет итерацию по кадру данных df, начиная с индекса 60. Для каждой итерации цикл выбирает цены акций за предыдущие 60 дней (т. е. предыдущие 60 строк массива df_scaled) в качестве входных данных X и цену акции для на следующий день как выходной y. Эти пары ввода-вывода хранятся в X_train и y_train соответственно.

Последние три строки кода преобразуют списки X_train и y_train в массивы NumPy и изменяют форму массива X_train, чтобы он соответствовал входной форме, ожидаемой нейронной сетью. Массив X_train изменен, чтобы иметь размеры (X_train.shape[0], X_train.shape[1], 1), где X_train.shape[0] — количество входных последовательностей (т. е. количество строк в X_train), X_train.shape[1] — количество временных шагов в каждой последовательности (т. е. количество столбцов в X_train), а 1 — количество признаков на каждом временном шаге.

Создавая эти пары ввода-вывода в виде скользящего окна, модель может научиться предсказывать цену акций на следующий день на основе данных за предыдущие 60 дней.

6. Создайте и обучите модель

# 6. Build and Train the Model
# Build and train the LSTM model
model = Sequential()
model.add(LSTM(units=50, return_sequences=True, input_shape=(X_train.shape[1], 1)))
model.add(LSTM(units=50))
model.add(Dense(1))

model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(X_train, y_train, epochs=1, batch_size=1)

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

Сначала мы создаем экземпляр класса Sequential из Keras. Это позволяет нам строить модель слой за слоем.

Далее мы добавляем в модель первый слой LSTM, используя метод add(). Функция LSTM() принимает несколько аргументов, в том числе количество единиц (нейронов) в слое, следует ли возвращать последовательности или нет, а также форму входных данных. Здесь мы устанавливаем количество единиц равным 50, от return_sequences до True, чтобы вернуть последовательности, и вводим форму в форму наших обучающих данных.

Затем мы добавляем в модель второй слой LSTM с 50 единицами и без возвратных последовательностей.

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

После построения модели мы компилируем ее с помощью метода compile(), указав используемую функцию потерь (mean_squared_error) и оптимизатор (adam).

Наконец, мы обучаем модель, используя метод fit(), передавая наши предварительно обработанные обучающие данные (X_train и y_train), устанавливая количество эпох равным 1 и размер пакета равным 1.

7-Сделайте прогнозы

# 7. Make Predictions
# Use the model to make predictions
inputs = df_scaled[len(df)-60:]
inputs = inputs.reshape(-1,1)
inputs = scaler.transform(inputs)

X_test = []
for i in range(60, inputs.shape[0]):
    X_test.append(inputs[i-60:i, 0])

X_test = np.array(X_test)
X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1))

closing_price = model.predict(X_test)
closing_price = scaler.inverse_transform(closing_price)

Эта часть кода отвечает за прогнозирование с использованием обученной модели LSTM.

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

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

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

8. Создайте и обучите модель

# 8. Evaluate the Model
# Evaluate the performance of the model
rms = np.sqrt(np.mean(np.power((closing_price-actual_price),2)))
print(rms)

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

Код сначала вычисляет разницу между прогнозируемыми ценами закрытия и фактическими ценами закрытия, используя переменную closing_price, полученную на предыдущем шаге, и фактические цены закрытия, которые ранее были сохранены в переменной test_data. Затем он возводит в квадрат различия, берет среднее значение и вычисляет квадратный корень из среднего значения, который является среднеквадратичной ошибкой. Наконец, он печатает значение RMSE.

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