【TensorFlow】機械学習で株価の予測を試してみる その4
05
- 5月
2017
Posted By : boomin
【TensorFlow】機械学習で株価の予測を試してみる その4

 

Advertisements

概要

前回、TensorFlowを使い、国際線の旅客数の推移を予測してみました。

結果は、これはいける!という感じです。

そこで、今回は実際の株価を予測してみましょう。

 

やってみようと思うこと

以下の通りです。

実際には、前回、国際線の旅客数の推移を予測してみた時と、ほぼ一緒です。

要するに、データだけ変えてみた感じです。

  • フレームワークにTensorFlowを使ってみる
  • 再帰型ニューラルネットワークである、RNN(Recurrent Neural Network)を使ってみる
    • 自分自身の過去のデータを学習することで、未来を予測する
    • RNNの実装として、LSTMを使う

 

Advertisements

NNの構築

パラメータチューニングが難しいことは周知の事実ですから、とりあえず適当なパラメタでNeural Networkを組んでみましょう。

# 隠れ層のノード数
nunit=8
# dropの比率
droprate=0.9995
# 入力層
net = tflearn.input_data(shape=[None, steps_of_history, 1],name="input_layer")
# 隠れ層(1層目)
net = tflearn.lstm(net, n_units=nunit, activation='relu', name="hidden_layer_1", return_seq=True, return_state=False)
net = tflearn.dropout(net, droprate, name="dropout_1")
# 隠れ層(2層目)
net = tflearn.lstm(net, n_units=nunit, activation='relu', name="hidden_layer_2", return_seq=False, return_state=False)
net = tflearn.dropout(net, droprate, name="dropout_2")
# 出力層
net = tflearn.fully_connected(net, 1, activation='linear',name="output_layer")

 

 

それでは機械学習開始

では学習させてみましょう。

net = tflearn.regression(net, optimizer="adam", learning_rate=0.001, loss="mean_square")
model = tflearn.DNN(net, tensorboard_verbose=0, tensorboard_dir="log")
model.fit(trainX, trainY, show_metric=False, validation_set=0.1, batch_size=3, n_epoch=20)

 

いろいろとパラメータがありますが、最終的によく合ったように見えたものを使っています。

 

早速結果

それでは、結果を見てみましょう。
東証一部上場のH社の終値を、期間内で最小値を0、最大値を1となるように規格化してあります。
期間中の前半の80%を訓練データ、残りの直近部分20%を予測(評価)に使っています。

 

結果のグラフ

 
終値の予測

 
黒破線:実際のデータ
青実線:学習期間のデータによる再現値
赤実線:学習期間外のデータによる予測値
 

なお、この結果は、予測点の予測は、その前の2点から予測を行っています。
すなわち、2日分のデータから、次の日の予測を行っていることになります。

 

全体感

かなりいい感じの再現、予測ができていると思います。
みなさんは、どう思われるでしょうか。

 

それでも、大きく外れているポイントがある

以下のタイミングは、実際の値(黒点線)と予測値(赤実線)で大きくずれています。

  • 2017年2月頃
  • 2017年7月頃
    • 2017年10月頃までか?

なぜか、大きく下に外れるものの、上へのずれ方はそれほどおかしくないですね。

一方で、ピークの位置も悪くないです。
すなわち、「いつ」上がるのか下がるのかは、予測できていると言えそうです。

 

最後に

これをさらに精度を上げていきたいですね。
特に期待するのは、以前に取り組んだこれ、やこれのように、twitterのデータを取り込むことをやってみたいです。

ただ、どう取り込むかは難しいですね。
以前のように、twitterのつぶやきを愚直にそのままベクトル化しても効果は薄そうです。

  • どのアカウントを使うか
  • いつの内容を使うか
  • どのように加工するか
    • データ間で演算する
    • データを解釈して新たなベクトルや値をつくる

こんな工夫が必要そうです。まだまだ、先は長そうだなぁ。。。

Advertisements

コメントを残す