FX自動売買において、機械学習モデルの精度を高める手法のひとつが「スタッキング(stacking)」です。スタッキングとは、複数のベースモデルの予測を統合して、最終的な判断を行う「メタモデル(meta model)」を組み合わせた構成のことです。
この手法を実践的に使うためには、ヒストリカルデータ(過去データ)の分け方がとても重要になります。本記事では、10年分のヒストリカルデータがある場合を例に、スタッキング手法におけるデータ期間の分け方を解説します。
10年データをどう分けるか?
スタッキングは大きく2段階でモデルを構築します:
- ベースモデル群:複数の機械学習モデル(例:CatBoost、LightGBMなど)
- メタモデル:ベースモデルの予測結果を受けて最終判断をするモデル(例:ロジスティック回帰)

MQL5ではOnnxを256個以上読み込もうとするとクラッシュするからら、ベースモデルは256個未満になるように(‘Д’)
エラー内容↓
ONNX: objects limit(256) reached, inspect code ‘filename’ (4181:22)
この2層構造を構築するために、10年分のデータを次のように分けるのが推奨されます:
| データ期間 | 用途 | 内容 |
|---|---|---|
| 最初の7年 | ベースモデルの学習用 | 各ベースモデルの訓練・検証・テストに使用します。 |
| 次の2年 | メタモデルの学習用 | ベースモデルの予測結果と実際の値を組み合わせ、メタモデルを訓練・検証します。 |
| 最後の1年 | 最終評価用 | ベース+メタモデルの組み合わせをテストする、本番に近い評価フェーズです。 |
ベースモデル学習用データ(7年)の中身の分け方
この7年間は、さらに以下のように分割するのが一般的です:
- 訓練(トレーニング):70%(約4.9年)
- 検証(バリデーション):20%(約1.4年)
- テスト:10%(約0.7年)
ベースモデルはこの期間で価格の特徴を学習し、精度やパラメータを最適化していきます。
メタモデル学習用データ(2年)の使い方
メタモデルは、ベースモデルたちが「未知のデータ(=この2年間)」に対してどんな予測を出すかを記録し、それを元に学習します。つまり、この期間中はベースモデルの再学習はせず、あくまで既存のベースモデルの出力値を使うのがポイントです。
こちらも以下のように分けるとよいでしょう:
- 訓練:70%(約1.4年)
- 検証:20%(約0.4年)
- テスト(省略可):10%(約0.2年)
最後の1年は「総合テスト」期間
この期間では、ベースモデル・メタモデルすべてを固定し、完全な未知データに対するパフォーマンスを検証します。いわゆる「本番前の最終チェック」です。
この1年間の結果を見て、「モデルが現実の相場でも機能するかどうか」の判断を行います。
注意点
- メタモデルの学習期間に、ベースモデルの再学習をしてはいけません(情報リークになります)。
- 最後の1年は絶対に学習に使わず、完全な未使用データとして取っておくことが重要です。
- ウォークフォワード検証などと組み合わせると、より実戦的な検証が可能になります。
まとめ
FXにおけるスタッキングモデルでは、「いつのデータを、どのモデルに使うか」が成果に大きく影響します。以下が基本構成です:
- 10年データ → 7年:ベース用、2年:メタ用、1年:テスト用
- 各モデル内でさらに70:20:10で訓練・検証・テストに分割
- 情報の流出を防ぐため、メタ学習用の2年間と最終1年間は、ベースモデルの学習に使わない
この分割方法を守ることで、実際の相場でも通用する信頼性の高いモデルを構築することができます。
オンラインコミュニティ
こちらのコミュニティで、AIや機械学習をトレードに活かすために日々探求しています。
興味のある方は覗いてみてください。
