LoginSignup
42
50

More than 3 years have passed since last update.

1日10時間株価予測AIを作り続ける 1か月目

Last updated at Posted at 2020-01-01

去年12月3日にPythonの学習を再開しました。練習のために何か作れないかなと考えていたところ、株価予測のAIを作るというアイデアが浮かんだのでやってみることにしました。結果的に64%の精度で株価が1%以上上昇または下落することが予測できる(かもしれない)AIができました。プロジェクト1は本題に入るまでの経緯でプロジェクト2が本題です。

プロジェクト1

線形回帰を使って現在の株式市場がバブルかどうかを視覚的に判断する。また、その成果をWebサイトに埋め込んで誰でも好きなETFや会社の株、また任意の期間で画像を生成して現在の価格がバブルかどうか判断するための参考にできるようにしたかった。

image.png
image.png

結果、ローカル環境ではDjangoを使って成功したと思ったのですが、実際にデプロイすることはできませんでした。データベースやDjangoの知識が足りなかったと思います。
一応コードです。
https://github.com/LulutasoAI/LRQiita/blob/master/LRgenerator

プロジェクト2

画像分析によって未来の株価を予測する。

試み1

大量の株価データを2カ月毎にローソク足チャート画像に変換し、チャートが最後に表示した価格と日時を取り、2カ月後に価格が上がっているかどうかで2種類に分ける。
犬と猫を見分けるのと同じ方法で株価が上がるか下がるかを予測する。
データは約500枚 日経平均株価、S&P500, APPLE inc. そしてトヨタ自動車の2001年から現在までのデータです。
https://github.com/LulutasoAI/Datasetpricechart1 学習用にどうぞ

データはこんな感じです
カテゴリー0:画像の後価格が上昇(up)
image.png
カテゴリー1:画像の後価格が下落(down)
image.png

結果

学習のvalidationでは精度が変わらなくなってしまいましたが、一応精度58%
image.png
テストセットで試すと55.8%
image.png
うーん微妙

試み2

ローソク足チャートを4つに分類して予測しようとした。
データセットをその価格が画像の後の2カ月で4.8%以上上昇したグループ、4.8%以上下落したグループ、それ以外の画像で価格が少し(4.7%以下)上昇したグループ、下落したグループの4つに分けて 学習させました。その結果36%の精度でその画像がどのグループに属するかを当てることができるAIが完成しました。この精度36%の意味を考えてみたのですが、よくわかりませんでした。 単純に4つのカテゴリーなのででたらめに予測して得られる25%よりはずっと良いと考えましたが、今回使ったデータセットの4つのカテゴリーの割合は"down 13.36%", "drastically-down 23.22%", "drastically-up 38.23%", "up 25.17%" となっているのでそう簡単に考えられるものではなさそうです。 たとえば、明らかな過学習の一例でしょうが、全ての画像についてそれが"drastically up"だと予測するAIは38%前後の精度を持つことができます(このデータセットからランダムで訓練セットやテストセットができるため)。 とにかく36%が良いのか悪いのかがよくわかりませんでした。

試み3

もっと単純にしてみようと考えました。
上記のデータセットの中で4.8%以上価格が動いた2つのグループだけを使って学習をさせることにしました。
その結果
image.png
image.png
このように過学習が起きてしまいました。
この試みはまだ研究の余地があると思います。kerasのモデルやレイヤーをいじることで改善が見込めそうです。

試み4

シンプルに画像の後の2か月間で価格が上がったか下がったかで二つに分けてデータセットを作りますが、今回は大量のデータを使って学習しようとしました。2001-01-01から現在までの期間の株価のデータを取得しました。

  • ^N225 nikkei 225
  • AAPL Apple Inc.
  • ^GSPC S%P 500
  • TM TOYOTA
  • GOOGL Alphabet Inc Class A
  • BA Boeing Company
  • AMZN Amazon.com Inc.
  • PYPL PayPal
  • TWTR Twitter, Inc.
  • V Visa Inc.

image.png

かなりいい結果になりました。

試み5

上記の分類法ではほんの少しの差(たとえば2セントの差)で”下がる”に分類にされるかもしれなかったものが”あがる”に分類されるような場合が想定でき、また少ししか価格が変化しないものは学習時にモデルを混乱させるかもしれないと思い1%以下の価格変動だったものはデータセットに入れないことにしました。そのデータセットで学習した結果です
image.png

ここで問題がデータセットではなくkerasのモデルやレイヤーにあるかもしれないと気づきました。

試み6

学んだことを全部活かそうとしました。
データセットは大きく、1%以下しか価格が動かなかった画像を除く3753個のローソク足チャート 2001年~
過学習は避けることを意識しました。

そしてあるモデルで試した結果
150 epochs後
image.png

250 epochs後
image.png
悪くないです。

でもちょっとまってください、よく考えたら、リーマンショックがあった2007年から2009年頃のチャートはノイズが多いかもしれません。
ここで2010年以降のチャートのみを学習させることを思いつきました。
データセットは1875個になってしまいましたが、いざ挑戦
一日中モデルをいじって試行錯誤して

500 epochs後
image.png

テストセットで64%という精度になりました。これが今日の出来事です。モデルやレイヤーに関してはもう少し勉強したあと記事にしたいと考えています。

結論

Pythonにローソク足チャートを学ばせることによって、株式市場の将来を予測することがコンピューターにとってもなかなか難しいかがわかりました。しかし一方で、64%の精度はチャートの背後に何か予測を可能にする何かがあることも示唆しています。

資金(生活費)が続く限りまだ研究を続けたいと思います。良いAIができたらWebサイトに埋め込んで誰でも使えるようにしたいです。
最後ですが英語でも書いているのでよければ見てください
https://lulitech.nihoninanutshell.com

42
50
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
42
50