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

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

ブログ    

推薦する

...

AIが麻雀をプレイする論文:理系の学生にとって麻雀はこう見える

AI 研究の初期の頃から、チェッカー、チェス、囲碁、ポーカーから StarCraft II に至るま...

安定したビデオ拡散がここにあります、コードウェイトはオンラインです

AI描画で有名なStability AIが、ついにAI生成動画の分野に参入した。今週の火曜日、Sta...

...

不確実な環境で自動運転を実現するにはどうすればよいでしょうか?

この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...

ネットワークにおける機械学習の実際の応用

インターネット接続の需要が急速に高まっているため、企業にはネットワーク インフラストラクチャ、パフォ...

テスラのオプティマスロボットプロジェクトは強化学習などの分野でエンジニアを募集している

テスラは11月1日、強化学習の専門家を含むヒューマノイドロボットプロジェクト「オプティマス」のエンジ...

2,000 ドル相当のコースノートをオープンソース化しました。講演者はKaggleの元チーフサイエンティストです!

数日前、fast.ai の創設者であり、Kaggle の元主任科学者である Jeremy Howar...

...

協働ロボットは従来のロボットとどう違うのでしょうか?

協働ロボットは従来のロボットとどう違うのでしょうか? [[418520]]本質的には、協働ロボットと...

「ビッグモデルは基本的に2つのファイルです!」テスラの元AIディレクターが一般向けに1時間にわたるLLMポピュラーサイエンスを披露

テスラの元AIディレクター、アンドレイ・カルパシー氏の新しいチュートリアルが話題になっている。今回、...

Google が AVA データベースを開始: 動画内の人間の行動を機械が認識できるようにする

[[207258]]コンピューター ビジョンはテクノロジー企業にとって恩恵となりつつあり、これまでは...

データ構造とアルゴリズム: 単調に増加する数値

[[439817]]単調に増加する数字LeetCode の問題へのリンク: https://leet...

無料の Python 機械学習コース 6: ニューラル ネットワーク アルゴリズム

ニューラルネットワークは人間の脳を模倣するために開発されました。まだ実現されていないものの、ニューラ...

GoogleのチーフAIサイエンティスト、フェイフェイ・リーがスタンフォード大学のAIラボを離れ、再び戻る可能性

BI中国語ウェブサイトが6月28日に報じた。グーグルの主任人工知能(AI)科学者、フェイフェイ・リー...