トレーディングのための機械学習:過大評価されている部分と実用的な部分
🎯 学べること
このレッスンを終えると、次のことができるようになります:
- トレーディングのML:特徴量エンジニアリング(どの入力を使うか)、モデル選択(ランダムフォレスト、ニューラルネット)、過学習の防止
- 過学習 = モデルがパターンを学ばずに過去を丸暗記している状態
- クロスバリデーション:複数の期間で学習し、取り置いたデータで検証する
- フレームワーク:特徴量を設計する → クロスバリデーションする → ウォークフォワード検証する → すべての検証で一貫していれば本番投入する
⚡ 明日からできること(クリックで展開)
抱え込みすぎないこと。まずはこの3つから:
- まずはシンプルな特徴量エンジニアリングから(MLはまだ使わない) — ニューラルネットに手を出す前に、戦略を改善しそうなシンプルな特徴量を3〜5個見つけよう。特徴量 = 測定できる入力。例:(1) ATR比(現在のATR ÷ 20日平均)= ボラティリティの文脈、(2) 出来高比(現在 ÷ 20日平均)= 参加度、(3) 時間帯 = セッション効果、(4) RSIのダイバージェンス = モメンタムの減衰、(5) 移動平均からの乖離(価格 ÷ 20 EMA - 1)= トレンドの強さ。今夜、特徴量を3つ選ぼう。次の10トレードのエントリー時に記録する。10トレード後に分析:「勝ちトレードは負けトレードと違う値だったか?」例:勝ち10回のうち8回はATR比が1.2超、負け10回のうち7回は0.9未満だった。MLなしでフィルターを見つけたことになる:「ATRが1.2を超えているときだけブレイクアウトを取る」。特徴量エンジニアリングはMLの成功の8割を占める。先に手作業で検証すると直感が育ち、後の過学習を防げる。
- backtestで過学習を見抜けるようになる — 過学習 = モデルがパターンを学ばずに過去を丸暗記した状態。検証手順:(1) 全履歴でbacktestし、勝率と損益を記録する、(2) 最初の60%でbacktestする(学習期間)、(3) 残りの40%で検証する(検証期間)。学習が勝率75%で+5万ドル、検証が勝率52%で-8,000ドルなら過学習(繰り返されなかったノイズを覚えただけ)。ニーナ・パテルは $47,300 を、過学習したML戦略の投入で失った。backtestの勝率は87%だったが実運用は41%(ランダムなパターンを丸暗記していた)。良い戦略は学習と検証の差が10%未満に収まる。今夜、履歴データを60対40に分けよう。結果を比べる。検証が15%超も落ちるなら、ルールが過去に寄りすぎている。単純化しよう(パラメータを減らし、フィルターを緩める)。
- 実運用の前にウォークフォワード検証を行う — ウォークフォワード = 学習と検証の区切りを時間軸に沿って前に転がしていく手法。手順:(1) 1〜6月で学習(6か月)、(2) 7月で検証(1か月)、(3) 前に進める:2〜7月で学習し8月で検証、(4) 全データで繰り返す。戦略は検証期間の大半で利益が出るべきだ(70%以上)。例:12期間を検証し、12か月中9か月で利益(一貫性75%)= 良好。12か月中5か月(42%)= 一つの期間でたまたま当たっただけの不安定なエッジ。計算式は「利益の出た検証期間 ÷ 全期間」。60%未満ならエッジが不安定か過学習している。ウォークフォワードは単発のbacktestより実運用に近い。相場は変わる。複数期間で機能する戦略はレジームの変化を生き延びる。単発のbacktestが見落とす過学習を捕まえられる。
「価格データをニューラルネットに流し込む → 利益が出る」
そうならいいのだが。現実はこうだ:個人トレーダーのML戦略の多くは実運用で失敗する。MLが効かないからではなく、トレーダーの使い方が間違っているからだ。
相場は定常ではない。信号対雑音比が低い。注意しないとMLは見事に過学習する。
🚨 本音を言えば
MLは印刷機ではない。強化されたパターン認識だ。使い方を誤れば(データリーク、過学習、データ不足)、backtestで90%だった確率が実運用では40%に落ちる。正しく使えば? 高確率のセットアップを選び抜く強力なフィルターになる。
ニーナの4万7,300ドルのML過学習惨事(そしてどう立て直したか)
トレーダー: ニーナ・パテル(合成事例)、29歳、クオンツアナリストから独立トレーダーへ、カリフォルニア州サンフランシスコ
時間軸: 2024年1月〜10月
資本: $220,000
背景: 情報科学の学位、フィンテック系スタートアップで3年、Pythonと機械学習に自信あり
第1幕:「完璧な」モデル(2024年1〜2月)
ニーナの当初のアプローチ: 「私はプログラマー。勝ちトレードを予測するMLモデルを作る」
| 指標 | Backtest(2022〜2023年) | 実運用(2024年 Q1) | 差 |
|---|---|---|---|
| 勝率 | 87.4% | 41.2% | -46.2%(大惨事!) |
| 平均R倍率 | 2.8R | -0.4R | 3.2Rの差! |
| 月次リターン | +18.3% | -7.2% | -25.5%の差!!! |
| P&L(3か月) | +12万1,200ドル(想定) | -4万7,300ドル(実績) | 16万8,500ドルの落差! |
何が悪かったのか? 5つの致命的ミス:
| ミス | 何を間違えたか | 影響額 |
|---|---|---|
| 1. 先読みバイアス | 「日中高値/安値」を特徴量に使った(引けまで確定しないのに!) | モデルは未来のデータで値動きを「予測」していた。実運用では不可能。 |
| 2. ランダムな学習/検証分割 | トレードをシャッフルし、2023年Q3のデータで学習して2023年Q1で検証した | モデルが「未来を見て」いた。トレーディングの時間はそう流れない! |
| 3. 大規模な過学習 | わずか180トレードに対してニューラルネット(5層、128ニューロン) | モデルはパターンではなくノイズを暗記した。新しいデータでは通用しなかった。 |
| 4. 正解率の最適化 | R:Rを無視して勝率90%を追った(0.3Rの勝ちが多く、3Rの負けが少数) | 正解率は高いが期待値はマイナス。MLの典型的な罠。 |
| 5. ウォークフォワード検証をしなかった | 履歴データに対する単一の学習/検証分割 | モデルが時間とともにどう劣化するか検証しなかった。劣化は速かった。 |
ニーナの2024年Q1、月ごとの惨状:
| 月 | 執行トレード数 | 勝率 | 平均R | P&L | ニーナの反応 |
|---|---|---|---|---|---|
| 2024年1月 | 28 | 39% | -0.3R | -$12,400 | 「運が悪かった。モデルには適応するためのデータがもっと必要」 |
| 2024年2月 | 32 | 44% | -0.5R | -$18,200 | 「相場のレジームが変わった。モデルを再学習中…」 |
| 2024年3月 | 26 | 40% | -0.4R | -$16,700 | 「このモデルはゴミ。一からやり直す」 |
| 2024年 Q1 合計: | -$47,300 | 資金の21.5% drawdown | |||
限界点(2024年3月31日):
「backtestでは勝率87%だった。実運用は? 41%。自分は賢いと思っていた。情報科学の学位、フィンテック勤務、Pythonも書ける。でも実際は、トレーディングのためのMLを何も分かっていなかった。
初心者のミスを全部やった。先読みバイアス(日中高値を特徴量に使った!)、ランダムな学習/検証分割(過去にタイムトラベルした!)、180トレードに5層のニューラルネット(過学習しきっていた)、期待値ではなく正解率を最適化した。
3か月で4万7,300ドル。MLが相場で実際にどう働くのかを学ぶときだ」
— ニーナ・パテル、2024年3月31日の日誌
第2幕:痛い思いをして学ぶ(2024年4〜5月)
ニーナの立て直しの過程: MLを専門とするプロップファームのメンターを雇った(月5,000ドル)。正しい方法論を学ぶのに6週間を費やした。
| 構成要素 | V1(過剰適合の惨事) | V2(きちんと検証済み) |
|---|---|---|
| 特徴量 | 先読みバイアスを含む32個の特徴量(日中高値/安値、引けの出来高) | 12個の特徴量、先読みはゼロ(シグナル時点のRSI、VWAPからの乖離、ATR、CVD) |
| 学習/検証分割 | ランダムシャッフル(80対20の分割) | ウォークフォワード:4つのローリングウィンドウ、過去で学習し未来で検証 |
| モデル | ニューラルネット:5層、128ニューロン(180トレードに対して約5万個の重み!) | Random Forest:max_depth=4、30本の木(240トレードに対して約450個の分岐ルール) |
| 最適化の目標 | 正解率の最大化(87%まで届いたがR:Rは劣悪) | 期待値の最大化(R:Rを織り込んだ1トレードあたりのドル) |
| 検証 | 2022〜2023年のデータでの単発backtest | 4つのウォークフォワードウィンドウ + ペーパートレード20回の検証 |
| 確信度のしきい値 | 予測値0.5超をすべてトレード | 予測値0.65超だけをトレード(高確信度フィルター) |
V2のウォークフォワード検証結果(2024年4月):
| ウィンドウ | 学習期間 | 検証期間 | 検証時の勝率 | 検証の平均R | 過学習チェック |
|---|---|---|---|---|---|
| ウィンドウ1 | Q1-Q2 2023 | Q3 2023 | 68% | 1.4R | 学習:71%、検証:68%(差3% = 問題なし) |
| ウィンドウ2 | Q2-Q3 2023 | Q4 2023 | 64% | 1.2R | 学習:69%、検証:64%(差5% = 問題なし) |
| ウィンドウ3 | Q3-Q4 2023 | Q1 2024 | 71% | 1.6R | 学習:72%、検証:71%(差1% = 優秀) |
| ウィンドウ4 | Q4 2023-Q1 2024 | Q2 2024 | 66% | 1.3R | 学習:70%、検証:66%(差4% = 問題なし) |
| 検証の平均パフォーマンス: | 67.2% | 1.4R | 過学習は検出されず(平均の差3.2%) | ||
要点: V2の勝率は67%で、V1の87%より低い。だがV2の67%は本物(4つの時間窓で検証済み)、V1の87%は偽物(過学習したノイズ)だった。
第3幕:正しいモデルを実運用する(2024年6〜10月)
ニーナのV2投入戦略:
- ペーパートレード20回での検証(2024年5月):勝率70%、平均1.5R → 合格!
- ポジションサイズを半分、つまり50%にして実運用開始(6月):勝率65% → 自信が育つ
- フルサイズ(7月以降):MLフィルターが本稼働
- 毎月の再学習:新しいトレードを追加し、ウォークフォワードを回し直し、3%以上の改善があればモデルを更新
| 月 | シグナル | MLで絞り込み | 執行トレード数 | 勝率 | 平均R | P&L |
|---|---|---|---|---|---|---|
| 2024年6月 | 42 | 18 (43%) | 24 | 67% | 1.3R | +$9,400 |
| 2024年7月 | 38 | 15 (39%) | 23 | 70% | 1.6R | +$12,700 |
| 2024年8月 | 46 | 20 (43%) | 26 | 65% | 1.2R | +$10,800 |
| 2024年9月 | 40 | 16 (40%) | 24 | 71% | 1.5R | +$11,900 |
| 2024年10月 | 44 | 19 (43%) | 25 | 68% | 1.4R | +$10,600 |
| 5か月の合計: | 122トレード | 68.2% | 1.4R | +$55,400 | ||
比較の基準:ニーナがすべてのシグナルを取っていたら(MLフィルターなし)?
ここでちょうど折り返し地点です。重要な戦略はすでに学びました。
順調ですね! 必要なら軽く伸びをして、そのあと先の応用的な内容に進みましょう。
| 場面 | 執行トレード数 | 勝率 | 平均R | P&L 合計 | 分析 |
|---|---|---|---|---|---|
| フィルターなし(全シグナル) | 210 | 54.7% | 0.5R | +$34,100 | 基準:平凡なエッジ、ノイズトレードが多い |
| MLで絞り込み(高確信度) | 122 | 68.2% | 1.4R | +$55,400 | MLが+2万1,300ドルを上乗せ(+62.5%の改善!) |
| MLフィルターの付加価値: | +2万1,300ドル(62.5%の上乗せ) | ||||
ニーナのV2成功から得られた要点:
- MLフィルターがシグナルの42%を除外 → 確信度の低いセットアップを見送った
- 絞り込んだトレード:勝率68.2% 基準の54.7%に対して → 13.5%の改善
- より良いR倍率: 平均1.4R、基準の0.5Rに対して → MLがR:Rの良いセットアップを選んだ
- P&Lが62.5%改善: 基準の+3万4,100ドルに対して+5万5,400ドル = +2万1,300ドルの付加価値
- 現実的な成績: 実運用の68%はウォークフォワード検証の67%と一致 → 過学習なし!
ニーナの最終結果:2024年Q1の損失 対 6〜10月の回復
| 期間 | モデルのバージョン | 勝率 | 平均R | P&L | 学んだこと |
|---|---|---|---|---|---|
| Q1 2024 | V1(過学習) | 41.2% | -0.4R | -$47,300 | 先読みバイアス、ランダム分割、過剰なニューラルネット |
| 2024年6〜10月 | V2(検証済み) | 68.2% | 1.4R | +$55,400 | きれいな特徴量、ウォークフォワード、Random Forest、期待値で最適化 |
| 2024年の純結果: | +$8,100 | 高い授業料を払って収支トントン | |||
ニーナが苦労して得た教訓(2024年10月):
「MLを魔法だと思っていたせいで、3か月で4万7,300ドルを失った。魔法ではない。パターン認識だ。ゴミを食わせれば(先読みバイアス、ランダム分割、過学習したニューラルネット)、ゴミの予測が返ってくる。
解決策は良いモデルではなかった。より良い方法論だった:
• 先読みのある特徴量はゼロ(シグナル時点で手に入るデータだけ)
• ウォークフォワード検証(過去で学習、未来で検証、4つのローリングウィンドウ)
• よりシンプルなモデル(小さなトレード集合ではRandom Forestがニューラルネットに勝つことが多い)
• 正解率ではなく期待値を最適化する(1.4Rでの68% > -0.4Rでの87%)
• 資金を賭ける前に20シグナルをペーパートレードする
私のV2モデルは未来を当てない。セットアップを絞り込むだけだ:基準の勝率55%に対して68%。この+13%のエッジが5か月で2万1,300ドルを生んだ。
MLは戦略ではない。フィルターだ。低確率のトレードを見送るために使うもので、トレードを生み出すためのものではない。それが秘訣」
— ニーナ・パテル、クオンツトレーダー(2024年10月)
ニーナのML学習にかかった費用:
- 2024年Q1の損失: -4万7,300ドル(過学習モデルの授業料)
- メンター費用: -1万ドル(月5,000ドル × 2か月、4〜5月)
- 投資の総額: -$57,300
- 5か月の回復: +5万5,400ドル(6〜10月)
- ネットポジション: -1,900ドル(ほぼ収支トントン)
- この先の価値: MLフィルターは現在、フィルターなしの基準に対して月あたり約4,300ドル(年5万1,000ドル)を上乗せしている
- 投資回収の時期: 投資は11月末までに全額回収でき、そこから先は純粋な利益
🎯 このレッスンで得られること
読み終えたときには、次のことができるようになります。
- MLのトレードフィルターを作る(どのセットアップが勝ちやすいか予測する)
- 特徴量を正しく設計する(定常で、先読みバイアスがない)
- ウォークフォワードのクロスバリデーションで過学習を避ける
- モデルを賢く選ぶ(多くの場合、Random Forest > ニューラルネット)
💡 腑に落ちる瞬間
MLは単独の戦略ではない。フィルターだ。セットアップはすでに持っている(Janusのスイープ)。MLは、どれが55%ではなく68%の確率を持つかを予測する。68%のものをトレードし、55%のものは見送る。それがエッジだ。
🎓 要点
- MLは戦略ではなくフィルター: トレードを生み出すためではなく、どのセットアップの期待値が高いかを予測するために使う
- 特徴量エンジニアリング > モデル選択: 良い特徴量(RSI、VWAPからの乖離)は毎回、凝ったモデルに勝つ
- ウォークフォワード検証は必須: 時系列データでの学習/検証分割 = データリーク。ローリングウィンドウを使うこと
- 期待値を最適化する: R:Rが悪ければ正解率80%でも損をする。3Rなら正解率55%で勝てる
- 先読みバイアスを避ける: 特徴量は予測時点で入手できるデータだけを使わなければならない
- Random Forest > ニューラルネット: トレーディングの用途の多くでは、単純なモデルのほうがよく汎化する
🎯 実践演習:トレードを絞り込むML特徴量エンジニアリングを実装する
目的: 既存のセットアップを絞り込み、選択的にトレードすることで期待値を10〜15%改善するMLモデルを作ろう。
パート1:特徴量エンジニアリング(最も重要な工程)
過去のトレードそれぞれについて、シグナル発生時点で次の特徴量を計算する(先読み禁止!):
特徴量セットのテンプレート(20個以上を推奨):
価格の特徴量:
1. VWAPからの乖離(%):(価格 - VWAP)/VWAP
2. 50 EMAからの乖離(%):(価格 - EMA50)/EMA50
3. 前日高値からの乖離(%):(前日高値 - 価格)/前日高値
4. 前日安値からの乖離(%):(価格 - 前日安値)/前日安値
モメンタムの特徴量:
5. RSI(14):0〜100の値
6. ADX(14):トレンドの強さ
7. +DI / -DI 比:方向性指標
8. Rate of Change(10):直近10本の値動き
ボラティリティの特徴量:
9. ATR / 価格の比:正規化したボラティリティ
10. ボリンジャーバンド幅 %:(上限 - 下限)/中央
11. 直近のレンジ拡大:現在のATR / 20期間平均のATR
出来高の特徴量:
12. 出来高と平均の比:現在 / 20期間平均
13. CVD(累積出来高デルタ):買いの純圧力
14. VWAPとPOCの距離:フェアバリューとの整合
時間の特徴量:
15. 時間帯:寄り付きからの経過分(0〜390で正規化)
16. 曜日:月=1、金=5
17. 前回シグナルからの経過:分
レジームの特徴量:
18. VIX水準:現在のVIXの値
19. レジームスコア:ADX + ATR + バンド幅の複合
20. DXYの変化率 %:マクロの逆風か追い風か
あなたの特徴量(過去50トレード以上で計算):
トレード1:[特徴量1:___、特徴量2:___、…、特徴量20:___、結果:勝ち/負け]
トレード2:[…]
パート2:学習/検証分割(時間軸のみ)
時系列データは絶対にシャッフルしない。ローリングウィンドウを使うこと:
MLのウォークフォワード検証:
ウィンドウ1:
学習:2023年1〜6月(トレード1〜30)
検証:2023年7〜9月(トレード31〜40)
モデル:Random Forest、max_depth=5
検証の正解率:___%
検証のパフォーマンス:___%
ウィンドウ2:
学習:2023年4〜9月(トレード15〜50)
検証:2023年10〜12月(トレード51〜65)
モデル:新しいウィンドウで再学習
検証の正解率:___%
検証のパフォーマンス:___%
ウィンドウ3:
学習:2023年7〜12月(トレード35〜75)
検証:2024年1〜3月(トレード76〜90)
検証の正解率:___%
検証のパフォーマンス:___%
検証の平均パフォーマンス:成功率 ___%
基準(フィルターなし)との比較:成功率 ___%
改善:+___%(目標:最低+10%)
パート3:モデル選択と過学習の防止
3つのモデルを試す。機能する中で最も単純なものが勝ち:
| モデル | パラメータ | 学習時の正解率 | 検証時の正解率 | 過学習か? |
|---|---|---|---|---|
| ロジスティック回帰 | 単純、パラメータが少ない | ____% | ____% | < 10% gap = OK |
| Random Forest | max_depth=5, n_estimators=50 | ____% | ____% | < 10% gap = OK |
| ニューラルネット | 2層、32ニューロン | ____% | ____% | リスク:差が15%を超えると過学習 |
危険信号: 学習時の正解率が90%なのに検証時が60%なら、過学習している。モデルの複雑さを減らすか、データを増やそう。
パート4:特徴量の重要度分析
どの特徴量が本当に効いているのか? モデルの特徴量重要度を使おう:
Random Forestの特徴量重要度:
上位10特徴量(重要度スコア順):
1. VIX水準:0.18(最重要)
2. VWAPからの乖離:0.15
3. ADX:0.12
4. 時間帯:0.10
5. CVD:0.09
6. RSI:0.07
7. ATR比:0.06
8. 出来高と平均の比:0.05
9. バンド幅:0.04
10. DXYの変化:0.03
下位の特徴量(0.02未満):曜日、前回シグナルからの経過時間
→ これらの特徴量は外す(シグナルではなくノイズ)
簡素化したモデル(上位6特徴量のみ):
検証の正解率:___%(20特徴量のモデルと比較)
差が2%以内なら単純なモデルを使う(過学習が減る)
パート5:確信度しきい値を使った本番運用
すべての予測をトレードしない。確信度の高いものだけを取る:
モデルの出力 = 確率(0.0〜1.0)
確信度のしきい値:
確率0.65超 = 高確信度(トレードする)
確率0.45〜0.65 = 中立(見送る)
確率0.45未満 = 低確信度(見送るか逆張り)
しきい値別のbacktest結果:
全トレード(フィルターなし):勝率55%、平均0.5R
確信度0.60超:期待値 ___%、平均 ___R
確信度0.65超:期待値 ___%、平均 ___R
確信度0.70超:期待値 ___%、平均 ___R(トレード数は減る)
最適なしきい値:0.___(正解率ではなく期待値を最大化)
あなたの結果:
MLフィルターで取ったトレード:全シグナル100件中 ___件
成功率の改善:___% → ___%(+___%)
期待値の改善:1トレードあたり ___ドル → ___ドル
パート6:モニタリングと再学習の手順
MLモデルは時間とともに劣化する。監視して再学習しよう:
モニタリングの予定:
1〜4週目:検証時の予測に対する実運用の成績を追う
想定:正解率60%
実測:正解率 ___%
ドリフト:___%(5%未満なら問題なし)
5〜8週目:追跡を続ける
実測:正解率 ___%
ドリフト:___%(10%を超えたら再学習)
再学習のトリガー:
1. 正解率が検証時の基準を10%超下回る
2. 相場のレジームが変わる(VIXの急騰、新しいサイクル)
3. 最低でも3か月ごと(新しいデータで更新)
再学習の手順:
- 直近3か月の新しいトレードデータを追加する
- ウォークフォワード検証を回し直す
- 同じ検証セットで新旧のモデルを比べる
- 新しいモデルが3%以上上回る場合だけ投入する
実行の目標: 直近50〜100トレードを使って4〜6週間でMLフィルターを作ろう。20シグナル分をペーパートレードで運用する。目標の例:選択的な絞り込みで期待値を10%以上改善する。うまくいけば、低確率のセットアップを見送る助けとして、MLがあなたの期待値を測定可能な形で押し上げたことになる。プロがMLを使うのはこういうやり方だ。魔法としてではなく、エッジを体系的に高める道具として。
多くのMLトレーダーが口座を吹き飛ばしてから気づくことを、あなたはたった今学んだ:特徴量エンジニアリングはモデル選択に勝る、ウォークフォワード検証は必須、そして最適化すべきは期待値(正解率ではない)。これでMLを賭けではなく道具として使える。
関連レッスン
⏭️ 次回
記事 #56:高頻度取引の概念 — HFTは個人には手が届かないが、レイテンシーアービトラージとorder flowの毒性を理解しておけば、自分が出口の流動性にされずに済む。
💬 ディスカッション (コメント0件)
コメントを読み込んでいます…
教育目的のみ。 トレードには重大な損失リスクが伴います。金融助言ではありません。過去の実績は将来の結果を保証するものではありません。