← Zurück zu den Artikeln
July 1, 2026
5 min read

Die Probability of Backtest Overfitting: Hat Ihre Suche einen Münzwurf geschlagen?

#algotrading
#backtest
#overfitting
#cross-validation
#pbo
#sharpe
#validation
🎯
Part 6 of 9 · Collection
Backtesting Without Fooling Yourself

Teil der Serie "Backtests Without Illusions".

📄 Dieser Artikel ist zu einem Forschungspapier gewachsen. Jede Zahl unten stammt aus einem einzigen deterministischen Skript, das eine kontrollierte Ground Truth aufbaut — Suchen ohne Edge, Suchen mit eingepflanztem Edge und ein echtes Moving-Average-Parameterraster auf einem Random Walk — und dann Combinatorially Symmetric Cross-Validation (CSCV) durchführt, um daran die Probability of Backtest Overfitting zu schätzen und direkt zu messen, wie gut sich die Auswahlprozedur selbst verallgemeinert. Lesen Sie das Paper online (interaktive Version + PDF) unter pbo-search.marketmaker.cc, Code und Daten unter github.com/suenot/pbo-search.

Der Deflated Sharpe Ratio stellte Ihren Gewinner auf die Probe: Angesichts der Tatsache, dass Sie N Konfigurationen durchsucht haben, liegt dieser Sharpe jenseits dessen, was der Zufall kauft? Dieser Artikel stellt etwas anderes auf die Probe — den Akt der Auswahl selbst. Sie haben ein Raster durchlaufen, die beste Zelle behalten und sind weitergezogen. Aber war die Auswahl selbst vertrauenswürdig? Wenn Sie den gesamten In-Sample/Out-of-Sample-Split auf andere Weise wiederholen würden, käme dieselbe Konfiguration wieder als Sieger hervor — oder haben Sie einfach die glücklichste von hundert Münzen gekrönt?

Die Probability of Backtest Overfitting (PBO), eingeführt von Bailey, Borwein, López de Prado & Zhu (2017), beantwortet genau diese Frage, und zwar mit einer Zahl, die die meisten Menschen auf den ersten Blick falsch lesen. Hier ist der wichtigste Satz dieses Artikels, lesen Sie ihn also zweimal:

Der Nullwert von PBO ist 0.5, nicht 1. Eine Suche ohne Out-of-Sample-Können erzielt PBO ≈ 0.5. Die Hälfte bedeutet nicht "halb überangepasst" — die Hälfte ist vollständig überangepasst, ein Münzwurf. Sie wollen einen PBO nahe null.

Das bringt jeden zu Fall. Wir sind trainiert, Wahrscheinlichkeiten gegen einen Nullwert von "nichts" zu lesen, und bei Overfitting sagt uns unser Bauchgefühl, dass die "unschuldige" Lesart 0 ist. Das ist sie nicht. PBO ist die Wahrscheinlichkeit, dass die Konfiguration, die Sie in Sample als beste ausgewählt haben, out of Sample in der unteren Hälfte des Feldes landet. Wenn Ihre Suche wirklich nichts gelernt hat, das sich verallgemeinert, ist der In-Sample-Gewinner Out-of-Sample gleich wahrscheinlich überall im Ranking — er fällt also etwa die Hälfte der Zeit in die untere Hälfte. PBO ≈ 0.5 bedeutet, dass Ihre Auswahlprozedur ein Münzwurf ist. PBO ≈ 0 bedeutet, dass der In-Sample-Gewinner zuverlässig auch Out-of-Sample ein Gewinner bleibt — die Auswahl ist vertrauenswürdig. Alles Folgende dient dazu, diese eine Kalibrierungstatsache an Daten zu konkretisieren, bei denen wir die Ground Truth kennen.

Regime (200 Konfigurationen, T = 1000, S = 16) Was es ist In-Sample-Sharpe des Gewinners Out-of-Sample-Sharpe PBO Urteil
Feld ohne Edge (200 iid-Rauschstrategien) reines Glück, nirgends ein Edge 1.98 0.06 0.476 überangepasst — ein Münzwurf
Eingepflanzter Edge (20 Konfigurationen tragen annualisierten Sharpe 2.38) echtes, robustes Können 3.73 2.34 0.001 vertrauenswürdig
MA-Crossover-Raster auf reinem Random Walk (170 Konfigurationen) eine verlockende Illusion 0.97 0.04 0.463 überangepasst — ein Münzwurf

Sharpe Ratios annualisiert ×√252. Alle drei Zeilen mitteln den Sharpe der ausgewählten Strategie über 60 Monte-Carlo-Matrizen — Äpfel mit Äpfeln, sodass das überangepasste Raster genauso bewertet wird wie der Nullwert und der eingepflanzte Edge. Auf dieser gemittelten Basis ist der ausgewählte In-Sample-Sharpe des Rasters (0.97) tatsächlich niedriger als der aufgeblähte Nullwert von 1.98, sein Out-of-Sample-Sharpe ist ein leicht positives 0.04, und sein PBO (0.463) liegt knapp unter ½ — statistisch nicht vom Nullwert unterscheidbar. Die dramatischen Einzelmatrix-Zahlen (ein bester In-Sample-Sharpe im Raster von 2.33, der auf einen medianen Out-of-Sample-Wert von −0.22 einbricht, PBO 0.573) gehören zu einem repräsentativen Random-Walk-Seed und erscheinen, klar gekennzeichnet, in Akt 4. Jede Zahl lässt sich auf die Ergebnisdatei zurückführen.

Drei Regime, eine Lektion. Eine Suche ohne Edge liegt genau auf der 0.5-Münzwurf-Linie, egal ob das Rauschen iid ist (PBO 0.476) oder als echtes Moving-Average-Raster verkleidet ist (PBO 0.463) — die beiden sind statistisch nicht zu unterscheiden, und beide sind verdammend. Ein echter Edge senkt PBO auf 0.001. Über die Matrizen gemittelt ist der ausgewählte Gewinner des Rasters unauffällig — ein In-Sample-Sharpe von 0.97, unter dem aufgeblähten Nullwert von 1.98 — was selbst die ehrliche Diagnose ist: eine Suche ohne Edge liest sich wie der Nullwert. Das Drama steckt im Tail. An einer repräsentativen Random-Walk-Matrix (Akt 4) erzielt die beste Zelle des Rasters einen In-Sample-Sharpe von 2.33 — im Wesentlichen gleich dem Out-of-Sample-Wert 2.34 des eingepflanzten Edge, ein totes Rennen — landet aber Out-of-Sample etwa ebenso oft in der unteren wie in der oberen Hälfte. Diese Lücke zwischen einem großartigen Backtest und einer wertlosen Auswahl ist im eigenen Sharpe des Gewinners unsichtbar und wird nur sichtbar, wenn man die Prozedur bewertet. Genau das tut PBO.

Akt 1 — Die Prozedur auf der Anklagebank: was CSCV tatsächlich tut

A tall performance matrix of one thousand rows and two hundred strategy columns being sliced horizontally into sixteen equal blocks, with eight blocks routed to a training panel and the other eight to a testing panel, a single in-sample-best column highlighted and an arrow tracing where that same column lands in the out-of-sample ranking

DSR ist parametrisch: Es modelliert die Verteilung des Maximum-Sharpe unter einem Nullwert und deflationiert die Signifikanz des Gewinners analytisch. CSCV ist die nicht-parametrische Antwort auf dasselbe Selektionsbias-Problem — statt das Maximum zu modellieren, resampelt es den Train/Test-Split auf jede erdenkliche Weise und beobachtet empirisch, ob der In-Sample-Gewinner weiter gewinnt. Keine Verteilungsannahme, kein Zählen "effektiver Versuche". Nur: generalisiert die Wahl?

Beginnen wir mit dem Rohmaterial. Sie haben N = 200 Konfigurationen einer Strategieklasse über T = 1000 synchrone Beobachtungen gebacktestet. Stapeln Sie die Renditereihe jeder Konfiguration in einer Spalte, und Sie erhalten eine T × N Performance-Matrix M — 1.000 Zeilen Zeit, 200 Spalten Strategie. Das ist der einzige Input, den CSCV braucht.

Nun die Konstruktion, in vier Schritten:

  1. Teilen Sie die Zeit in S = 16 disjunkte Blöcke gleicher Länge (T/S Zeilen je Block). Blöcke bewahren die lokale Zeitstruktur — eine Designentscheidung, die relevant wird, sobald Renditen ein Gedächtnis haben.
  2. Wählen Sie jede Möglichkeit, die Hälfte der Blöcke zum Trainieren und die Hälfte zum Testen zu verwenden. Bei S = 16 sind das alle C(16, 8) = 12.870 Möglichkeiten, 8 von 16 Blöcken als Trainingsset auszuwählen; die anderen 8 sind das Testset. Daher kommt "combinatorially symmetric": Jeder Split hat ein Spiegelbild (Train und Test tauschen), sodass das Schema Ihre Daten symmetrisch nutzt statt des einen privilegierten Vergangenheit→Zukunft-Schnitts, den ein einzelner Walk-Forward-Lauf liefert.
  3. Ranken Sie bei jedem Split alle 200 Konfigurationen nach In-Sample-Sharpe und wählen Sie den Gewinner n*. Finden Sie dann heraus, wo diese gleiche Konfiguration n* Out-of-Sample rangiert, auf den zurückgehaltenen 8 Blöcken.
  4. Erfassen Sie den relativen Out-of-Sample-Rang des Gewinners und wandeln Sie ihn in einen Logit um. PBO ist der Anteil der 12.870 Splits, bei denen dieser Logit ≤ 0 ist.

Die Enumeration lässt sich winzig schreiben:

from itertools import combinations

combos = list(combinations(range(S), S // 2))   # C(16, 8) = 12,870 splits

Für jeden Split sei rˉnc\bar r^{\,c}_{n^*} der Out-of-Sample-Rang des In-Sample-Gewinners unter den NN Konfigurationen (Rang 1 = schlechtester, NN = bester). Normalisieren Sie ihn zu einem relativen Rang ωˉc(0,1)\bar\omega_c \in (0,1), bilden Sie dessen Logit λc\lambda_c und integrieren Sie über die Splits:

ωˉc=rˉncN+1,λc=ln ⁣ωˉc1ωˉc,PBO=1#CScCS1{λc0}\bar\omega_c = \frac{\bar r^{\,c}_{n^*}}{N+1}, \qquad \lambda_c = \ln\!\frac{\bar\omega_c}{1 - \bar\omega_c}, \qquad \text{PBO} = \frac{1}{\#C_S}\sum_{c \,\in\, C_S} \mathbf{1}\{\lambda_c \le 0\}

Der Logit ist nur ein praktisches Lineal. λc>0\lambda_c > 0 bedeutet, dass der Gewinner Out-of-Sample in der oberen Hälfte landete (relativer Rang über ½) — In-Sample/Out-of-Sample-Konsistenz, gut. λc0\lambda_c \le 0 bedeutet, dass er am oder unter dem Out-of-Sample-Median landete — die In-Sample-Wahl hat sich auf diesem Split nicht verallgemeinert. PBO ist der Anteil der Splits, bei denen der In-Sample-Gewinner es nicht schaffte, den Median Out-of-Sample zu schlagen. Die gesamte Matrix bestimmt es: Gegeben M und S, ist PBO deterministisch — kein Resampling-Seed, alle 12.870 Splits werden erschöpfend enumeriert.

Im Code, sobald Sie den In-Sample- und Out-of-Sample-Sharpe jeder Konfiguration auf jedem Split haben (Matrizen R_tr und R_te, jeweils 12.870 × 200), sind sechs Zeilen der Kern des Schätzers:

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

Beachten Sie, was nicht hier steht: kein p-Wert, kein Schwellenwert für den Sharpe des Gewinners, kein Modell der Nullverteilung. PBO fragt nie, ob der Gewinner gut ist. Es fragt, ob die Wahl des In-Sample-Besten eine Entscheidung ist, die den Kontakt mit zurückgehaltenen Daten übersteht. Das ist eine Eigenschaft Ihrer Suche, nicht Ihrer Strategie — weshalb es genau das erfasst, was die eigenen Statistiken des Gewinners nicht können.

Akt 2 — Kalibrierung ist das ganze Argument: der Nullwert ist 0.5

A horizontal PBO dial running from zero on the left to one on the right with a bright danger line drawn at exactly one-half labeled the overfitting line, a spinning coin balanced on that midpoint, and a zero-edge strategy's tall in-sample Sharpe bar collapsing to a flat near-zero bar out of sample

Eine Diagnostik, die man nicht kalibrieren kann, ist ein Gerücht. Bevor man PBO also an etwas Realem vertraut, sollte man zwei Endpunkte an Daten fixieren, deren Antwort bekannt ist: ein Feld ohne jeglichen Edge und ein Feld mit echtem Edge. Landet PBO nicht nahe 0.5 im ersten und nahe 0 im zweiten Fall, ist es wertlos.

Der Nullpunkt. Bauen Sie M aus 200 Spalten unabhängigen, driftfreien, edgefreien Normal-Rauschens — wahrer Sharpe exakt 0 für jede Konfiguration — und lassen Sie CSCV laufen. Mitteln Sie über 60 solcher Matrizen. Die ausgewählte (in-sample-beste) Strategie erzielt einen durchschnittlichen In-Sample-annualisierten Sharpe von 1.98. Das ist keine kleine Zahl; es ist dieselbe Selektionsaufblähung, die der DSR-Artikel gemessen hat — die beste von 200 Rauschspalten sieht aus wie eine förderungswürdige Strategie. Out-of-Sample liefert derselbe Gewinner einen annualisierten Sharpe von 0.06. Er hat im Wesentlichen alles wieder abgegeben. Und das Urteil über die Prozedur:

PBOnull=0.476(±0.137)\text{PBO}_{\text{null}} = 0.476 \quad (\pm\, 0.137)

Das ist der gemessene Münzwurf. Über die 12.870 Splits hinweg landet der In-Sample-Gewinner ebenso wahrscheinlich unter dem Out-of-Sample-Median wie darüber — 0.476, knapp unter ½, angesichts der Monte-Carlo-Streuung nicht von 0.5 zu unterscheiden. Die begleitende Diagnostik stimmt zu: Die Wahrscheinlichkeit, dass der Out-of-Sample-Sharpe der ausgewählten Strategie negativ ist, beträgt 0.475 — wählt man das In-Sample-Beste aus purem Rauschen, verliert es Out-of-Sample etwa die Hälfte der Zeit Geld. In der Auswahl steckt kein Können, weil kein Können zu finden ist, und PBO meldet genau das: 0.5 ist die Overfitting-Linie, und reines Rauschen sitzt genau darauf.

Warum 0.5 und nicht 1? Weil unter einem wahren Nullwert alle 200 Spalten austauschbar sind — statistisch austauschbare Ziehungen aus demselben Rauschprozess. Der In-Sample-Gewinner ist nur in Sample besonders; Out-of-Sample ist er nur eine weitere Spalte, die gleich wahrscheinlich überall rangieren kann. Sein relativer Out-of-Sample-Rang ωˉc\bar\omega_c ist also gleichverteilt auf (0,1)(0,1), der Logit λc\lambda_c ist symmetrisch um 0, und der Anteil mit λc0\lambda_c \le 0 konvergiert gegen ½. Ein PBO von 1 wäre schlimmer als ein Münzwurf — es würde bedeuten, dass In-Sample-Erfolg zuverlässig Out-of-Sample-Versagen vorhersagt, was einen aktiven Anti-Persistenz-Mechanismus braucht, nicht bloß Abwesenheit von Edge (mehr dazu in den Ehrlichkeitshinweisen).

Der Edge-Endpunkt. Bauen Sie nun ein Feld, in dem 20 der 200 Konfigurationen einen echten, eingepflanzten Edge tragen — einen Pro-Beobachtungs-Sharpe von 0.15, der auf 2.38 annualisiert (abgeleitet: 0.15×2522.380.15 \times \sqrt{252} \approx 2.38) — und lassen Sie die anderen 180 als Rauschen. Lassen Sie das identische CSCV laufen. Die Geschichte kehrt sich vollständig um:

In-Sample-Sharpe (ann.) Out-of-Sample-Sharpe (ann.) PBO P(OOS-Verlust)
Nullwert (0 Edge) 1.98 0.06 0.476 0.475
Eingepflanzter Edge (Sharpe 2.38) 3.73 2.34 0.001 0.0006

Der eingepflanzte-Edge-Gewinner erzielt einen In-Sample-annualisierten Sharpe von 3.73 — wie immer durch Selektion aufgebläht — aber diesmal behält er einen Out-of-Sample-Wert von 2.34, und PBO bricht auf 0.001 ein. Über alle 12.870 Splits hinweg fällt der In-Sample-Gewinner praktisch nie in die untere Hälfte Out-of-Sample. Die Wahrscheinlichkeit eines Out-of-Sample-Verlusts sinkt auf 0.0006. So sieht eine vertrauenswürdige Auswahlprozedur aus: Wie man Train gegen Test auch schneidet, dieselbe Art von Konfiguration gewinnt weiter, weil dort ein echter, robuster Effekt existiert, an dem sich die Suche festhalten kann. Die beiden Endpunkte — 0.476 auf Rauschen, 0.001 auf echtem Edge — sind die Kalibrierung. PBO funktioniert.

Akt 3 — Ein kontinuierliches Thermometer, kein Ja/Nein-Test

A downward-sloping thermometer curve where the horizontal axis is the strength of a real planted edge and the vertical axis is PBO, the curve falling smoothly from about one-half at zero edge down toward zero as the edge grows, with a mirror curve of the selected strategy's out-of-sample Sharpe rising in lockstep

Zwei Endpunkte beweisen, dass PBO Rauschen von Edge unterscheiden kann. Die tiefere Eigenschaft ist aber, dass es das stetig tut. Fahren Sie den eingepflanzten Edge von nichts bis stark hoch, und PBO springt nicht von 0.5 auf 0 — es gleitet eine monotone Rampe hinab, während der Out-of-Sample-Sharpe der ausgewählten Strategie Schritt für Schritt mitsteigt:

Eingepflanzter wahrer Sharpe (annualisiert) PBO OOS-Sharpe der ausgewählten Strategie (ann.)
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

Lesen Sie die beiden Datenspalten gemeinsam. Bei null wahrem Edge liegt PBO bei 0.52, und die ausgewählte Strategie verdient −0.05 Out-of-Sample — wieder der Münzwurf, und ein Gewinner, der Geld verliert. Fügen Sie einen Hauch von Edge hinzu (annualisiert 0.48), sinkt PBO auf 0.44. Bei einem annualisierten wahren Sharpe von 0.95 — einem wirklich bescheidenen, glaubwürdigen Edge — liegt PBO bereits bei 0.21, und der Out-of-Sample-Sharpe ist auf 0.81 geklettert. Bei 1.59 sind es 0.03; bei 2.38, 0.001; bei 3.17, praktisch 0.00, wobei die ausgewählte Strategie Out-of-Sample 3.29 trägt. PBO fällt monoton, während der reale Edge wächst, und die Out-of-Sample-Performance des Gewinners steigt im Gleichschritt — die beiden sind derselbe Sachverhalt, nur aus zwei Blickwinkeln betrachtet.

Das ist die Eigenschaft, die PBO in der Praxis nutzbar macht: Es ist ein kontinuierliches Overfitting-Thermometer, kein binärer Alarm. Ein PBO von 0.21 sagt nicht nur "nicht überangepasst" — es sagt, dass Ihre Auswahl teilweise Out-of-Sample-Können besitzt: Der In-Sample-Gewinner schlägt den Out-of-Sample-Median 79 % der Zeit, aber der Edge ist dünn genug, dass ihn ein Fünftel der Splits immer noch begräbt. Sie können beobachten, wie sich die Zahl bewegt, während Sie Ihr Signal stärken, Ihr Universum verengen oder Ihr Raster ausdünnen, und wissen, welche Richtung ehrlich ist. Die eigene Faustregel des Papers — ablehnen, wenn PBO 0.05 übersteigt — ergibt sich natürlich aus dieser Rampe: Unterhalb eines annualisierten Sharpe von ~1.5 hat die Suche sie nicht überschritten; oberhalb von ~1.6 hat sie es. Aber die Rampe selbst ist informativer als jeder einzelne Schwellenwert, denn sie sagt Ihnen nicht nur ob Sie überangepasst haben, sondern wie nahe an einem Münzwurf Sie sind.

Akt 4 — Die realistische Falle: ein schöner Backtest, offiziell wertlos

A glowing moving-average crossover parameter grid on a pure random walk showing one tempting bright cell at an in-sample Sharpe of 2.33, beside a scatter of that same winner's out-of-sample results centered below zero, with a PBO gauge pinned near one-half and a caption reading certified worthless

Der iid-Rauschen-Nullwert ist ehrlich, aber leicht abzutun — "meine Strategien sind keine zufälligen Normal-Spalten." Hier also die Falle in der Form, in die Praktiker tatsächlich hineinlaufen. Nehmen Sie einen Moving-Average-Crossover, die meistgebacktestete Regel der Welt: gehen Sie long, wenn ein schneller MA über einen langsamen MA kreuzt, sonst flach. Rastern Sie sie — 10 schnelle Längen ×\times 17 langsame Längen, wobei nur gültige Fast-unter-Slow-Paare behalten werden, für K = 170 Konfigurationen. Lassen Sie dieses Raster nun auf einer Reihe mit nachweislich null Edge laufen: einem reinen Random Walk. Es gibt nichts zu finden. Ein Crossover kann einen Random Walk nicht vorhersagen. Wir kennen die Antwort: "keine Strategie".

Das Raster weiß das nicht. Es liefert Ihnen einen Gewinner, und der Gewinner ist verlockend:

Diagnostik (eine repräsentative Random-Walk-Matrix, Seed 3000, K = 170, S = 16) Wert
Bester In-Sample-Sharpe (annualisiert) 2.33
PBO 0.573
Medianer Out-of-Sample-Sharpe (annualisiert) −0.22
Wahrscheinlichkeit eines Out-of-Sample-Verlusts 0.63
Degradationssteigung Out-of-Sample vs. In-Sample −0.92
Medianer Logit λ\lambda −0.25

Dies ist eine einzelne, geseedete Matrix. Gemittelt über 60 unabhängige Random-Walk-Matrizen lesen sich dieselben Diagnostiken PBO 0.463 ± 0.223, ein ausgewählter In-Sample-Sharpe von 0.97, der auf 0.04 abklingt, und P(OOS-Verlust) 0.47 — statistisch nicht vom Nullwert unterscheidbar. Der Wert 0.573 von Seed 3000 ist eine Stichprobe am oberen Rand des ~0.5-Nullwertbands — Stichprobenrauschen um den Münzwurf-Wert, gut innerhalb der ±0.223-Matrix-zu-Matrix-Streuung — und die Geschichte ist so oder so identisch.

Ein In-Sample-annualisierter Sharpe von 2.33 auf einem Moving-Average-Crossover ist die Art von Ergebnis, die in einem Pitch Deck landet. Er ist im Wesentlichen gleich dem Out-of-Sample-Sharpe unseres echt eingepflanzten Edge aus Akt 2 (2.34 — ein totes Rennen). Wenn Sie beim Backtest aufgehört hätten, hätten Sie ihn finanziert. CSCV verweigert. PBO ist hier ein Münzwurf: 0.463 gemittelt über die 60 Matrizen, 0.573 auf dieser einzelnen — beide sagen, dass die Suche kein Out-of-Sample-Können hat. Überinterpretieren Sie die 0.573 nicht: Sie liegt 0.073 über ½, Stichprobenrauschen um den 0.5-Nullwert und gut innerhalb des ±0.223-Matrix-zu-Matrix-Bands; ein PBO, das tatsächlich über 0.5 liegt — wo In-Sample-Erfolg aktiv Out-of-Sample-Versagen vorhersagen würde — braucht eine Anti-Persistenz- oder Handelskostenstruktur, die dieser Random Walk nicht enthält (siehe die Ehrlichkeitshinweise). Auf dieser Matrix platziert der mediane Logit von −0.25 den medianen In-Sample-Gewinner bei einem relativen Out-of-Sample-Rang von etwa 0.44 (abgeleitet: 1/(1+e0.25)1/(1+e^{0.25})) — ungefähr 75. von 170 (abgeleitet: 0.44×1710.44 \times 171), knapp unter der Mitte des Feldes, das er eigentlich anführen sollte. Der mediane Out-of-Sample-Sharpe dieses Gewinners ist −0.22negativ — und er erleidet 63 % der Zeit einen Out-of-Sample-Verlust. Ein Backtest-Sharpe von 2.33, dessen Out-of-Sample-Erwartung ein Verlust ist: die Definition einer Illusion.

Die Degradationssteigung von −0.92 ist das zweite Messer. Regressieren Sie den Out-of-Sample-Sharpe des ausgewählten Gewinners jedes Splits auf seinen In-Sample-Sharpe; die Steigung ist steil negativ — je besser eine Konfiguration In-Sample aussieht, desto schlechter schneidet sie Out-of-Sample ab. Das ist der Fingerabdruck von Overfitting auf einer Reihe mit Gedächtnis: Der Crossover klammert sich an transiente Muster in den Trainingsblöcken, die, da sie Artefakte eines Random Walk sind, Out-of-Sample wieder verschwinden. Eine Feinheit ist es wert, festgehalten zu werden, damit Sie die Steigung nicht überinterpretieren: Eine negative Steigung ist für sich genommen kein Urteil. Selbst das echte-Edge-Regime aus Akt 2 hat eine negative Degradationssteigung (−0.52) — Regression zur Mitte zieht das ausgewählte Maximum Out-of-Sample immer ein wenig herunter. Was die Illusion vom echten Edge unterscheidet, ist nicht, dass die Steigung negativ ist, sondern wo der Gewinner landet: Der echte Edge bleibt nahe der Spitze (PBO 0.001), während er ein wenig abgibt; die Illusion sitzt genau auf der Münzwurf-Linie (PBO 0.463 gemittelt, 0.573 auf diesem Seed), ihr Gewinner nicht wahrscheinlicher über dem Out-of-Sample-Median als darunter. Lesen Sie die Steigung für wie viel Schrumpfung; lesen Sie PBO dafür, ob es sich noch verallgemeinert. Die Illusion scheitert bei beidem.

Deshalb verdient PBO seinen Platz neben einem rohen Backtest. Der In-Sample-Sharpe von 2.33 ist keine Lüge — die Strategie hat ihn wirklich verdient, in Sample, auf diesem Random Walk. Es ist Selektion, verkleidet in einer vertrauten Regel auf einem realistisch aussehenden Raster, und kein noch so langes Starren auf die Equity-Kurve deckt sie auf. Nur die Bewertung der Prozedur tut das.

Akt 5 — PBO und DSR: zwei ehrliche Fragen, ein Plateau

Two complementary measuring instruments aimed at the same parameter search from different angles, one labeled PBO asking did the selection procedure overfit reading the whole train-test resampling, the other labeled DSR asking is this one Sharpe beyond luck deflating a single winning bar

PBO und der Deflated Sharpe Ratio sind die zwei Hälften derselben Ehrlichkeitsprüfung, und sie sind nicht redundant — sie hinterfragen unterschiedliche Objekte:

Deflated Sharpe Ratio (DSR) Probability of Backtest Overfitting (PBO)
Objekt auf der Anklagebank der Gewinner die Auswahlprozedur
Frage liegt dieser Sharpe jenseits dessen, was der Zufall bei N Versuchen kauft? verallgemeinert die Wahl des In-Sample-Besten Out-of-Sample?
Methode parametrisch — deflationiert die Signifikanzschwelle nicht-parametrisch — resampelt alle C(S, S/2) Train/Test-Splits
Nullwert DSR ≈ 0.5 (Gewinner erreicht gerade die Rauschobergrenze) PBO ≈ 0.5 (Gewinner ist Out-of-Sample ein Münzwurf)
Sie wollen DSR nahe 1 PBO nahe 0
Braucht die Versuchszahl N? ja — und korrelierte Raster machen N zweideutig nein — das Split-Resampling behandelt Abhängigkeit nativ

Sie können sich sogar widersprechen, und der Widerspruch ist diagnostisch. DSR kann von einem korrelierten Raster in die Übertreibung getäuscht werden (die Falle, um die es im letzten Akt des DSR-Artikels vollständig geht — 640 korrelierte Zellen sind nicht 640 unabhängige Versuche, und die rohe Anzahl bläht die Rauschobergrenze auf). PBO zählt nie Versuche; es resampelt die tatsächliche Renditematrix, sodass Rasterkorrelation kostenlos in die Splits eingebaut ist. Umgekehrt sagt PBO Ihnen, dass sich die Prozedur verallgemeinert, aber nicht, ob der Gewinner eine Hürdenrate überspringt — eine Suche kann einen niedrigen PBO haben und trotzdem etwas auswählen, dessen Out-of-Sample-Sharpe, obwohl zuverlässig über dem Feldmedian, zu klein zum Handeln ist. DSR bewertet den Gewinner; PBO bewertet die Prozedur. Führen Sie beide durch.

Two three-dimensional parameter-grid surfaces side by side: on the left a broad smooth plateau of good neighboring configurations that every train-test split agrees on giving low PBO, on the right a single lonely spike surrounded by flat noise that different splits disagree about giving PBO near one-half

Darunter liegt eine geometrische Intuition, und sie ist das Nützlichste, was man mitnehmen kann. Ein echter Edge ist ein Plateau; Overfitting ist eine Spitze. Wenn ein echter Effekt Ihr Raster antreibt, gruppieren sich die guten Konfigurationen — fast=3/slow=55 funktioniert, und ebenso seine Nachbarn, weil sie alle dasselbe zugrundeliegende Signal abtasten. Dieses Plateau ist robust gegenüber Resampling: Egal welche 8 von 16 Blöcken Sie zum Trainieren nutzen, der In-Sample-Gewinner stammt aus derselben breiten Region, und diese Region ist auch Out-of-Sample noch oben. Viele Splits stimmen überein → niedriger PBO. Wenn Overfitting Ihr Raster antreibt, ist der "Gewinner" eine einsame Spitze — eine Zelle, die zufällig zum Rauschen der Trainingsblöcke passte, umgeben von mittelmäßigen Nachbarn. Diese Spitze ist fragil: Ein anderer Train/Test-Split krönt eine andere einsame Spitze, und keine von ihnen übersteht das Testset. Splits sind uneinig → PBO ≈ 0.5. Das ist dieselbe Lektion, die unsere Plateau-Analyse-Studie von der Parameterkarten-Seite aus erreicht; PBO ist im Grunde die Plateau-vs-Spitze-Unterscheidung, gemessen über jedes symmetrische Resampling Ihrer Daten gleichzeitig.

Es erklärt auch, warum CSCV den praxisüblichen Walk-Forward-Split schlägt. Walk-Forward gibt Ihnen einen Vergangenheit→Zukunft-Schnitt und ein Urteil; CSCV gibt Ihnen 12.870 symmetrische Schnitte und fragt, ob der Gewinner alle übersteht. Eine Spitze kann einen willkürlichen Schnitt durch Glück überstehen; sie kann nicht 12.870 überstehen. (López de Prados Combinatorial Purged Cross-Validation, CPCV, erweitert genau diese Idee mit Purging und Embargoing, um das Label-Leakage zu eliminieren, unter dem einfaches Resampling bei serieller Abhängigkeit leiden kann — die natürliche nächste Stufe, sobald sich Ihre Labels überlappen.) Dieselbe strukturelle Warnung zieht sich durch die ganze Serie: Die Metrik, die Sie optimieren, wählt heimlich Ihre Strategie (Objective-Function-Design), ein Ein-Balken-Leak fabriziert einen Sharpe von 15 aus Rauschen (Look-Ahead Bias), eine Multiple-Testing-Suche fabriziert einen Sharpe von 1.63 aus Rauschen (DSR) — und hier fabriziert eine resampelte Auswahlprozedur einen wertlosen Gewinner, den nur PBO aufdecken kann.

Ehrlichkeitshinweise

Vier Vorbehalte, klar formuliert, denn eine kontrollierte Studie verdient ihre Schlussfolgerungen nur, wenn sie ihre Grenzen benennt.

  • Die datengenerierenden Prozesse sind absichtlich synthetisch. iid-Normalrauschen für den Nullwert, ein Feld mit eingepflanztem Sharpe für den Edge-Sweep und ein Moving-Average-Raster auf einem reinen Random Walk für die Falle. Keines ist eine Behauptung über Marktrealismus; jedes wurde für kontrollierte Ground Truth gewählt. Wir können nur beweisen, dass PBO bei "kein Können" 0.5 und bei "echtem Können" 0 liest, indem wir Daten erzeugen, bei denen wir wissen, was was ist. Echte Renditen sind fat-tailed, autokorreliert und nicht-stationär; das Ergebnis hier ist die kalibrierte Diagnostik, keine Strategie.
  • Der Nullwert von PBO ist 0.5, und das ist ein Feature, kein Makel. Sagen Sie es jedes Mal, wenn Sie einen PBO melden, denn sonst wird die Hälfte Ihrer Leser 0.5 als "halb sicher" behandeln. Eine Suche ohne Out-of-Sample-Können liegt bei 0.5; ein echter Edge treibt sie auf 0. Es gibt keine "unschuldige" Lesart von PBO ≈ 0.5 — es ist das vollständig-überangepasste Urteil.
  • PBO > 0.5 ist ein "perverser" Bereich, den wir nicht erzwingen. Ein PBO systematisch über 0.5 bedeutet, dass In-Sample-Erfolg aktiv Out-of-Sample-Versagen vorhersagt — die In-Sample-schlechtesten Konfigurationen werden die Out-of-Sample-besten. Das erfordert eine Anti-Persistenz- oder Handelskostenstruktur, nicht bloß fehlenden Edge. Unsere überangepassten Suchen liegen bei ≈ 0.5 (0.476 für iid-Rauschen; 0.463 gemittelt für das MA-Raster; 0.573 auf einem Seed am oberen Rand, innerhalb des ±0.14–0.22-Monte-Carlo-Bands über 60 Matrizen), was bereits "kein Out-of-Sample-Können" bedeutet. Wir fabrizieren den perversen Bereich nicht; wir zeigen nur, dass Overfitting Sie auf die Münzwurf-Linie bringt, was verdammend genug ist.
  • PBO ist deterministisch bei gegebener Matrix; nur die Matrix ist zufällig. Für ein festes M und S = 16 werden alle C(16, 8) = 12.870 Splits erschöpfend enumeriert — es gibt keinen Bootstrap-Seed und keine Stichprobenvarianz in PBO selbst. Die von uns berichtete Streuung (±0.137 beim Nullwert, ±0.223 beim MA-Raster) ist Varianz über die 60 Monte-Carlo-Matrizen, nicht innerhalb des Schätzers. Der Sharpe auf jeder Seite wird auf etwa 500 Beobachtungen geschätzt — 496 nach CSCV-Block-Truncation, da T = 1000, aufgeteilt in 16 gleiche Blöcke, 992 nutzbare Zeilen übrig lässt, aufgeteilt in zwei Hälften zu 496; da Sharpe ordnungsinvariant ist, spielt die Zeilenreihenfolge innerhalb eines Train- oder Testsets keine Rolle (das wäre bei pfadabhängigen Metriken wie einem Return/Drawdown-Verhältnis anders).

Kernaussagen

  1. PBO bewertet die Auswahlprozedur, nicht den Gewinner — und ihr Nullwert ist 0.5. Es ist die Wahrscheinlichkeit, dass die Konfiguration, die Sie in Sample als beste ausgewählt haben, out of Sample in der unteren Hälfte landet. PBO ≈ 0.5 ist ein Münzwurf (vollständig überangepasst); PBO ≈ 0 ist eine vertrauenswürdige Auswahl. Sie wollen ihn nahe null, und Sie müssen es laut sagen, denn 0.5 liest sich für ein ungeschultes Auge als "sicher" und bedeutet genau das Gegenteil.
  2. Kalibrierung beweist, dass es funktioniert. Bei 200 iid-Strategien ohne Edge bricht der beste In-Sample-annualisierte Sharpe von 1.98 Out-of-Sample auf 0.06 ein, und PBO = 0.476 — Rauschen sitzt genau auf der Münzwurf-Linie und verliert Out-of-Sample 47,5 % der Zeit Geld. Pflanzen Sie einen echten Edge (annualisierter Sharpe 2.38), überlebt der In-Sample-Wert 3.73 Out-of-Sample als 2.34, während PBO auf 0.001 fällt. Zwei Endpunkte, eine kalibrierte Diagnostik.
  3. PBO ist ein kontinuierliches Thermometer. Fahren Sie den eingepflanzten Edge hoch, und PBO fällt monoton — 0.52 → 0.44 → 0.21 → 0.03 → 0.001 → 0.00 bei annualisierten wahren Sharpes von 0.00 / 0.48 / 0.95 / 1.59 / 2.38 / 3.17 — während der Out-of-Sample-Sharpe der ausgewählten Strategie im Gleichschritt steigt (−0.05 bis hin zu 3.29). Es misst, wie nahe an einem Münzwurf Sie sind, nicht nur Ja/Nein.
  4. Die realistische Falle ist der ganze Punkt. Ein 170-Konfigurationen-Moving-Average-Raster auf einem reinen Random Walk mittelt einen ausgewählten In-Sample-Sharpe von nur 0.97, der auf 0.04 abklingt, mit PBO 0.463 — statistisch nicht vom Nullwert unterscheidbar, eine Suche ohne Edge, die sich wie der Nullwert liest. An einer repräsentativen Matrix ist die Illusion deutlich: ein bester In-Sample-Sharpe von 2.33 (eine Pitch-Deck-Zahl), ein medianer Out-of-Sample-Sharpe von −0.22, eine **63 %**ige Chance auf einen Out-of-Sample-Verlust, PBO 0.573 und eine steile Degradationssteigung von −0.92. Ein schöner Backtest mit negativer Out-of-Sample-Erwartung, unsichtbar für jede Statistik, die neben dem Gewinner gedruckt wird, und nur sichtbar, wenn man die Prozedur bewertet.
  5. Kombinieren Sie PBO mit dem Deflated Sharpe Ratio. DSR bewertet den Gewinner (liegt dieser Sharpe jenseits von Glück, gegeben N Versuche?); PBO bewertet die Prozedur (verallgemeinert sich die Auswahl?). DSR braucht eine Versuchszahl und kann von korrelierten Rastern getäuscht werden; PBO resampelt die Matrix und zählt nie Versuche. Ein echter Edge ist ein breites Plateau, dem viele Splits zustimmen (niedriger PBO); eine einsame In-Sample-Spitze ist überangepasst (Splits uneinig, PBO ≈ 0.5). Führen Sie beide durch, und lesen Sie das Plateau.

Der Gewinner einer Suche ist schuldig, bis das Gegenteil bewiesen ist — und PBO verhört die Suche selbst, nicht das Alibi, das sie Ihnen liefert. Es ignoriert, wie gut der Gewinner In-Sample aussieht, und fragt nur, ob ihn auszuwählen eine Entscheidung war, die einen erneuten Zuschnitt auf 12.870 Arten übersteht. Wenn nicht — wenn Ihr wunderschöner Sharpe von 2.33 sich Out-of-Sample ebenso oft in der unteren Hälfte wiederfindet wie nicht — haben Sie keine Strategie gefunden. Sie haben die glücklichste Münze gefunden, und PBO ist die Zahl, die sie beim Fliegen erwischt.

Das vollständige Experiment — die Nullkalibrierungs-Harness, der Thermometer-Sweep mit eingepflanztem Edge, die Random-Walk-Raster-Falle und jede Zahl in diesem Artikel, regenerierbar aus einem einzigen deterministischen Skript — findet sich im Begleitpaper unter pbo-search.marketmaker.cc, mit Code und Daten unter github.com/suenot/pbo-search.

blog.disclaimer

Authors

Eugen Soloviov
Eugen Soloviov

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.

Newsletter

Dem Markt einen Schritt voraus

Abonniere unseren Newsletter für exklusive KI-Trading-Einblicke, Marktanalysen und Plattform-Updates.

Wir respektieren deine Privatsphäre. Jederzeit abbestellbar.