LSTMで株価予測(Heroku,Python)-データスクレイピング-

プログラミング
  • 昨今、どこもかしかもAIと言われています。何年後には人の仕事が無くなるだの、シンギュラリティを迎えて人類滅亡するだの色んなことが言われていますが、私としては気になる点はただ一つ。
機械学習・AIで金稼ぎはできるのか!?

金稼ぎと言えば、株・FXあたりがなんとなく機械学習と親和性が高そうなので、とりあえず機械学習で株価を予測してみることにします。

今回の目標は

  1. 機械学習を用いて株価予測ロジック作成すること
  2. いつでもどこでも予測結果を見れるようにすること
  3. (可能なら)自動売買できるようにすること

です。

ちなみに、実は目標2のプロトタイプまではすでに終わっています(精度に関してはまだ疑問)。

今回の記事を見終わるころには、下のような株価予測サイトが出来上がります。

(画像クリックで株価予測サイトまで飛びますが、非常に重い可能性があります。

Heroku無料枠では基本的に30分間アクセスが無いとスリープ状態に入ってしまいます。)

株価予測サイト

それでは億万長者目指して株価予測サイトを作ってみましょう!

その一では、株価データを取得するところまで行きます

株価予測サイト作成の前提/環境

今回、株価予測サイトを作るにあたって以下のような言語/フレームワークを用います。

  • 機械学習ロジック:Python, Chainer
  • Webサイト:Django

また、環境してはWindowsになります(macが欲しい( ノД`)シクシク…)。作ったウェブサイトはHerokuの無料枠を用いてデプロイします。

また、株価は日本株とします。

機械学習手法の選択

株価を予測するにあたり、どういった手法を用いればいいでしょうか。機械学習といっても、その手法は数えればキリが無いほどあります。

  • 教師なし学習ーk-means法、自己組織化マップ
  • 教師あり学習ー線形回帰、SVM、ランダムフォレスト、ニューラルネットワーク、単純ベイズ

株価を予測するにあたり、教師はもちろんあります。過去の株価データが全て教師になります。ということで、とりあえず、教師あり学習を選択します

では、教師あり学習の中で一体どれを選択しましょうか。今回は

ニューラルネットワーク

を選択します。SVMは分類問題に使われるイメージがあるので、翌日の株価を予測しようと考えている私としてはナシ!(上がりor下がりで予測してもいいかもしれませんが)線形回帰は機械学習ぽくないのでナシ!単純ベイズはよく理解していないからナシ!ランダムフォレストを使った株価予測もしたことがあるので、それはまた別記事でご紹介したいと思います。

と割と適当ですが、とりあえず作ってみたいので手法比較はまたどこか別でやろうと思います。

株価データの取得

機械学習を行うにはまずデータを集めないといけません。そこで、jsmと言われるPythonライブラリを用いて株価データを取ってきます。株価データ取得にあたっては、Qiitaに投稿されている以下の記事を参考にさせていただきました。

日本株の株価を取得してpandasデータフレームに格納する

上の記事では、株価取得関数が作られているのでそれを使わせていただきましょう。

get_jstock関数で株価を取得することができます。取得したデータはpandasデータフレーム(pd.DataFrame)に格納されます。例えば、、、

上では株価銘柄=6502の株価データ(始値、終値、高値、低値、取引量)を2016年1月1日から2017年2月1日まで取得し、dfに格納しています (ちなみに、株価銘柄=6502は東芝です)。

ここからは、実際にニューラルネットワーク・ランダムフォレストを実装し株価予測ロジックをPythonで構築していきます。その2にてご紹介します。

コメント