君、過学習してるね...
目次
前回までのあらすじ
決定木を使って、明日上がる株価と下がる株価の分類を試みました。
その時、作ったシステムで株価の予測をしたら一回目が53%で、ええやん!ってなったのですが、2回目、3回目と検証を続けると48%、49%と50%を下回る結果に...
っとここまでが前回のあらすじ。
その後、ちゃんと検証をやろうってなったのが今回です。
なんかおかしくない?
検証結果を見て思ったんです。
ちなみにこれが検証結果です。
モデル | 正答率 |
---|---|
20日モデル | 50.69% |
40日モデル | 49.98% |
60日モデル | 49.13% |
80日モデル | 50.26% |
100日モデル | 50.32% |
120日モデル | 48.13% |
140日モデル | 46.76% |
160日モデル | 52.20% |
180日モデル | 49.23% |
過去何日間を学習させたかによってモデルを分けて、予測をさしています。
例えば、20日モデルは過去20日を学習して、次の日の株価を予測しています。
これで100日分検証を行い、出た正答率の平均値を正答率として出しています。
モデルが出す予測は、上昇だったら1、下落だったら0なんです。
つまり、基本的に適当にやっても50%は当たるはずなんですね。
この正答率を見たらピンっときますね。
「君、適当にやってるな?」
このモデル何も学習できずに適当に上昇!下落!と叫んでいるだけなのではないだろうか。
いや、適当ではない!
バックテストでは結果が出るんです。
正答率70%、80%とポンポンいい数値が出るんです!
これってもしかして。
もしかして。
君、過学習してるね...
決定木のいいところはホワイトボックスです。
中身でどういった処理をしているのか、人間に理解できる形で可視化できるのでやってみました。
うん、過学習してるね!
木が深すぎて、一体何を学習しているのか!?
この木は、前回の私の記事、あるいは前回の記事に貼ってあるURL先の記事を読めば、どれだけ過学習して頭が固くなっているのか解ると思います。
過学習の見極め方
私は単純にバックテストとフォワードテストの結果に差があり過ぎたら、過学習を疑います。
過学習すると未知データに対して、全く対応ができなくなるので、おのずとフォワードテストでの結果がでなくなるんですね。
今回のようにバックテストでは良い結果がでているのに、フォワードテストではからっきし、というのはまさに過学習を疑うべきシグナルです。
もちろん、ただ単純に説明変数がよくなくてダメモデルを作っていることもありますが。
説明変数がよくない。
これが私が出した結論です。
そもそもインデックスリターンを使って、株価の値動きを予測しようという試み自体が間違っていたのではないだろうか。
もう少し決定木を使って頑張ってみますよ!
続く...