Signal Pilot
  • ブログ
  • 🔴 上級 • レッスン 55/82

    トレーディングのための機械学習:過大評価されている部分と実用的な部分

    読了時間 約18分 • トレーディングにおけるMLの応用
    Signal Pilot
    プロ向けトレーディング教育
    0%
    順調に進んでいます。
    読み進めるとこのレッスンが完了になります

    🎯 学べること

    このレッスンを終えると、次のことができるようになります:

    • トレーディングのML:特徴量エンジニアリング(どの入力を使うか)、モデル選択(ランダムフォレスト、ニューラルネット)、過学習の防止
    • 過学習 = モデルがパターンを学ばずに過去を丸暗記している状態
    • クロスバリデーション:複数の期間で学習し、取り置いたデータで検証する
    • フレームワーク:特徴量を設計する → クロスバリデーションする → ウォークフォワード検証する → すべての検証で一貫していれば本番投入する
    ⚡ 明日からできること(クリックで展開)

    抱え込みすぎないこと。まずはこの3つから:

    1. まずはシンプルな特徴量エンジニアリングから(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割を占める。先に手作業で検証すると直感が育ち、後の過学習を防げる。
    2. backtestで過学習を見抜けるようになる — 過学習 = モデルがパターンを学ばずに過去を丸暗記した状態。検証手順:(1) 全履歴でbacktestし、勝率と損益を記録する、(2) 最初の60%でbacktestする(学習期間)、(3) 残りの40%で検証する(検証期間)。学習が勝率75%で+5万ドル、検証が勝率52%で-8,000ドルなら過学習(繰り返されなかったノイズを覚えただけ)。ニーナ・パテルは $47,300 を、過学習したML戦略の投入で失った。backtestの勝率は87%だったが実運用は41%(ランダムなパターンを丸暗記していた)。良い戦略は学習と検証の差が10%未満に収まる。今夜、履歴データを60対40に分けよう。結果を比べる。検証が15%超も落ちるなら、ルールが過去に寄りすぎている。単純化しよう(パラメータを減らし、フィルターを緩める)。
    3. 実運用の前にウォークフォワード検証を行う — ウォークフォワード = 学習と検証の区切りを時間軸に沿って前に転がしていく手法。手順:(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モデルを作る」

    ニーナのV1 MLモデル:過学習の惨事(backtest 対 現実)
    指標 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つの致命的ミス:

    ニーナのMLのミス:backtestが87%でも実運用が41%だった理由
    ミス 何を間違えたか 影響額
    1. 先読みバイアス 「日中高値/安値」を特徴量に使った(引けまで確定しないのに!) モデルは未来のデータで値動きを「予測」していた。実運用では不可能。
    2. ランダムな学習/検証分割 トレードをシャッフルし、2023年Q3のデータで学習して2023年Q1で検証した モデルが「未来を見て」いた。トレーディングの時間はそう流れない!
    3. 大規模な過学習 わずか180トレードに対してニューラルネット(5層、128ニューロン) モデルはパターンではなくノイズを暗記した。新しいデータでは通用しなかった。
    4. 正解率の最適化 R:Rを無視して勝率90%を追った(0.3Rの勝ちが多く、3Rの負けが少数) 正解率は高いが期待値はマイナス。MLの典型的な罠。
    5. ウォークフォワード検証をしなかった 履歴データに対する単一の学習/検証分割 モデルが時間とともにどう劣化するか検証しなかった。劣化は速かった。

    ニーナの2024年Q1、月ごとの惨状:

    スローモーションの事故:過学習モデルが失敗し続けた3か月
    執行トレード数 勝率 平均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(正しいやり方):ニーナはどのミスをどう直したか
    構成要素 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月):

    ニーナのV2モデル:現実的なウォークフォワード検証(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%以上の改善があればモデルを更新
    ニーナのV2実運用結果:MLフィルターの成績(2024年6〜10月、5か月)
    シグナル 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フィルターなし)?

    ここでちょうど折り返し地点です。重要な戦略はすでに学びました。

    順調ですね! 必要なら軽く伸びをして、そのあと先の応用的な内容に進みましょう。

    MLフィルターの効果:絞り込んだトレード(68.2%)対 全シグナル(54.7%)
    場面 執行トレード数 勝率 平均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月の回復

    全行程:-4万7,300ドルの惨事から+5万5,400ドルの成功へ
    期間 モデルのバージョン 勝率 平均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を賭けではなく道具として使える。

    関連レッスン

    上級 #54

    システム開発

    MLは体系的な戦略に組み込むもの — まず土台を作ろう。

    レッスンを読む →
    中級 #32

    backtestingの現実

    適切な検証手法でMLの過学習を避ける。

    レッスンを読む →
    上級 #49

    マーケット・レジームの認識

    レジームの特徴量はMLモデルにとって重要な入力になる。

    レッスンを読む →

    ⏭️ 次回

    記事 #56:高頻度取引の概念 — HFTは個人には手が届かないが、レイテンシーアービトラージとorder flowの毒性を理解しておけば、自分が出口の流動性にされずに済む。

    💬 ディスカッション (コメント0件)

    0/1000

    コメントを読み込んでいます…

    ← 前のレッスン 次のレッスン →

    Signal Pilotで取引を始めますか。

    学んだ内容を、プロ向けのインジケーターとリアルタイムの市場分析ツールで実際に使ってみてください。

    Signal Pilotに戻る →
    教育目的のみ。 トレードには重大な損失リスクが伴います。金融助言ではありません。過去の実績は将来の結果を保証するものではありません。