当サイトではアフィリエイトプログラムを利用して商品を紹介しています。

プログラミング

【TensorFlow】LSTMを用いた日経平均株価の予測 【機械学習】

LSTMのSVG形式表現の画像

 

こんにちは、ありすけ(@arisukeblog)です。

最近、ブームになっているディープラーニングや機械学習に興味があり、Pythonで使える機械学習ライブラリのTensorFlowを使って遊んでいます。

C言語に慣れ親しんだ私にとっては、Pythonのコーディングのやりやすさにすっかり虜になっています。

 

今回は、そんな機械学習プログラミングをせっかく覚えたので、TensorFlowを使ってLSTM(Long short-term memory)を組み、日平均株価(N225)を予測するプログラミングを紹介したいと思います。

 

※私はディープラーニングや機械学習について独学で学んだ素人であり、プログラミングのコードは書籍とネット情報を駆使して作成したものになりますので、参考程度として捉えて下さい。

 

予測手法の概要

まず、日経平均株価10日分データをINPUTとし、次の日の日経平均株価をOUTPUTとするLSTMモデルを組みます。

このモデルを使って次の日の日経平均株価の予測を行い、次に、この予測した株価を含む直近10日分のデータをINPUTとしてモデルに与え、さらに次の日の日経平均株価を予測します。

こうすることで、任意の日にちの先の日経平均株価の予測ができる(のではないか?)という寸法です。

 

イメージ:

LSTMを使ったN225の予測システムの概要の画像

予測に使用する日経平均株価データはYahoo! Financeからダウンロードしたものを使います。

URL:https://finance.yahoo.com/quote/%5EN225/history?period1=-157420800&period2=1593907200&interval=1d&filter=history&frequency=1d

また、今回は、株式相場の市場性(市場参加者・規模・時代背景・金利・文化)等を考慮して、学習に使用するデータは、直近の10年間のデータとしました。

予測に使うN225のデータセットの画像

 

本記事の参考文献はこちら

 

プログラミング紹介

OS:Windows10

使用言語:Python

プログラミング環境:jupyter notebook

 

まず、ダウンロードしたN225のCSVデータを作業フォルダに入れて、データの読み込み作業を行います。

 

 

まずはこれでCSVがきちんと読み込めたかどうか確認します。以下の表示がでたらOKです。

N225データを読み込んだ際の表示画像

今回の予測には、”Close”(終値)のデータを使います。

 

次に、読み込んだデータをグラフ化して、読み込んだデータが意図したものか確認します。

CSVから読み込んだだけではグラフ表示用のデータ型としては不適切なので、少々面倒ですが、グラフ表示に適したデータ型に変換してグラフ表示します。

 

実行したら、こんな野暮ったいグラフが出てくればOKです。

N225データをグラフで表示した際の画像

 

次にデータセットを作っていきます。

データセットとは、機械学習において学習用にモデルに合わせてデータを整理したものになります。

 

10日分の終値データをX、その次の日の終値データをY としたセットを沢山作っていきます。

文書で説明すると分かりづらいと思いますので、以下のイメージになります。

N225のデータセットの説明画像

この場合、全部で2438個のデータセットが作れます。

データセットを作った後、8割をLSTMモデルの訓練用、残りの2割をLSTMモデル検証用のデータとして使用します。

ちなみに、ここでデータの正規化を行っています。

コードはこちら。

 

ちなみに、今回はモデルへのINPUTとして10日分のデータとしていますが、プログラム上は変数(maxlen)を使って指定しているのでで他の日数にすることもできます。

何日分のデータをINPUTとするのかは、設計者のセンスによるものかもしれませんね。

 

次に、LSTMモデルを構築します。

 

ここも設計者によってどのようなモデルを組むのか自由ですが、とりあえずえいやで設定しています。

SVG形式ですと以下のモデルになります。

LSTMモデルのSVG形式の表現の画像

 

次に、このLSTMモデルに対し、学習を行います。

 

batch_sizeというのは、訓練データをいくつかに分けて学習するミニバッチという手法を利用する際に、1個のデータのサイズ(データ数)です。ここでは256個ずつに分けます。

epochというのは、繰り返しの回数を表します。ここでは5回とします。

実行すると、こんな感じで学習が進みます。

LSTMの学習の様子を表す画像

 

次に、学習の過程をグラフ化します。

 

以下のようにグラフが出てきます。

LSTMの学習を行った結果の画像

epochが進むごとにloss(損失)が低くなっているので、学習できていることが分かります。

また、evaluation dataも同様に低くなっているので、過学習なく学習できていると思います。

次に、学習したモデルを使って、テストデータを使って予測を行います。

 

予測した結果が出てきます。

LSTMモデルを使って予測した結果の画像

10日分のデータを使って予測した結果を集めてプロットしたものが青色のグラフです。

精度よく予測できていそうですが、株価が大きく動いている日は予測結果との差がありそうです。

 

最後に、冒頭で説明したように任意の日にち目の日経平均株価を予測するプログラムを書きます。

 

この結果、以下のグラフが出来ました。

LSTMモデルを使って将来予測をした結果の画像

 

10日間のリアルデータを使って、11日後までの予測をした結果ですが、

11、12日目はそれっぽい予測をしていますが、それ以降は右肩下がりの結果となっています。

この理由は詳しくは分かりませんが、直近の値動きが予測結果に大きく影響を与えてそうです。

 

まとめ

LSTMを使って日経平均株価の次の日の予測をした結果、それっぽい予測値を得ることができました。

ただ、そこから先の予測はもうちょっと工夫が必要みたいです。

 

今後は、この予測を基に売買を行ったら儲かるのか?を次のテーマとしてやってみたいと思います。

以上、お読みいただきありがとうございました!


 

-プログラミング
-, , ,