Прогнозирование инвестиционных цен до сих пор было сложной задачей для аналитиков. Престижные фонды и банки начали пользоваться преимуществами искусственного интеллекта. Поскольку данных много, создание модели машинного обучения чрезвычайно эффективно. Кроме того, во многих фирмах работают тысячи сотрудников, которые стали бы ненужными благодаря ИИ и МО. Простой и точный способ тестирования этой технологии — создание нейронной сети с долговременной кратковременной памятью на основе прогнозирования временных рядов.
ЛСТМ?
Модель 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 года.