PytorchはLSTMが難しいらしいし、TensorFlowも難しいので未挑戦です。
Kerasは、TensorFlowのラッパークラスだけどAIライブラリの中で一番簡単です。
ということでディープラーニングを学ぶために、Kerasを使って少しずつ学習を進めています。
- 【5回目】Kerasを使ったMatplotlibのグラフ整形と日本語表示(ディープラーニング)
- 【4回目】Kerasのモデル保存・利用(ディープラーニング)
- 【3回目】Kerasを使って活性関数・目的関数・最適化手法をまとめる
- 【2回目】KerasのFunctional API Modelの構造を理解する
- 【1回目】はじめてのKerasを使った株価予測(ディープラーニング)
今回は株の利益を計算してみます。
で、LSTMによる 正解率は?
よく見ると、「AIの予測値」と「実際の株価」が一日ズレて表示されているようです。
要するに後出しジャンケンです。
LSTMは「一つ手前のデータと、これまでのパターンから次の値を予測する」ことをやってます。
実はこの場合、ただ単に一つ手前のデータをコピーして返しているだけなので株価予測には使えません。
試しに、株価の上下動が当たる確率を計算してみましょう。
どうやって計算すれば良いのか?
悩みましたが、ネットでサンプルコードを発見し改造しました。
1 2 3 4 5 6 7 8 |
# 株価の上下動が当たる確率を計算 def accuracy(original, predicted): good = 0 maxlen = len(original) for i in range(0, maxlen - 1): if np.sign(original[i+1] - original[i]) == np.sign(predicted[i+1] - predicted[i]): good += 1 print ("accuracy = {0:.2f}".format(float(good) / (maxlen) ) ) |
np.sign(x)は、配列xの符号を求めます。
要するに、翌日の上げ下げ予測が正しいか否かを正解率としています。
株価の上下動が当たる確率
結果は
accuracy = 0.49
でした。
つまり成果率は49%です。
で、次は?
何をもって正解とするか・・・それが難しい。
たとえば、このチャートでの正解ってどこよ?
今までのテクニカル分析は、テクニカル指標を組み合わせて、その閾値を越えるものを購入銘柄としてました。
そこにディープラーニングを組み合わせるとすると、どのテクニカル指標を組み合わせれば良いか?を解かせる・・とか、
テクニカル指標の閾値をディープラーニングで求める・・とか・・・・。
うーん、すでに機械学習時代からやられている方法なので、先は長そう・・・。
少なくとも、今の私に学習モデルの構築は無理そうだけど・・・。