細かいことは置いといてLSTMで株価予測を試してみる

Python

概要

時系列データの分析に適したアルゴリズム、LSTMを利用して、みんな大好き株価の予測のモデルをお試しで作ってみました。

時系列データの分析については初心者なので、細かい理論についてはつよつよさんにお任せして、簡単な実装の方法だけ記します。

使い方に間違いあればご指摘ください。


LSTMについて

LSTM概要

LSTM(Long Short Term Memory)は、ニューラルネットワークを利用したアルゴリズムの一つです。

時系列データに適したニューラルネットワークとしてはRNN(Recurrent Neural Network)が有名ですが、LSTMはRNNの弱点である勾配消失問題を解決するために提唱されたRNNの改良版のアルゴリズムだそうです。

詳細はこちらのQiitaの記事がまとまってたのでご覧ください。(今度こそわかるぞRNN, LSTM編

ちなみに、ニューラルネットワークを利用しない場合、ARIMAなどのモデルが有名です。余裕あれば実装してみます。


入出力の型 イメージ

LSTMには、窓と呼ばれる連続する時系列データをひとまとまりにしたものを入力する必要があります。

イメージし辛いので、入出力の形を下記の図にまとめました。

LSTM入力層出力層イメージ

図は窓を「5」に設定し、過去5回分のデータを学習して、次に来る6回目のデータを予想するというモデルの概要になってます。

実装

データ確認

早速実装してみます。

まずは、データのインポートと株価のデータの波形の確認を実施します。

なお、今回予測するデータは日経平均株価のデータをこちらから持ってきて利用します。

出力結果(日経平均株価時系列データ)

細かい上下の動きはありますが、周期性が見られない点が気になります。

LSTMは過去のデータの傾向を利用して、未来を予想するので周期性が見られないと精度が下がってしまうのではないかと懸念されるのですがどうでしょうか。

入力データを加工

入力データは前項の説明の通り、数日分のデータを集めた「窓」と呼ばれる形に加工する必要があるので、test,trainのデータをそれぞれ加工していきます。

教師データの方は、50個の窓ができてます。大丈夫そうですね。

いざ実装

前準備が終わったので実装していきます。

実装には信頼と安定のKeras君を利用します。

60epoch回して学習が終了しました。val_lossも収束してるので学習曲線は割愛します。

実測値と予測値のグラフを書いてみましょう。

出力結果(予測値と実際の株価)

めちゃちゃんと予測できてる。と、一見そう見えますがグラフをよく見ると

予測値(青グラフ)が実測値(オレンジグラフ)を少し遅れて後追いしているだけのように感じられます。

LSTMでは陥りやすい現象のようで、タイムラグがあるモデルであることから「Lag Model(ラグモデル)」と呼ばれてるみたいです。(多少丸まってるのはDropout層が入ってるせいかと思われます。)

おまけ 教師データなしで未来の予想

最後にちょっと遊んでみます。

自身の予測値を教師データとして利用して、今回作成したモデルで株価の未来を予測してみたいと思います。

ちなみに、こちらのQiitaの記事を参考にしました。

初心者のRNN(LSTM) | Kerasで試してみる - Qiita
時系列データ解析の為にRNNを使ってみようと思い,簡単な実装をして,時系列データとして ほとんど,以下の真似ごとなのでいいねはそちらにお願いします. 深層学習ライブラリKerasでRNNを使ってsin波予測 LSTM で正弦波を予測す...

こちらの記事ではsin波を再現していますが、sin波は周期性のあるデータなのでLSTMを利用しても再現性が高いと考えられます。

株価みたいな突発性が高いデータですると、予測値が発散するか収束するかになってしまいそうですがどうでしょうか?

出力結果

ですよね。

案の定、株価の予測値は収束して実測値との乖離はエラいことになりました。

そんな簡単に株価の予想ができたら苦労しないですね。調子に乗りました。


まとめ

  • LSTMは周期性のあるデータには向いてるが、ランダム性の高い株価予測は難しい。
  • 億り人は遠い。
  • Keras君からPytorch君に浮気したい。

その他 参考文献

【入門編】機械学習で仮想通貨の価格予測!KerasでLSTMモデルを構築してビットコインとイーサリアムの翌日の価格を予測する方法
入門編としまして、機械学習で仮想通貨の予測をこれから取り組もうと考えている方が対象です。実際にLSTMを構築してビットコインとイーサリアムの翌日の価格を予測してみましょう。

コメント

タイトルとURLをコピーしました