skip to content

モデルのアンサンブルは、とても有効でした

/ 8 min read

Table of Contents

ドル円の期待値予測モデルを開発している。

単体モデルでも、そこそこのパフォーマンス(例 Val10週/Forward6週 Avg 2 pips/trade)は出る。ただし、トレード数は少ない。

複数のモデルの予測値を単純平均してみると、パフォーマンスが単体モデルよりも明らかに改善した。トレード数も増えた。

複数モデルのアンサンブルは、機械学習において、数少ない 再現性が高い改善手法 の1つと言える。

単体モデルの限界

単体モデルは、訓練期間に存在したパターンへ強く適応しやすい。

学習期間では機能していた特徴量の組み合わせが、未知期間では機能しなくなることも多い。

  • 学習期間では良い成績
  • Validation でも悪くない
  • しかし未知の Forward や Live で崩れる

という現象が起きる。

これが典型的な Overfitting(過学習) だ。

パラメーター過剰適合 p-hacking とも言う。

単体モデルは、ある意味で 「学習の期間に最適化された1つの仮説、モデル」 に近い。

次のステージに、行きたいかい?

アンサンブルは普通で天才か

アンサンブルの核心は、独立した誤差を平均して相殺すること にある。

もし複数のモデルが、

  • それぞれ異なる視点を持ち
  • 完全には相関しておらず
  • 過学習ポイントもズレている

ならば、平均を取ることで個別モデルの「癖」が薄まる。

逆に、複数モデルに共通する部分だけが残る。

つまり、

一般化されたシグナル(共通要素)だけが生き残る

そう、我々が求めている一般化がここにある。

弱学習器(Weak Learner)の条件

アンサンブルで重要なのは、各モデルが「違う」こと だ。

全部似たモデルを集めても意味がない。

例えば、

  • 学習期間を変える
  • 特徴量セットを変える
  • モデル構造を変える
  • シード値を変える
  • 損失関数を少し変える
  • Entry条件を少し変える

などで、モデルの視点をずらす。

非相関(または低相関)なモデルを N個アンサンブルすると、理論上のノイズ(標準偏差)は最大で 1/sqrt(N) に減少する。

理想は、 予測値の相関が中程度(例: 0.3〜0.7程度) で、誤差も独立している状態。

  • 相関 0.9以上
    • ほぼ同じモデルを21個並べている状態
    • ノイズも一緒に増幅しやすい
  • 相関 0.3〜0.7
    • 共通して学習している有効なパターンがある
    • でも各モデル独自の揺らぎもある
    • 平均化効果が期待できる
  • 相関 0.0〜0.2
    • 多様性は高い
    • ただし「何も共有していない」可能性もある

相関が高すぎると、全員が同じ場所で失敗する。

逆に独立性があるほど、誤差平均の効果が効く。

Model Prediction Correlation

この表は、10個のモデル出力のPearson相関係数行列

  • 平均的な相関は約 0.35〜0.40 程度
  • ほとんどのモデル間は 0.4〜0.55程度の中程度の相関
  • 一部モデルはかなり独立した挙動

多くのモデルは同じ学習傾向を持っているが、完全なコピーではなく、いくつかは異なる情報を拾っている。

重要なのは モデル数そのものではなく、多様性(Diversification) である。

Bagging(バギング)

アンサンブルの古典的手法が Bagging(Bootstrap Aggregating) だ。

考え方はシンプルで、

  1. 訓練データをランダムサンプリング
  2. 少しずつ異なるデータで複数モデルを学習
  3. 出力を平均する

というもの。

各モデルが異なるデータを学習するため、予測の癖や誤差が少しずつズレる。

その結果、平均化によって過学習由来のノイズが打ち消される。

特に、

「学習データに合わせ込みやすいモデル」ほど効果が大きい

モデルごとの“癖”を薄め、共通して有効なシグナルだけを残しやすくなる

なお、金融時系列であるFX予測においては、ブロックに分割して、時系列を維持したまま、サンプリングしている。

アンサンブル方法

複数のモデルの出力を使って、平均、加重平均、閾値越え、投票制などのアンサンブルができる。

組み合わせパターンが多いので、遺伝的アルゴリズム(Genetic Algorithm/GA)で、探索した。

以下のようなアンサンブルを使用している。

  • 複数モデルの単純平均
  • 上位2つのモデルのそれぞれの閾値以上
  • 下位1つのモデルの閾値以下での回避

単体モデルと比較すると、アンサンブルの方が明らかに上回ることが確認できた。

モデル数を増やして飽和点を探す

何個までモデルを増やせば良いのか?については、

モデル数を徐々に増やし、そのたびに評価を実行する。

アンサンブルするモデル数を増やしていって、どの時点で、利益やFitnessがほとんど変わらなくなるか、飽和点が分かる。

  • 5→10モデル:かなり改善
  • 10→20モデル:まだ改善
  • 20→40モデル:少し改善
  • 40→80モデル:ほとんど変わらない

という結果になったとすると、40モデル前後で性能が飽和していることが分かる。

この「飽和点」が実用上の最適なモデル数になる。

Leave-One-Out(1モデルずつ除外)

アンサンブルで、モデルを採用するか、入れ替え・除外すべきかの判断をしたい場合は?

モデルを1つだけ除外して、評価を実行し、最終的なTotal PipsやFitnessがどう変化するかを見る。

Trade数、Win rate、Total pips、Avg pipsで集計して、各モデルがどれぐらい寄与しているか分かる。

除外してみたモデルΔPips
A-168寄与
B-97フィルター役
C-18寄与がほぼない
D-272中核モデル

さあ、市場に打ち勝とう