バックテスト過学習の確率:あなたのサーチはコイン投げに勝ったか?
「幻想なきバックテスト」シリーズの一篇。
📄 この記事は研究論文に発展しました。 以下のすべての数値は、制御された既知の正解——ゼロエッジのサーチ、エッジを仕込んだサーチ、そしてランダムウォーク上の実際の移動平均パラメータグリッド——を構築する1つの決定論的スクリプトから得られており、そこにCombinatorially Symmetric Cross-Validation(CSCV)を走らせてバックテスト過学習の確率を推定し、選択手続きがどれだけうまく汎化するかを直接測定しています。論文はオンライン版(インタラクティブ版+PDF)をpbo-search.marketmaker.ccで、コードとデータはgithub.com/suenot/pbo-searchで公開しています。
デフレーテッド・シャープレシオは、あなたの勝者を裁判にかけた:N個の設定をサーチしたことを踏まえたとき、このシャープレシオは運が買えるものを超えているか?この記事は別のものを裁判にかける——選ぶという行為だ。あなたはグリッドを実行し、最良のセルを残し、先へ進んだ。しかしその選択自体は信頼できるものだったのか?インサンプル/アウトオブサンプルの分割全体を別のやり方でやり直したとき、同じ設定がなお首位に立つだろうか——それとも、あなたはただ100枚のコインのうち最も運の良い1枚に王冠を授けただけなのか?
**バックテスト過学習の確率(Probability of Backtest Overfitting, PBO)**は、Bailey、Borwein、López de Prado、Zhu(2017)によって導入され、まさにその問いに答える——しかも、ほとんどの人が一目見て読み違える数値を使って。この記事で最も重要な一文がこれだ。2回読んでほしい:
PBOの帰無仮説は1ではなく0.5だ。 アウトオブサンプルのスキルがないサーチはPBO ≈ 0.5を記録する。半分は「半分過学習」ではない——半分は完全な過学習、コイン投げだ。あなたが欲しいのはゼロに近いPBOだ。
これは誰もがつまずくポイントだ。私たちは確率を「何もない」という帰無仮説に対して読むように訓練されており、過学習について直感は「無罪」の読み方が0だと告げる。そうではない。PBOとは、あなたがインサンプルで最良として選んだ設定が、アウトオブサンプルでフィールドの下位半分に落ちる確率だ。あなたのサーチが汎化するものを本当に何も学んでいないなら、インサンプルの勝者はアウトオブサンプルではランキングのどこにいても等しくおかしくなく——したがって約半分の確率で下位半分に落ちる。PBO ≈ 0.5は、あなたの選択手続きがコイン投げであることを意味する。 PBO ≈ 0は、インサンプルの勝者がアウトオブサンプルでも確実に勝者であり続けることを意味する——その選択は信頼できる。以下のすべては、既知の正解が分かっているデータの上で、そのキャリブレーションという1つの事実を具体的に示すために構築されている。
| レジーム(200設定、T = 1000、S = 16) | 内容 | 勝者のインサンプルシャープレシオ | アウトオブサンプルシャープレシオ | PBO | 判定 |
|---|---|---|---|---|---|
| ゼロエッジフィールド(200個のiidノイズ戦略) | 純粋な運、どこにもエッジなし | 1.98 | 0.06 | 0.476 | 過学習——コイン投げ |
| 仕込んだエッジ(20設定が年率シャープレシオ2.38を持つ) | 本物の、頑健なスキル | 3.73 | 2.34 | 0.001 | 信頼できる |
| 純粋なランダムウォーク上のMAクロスオーバーグリッド(170設定) | 誘惑的な蜃気楼 | 0.97 | 0.04 | 0.463 | 過学習——コイン投げ |
シャープレシオは×√252で年率換算。3行すべて、選択された戦略のシャープレシオを60個のモンテカルロ行列にわたって平均している——りんごとりんごの比較であり、過学習したグリッドも帰無仮説や仕込んだエッジとまったく同じやり方でスコア付けされる。この平均された土台の上では、グリッドの選択されたインサンプルシャープレシオ(0.97)は、帰無仮説の水増しされた1.98よりも実際には低く*、そのアウトオブサンプルシャープレシオはわずかにプラスの0.04で、PBO(0.463)は½のすぐ下——帰無仮説と統計的に区別がつかない位置にある。劇的な単一行列の数値(グリッド内最良のインサンプルシャープレシオ2.33がアウトオブサンプルの中央値−0.22まで崩壊し、PBO 0.573)は、1つの代表的なランダムウォークのシードに属するもので、第4幕で明確にラベル付けされて登場する。すべての数値は結果ファイルにたどることができる。*
3つのレジーム、1つの教訓。エッジのないサーチは、ノイズがiidであろうと(PBO 0.476)実際の移動平均グリッドに扮していようと(PBO 0.463)、0.5のコイン投げラインにぴったりと張り付く——両者は統計的に区別がつかず、どちらも致命的だ。本物のエッジはPBOを0.001まで下げる。行列にわたって平均すると、グリッドの選択された勝者は取り立てて言うほどのものではない——インサンプルシャープレシオは0.97で、帰無仮説の水増しされた1.98を下回る——これ自体が誠実な診断だ:エッジのないサーチは帰無仮説そのものとして読める。ドラマはテールに宿る。1つの代表的なランダムウォーク行列(第4幕)では、グリッドの最良セルがインサンプルシャープレシオ2.33を記録する——これは仕込んだエッジのアウトオブサンプル2.34と実質的に等しく、事実上の同着だ——それでもアウトオブサンプルでは、下位半分に落ちる頻度が上位半分に入る頻度とほぼ同じになる。美しいバックテストと無価値な選択との間のこのギャップは、勝者自身のシャープレシオには現れず、手続きをスコア付けしたときにだけ見える。それこそがPBOのやることだ。
第1幕——裁判にかけられる手続き:CSCVは実際に何をするのか

DSRはパラメトリックだ:帰無仮説の下での最大シャープレシオの分布をモデル化し、勝者の有意性を解析的にデフレートする。CSCVは同じ選択バイアス問題に対するノンパラメトリックな答えだ——最大値をモデル化する代わりに、訓練/テストの分割をできる限りあらゆる方法でリサンプリングし、インサンプルの勝者が勝ち続けるかどうかを経験的に観察する。分布の仮定もなければ、「有効試行数」を数える必要もない。ただ、その選択は汎化するか、それだけを問う。
まず原材料から始めよう。あなたは、ある戦略クラスのN = 200個の設定を、T = 1000個の同期した観測にわたってバックテストした。各設定のリターン系列を列として積み重ねると、T × Nのパフォーマンス行列Mが得られる——時間方向に1,000行、戦略方向に200列だ。これがCSCVに必要な唯一の入力である。
では構築を4つの手順で見ていこう:
- 時間を
S = 16個の互いに素なブロックに分割する(各ブロックT/S行、等しい長さ)。ブロックは局所的な時間構造を保存する——リターンにメモリーがある瞬間から効いてくる設計上の選択だ。 - 半分のブロックを訓練に、半分をテストに使うあらゆる方法を選ぶ。
S = 16のとき、それは16個から8個を訓練セットとして選ぶ全C(16, 8) = 12,870通りであり、残りの8個がテストセットになる。ここから「combinatorially symmetric(組合せ的に対称)」という名前が来る:それぞれの分割には鏡像(訓練とテストを入れ替えたもの)があり、この仕組みは単一のウォークフォワードが与えるような、過去→未来という1つの特権的な切り方ではなく、データを対称に使う。 - 各分割において、200個すべての設定をインサンプルのシャープレシオでランク付けし、勝者
n*を選ぶ。 次に、その同じ設定n*が、保留された8ブロック上でアウトオブサンプルではどこにランクされるかを見つける。 - 勝者の相対的なアウトオブサンプル順位を記録し、それをロジットに変換する。PBOは、12,870通りの分割のうち、そのロジットが0以下となる割合だ。
列挙するコードはごく短い:
from itertools import combinations
combos = list(combinations(range(S), S // 2)) # C(16, 8) = 12,870 splits
各分割について、を、個の設定の中でのインサンプル勝者のアウトオブサンプル順位とする(順位1 = 最悪、 = 最良)。それを相対順位に正規化し、そのロジットを取り、分割全体で積分する:
ロジットは単なる便利な物差しだ。は、勝者がアウトオブサンプルで上位半分に着地したことを意味する(相対順位が½を上回る)——インサンプル/アウトオブサンプルの一貫性があり、良い兆候だ。は、アウトオブサンプルの中央値以下に着地したことを意味する——その分割ではインサンプルの選択が汎化しなかった。PBOは、インサンプルの勝者がアウトオブサンプルで中央値を上回れなかった分割の割合だ。 行列全体がそれを決定する:MとSが与えられれば、PBOは決定論的だ——リサンプリングのシードは不要で、12,870通りの分割すべてが網羅的に列挙される。
コードでは、すべての分割におけるすべての設定のインサンプルおよびアウトオブサンプルのシャープレシオ(それぞれ12,870 × 200の行列R_trとR_te)が手元にあれば、推定量の核心はたった6行だ:
n_star = R_tr.argmax(axis=1) # in-sample winner, per split
oos_sh = R_te[rows, n_star] # that winner's OWN out-of-sample Sharpe
rank = (R_te <= oos_sh[:, None]).sum(axis=1) # its OOS rank among N configs, 1..N
omega = np.clip(rank / (N + 1.0), 1e-6, 1 - 1e-6) # relative OOS rank in (0,1)
lambdas = np.log(omega / (1.0 - omega)) # logit
pbo = float(np.mean(lambdas <= 0.0)) # fraction of splits with lambda <= 0
ここにないものに注目してほしい:p値もなければ、勝者のシャープレシオに対するしきい値もなく、帰無分布のモデルもない。PBOは勝者が優れているかどうかを一切問わない。それが問うのは、インサンプルの最良を選ぶという決定が、保留データとの接触に耐えるかどうかだ。それはあなたの戦略の性質ではなく、あなたのサーチの性質だ——だからこそ、勝者自身の統計量では捉えられないものを捉えることができる。
第2幕——キャリブレーションこそがすべての論拠:帰無仮説は0.5

キャリブレーションできない診断法は噂話に過ぎない。だから、何か本物のデータでPBOを信用する前に、答えが分かっているデータで2つの端点を固定しよう:どこにもエッジがないフィールドと、本物のエッジがあるフィールドだ。1つ目でPBOが0.5付近に、2つ目でゼロ付近に着地しなければ、それは無価値だ。
帰無仮説の端点。 独立で、ドリフトゼロ、エッジゼロの正規分布ノイズからなる200列——すべての設定について真のシャープレシオがちょうど0——からMを構築し、CSCVを実行する。そのような行列60個にわたって平均する。選択された(インサンプル最良の)戦略は、平均インサンプル年率シャープレシオ1.98を記録する。これは小さな数字ではない——DSRの記事が測定したのと同じ選択による水増しだ——200個のノイズ列のうち最良のものが、資金がつきそうな戦略に見えるのだ。アウトオブサンプルでは、その同じ勝者は年率シャープレシオ0.06しか出せない。実質的にすべてを失ったのだ。そして、手続きに対する判定は:
これが測定されたコイン投げだ。12,870通りの分割全体で、インサンプルの勝者はアウトオブサンプルの中央値を下回る確率と上回る確率がほぼ同じ——0.476、½のわずかに下で、モンテカルロのばらつきを考えれば0.5と区別がつかない。付随する診断も一致する:選択された戦略のアウトオブサンプルのシャープレシオが負になる確率は0.475——純粋なノイズの中からインサンプルの最良を選べば、アウトオブサンプルで約半分の確率でお金を失う。選択にスキルがないのは、見つけるべきスキルが存在しないからであり、PBOはまさにそれを報告する:0.5は過学習ラインであり、純粋なノイズはその上に座る。
なぜ1ではなく0.5なのか?真の帰無仮説の下では、200列すべてが交換可能——同じノイズ過程からの統計的に互換な抽出だからだ。インサンプルの勝者が特別なのはインサンプルだけであり、アウトオブサンプルでは単なる別の1列にすぎず、どこにランクされても等しくおかしくない。したがって、その相対アウトオブサンプル順位は上で一様であり、ロジットは0を中心に対称で、となる割合は½に収束する。PBOが1になるとしたら、それはコイン投げよりも悪い——インサンプルでの成功がアウトオブサンプルでの失敗を確実に予測することを意味し、それには単なるエッジの不在ではなく、能動的な反持続性のメカニズムが必要だ(詳しくは誠実さについての注記で)。
エッジの端点。 今度は、200個の設定のうち20個が本物の、仕込まれたエッジ——観測あたりシャープレシオ0.15で、年率換算すると2.38(導出:)——を持ち、残り180個はノイズのままにしておくフィールドを構築する。同一のCSCVを実行する。すると話は完全に逆転する:
| インサンプルシャープレシオ(年率) | アウトオブサンプルシャープレシオ(年率) | PBO | P(OOS損失) | |
|---|---|---|---|---|
| 帰無仮説(エッジ0) | 1.98 | 0.06 | 0.476 | 0.475 |
| 仕込んだエッジ(シャープレシオ2.38) | 3.73 | 2.34 | 0.001 | 0.0006 |
仕込んだエッジの勝者は、インサンプル年率シャープレシオ3.73を記録する——いつものように選択によって水増しされている——が、今回はアウトオブサンプルで2.34を維持し、PBOは0.001まで崩壊する。12,870通りの分割すべてにわたって、インサンプルの勝者がアウトオブサンプルで下位半分に落ちることは実質的に一度もない。アウトオブサンプルで損失となる確率は0.0006まで下がる。これが信頼できる選択手続きの姿だ:訓練とテストをどう切り分けても、同じ種類の設定が勝ち続ける——サーチがロックオンできる、本物の頑健な効果がそこに存在するからだ。2つの端点——ノイズでの0.476、本物のエッジでの0.001——がキャリブレーションだ。PBOは機能する。
第3幕——二値検定ではなく、連続的な温度計

2つの端点は、PBOがノイズとエッジを区別できることを証明する。しかし、より深い性質は、それを滑らかに行うということだ。仕込んだエッジをゼロから強いものへと掃引しても、PBOは0.5から0へと飛び移ったりしない——単調な傾斜を滑り降りていき、選択された戦略のアウトオブサンプルシャープレシオが、それに歩調を合わせて上昇していく:
| 仕込んだ真のシャープレシオ(年率) | PBO | 選択された戦略のOOSシャープレシオ(年率) |
|---|---|---|
| 0.00 | 0.52 | −0.05 |
| 0.48 | 0.44 | 0.19 |
| 0.95 | 0.21 | 0.81 |
| 1.59 | 0.03 | 1.65 |
| 2.38 | 0.001 | 2.48 |
| 3.17 | 0.00 | 3.29 |
2つのデータ列を一緒に読んでほしい。真のエッジがゼロのときPBOは0.52で、選択された戦略はアウトオブサンプルで**−0.05を稼ぐ——またしてもコイン投げであり、お金を失う勝者だ。ごくわずかなエッジ(年率0.48)を加えるとPBOは0.44まで下がる。年率の真のシャープレシオが0.95**——本当に控えめで、信じられる程度のエッジ——になる頃には、PBOはすでに0.21で、アウトオブサンプルのシャープレシオは0.81まで上がっている。1.59では0.03、2.38では0.001、3.17では事実上0.00となり、選択された戦略はアウトオブサンプルで3.29を叩き出す。本物のエッジが強まるにつれてPBOは単調に低下し、勝者のアウトオブサンプルの成績はそれに歩調を合わせて上昇する——この2つは同じ事実を2つの側面から見たものだ。
これが、PBOを実務で使えるものにしている性質だ:それは二値の警報ではなく、連続的な過学習温度計だ。PBOが0.21だというのは、単に「過学習していない」と言っているのではない——あなたの選択には部分的なアウトオブサンプルのスキルがあると言っているのだ:インサンプルの勝者はアウトオブサンプルの中央値を79%の確率で上回るが、エッジは十分薄く、5分の1の分割ではなお埋もれてしまう。シグナルを強化したり、ユニバースを絞り込んだり、グリッドを刈り込んだりするたびにこの数値が動くのを見て、どちらの方向が誠実かを知ることができる。論文自身の経験則——PBOが0.05を超えたら棄却する——は、この傾斜から自然に導かれる:年率シャープレシオ~1.5を下回るとサーチはそれをクリアしておらず、~1.6を上回るとクリアしている。しかし、この傾斜そのものが単一のカットオフよりも情報量が多い。なぜなら、それは過学習しているかどうかだけでなく、どれだけコイン投げに近いかを教えてくれるからだ。
第4幕——現実的な罠:美しいバックテスト、無価値と認定される

iidノイズの帰無仮説は誠実だが、退けるのは簡単だ——「私の戦略はランダムな正規分布の列などではない」。そこで、実務家が実際にはまり込む形の罠を示そう。世界で最もバックテストされているルール、移動平均クロスオーバーを取り上げる:ファストMAがスローMAを上抜けたらロング、それ以外はフラット。それをグリッド化する——ファストの長さ10通りスローの長さ17通り、ファスト<スローの有効な組合せを残してK = 170設定。今度は、そのグリッドを証明可能にエッジがゼロの系列——純粋なランダムウォーク——に対して実行する。見つかるものは何もない。クロスオーバーはランダムウォークを予測できない。答えが「戦略なし」であることは分かっている。
しかしグリッドはそれを知らない。それはあなたに勝者を差し出す。そしてその勝者は誘惑的だ:
| 診断指標(1つの代表的なランダムウォーク行列、seed 3000、K = 170、S = 16) | 値 |
|---|---|
| 最良インサンプルシャープレシオ(年率) | 2.33 |
| PBO | 0.573 |
| アウトオブサンプルシャープレシオの中央値(年率) | −0.22 |
| アウトオブサンプルで損失となる確率 | 0.63 |
| アウトオブサンプル対インサンプルの劣化スロープ | −0.92 |
| ロジットの中央値 | −0.25 |
これは1つのシード付き行列だ。60個の独立なランダムウォーク行列にわたって平均すると、同じ診断指標はPBO 0.463 ± 0.223、選択されたインサンプルシャープレシオ0.97が0.04へと減衰、P(OOS損失) 0.47となり——帰無仮説と統計的に区別がつかない。seed 3000の0.573は、~0.5の帰無仮説帯の高い側に位置する1つの抽出——コイン投げの値の周りのサンプリングノイズであり、±0.223の行列間ばらつきの内側に十分収まる——であり、いずれにせよ話は同じだ。
移動平均クロスオーバーでのインサンプル年率シャープレシオ2.33は、ピッチデッキに収まるような類の結果だ。それは、第2幕の本物の仕込みエッジのアウトオブサンプルシャープレシオ(2.34——事実上の同着)とほぼ等しい。バックテストの時点で立ち止まっていたら、あなたはそれに資金を出しただろう。CSCVはそれを拒む。ここでPBOはコイン投げだ:60個の行列にわたって平均すると0.463、この特定の1つでは0.573——どちらも、このサーチにはアウトオブサンプルのスキルがないと告げている。 0.573を読み過ぎないでほしい:それは½から0.073上にあり、0.5の帰無仮説の周りのサンプリングノイズであり、±0.223の行列間の帯の内側に十分収まっている。本当に0.5を上回るPBO——インサンプルでの成功がアウトオブサンプルでの失敗を能動的に予測するような状態——には、このランダムウォークには含まれていない反持続性または取引コストの構造が必要だ(誠実さについての注記を参照)。この行列上では、−0.25という中央値のロジットは、中央値のインサンプル勝者を約0.44(導出:)の相対アウトオブサンプル順位に置く——おおよそ170中75位(導出:)であり、率いるはずだったフィールドの中央よりわずかに下だ。その勝者のアウトオブサンプルシャープレシオの中央値は**−0.22**——負だ——そして**63%**の確率でアウトオブサンプルの損失を被る。バックテストのシャープレシオが2.33でありながら、アウトオブサンプルの期待値が損失であること:これが蜃気楼の定義だ。
−0.92という劣化スロープが2本目のナイフだ。各分割について、選択された勝者のアウトオブサンプルシャープレシオをインサンプルシャープレシオに回帰させると、スロープは急激に負になる——ある設定がインサンプルで良く見えれば見えるほど、アウトオブサンプルでは悪くなる。これはメモリーのある系列に対する過学習の指紋だ:クロスオーバーは訓練ブロック内の一時的なパターンに食いつくが、それはランダムウォークの人工物にすぎないため、アウトオブサンプルでは反転する。スロープを読み過ぎないために述べておくべき1つの微妙な点がある:負のスロープそれ自体は判定ではない。第2幕の本物のエッジのレジームでさえ、負の劣化スロープ(−0.52)を持つ——平均への回帰は常に、選択された最大値をアウトオブサンプルで少し押し下げる。蜃気楼と本物のエッジを分けるのは、スロープが負であることではなく、勝者がどこに着地するかだ:本物のエッジは、少し取り分を失いながらも上位に留まる(PBO 0.001)。蜃気楼はコイン投げのライン上に座り(平均PBO 0.463、このシードでは0.573)、その勝者はアウトオブサンプルの中央値を上回る確率も下回る確率もほぼ同じだ。スロープはどれだけ縮小するかを読み、PBOはそれでも汎化するかを読め。蜃気楼はその両方で失敗する。
これが、PBOが生のバックテストの隣に居場所を得る理由だ。2.33というインサンプルシャープレシオは嘘ではない——その戦略は、そのランダムウォーク上で、インサンプルにおいて本当にそれを稼いだのだ。それは選択であり、現実味のあるグリッドの上で馴染み深いルールをまとっているだけであり、エクイティカーブをどれだけ見つめても明らかにはならない。手続きをスコア付けすることだけがそれを明らかにする。
第5幕——PBOとDSR:2つの誠実な問い、1つのプラトー

PBOとデフレーテッド・シャープレシオは、同じ誠実さの検査の2つの半分であり、冗長ではない——それらは異なる対象を尋問する:
| デフレーテッド・シャープレシオ(DSR) | バックテスト過学習の確率(PBO) | |
|---|---|---|
| 裁判にかけられる対象 | 勝者 | 選択手続き |
| 問い | このシャープレシオはN回の試行にわたって運が買えるものを超えているか? | インサンプルの最良を選ぶことはアウトオブサンプルで汎化するか? |
| 手法 | パラメトリック——有意性のしきい値をデフレートする | ノンパラメトリック——すべてのC(S, S/2)通りの訓練/テスト分割をリサンプリングする |
| 帰無仮説の値 | DSR ≈ 0.5(勝者がノイズ天井にちょうど一致する) | PBO ≈ 0.5(勝者がアウトオブサンプルでコイン投げになる) |
| 望ましい値 | DSRが1に近い | PBOが0に近い |
| 試行数Nが必要か? | はい——相関したグリッドはNを曖昧にする | いいえ——分割のリサンプリングが依存関係をネイティブに扱う |
両者が食い違うことすらあり、その食い違いは診断的だ。DSRは相関したグリッドに騙されて過剰にデフレートしてしまうことがある(これはDSRの記事の最終幕がまるごと扱っている罠だ——640個の相関したセルは640回の独立な試行ではなく、生のカウントを与えるとノイズ天井が過大に水増しされる)。PBOは試行を一切数えない。実際のリターン行列をリサンプリングするため、グリッドの相関は分割の中に無償で織り込まれる。逆に、PBOは手続きが汎化することを教えてくれるが、勝者がハードルレートをクリアするかどうかは教えてくれない——サーチのPBOが低くても、選ばれたものが、フィールドの中央値を確実に上回りはするもののトレードするには小さすぎるアウトオブサンプルシャープレシオを持つことはあり得る。DSRは勝者に値段をつけ、PBOは手続きに値段をつける。両方を実行せよ。

このすべての根底には幾何学的な直観があり、それは持ち帰るべき最も有用なものだ。本物のエッジはプラトーであり、過学習はスパイクだ。 本物の効果があなたのグリッドを駆動しているとき、良好な設定はクラスターを作る——fast=3/slow=55が機能し、その近傍も機能する。なぜなら、それらはすべて同じ根底にあるシグナルをサンプリングしているからだ。そのプラトーはリサンプリングに対して頑健だ:16ブロックのうちどの8ブロックを訓練に使おうとも、インサンプルの勝者は同じ広い領域から引かれ、その領域はアウトオブサンプルでもなお上位に留まる。多くの分割が一致する → 低いPBO。過学習があなたのグリッドを駆動しているとき、「勝者」は孤独なスパイクだ——たまたま訓練ブロックのノイズに適合しただけの1セルであり、凡庸な近傍に囲まれている。そのスパイクは脆弱だ:異なる訓練/テスト分割は異なる孤独なスパイクに王冠を授け、そのどれもがテストセットまで生き残らない。分割の意見が分かれる → PBO ≈ 0.5。これは、私たちのプラトー分析の研究がパラメータマップ側から到達したのと同じ教訓だ。PBOは事実上、プラトー対スパイクの区別を、あなたのデータのあらゆる対称なリサンプリングにわたって一挙に測定したものだ。
これはまた、CSCVが実務家のデフォルトであるウォークフォワード分割に勝る理由も説明する。ウォークフォワードは、過去→未来という1つの切り方と1つの判定しか与えない。CSCVは12,870通りの対称な切り方を与え、勝者がそのすべてを生き延びるかを問う。スパイクは運によって1つの恣意的な切り方を生き延びることはできるが、12,870通りを生き延びることはできない。(López de PradoのCombinatorial Purged Cross-Validation、CPCVは、まさにこのアイデアを、逐次依存の下で単純なリサンプリングが被りうるラベルリークをパージングとエンバーゴイングによって消し去ることで拡張したものだ——あなたのラベルが重なり合うようになったら次に上るべき自然な段だ。)同じ構造的な警告が、このシリーズ全体を貫いている:あなたが最適化する指標が密かにあなたの戦略を選んでいる(目的関数設計)、1バーのリークがノイズから15のシャープレシオを製造する(先読みバイアス)、多重検定サーチがノイズから1.63のシャープレシオを製造する(DSR)——そしてここでは、リサンプリングされた選択手続きが、PBOだけが暴くことのできる無価値な勝者を製造する。
誠実さについての注記
4つの留保事項を率直に述べる。制御された研究がその結論に値するのは、自らの限界を名指ししたときだけだからだ。
- データ生成過程は合成データである——意図的に。 帰無仮説にはiid正規分布ノイズ、エッジの掃引には仕込みシャープレシオのフィールド、罠には純粋なランダムウォーク上の移動平均グリッドを用いた。どれも市場のリアリズムについての主張ではなく、それぞれ制御された既知の正解のために選ばれている。PBOが「スキルなし」で0.5、「本物のスキル」で0を示すことを証明できるのは、どちらがどちらかを知っているデータを生成したときだけだ。実際のリターンはファットテールで、自己相関があり、非定常だ。ここでの成果物は戦略ではなく、キャリブレーションされた診断法だ。
- PBOの帰無仮説は0.5であり、それは欠陥ではなく仕様だ。 PBOを報告するたびにそれを明言せよ。さもなければ読者の半分は0.5を「半分安全」として扱ってしまうからだ。アウトオブサンプルのスキルがないサーチは0.5に座り、本物のエッジはそれを0へと押し下げる。PBO ≈ 0.5に「無罪」の読み方は存在しない——それは完全に過学習したという判定だ。
- PBO > 0.5は、私たちが無理に作り出すことのない「倒錯した」領域だ。 系統的に0.5を上回るPBOは、インサンプルでの成功がアウトオブサンプルでの失敗を能動的に予測することを意味する——ISで最悪の設定がOOSで最良になる。これには、単なるエッジの不在ではなく、反持続性または取引コストの構造が必要だ。私たちの過学習したサーチは≈0.5に座っており(iidノイズで0.476、MAグリッドの平均で0.463、高い側の1つのシードで0.573、いずれも60個の行列にわたる±0.14–0.22のモンテカルロ帯の内側)、それはすでに「アウトオブサンプルのスキルなし」を意味している。私たちは倒錯した領域を作り出しているのではなく、過学習があなたをコイン投げのラインの上に着地させることだけを示している——それだけでも十分に致命的だ。
- PBOは行列が与えられれば決定論的であり、ランダムなのは行列だけだ。 固定された
MとS = 16について、C(16, 8) = 12,870通りの分割すべてが網羅的に列挙される——ブートストラップのシードは存在せず、PBO自体にサンプリング分散はない。私たちが報告するばらつき(帰無仮説で±0.137、MAグリッドで±0.223)は、推定量の内部のものではなく、60個のモンテカルロ行列にわたる分散だ。両側のシャープレシオは約500個の観測で推定される——CSCVのブロック切り捨て後は496個になる。T = 1000を16個の等しいブロックに分割すると使用可能な行が992行残り、それが496ずつの2つの半分に分かれるからだ。シャープレシオは順序不変であるため、訓練セットやテストセット内の行の順序は問題にならない(リターン/ドローダウン比のようなパス依存の指標であれば問題になる)。
まとめ
- PBOは勝者ではなく選択手続きをスコア付けする——そしてその帰無仮説は0.5だ。 それは、あなたがインサンプルで最良として選んだ設定がアウトオブサンプルで下位半分に落ちる確率だ。PBO ≈ 0.5はコイン投げ(完全な過学習)であり、PBO ≈ 0は信頼できる選択だ。あなたが欲しいのはゼロに近い値であり、それを声に出して言わなければならない。なぜなら、訓練されていない目には0.5は「安全」に見えるが、実際にはその正反対を意味するからだ。
- キャリブレーションがそれが機能することを証明する。 200個のiidゼロエッジ戦略において、最良のインサンプル年率シャープレシオ1.98はアウトオブサンプルで0.06まで崩壊し、PBO = 0.476——ノイズはコイン投げのライン上に座り、47.5%の確率でアウトオブサンプルでお金を失う。本物のエッジ(年率シャープレシオ2.38)を仕込むと、インサンプルの3.73はアウトオブサンプルの2.34まで生き残り、PBOは0.001まで下がる。2つの端点、1つのキャリブレーションされた診断法。
- PBOは連続的な温度計だ。 仕込んだエッジを掃引すると、PBOは単調に低下する——年率の真のシャープレシオ0.00 / 0.48 / 0.95 / 1.59 / 2.38 / 3.17において0.52 → 0.44 → 0.21 → 0.03 → 0.001 → 0.00——選択された戦略のアウトオブサンプルシャープレシオはそれに歩調を合わせて上昇する(−0.05から3.29まで)。それは、単なるイエス/ノーではなく、どれだけコイン投げに近いかを測定する。
- 現実的な罠こそが要点だ。 純粋なランダムウォーク上の170設定の移動平均グリッドは、平均するとわずか0.97の選択されたインサンプルシャープレシオが0.04まで減衰し、PBOは0.463——帰無仮説と統計的に区別がつかず、エッジのないサーチが帰無仮説そのものとして読める。1つの代表的な行列では蜃気楼が鮮やかに現れる:最良インサンプルシャープレシオ2.33(ピッチデッキの数字)、アウトオブサンプルシャープレシオの中央値**−0.22**、アウトオブサンプルで損失となる確率63%、PBO 0.573、そして急激な**−0.92**の劣化スロープ。勝者の隣に印字されるどの統計量にも見えず、手続きをスコア付けしたときにだけ見える、負のアウトオブサンプル期待値を持つ美しいバックテスト。
- PBOをデフレーテッド・シャープレシオと組み合わせよ。 DSRは勝者に値段をつける(N回の試行を踏まえたとき、このシャープレシオは運を超えているか?)。PBOは手続きに値段をつける(選択は汎化するか?)。DSRは試行数を必要とし、相関したグリッドに騙されることがある。PBOは行列をリサンプリングし、試行を一切数えない。本物のエッジは多くの分割が同意する広いプラトーだ(低いPBO)。孤独なインサンプルのスパイクは過学習だ(分割の意見が分かれ、PBO ≈ 0.5)。両方を実行し、プラトーを読め。
サーチの勝者は、無罪が証明されるまでは有罪だ——そしてPBOは、サーチが差し出すアリバイではなく、サーチそのものを尋問する。それは勝者がインサンプルでどれだけ良く見えるかを無視し、それを選ぶことが12,870通りに切り直されても生き残る決定だったかどうかだけを問う。そうでなかったとき——あなたの見事な2.33のシャープレシオが、アウトオブサンプルでは下位半分に落ちる頻度がそうでない頻度とほぼ変わらないと判明したとき——あなたは戦略を見つけたのではない。最も運の良いコインを見つけたのであり、PBOはそれが裏返る瞬間を捉える数値だ。
完全な実験——帰無キャリブレーション・ハーネス、仕込みエッジの温度計掃引、ランダムウォークグリッドの罠、そしてこの記事のすべての数値を1つの決定論的スクリプトから再生成できる仕組み——は、姉妹編の論文pbo-search.marketmaker.ccにあり、コードとデータはgithub.com/suenot/pbo-searchで公開している。
Authors
Trading-systems engineer
Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.