多項式フィッティングを使ったトヨタ自動車の株価予想をしてみた!
IT技術
株価予想プログラム作成の動機
株価の予測で、誰もが一度は考えたことがありませんか?
「次に上がる株が分かればいいのに…」
「株価が下がるのが分かってれば、損しなくて済んだのに…」
そう考えるのは、人間なら当たり前のことです。
株価予想はむずかしい
現在、「解析的に株価のグラフを分析し、株価がどう変化するか」など、いわゆる「テクニカル」といった手法は存在します。
しかし、それらを使いこなせるのはプロの中のプロでも難しいレベル…
そもそも、そんなに簡単に予測できたら、みんな大金持ちですよね。
そこで、「プログラムの力で投資で豊かになれないか!?」という企画のもと、
今回は「多項式フィッティング」という手法を使って、株価を予想できるかを試してみたいと思います!
※この企画はあくまでも株価予想プログラムを作るのが目的であり、株価を当てることが目的ではありません。
多項式フィッティングによる株価の予測手法
多項式フィッティングとは、以下のようにデータ点が与えられたとき、その点を通るような関数系を多項式で近似することです。
もっと具体的に言うと、基底を自分たちが決めて(関数の複雑性)、それぞれの基底の係数を学習により更新していくってことですね!
株価も同じで、「横軸が日付」「縦軸が株価」のグラフになっているため、多項式フィッティングを使うことができます。
問題は株価の未来予測
ここで考えなくてはいけないのは、今回の場合は、株価が未来にどんな値になっているのか、ということ予測しなければならないこと。
そこで株価の特徴を考えてみると、「たくさん売られた後はたくさん買われて、そのまた逆も然り」というのがわかります。
つまり株価には、いわゆる「周期性」があるわけです。
これは有名な株ほどそうで、取引が多くなればなるほど、株価は安定した周期性を描くことが予想されます。
ということは、自分たちが選ばなければいけない基底は、周期性を持つ関数系でないといけません。
そのため今回は、「正弦波」「余弦波」を基底として、採用することにしました。
予測モデル
まず、基底関数の周期は、マニュアルで決めました。
株価の最低の周期は4日(上、下、上、下)必要なので、周期は4日を最低として「 4 , 5 , 6 , 7 , ...」という風に、基底の数だけ増やしていくことにしました。
周期も決まったので、予測するモデルは、以下のような関数式になります。
この関数式にフィッティングするように、株価データを当てはめていきたいと思います!
学習の様子
過去の終値へのフィッティング
とりあえず、トヨタの過去の株価を表現できるかどうかを学習させました。
過去の株価データには、うまくフィッティングできました!
細かい振動に左右されずに、汎化性が高い近似関数を求めれてそうです。
また、この時の基底数は、3000程度でした。
未来の株価予測
では、実際に未来の株価予測を行っていきましょう!
学習データとしては、トヨタの「2019年一年分の株価」を用います。
このとき、「12月分のデータ」は学習データに入れずに、予測結果の精度比較に使用しました。
実際の株価に比べて、学習していないデータとなると、急に大きく解離してしまってますね…
様々な基底数で試してみましたが、学習していない株価に対しては、全く持って予想できていないことがわかりました。
では、この結果から得られることを考察してみましょう!
多項式フィッティングを使った株価予想の「考察」と「結論」
考察
今回、「実際の株価」と「予想結果」が、大きく解離した原因としては、
- 株価に周期性があることを前提にしている
- 未来の価格予想に適したモデルではない
これらが考えられます。
株価に周期性があることを前提にしている
これは、「正弦波」「余弦波」を用いたことが原因です。
しかし、周期性があるというのは、あながち間違いではないかと思います。
それを予測するような周期を、「人間がマニュアルで決めれるものではない」ということではないかと考えます。
未来の価格予想に適したモデルではない
これは、「多項式フィッティング」を用いたことが原因です。
確かに多項式フィッティングは、図から見ても、過去の株価データにフィットさせるには十分な精度を持っています。
ですが、「予想」というタスクにおいては、全くもって機能していないことがわかりました。
実験結果から得られた結論
今回の実験から、導き出された結論は以下の通り。
- 周期は人間がマニュアルで決めれるものではない
- 未来の価格予想に適したモデルではない
これら2点を、満足に解決できるのは、NN (ニューラルネットワーク)だと考えます。
それは、次の2つの理由からです。
- 株価の周期性すらも、人間が決めるのではなく、機械自体に学習して欲しいから
- 過去の株価から、未来の株価を予想するようなモデルを、簡単に作ることができるから
なので次回は、株価予測を「NN」を用いて、実験していきたいと思います!
さいごに
今回行ったように、多項式フィッティングで株価を直接予想するようなプログラムは、ネットを探してもあまりないかと思います。
しかし今回の実験からは、「多項式フィッティングでは株価予測ができない」という、真理を得ることができました!
こういった点をみても、「有意義だったかな」と思います。
今回の実験コードについては、GitHub に載せているので、README に従って導入してみてくださいね!
【GitHub:curve_fitting】
https://github.com/rightcode/curve_fitting
次回が、株価予想の本題になります。
NN を使った株価予想をお楽しみに!
こちらの記事もオススメ!
2020.07.28機械学習 特集知識編人工知能・機械学習でよく使われるワード徹底まとめ!機械学習の元祖「パーセプトロン」とは?【人工知能】ニューラルネ...
2020.07.30Python 特集実装編※最新記事順Responder + Firestore でモダンかつサーバーレスなブログシステムを作ってみた!P...
2020.07.17ライトコード的「やってみた!」シリーズ「やってみた!」を集めました!(株)ライトコードが今まで作ってきた「やってみた!」記事を集めてみました!※作成日が新し...
ライトコードでは、エンジニアを積極採用中!
ライトコードでは、エンジニアを積極採用しています!社長と一杯しながらお話しする機会もご用意しております。そのほかカジュアル面談等もございますので、くわしくは採用情報をご確認ください。
採用情報へ
「好きを仕事にするエンジニア集団」の(株)ライトコードです! ライトコードは、福岡、東京、大阪、名古屋の4拠点で事業展開するIT企業です。 現在は、国内を代表する大手IT企業を取引先にもち、ITシステムの受託事業が中心。 いずれも直取引で、月間PV数1億を超えるWebサービスのシステム開発・運営、インフラの構築・運用に携わっています。 システム開発依頼・お見積もり大歓迎! また、現在「WEBエンジニア」「モバイルエンジニア」「営業」「WEBデザイナー」を積極採用中です! インターンや新卒採用も行っております。 以下よりご応募をお待ちしております! https://rightcode.co.jp/recruit