LSTM ニューラルネットワークを使用して株価の動向を予測する

LSTM ニューラルネットワークを使用して株価の動向を予測する

[[434750]]

Python 中国語コミュニティ (ID: python-china)

LSTM ニューラルネットワーク

長短期記憶 (LSTM) ニューラル ネットワークは、時系列に関連する重要なイベントの処理と予測に特に適したリカレント ニューラル ネットワーク (RNN) の一種です。文脈推論の例として次の文を取り上げます。

「私はフランスで育ったので、流暢なフランス語を話します。」

なぜなら、同じ文の冒頭に「フランス」という国名が出て、最後に「話す」という動作が出てくるからです。したがって、LSTM は、長期記憶と短期記憶の 2 つの重要な信号、「フランス」と「話す」から、「フランス語」というより可能性の高い結果を推測できます。

ローソク足チャートもこれに似ています。株価は時間の流れと重要なシグナルの出現に反応します。

  • 価格が安定し、出来高が減少する統合レンジにおいて、出来高の突破とともに突然大きな赤いKが現れ、株価が上昇する可能性があることを示しています。
  • ギャップの後にアイランド反転が発生し、株価が下落する可能性があることを示します。
  • 数日連続で上昇した後、突然長い上ヒゲと下ヒゲを伴うクロスラインが現れ、株価が反転する可能性があることを示唆します。

LSTM が行う必要があるのは、一定期間内に K バーに重要なシグナル (ボリュームのある赤い K など) があるかどうかを調べ、将来の株価の傾向を予測することを学習することです。

LSTM株価予測の例

このデータは、2013年初頭から2017年末までの鴻海(2317)の日々の始値、終値、最高値、最低値、取引量に基づいています。

まず、データを書き込んで pandas DataFrame に保存し、N/A が含まれる可能性のある行を削除します。

データの書き込み:

  1. pandasをpdとしてインポートする 
  2. foxconndf = pd .read_csv('./foxconn_2013-2017.csv', index_col = 0 )  
  3. foxconndf.dropna( how = 'any' inplace = True )

元のデータが均一な範囲を持たずに大きすぎたり小さすぎたりして、トレーニング中に LSTM が収束するのが困難になるのを防ぐために、最小-最大-ゼロ-1 の正規化法を使用してデータを修正します。

  1. sklearn インポート前処理から 
  2. def normalize(df):  
  3. newdf = df.copy()  
  4. min_max_scaler =前処理.MinMaxScaler ()  
  5. newdf['open'] = min_max_scaler.fit_transform(df.open.values.reshape(-1,1))  
  6. newdf['low'] = min_max_scaler.fit_transform(df.low.values.reshape(-1,1))  
  7. newdf['high'] = min_max_scaler.fit_transform(df.high.values.reshape(-1,1))  
  8. newdf['volume'] = min_max_scaler.fit_transform(df.volume.values.reshape(-1,1))  
  9. newdf['close'] = min_max_scaler.fit_transform(df.close.values.reshape(-1,1))    
  10. 戻り値 newdf  
  11. foxconndf_norm =正規化(foxconndf)

次に、データはトレーニング セットとテスト セットに分割され、各データの時間枠が定義されます。

  1. numpyをnpとしてインポートする 
  2. データヘルパーの定義(df, 時間枠):
  3. # データディメンション: 始値、終値、最高値、最低値、取引量、5 次元 
  4. number_features =長さ(df.列)  
  5. # データフレームをNumPy配列に変換する 
  6. データ値= df .as_matrix()
  7. 結果= []  
  8. # 観察したいtime_frameが20日間の場合、検証の回答としてさらに1日を追加する必要があります 
  9. for index in range( len(datavalue) - (time_frame+1) ): # 0番目のデータ値から最後のtime_frame+1まで実行します 
  10. result.append(datavalue[index: index + (time_frame+1) ]) # time_frame+1のKバー値をインスタンスとして1つずつ取り出す    
  11.  結果= np .array(結果)  
  12. number_train = round (0.9 * result.shape[0]) # 結果の最初の90%のインスタンスをトレーニングデータとして取得します 
  13. x_train = result [:int(number_train), :-1] # トレーニングデータでは、各time_frameの最後のデータを除くすべてのデータのみを特徴として取得します 
  14. y_train = result [:int(number_train), -1][:,-1] # トレーニングデータでは、各time_frameの最後のデータの最後の値(終値)を答えとして取得します   
  15.   # テストデータ 
  16. x_test =結果[int(number_train):, :-1]  
  17. y_test =結果[int(number_train):, -1][:,-1]  
  18. # データをより良く見せる 
  19. x_train = np .reshape(x_train, (x_train.shape[0], x_train.shape[1], 特徴数))  
  20. x_test = np .reshape(x_test, (x_test.shape[0], x_test.shape[1], 特徴数))  
  21. [x_train, y_train, x_test, y_test] を返す 
  22. # 20日間隔で株価を予測 
  23. X_train、y_train、X_test、 y_test = data_helper (foxconndf_norm、20)

LSTM モデルとして Keras フレームワークを使用します。まず、前面に 256 個のニューロンを持つ 2 つの LSTM レイヤーを追加し、データのオーバーフィッティングを防ぐために Dropout レイヤーを追加します。最後に、ニューロン数の異なる 2 つの完全接続層を追加して、予測株価である 1 次元出力を取得します。

  1. keras.modelsからSequentialをインポートする 
  2. keras.layers.core から Dense、Dropout、Activation をインポートします 
  3. keras.layers.recurrent から LSTM をインポートします 
  4. kerasをインポートする 
  5. def build_model(入力長さ、入力寸法):  
  6. d = 0.3  
  7. モデル=シーケンシャル()  
  8. model.add(LSTM(256, input_shape = (input_length, input_dim), return_sequences = True ))  
  9. モデルを追加します(ドロップアウト(d))  
  10. model.add(LSTM(256, input_shape = (input_length, input_dim), return_sequences = False ))
  11. モデルを追加します(ドロップアウト(d))  
  12. model.add(Dense(16, kernel_initializer = "uniform" activation = 'relu' ))  
  13. model.add(Dense(1, kernel_initializer = "uniform" , activation = 'linear' ))  
  14. model.compile(損失= 'mse' オプティマイザー= 'adam' メトリック= ['精度'])
  15. リターンモデル 
  16. # 20日間、5次元 
  17. モデル= build_model (20, 5)

LSTMモデルを構築した後、以前に編集したトレーニングデータセットを使用してモデルのトレーニングを開始します。LSTMモデルのトレーニング

  1. # バッチには128個のインスタンスがあり、合計50回の反復が実行されます 
  2. model.fit( X_train、 y_train、 batch_size = 128 epochs = 50 validation_split = 0.1 verbose = 1 )

一定期間のトレーニングを経ると、LSTM モデルを取得できます。次に、このモデルを使用してテスト データを予測し、予測値 (pred) と実際の株価 (y_test) を元の株価の範囲に戻します。

LSTMモデルは株価を予測し、価値を回復します

  1. def denormalize(df, norm_value):  
  2. 元の値= df ['close'].values.reshape(-1,1)  
  3. ノルム値ノルム値= ノルム値.reshape(-1,1)  
  4. min_max_scaler =前処理.MinMaxScaler ()  
  5. min_max_scaler.fit_transform(元の値)  
  6. denorm_value = min_max_scaler.inverse_transform (norm_value)  
  7. denorm_value を返す 
  8. # トレーニング済みのLSTMモデルを使用してテストデータセットを予測する 
  9. 予測=モデル.予測(X_test)  
  10. # 予測値と実際の株価を元の間隔値に戻す 
  11. denorm_pred =非正規化(foxconndf,pred)  
  12. denorm_ytest =非正規化(foxconndf,y_test)

LSTM株価予測結果

復元された値を実際の株価に対してプロットして、それがどのように機能するかを見てみましょう。

LSTM株価予測結果

  1. matplotlib.pyplot を plt としてインポートします。  
  2. %matplotlib インライン 
  3. plt.plot(denorm_pred、= '赤' ラベル= '予測' )  
  4. plt.plot(denorm_ytest、= '青' ラベル= '答え' )  
  5. plt.legend( loc = 'best' )  
  6. plt.show()

下の図に示すように、青い線が実際の株価、赤い線が予測株価です。予想株価と実際の株価は全体的には似た傾向を示していますが、詳しく見ると、予想株価は実際の株価より数日遅れていることがわかります。

それでは、いくつかの設定を調整してみましょう。

  • 時間枠の長さの調整
  • Keras モデルにおける完全結合層の活性化と最適化の調整
  • Keras モデルは、さまざまなニューラル ネットワーク (タイプ、順序、数) を使用して、batch_size 調整、epochs 調整などを組み合わせます。

上記のパラメータを少し調整すると、実際の株価に近い予測結果が得られます。

<<:  Python で自然言語処理を始める

>>:  ディープラーニングの救済: 不十分な注釈付きデータによるディープラーニング手法

ブログ    
ブログ    

推薦する

RNN の効率は Transformer に匹敵し、Google は 2 つの新しいアーキテクチャをリリース: 同じ規模では Mamba よりも強力

今回、Google DeepMindは基本モデルに新たな動きを見せた。リカレント ニューラル ネット...

企業がAI対応データベースを使用してAI導入を加速する方法

企業は、AI を搭載し、AI 向けに構築されたデータベースを検討する必要があります。最適化と使いやす...

教師なしニューラル機械翻訳: 単一言語コーパスのみを使用する

概要: ニューラル機械翻訳 (NMT) は最近、標準ベンチマークで大きな成功を収めていますが、大規模...

2019年のAIインデックスレポートが発表されました。AI分野では大きな進歩がありましたが、結果はまちまちです。

この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...

...

...

「安佳」の人工知能版? 「AI仲介人」が近々登場?

この記事は公開アカウント「Reading Core Technique」(ID: AI_Discov...

おそらく2030年までに、量子コンピューティングのChatGPTの瞬間が到来するだろう

2030 年までに RSA 暗号を解読できるマシンが登場するでしょうが、まずは量子センシングやその他...

...

Google Brain の新しいアルゴリズムは TPU を使用せずに AI トレーニングを高速化できる

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

2021年にAIスマートカメラがもたらす新たな市場

[[393303]] 2020年から2021年にかけて、ほぼすべてのビジネス分野の組織が多くの予期せ...

人工知能とプライバシーの議論: AIの透明性の長所と短所を理解する

[[334476]] AI がますます多くの業界で採用されるようになるにつれ、AI のユーザーは、実...

...

ディープラーニングを使用してPythonコードを自動的に補完するこのオープンソースプロジェクトは非常に素晴らしい

コード補完機能は IDE では非常に一般的です。優れたコード自動補完機能により、作業効率が大幅に向上...