機械学習を少しでもかじったことがあるならば、データを「教師データ」と「テストデータ」に分け、教師データのみを使って学習を行ってモデルを作り、テストデータでモデルがうまく予測できるかを確認するというプロセスは常識だろう。学習データにテストデータが含まれていると、それは未来の結果を「カンニング」することに他ならないからだ。
しかし、本稿ではこういう基本的な話をしたいわけではない。機械学習システム、いわゆる人工知能を用いて株価を予測する上で、教師データとテストデータに分割して学習を行った場合に起こりやすい問題について整理する。
このシリーズは、 機械学習を使って株価を予測したい人に役立つヒント集のつもりで執筆している。「こうすると失敗する」といった例や「こういったアプローチで取り組むのは有効」 という例を示していくものである。
前回:人工知能で株価を予測したい人へのヒント集(5):ディープラーニングは万能ではない
過学習?それとも……
2000~2015年までのデータを教師データとして学習し、作ったモデルを2016~2019年のデータでテストしたとしよう。これ自体は手法として間違っていない。しかし、教師データによる学習はうまく収束し、いざテストをしてみれば全く予測できない事が多いだろう。
こうした場合に最初に疑うべきは過学習(オーバーフィッティング)である。教師データに過剰に適合してしまい、本当に予測すべき未知のデータに対応できないことである。これは当然気をつけなければならないだろうが、機械学習の基本を抑えている人であれば、これにはすぐに気がつく。
だから、正則化を行ったり、ドロップアウトをしたり、early stoppingを使ったり、過学習を抑えるための様々な方法(これら手法の説明はしまい)を試すはずだ。でもやっぱりテストでは巧くいかない。
画像認識の分野など時系列の概念が無いものなら全データをシャッフルしてランダムに教師データとテストデータに分ければ良いが、 株式市場のような時系列データであれば、ある時間区分で分けざるを得ないことが多い。
未来人によるチート
しかし、古いデータで学習して新しいデータでテストした場合、注意しなければならないことがある。あなたは最新のディープラーニング手法を駆使し、多くの長期データを集めて機械学習を行い、将来の株価を予測するモデルを見つけた。でも新しいデータだと予測できない。
こういう状況が起こったら、未来人によるチートを疑った方が良い。考えてみれば分かるが、ディープラーニングが機械学習の世界で多用されるようになったのはつい最近である。ニューラルネットワークの歴史自体は長いが、技術的に大きく進展したのは2006年であり、世界中で注目されるようになったのは2012年のILSVRC(画像認識のコンペ)での成功である。
ディープラーニングを使って投資を行っていた人なんて殆ど存在しない2000年代初頭のデータを使い、ディープラーニングを駆使して学習すれば、当然巧くいくはずだ。誰もやっていなかったことをやっているのだから。
未来人によるチートというのは筆者の造語だが、小説投稿サイト「小説家になろう」の小説によく出てくるような平凡な「なろう主人公」が文明が遅れた異世界に転生して次々活躍するようなパターンになっていないか十分に注意する必要がある。
日々情報が古くなる
機械学習の世界は進歩が早く、すぐに情報が古くなる。特に学術分野では論文の査読を待って論文雑誌に掲載された時には既に情報が古い場合もある。それ故に論文原稿(ドラフト)をarXivにアップロードする人工知能研究者も多く、それを読んで実装して試すといった動きは活況である。
未来人によるチートを防ぐには、できるだけ粒度の細かい最近のデータのみを用いたり、新しいデータを教師データとしたり、様々な工夫が考えられる。しかし、それだけでなく日々情報が古くなる事を意識し、今使っているモデルも近い将来に使えなくなる(市場構造が変化してしまう or 他の誰かが同様のモデルを発見してしまう)可能性を考慮しつつアップデートしていかなければならない。
前回:人工知能で株価を予測したい人へのヒント集(5):ディープラーニングは万能ではない
次回:人工知能で株価を予測したい人へのヒント集(7):やりがちな凡ミス