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

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

ブログ    
ブログ    

推薦する

自動運転のフードデリバリーが利用可能に、Meituanがすぐにあらゆるものを配達

北京、首鋼冬季オリンピック公園。最近、「MAI Shop」という小売店がここにオープンし、すぐにネッ...

高性能な MongoDB データ移行ツールの構築: Java 開発の実践

ビッグデータ時代の到来により、データ移行は多くの企業や組織が直面しなければならない課題の 1 つにな...

ジャック・マーの未来の3大技術、AI、IoT、ブロックチェーンを理解する

ジャック・マー氏は今年の中国科学技術協会年次総会の開会式で、今後10年から20年の間に社会全体に大き...

サービスロボット市場の最前線に立つセキュリティは注目に値する

現在、サービスロボットは中国のロボットが他のロボットを追い抜く重要なチャンスとみなされており、あらゆ...

普通のプログラマーがAIを活用する方法

[[187452]]現在、人工知能はますます人気が高まっている分野となっています。普通のプログラマー...

米軍は市街戦環境向けの人工知能システムを開発中

米陸軍研究所は、都市環境における兵士の状況認識力と戦闘能力を向上させるために、認知・神経工学共同技術...

Baiduの新しい論文はGram-CTCを提案:単一システムの音声転写が最高レベルに到達

[[188128]]最近、百度シリコンバレーAI研究所の劉海栄氏、李翔剛氏らは、音声認識の速度と精度...

...

データセンター: クラウドと AI 導入の鍵となる要素

2023 年の新規建設の大幅な増加は、データ センターの空室率が史上最低水準にある重要な時期に起こり...

...

...

iSoftStoneはインテリジェントな顧客サービス市場に参入し、専門性と専門知識で地位を確立しました。

今日、カスタマー サービス ロボットは私たちにとって馴染み深い存在です。電話料金、住所、登録、ビジネ...

RNNに注目メカニズムを導入し、5つの主要分野におけるシーケンス予測問題を解決する

[[198915]]エンコーダー/デコーダー アーキテクチャは、多くの分野で最先端のパフォーマンスを...

機械学習の概要

概要:この記事を読むと、次のことができるようになります。さまざまな種類の機械学習の問題を識別します。...