はじめてのKerasを使った株価予測(ディープラーニング)

毎年年末年始やGWに技術学習・Webサイト構築してきたのに、今年は何もしていない・・・

  • 2017年始:opencv使った社内アイデアコンテスト9件作成
  • 2017年GW:テクニカル指標学習・protra、omegachart改編
  • 2018年始:車の破壊とパソコン窃盗処理
  • 2018年GW:仕事の事で頭いっぱい

これではいかんので、過去6回挫折している人工知能に手を出しました。

  • 2001年:人工知能専攻するも理解できず
  • 2002年:遺伝的アルゴリズムのサンプル貰うも分からず
  • 2014年:ディープラーニング学ぶも3日坊主
  • 2015年:chainer知るもインストールで終わり
  • 2017年:tensorflowで mnistサンプル実行で終わり
  • 2017年:はじめてのディープラーニング買うも3日坊主

そもそも人工知能の学科卒業だし、画像認識専攻です。

主成分分析、非線形最小二乗法などを研究で利用していたのだが、なぜ世の中に遅れをとらにゃいかんのだ・・・

 
 

はい。技術力が無いからです・・・。

 
 

なら、アプローチは

簡単なレベルから成功体験を少しずつ築く

です。

最近はディープラーニングに関するブログも増え、GUIやWebブラウザから学習できる簡単なサービスも増えました。

が、株のバックテスト環境検討のときと同じで、最低限のプログラム学習は兼ねたいです。

施策は二つのアプローチで進めます、少しずつ少しずつ・・。

【基礎から学ぶ】

  • パーセプトロン(単純、多層)
  • ニューラルネットワーク(活性化関数)
  • ニューラルネットワークの学習(損失関数、勾配法)
  • 誤差逆伝搬法
  • 畳み込みニューラルネットワーク(畳み込み層、プーリング層、CNN)
  • ディープラーニング

【簡単フレームワークから学ぶ】

  • Keras(ケラス)によるモデル構成
  • PyTorchによるモデル構成
  • Tensorflowによるモデル構成

【目標】

ディープラーニングを理解すること

※ ここでいう「理解した」状態とは?

  • 数式による基礎概念を理解し、ゼロから実装できること
  • 主要フレームワークの特徴を理解し、自分で学習させたいモデル形成できること

ディープラーニングを学習するには、この本がオススメです。

なぜプログラム言語は pythonか?

matlabは特に行列計算が容易に書けますが、ライセンスが有料なので気軽には使えませんでした。

そこでpythonに、matlabのような使い勝手の良い数値計算ライブラリ(numpyとかmatplotlibとか)が開発されました。

この頃から機械学習を利用する上で便利な言語としてpythonが大人気になりました。

なぜ keras からか?

最も初心者に優しいのはKerasだからです。

keras

層をただただ積み重ねていくだけという実装でディープラーニングが試せます。

Kerasの登場により、ディープラーニング入門は誰にでもできるという状況が訪れました。

これにより、「どのような層を配置して、どれくらいの数どのように学習をするか」という概念の理解からスタートできます。

ただし、Sequentialと既存の目的関数で事足りる場合は良いのですが、それを外れる面倒なので早めにPyTorchにシフトする方がよいとのことです。

なぜ 株価予測を題材にするのか?

個人的興味もあるけれど、連続的でディープラーニングを理解するのに適しているからです。

過去の株価データはネット上に公開されており、誰でも容易に入手できる。しかも、1980年代くらいまでの高々数千件程度しかないため、学習もすぐ終わるので、パラメーターをいろいろ変えてその影響を見るということが、容易にできる。

このように、株価予測というテーマは、誰にでも簡単にできて、ニューラルネットワーク構築上のノウハウ取得にも有益なテーマと言える。

【引用】Kerasを用いたディープラーニング(LSTM)による株価予測

Kerasのおかげて、「データの前処理(加工)」の労力が7~8割となります。

このデータ前処理は、今までのテクニカルトレードの経験で私にも多少の優位性があります。

1

ちなみに、入力データを何にするかは大事で、単に株価を渡しても予測の正解率は一般的に「50%~55%」程度となります。

でも、そこは今回の本質ではありません。

「ブラックショールズ方程式」でも、株価はランダムに変動するというモデルによって理論化されていると言っています。

しばらくは基礎概念理解を優先することにします。

kerasでのネットワークを組み方

kerasでのネットワークを組み方の例です。

【引用】KerasでDeep Learning:LSTMで日経平均株価を予測してみる

DenseというのはDensely-Connected なニューラルネットの層を指します。

学習は次のように行います。

たったこれだけで、ディープラーニングが組めます。

 
 

が・・・まだ、何をしているのか、よく分からない・・。

仕方ないので、ネット上からサンプルコードを見つけてきて、実行することにします(コードは後述)。

でも、このサンプルコードはSequential()を呼び出してないなあ・・・うーん。

学習結果

予測データと、2017年の実株価をプロットしてみます。

pred

グラフで見ると、テストデータと予測が一致していて精度よく見えてますが・・。

ここで、出力結果の説明です。

loss: 56.6340
price_loss: 55.9426
updown_loss(学習用データでの収束度?): 0.6914
updown_acc (学習用データでの精度): 0.5275
val_loss: 6.0334
val_price_loss: 5.3441
val_updown_loss(検証用データでの収束度?): 0.6894
val_updown_acc(検証用データでの精度): 0.5540

updown_acc、val_updown_accのどちらも 50%~55% 程度となっています。

単純に考えると上がるか下がるかが当たる確率は 50% です。

つまり、50%~55% という予測精度は 2 値予測においては高い精度とは言えません。

ちなみに結果が出るまで17分かかりました。

バックテスト結果

まだ方法が分からず・・・。

ソースコード

sklearn 0.19以後ValueErrorがでたり、k-dbは閉鎖したので、いくつか修正しています。

また1330.csvの中身は、protraの取得したデータを使っています。

【元コード】ディープラーニングで株価予測するときの罠

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