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

ЛСТМ?

Модель LSTM основана на RNN или рекуррентной нейронной сети. RNN основаны на том, как люди учатся. Они хранят информацию из предыдущих испытаний. Например, возьмем предложение «Концерт был скучным первые 15 минут, пока группа разогревалась, но потом было ужасно интересно». Модель машинного обучения, которая берет слова по отдельности, может обнаружить, что предложение было отрицательным из-за таких слов, как «ужасно». Однако RNN может обнаружить, что предложение изменилось с отрицательного на положительное. LSTM сохраняет те же основные функции, что и RNN, но может лучше сохранять долговременную память.

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

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

import pandas as pd
dataset = pd.read_csv('Google_Stock_Price_Train.csv',index_col="Date",parse_dates=True)

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

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

#Data cleaning
dataset.isna().any()# Feature Scaling Normalization
from sklearn.preprocessing import MinMaxScaler
sc = MinMaxScaler(feature_range = (0, 1))
training_set_scaled = sc.fit_transform(training_set)# Creating a data structure with 60 timesteps and 1 output
X_train = []
y_train = []
for i in range(60, 1258):
    X_train.append(training_set_scaled[i-60:i, 0])
    y_train.append(training_set_scaled[i, 0])
X_train, y_train = np.array(X_train), np.array(y_train)

# Reshaping
X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], 1))

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

На этом этапе мы будем передавать различные функции в нейронную сеть.

# Importing the Keras libraries and packages
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
from keras.layers import Dropout

Обучение нейронной сети

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

# Initialising the RNN
regressor = Sequential()# Adding the first LSTM layer and some Dropout regularisation
regressor.add(LSTM(units = 50, return_sequences = True, input_shape = (X_train.shape[1], 1)))regressor.add(Dropout(0.2))

# Adding a second LSTM layer and some Dropout regularisation
regressor.add(LSTM(units = 50, return_sequences = True))
regressor.add(Dropout(0.2))

# Adding a third LSTM layer and some Dropout regularisation
regressor.add(LSTM(units = 50, return_sequences = True))
regressor.add(Dropout(0.2))

# Adding a fourth LSTM layer and some Dropout regularisation
regressor.add(LSTM(units = 50))
regressor.add(Dropout(0.2))

# Adding the output layer
regressor.add(Dense(units = 1))
# Compiling the RNN
regressor.compile(optimizer = 'adam', loss = 'mean_squared_error')

# Fitting the RNN to the Training set
regressor.fit(X_train, y_train, epochs = 100, batch_size = 32)

Оптимизатор

Различные типы оптимизаторов могут сильно повлиять на успех сети. Для этой сети мы будем использовать оптимизатор Adam. Этот оптимизатор представляет собой комбинацию двух других оптимизаторов: ADAgrad и RMSprop.

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

Адам или оценка адаптивного момента могут быть представлены формулой

Регуляризация

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

Пропуски

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

Генерация выходных данных

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

Визуализация

# Visualising the results
plt.plot(real_stock_price, color = 'red', label = 'Real Google Stock Price')
plt.plot(predicted_stock_price, color = 'blue', label = 'Predicted Google Stock Price')
plt.title('Google Stock Price Prediction')
plt.xlabel('Time')
plt.ylabel('Google Stock Price')
plt.legend()
plt.show()

Прогноз нашей модели:

Вывод

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