機械学習をしたモデルでバックテストすることは、システムトレーダーならば高頻度で実施することでしょう。そのバックテストの結果で1%でも勝率を上げたいのは皆の共通認識だと思います。
しかしながら、そのバックテストには必ずや最適化・オーバーフィッティングという文字がつきまとい、パラメーター弄りには本当に意味があるのか疑問が付きまといます。
機械学習の分野では、作成したモデルが本当に未知のデータで役に立つか否かを示す言葉として’汎化性能’というものがあり、汎化性能が高いと言えば、アウトオブサンプル・未知のデータでも予測性能が高いという意味で使われます。
ようするに汎化性能の高さこそが我々の目指すものとなります。
その汎化性能を高めるために有効なのが、アンサンブルという手法です。
先日、推薦図書として紹介した’Kaggleで勝つデータ分析の技術’にはこう書いてあります。
”単一のモデルでのスコアに限界があっても、複数のモデルを組み合わせて予測することでスコアが向上する場合があり、そのように予測することをアンサンブルと言います。アンサンブルでは、それぞれのモデルの精度が高いだけでなく、それらのモデルが多様な時にスコアが向上しやすいです”
まじかっ!、この文言には私は飛びつきました。
しかも後日にはネタにしますが、Numeraiのダウンロードデータセットにある’analysis and tips’にはしきりにensambleしなさい的なコメントがあるので、実務上、効果があるのでしょう。
(※実際にNumeraiの運用は強者の作ったモデルのアンサンブルそのもので運用している、と考えてもよい)
なので、実際に自分のモデルでやってみました。
私のやったアンサンブルはシンプルで2つのモデルを作り、その予測値を重みづけをして足し合わせてみました。下のような式です。
Prediction=w1xPrediction_1+w2xPrediction_2
*w1,w2は単なるウエート
イメージ的には成績の悪い方に引っ張られそうですが、やってみます。
まずは1モデル目。バリデーション区間の勝率は60.89%、トータルリターン120%。
次は2モデル目です。 バリデーション区間の勝率は 62.24%、トータルリターン133%。
ここで、1モデル目の予測と2モデル目の予測を足し合わせて予測値とし、トレードした結果は以下です。
バリデーション区間の勝率は 62.92%、トータルリターン143%。
おおおー、成功してるじゃん!
しかも、ドローダウンも純粋に低下している様子。
なお、モデル1とモデル2の特徴量に関しては違うものを使ってはいますが、かなり相関の高いものを使っています。
このブログを読んで、これから機械学習を始める人は是非、将来はアンサンブルという合言葉を持って臨んでもらいたいです。