LSTMによる株式市場価格予測方法
金融業界は、投資分析や業務に機械学習や深層学習を取り入れ、顧客に付加価値を与えた最初の業界の1つでした。 機械学習、ディープラーニング、そして2000年代から現在までの「クオンツ」革命全体以前は、アナリストや投資家は技術的にあまり依存していない手法に頼っていました。 ファンダメンタル分析とテクニカル分析が君臨し、それらは今でも分析の大きな部分を占めていますが、今ではコンピュータが行う予測や分析と組み合わされるようになっています。
多くの人が知っているように、株式市場とは人々が株を売買する場所です。 この株式を売買する行為(=取引)は、「取引所」と呼ばれる物理的・仮想的な環境で行われます。 これらの取引所は、インデックス(一般に知られているのはダウ平均やNASDAQ総合)のハウスである。 取引所では、インデックスを構成する株式の価格が設定される。
株式の価格を変動させる要因はたくさんある。 企業の現在または将来の見通しに関する良いニュースや悪いニュースを伝える毎日の報道は、間違いなく日々の価格変動を引き起こす最も影響力のある要因の1つです。 企業の収益性、収益の伸び、将来の拡大の見込みは、長期的および短期的な価格変動を設定することができる指標です。 ディープラーニングやその他の統計モデルは、それほど多くを説明することができず、通常、長期的(例えば数年)ではなく、短中期的な予測に適しています。
より速く結果を得ることに興味がありますか?
Exxact Deep Learning Solutionsについてもっと知る
Unpacking Long Short Term Memory Models (LSTM)
ソース
LSTM は Recurrent Neural Network (RNN) を派生させたものです。 RNN は、おそらく 1 週間から 1 か月の短い時間軸のための適切なモデルです。 それ以上になると、RNNは信頼性の高い予測を行うことはできません。 これはVanishing Gradient問題によるものです。
ARやその派生型、ANN(Artificial Neural Network)などの通常の時系列手法は、前日の価格とその他の特徴に大きな重みをかけて学習することができます。 金融時系列では、リターンやボラティリティを予測するためにARCHモデルやその派生モデルを使用することになります。 フィード・フォワード・ネットワークでは、これらのポイントは互いに独立であると考えられる。 つまり、LSTMは従来の時系列予測手法のようなアプローチはとらない。
LSTM Using Different Dependencies in Forecasting
LSTMは、上の図で真ん中の長方形に描かれているように、「セル」と呼ばれるものを介してデータを受け取ります。 このセルの状態を通じて、LSTMは物事を記憶したり忘れたりすることを選択することができる。
LSTMは、受け取る情報に応じて3つの異なる依存関係を持ちます。
-
- 前のセルの状態(つまり、前の時間ステップ後にメモリに存在していた情報)
- 前の隠れた状態(つまり、これは前のセルの出力と同じ)
- 現在の時間ステップの入力(つまり。
- 現在の時間ステップの入力(すなわち、その時点で入力されている新しい情報)
金融資産価格予測の領域では、これらの依存関係は以下のように説明できます:
- 前のセルの状態 – 前日の株のトレンド
- 前の隠れた状態 – 前日の株の値段
- 現在の時間ステップの入力 – 値動きをすることができるその他の要因 前日の株のトレンドは、前日に入力されている。 これは通常、一日を通して投資家に利用可能になるニュースアラートになります。

Source
上の図で、水平線ctはLSTMのメモリであるセルの状態を示している。 前述したように、これは前日(1日)の株価の動向に関するものである。 その情報はセルに流れ込み、流れ込んできた他の情報と一緒に処理されます。 ct-1で示される線は隠れ状態(2)であり、株価予測の場合、前の時間ステップの情報(すなわち前日の株価)が含まれます。 ht-1で示される水平線は現在の入力であり、現在の株価である(3)。 前日の株価(Hidden State)、現在の株価、前日のトレンド(Cell State)を組み合わせて、LSTM は出力を生成します。
Python Code to Create an LSTM Prediction Model
以下の Python コードでは、株価を予測する LSTM モデル作成手順を説明しています。
- # -*- coding: utf-8 -*-
- """EXXACT - Stock Market Prediction LSTM.ipynb
- Automatically generated by Colaboratory.
- """
- # By running this line of code, you will be prompted to select your file to upload.
- from google.colab import files
- uploaded = files.upload()
- import io
- import pandas as pd
- import numpy as np
- import matplotlib.pyplot as plt
- %matplotlib inline
- from matplotlib.pylab import rcParams
- rcParams=20,10
- from keras.models import Sequential
- from keras.layers import LSTM,Dropout,Dense
- from sklearn.preprocessing import MinMaxScaler
- df = pd.read_csv(io.BytesIO(uploaded))
- print(df)
- df=pd.to_datetime(df.Date,format="%Y-%m-%d")
- df.index=df
- data=df.sort_index(ascending=True,axis=0)
- new_dataset=pd.DataFrame(index=range(0,len(df)),columns=)
- for i in range(0,len(data)):
- new_dataset=data
- new_dataset=data
- train_data=final_dataset
- valid_data=final_dataset
- new_dataset.index=new_dataset.Date
- new_dataset.drop("Date",axis=1,inplace=True)
- scaler=MinMaxScaler(feature_range=(0,1))
- scaled_data=scaler.fit_transform(new_dataset)
- x_train_data,y_train_data=,
- for i in range(60,len(train_data)):
- x_train_data.append(scaled_data)
- y_train_data.append(scaled_data)
- x_train_data,y_train_data=np.array(x_train_data),np.array(y_train_data)
- x_train_data=np.reshape(x_train_data,(x_train_data.shape,x_train_data.shape,1))
- lstm_model=Sequential()
- lstm_model.add(LSTM(units=50,return_sequences=True,input_shape=(x_train_data.shape,1)))
- lstm_model.add(LSTM(units=50))
- lstm_model.add(Dense(1))
- inputs_data=new_dataset.values
- inputs_data=inputs_data.reshape(-1,1)
- inputs_data=scaler.transform(inputs_data)
- lstm_model.compile(loss='mean_squared_error',optimizer='adam')
- lstm_model.fit(x_train_data,y_train_data,epochs=1,batch_size=1,verbose=2)
- X_test=
- for i in range(60,inputs_data.shape):
- X_test.append(inputs_data)
- X_test=np.array(X_test)
- X_test=np.reshape(X_test,(X_test.shape,X_test.shape,1))
- predicted_closing_price=lstm_model.predict(X_test)
- predicted_closing_price=scaler.inverse_transform(predicted_closing_price)
- train_data=new_dataset
- valid_data=new_dataset
- valid_data=predicted_closing_price
LSTMを使って株価を予測できるプログラム
これで、LSTMを使って証券取引所の株価を予測するためのPythonコードができあがりました。 試してみて、どのように動作するか教えてください。 LSTM がさまざまなアプリケーションでどのように使用されているかについては、
ディープラーニング ワークステーションまたはサーバーについて何かご質問がありますか。