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 で自然言語処理を始める

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

ブログ    
ブログ    
ブログ    

推薦する

...

この記事では、さまざまな教師なしクラスタリングアルゴリズムのPython実装について簡単に説明します。

教師なし学習は、データ内のパターンを見つけるために使用される機械学習技術の一種です。教師なし学習アル...

Alipayの検索エクスペリエンスを向上させるために、Antと北京大学は階層的コントラスト学習を使用してテキストフレームワークを生成

テキスト生成タスクは通常、教師強制法を使用してトレーニングされ、これにより、モデルはトレーニング中に...

2018 年に知っておくべき 15 の人工知能統計

人工知能(AI)は日々驚異的な速度で成長しており、それに伴い、さまざまな業界を取り巻く統計も変化して...

GPT-4はプロンプトインジェクション攻撃に対して脆弱であり、誤った情報につながる

翻訳者 | ブガッティレビュー | Chonglou最近、ChatGPT は、与えられたあらゆる入力...

世界トップ10のAIトレーニングチップの包括的なレビュー

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

Orange3 の探索: データ マイニングと機械学習の新しい世界を開きます。

Orange3 は、豊富なデータ処理、分析、モデリング機能を提供する強力なオープンソースのデータ視...

AIを活用した臨床モニタリングシステムの台頭

人工知能(AI)は生活のあらゆる分野に浸透しています。人工知能は医療にどのようなメリットをもたらすの...

システムと機械学習を接続するための MLOps の課題は何ですか?この記事は明らかにしている

[[418732]]機械学習は、人々がデータを利用し、データとやり取りする方法に革命をもたらし、ビジ...

トップレベルの人工知能チームを構築するにはどうすればよいでしょうか?

市場には優れた AI ソフトウェア ツールが数多く存在しますが、プロジェクトを実装する際には強力なチ...

エッジAIはテクノロジー業界に大きな変化をもたらしている

近年、人工知能 (AI) の出現により、私たちの産業や個人の生活は真に革命的な変化を遂げ、これまでに...

2021年の人工知能業界の予測

[[375635]] 2020 年は激動の年であり、組織は数多くの課題に直面しました。 2021年に...

...

...