Deeplearningの第2段
前回はLSTMによる株価予想をしてみました。
うまくいかなかったので、今回は多層パーセプトロンモデルでの予想をやってみます。
方針
今回の方針としては、日経平均価格を学習させて、未来の5日間に価格がどう変化するかを予想させます。
入力としては、終値のほかに、移動平均線、ボリンジャーバンド、MACD、RSIなどなどの22項目のデータを計算して入力データとします。
出力は未来5日間の終値が変化1%以内(0)、1%以上乱高下(1)、1%以上上昇(2)、1%以上下落(3)の4つのクラスで分類させました。
今回はコードもgithubに挙げておきました。
簡単に説明
stock_calc():quandlから株価データを取得します。APIの取得回数制限があります。2,3回動かすだけなら不要ですが、何度も行う場合は、quandlに登録したうえで認証キーを発行してもらい、quandl.get()関数でauthtokenを設定してください。
戻り値は始値、終値などの価格一覧のpandas.Dataframeとなりますが、属性名が取得先によってまちまちなので統一させる処理が入っています。
calc():移動平均など各種データを算出しています
build_multilayer_perceptron():kerasでレイヤを構築。
makedata():価格データをkaresに入力できる形(numpi)に変換し、各属性ごとに正規化を行っています。
fit():学習を開始します。./logフォルダにログと最新の学習済みモデルを出力しています。
結果について
というわけで結果なのですが…。
学習自体は正確度が順調に上がっていき、意図通り学習できていることがわかりました。
5000epoch程行うと正確度99%に近づきますが・・・
Epoch 4999/5000 876/876 [==============================] - 0s - loss: 0.0489 - acc: 0.9932 Epoch 5000/5000 876/876 [==============================] - 0s - loss: 0.0489 - acc: 0.9943 Accuracy = 0.99
最後の100件をテストデータとしてチェックしてみました。(もちろん教師データにはしていません)
ついでに最後の5日分のデータの予測値を表示してみると・・・
32/100 [========>.....................] - ETA: 0s loss:7.940821037292481 accuracy:0.36 5/5 [==============================] - 0s 過去5日間の予想値 [2 2 3 3 3]
36%・・・。
4クラスの分類なので、ランダムに選んだ場合とあまり変わらないという結果になりました。
また、5日前の予想は2=上昇と予想していますが、実際は1%以内で変化なし(方向性としては下落でした)なので全く外れています。
考察
一応、サンプル数が少なすぎるのかな?ということで日経平均と相関関係がありそうな日経平均採用銘柄のデータも学習データとして入力してみました。
学習に非常に時間がかかるので、コメントアウトして動かないようにしてありますが、ちょっと試した限りではこれでもダメそうでした。
値動きから予想するということであれば、やはり時間軸がないデータではだめな気がします。
今後の予定
株価の予想は無理な気がしますが、あとやるとすればもっと次元を増やす方向で、数日分のデータをいっぺんに入れてみることが考えられます。
ここで成果が出ないようなら別のものを試してみようと思っています。
不動産価格とか中古車とかもっと明確に属性値から価格が算出できそうなものほうが良い気がします。
また、計算量が多いので避けていましたが、成果がわかりやすい画像分類もやってみたいところです。