← Torna agli articoli
July 2, 2026
5 min di lettura

La Probability of Backtest Overfitting: La Tua Ricerca Ha Battuto un Lancio di Moneta?

La Probability of Backtest Overfitting: La Tua Ricerca Ha Battuto un Lancio di Moneta?
#algotrading
#backtest
#overfitting
#cross-validation
#pbo
#sharpe
#validazione
🎯
Part 5 of 7 · Collection
Backtesting Without Fooling Yourself

Fa parte della serie "Backtest Senza Illusioni".

📄 Questo articolo è cresciuto fino a diventare un paper di ricerca. Ogni numero qui sotto proviene da un unico script deterministico che costruisce una ground truth controllata — ricerche a vantaggio zero, ricerche con vantaggio piantato, e una griglia di parametri di media mobile reale su un random walk — e poi esegue la Combinatorially Symmetric Cross-Validation (CSCV) per stimare su di essa la Probability of Backtest Overfitting, misurando direttamente quanto bene la procedura di selezione generalizzi. Leggi il paper online (versione interattiva + PDF) su pbo-search.marketmaker.cc, codice e dati su github.com/suenot/pbo-search.

Il Deflated Sharpe Ratio ha messo sotto processo il tuo vincitore: dato che hai cercato tra N configurazioni, questo Sharpe supera ciò che la fortuna può comprare? Questo articolo mette sotto processo qualcos'altro — l'atto di scegliere. Hai eseguito una griglia, hai tenuto la cella migliore, sei andato avanti. Ma la selezione stessa era affidabile? Se rieseguissi l'intero split in-sample/out-of-sample in un modo diverso, la stessa configurazione emergerebbe ancora vincitrice — o hai semplicemente incoronato la più fortunata tra cento monete?

La Probability of Backtest Overfitting (PBO), introdotta da Bailey, Borwein, López de Prado & Zhu (2017), risponde esattamente a questa domanda, e lo fa con un numero che la maggior parte delle persone legge male a prima vista. Ecco la singola frase più importante di questo articolo, quindi leggila due volte:

Il nullo del PBO è 0.5, non 1. Una ricerca senza alcuna abilità out-of-sample ottiene un PBO ≈ 0.5. Metà non significa "overfit a metà" — metà significa completamente overfit, un lancio di moneta. Vuoi un PBO vicino a zero.

Questo inganna tutti. Siamo addestrati a leggere le probabilità contro un nullo di "niente," e per l'overfitting il nostro istinto dice che la lettura "innocente" è 0. Non lo è. Il PBO è la probabilità che la configurazione selezionata come migliore in-sample finisca nella metà inferiore del campo out-of-sample. Se la tua ricerca non ha genuinamente imparato nulla che generalizzi, il vincitore in-sample ha, out-of-sample, la stessa probabilità di trovarsi ovunque nel ranking — quindi finisce nella metà inferiore circa la metà delle volte. PBO ≈ 0.5 significa che la tua procedura di selezione è un lancio di moneta. PBO ≈ 0 significa che il vincitore in-sample resta affidabilmente un vincitore out-of-sample — la selezione è affidabile. Tutto ciò che segue è costruito per rendere concreto questo singolo fatto di calibrazione, su dati di cui conosciamo la ground truth.

Regime (200 configurazioni, T = 1000, S = 16) Cos'è Sharpe in-sample del vincitore Sharpe out-of-sample PBO Verdetto
Campo a vantaggio zero (200 strategie di rumore iid) pura fortuna, nessun vantaggio da nessuna parte 1.98 0.06 0.476 overfit — un lancio di moneta
Vantaggio piantato (20 configurazioni portano Sharpe annualizzato 2.38) abilità genuina e robusta 3.73 2.34 0.001 affidabile
Griglia di incrocio MA su un puro random walk (170 configurazioni) un miraggio allettante 0.97 0.04 0.463 overfit — un lancio di moneta

Sharpe ratio annualizzati ×√252. Tutte e tre le righe mediano lo Sharpe della strategia selezionata su 60 matrici Monte-Carlo — un confronto omogeneo, così che la griglia overfit venga valutata nello stesso modo del nullo e del vantaggio piantato. Su questa base mediata, lo Sharpe in-sample selezionato dalla griglia (0.97) è in realtà inferiore all'1.98 gonfiato del nullo, il suo Sharpe out-of-sample è un leggermente positivo 0.04, e il suo PBO (0.463) si colloca appena sotto ½ — statisticamente indistinguibile dal nullo. I numeri drammatici a singola matrice (un miglior Sharpe in-sample della griglia di 2.33 che collassa a un out-of-sample mediano di −0.22, PBO 0.573) appartengono a un seed rappresentativo di random walk e compaiono, chiaramente etichettati, nell'Atto 4. Ogni numero è tracciabile al file dei risultati.

Tre regimi, una sola lezione. Una ricerca senza vantaggio si colloca esattamente sulla linea del lancio di moneta a 0.5, sia che il rumore sia iid (PBO 0.476) sia che sia travestito da una griglia di media mobile reale (PBO 0.463) — i due sono statisticamente indistinguibili, ed entrambi sono una condanna. Un vantaggio genuino fa scendere il PBO a 0.001. Mediato sulle matrici, il vincitore selezionato dalla griglia non ha nulla di notevole — uno Sharpe in-sample di 0.97, sotto l'1.98 gonfiato del nullo — il che è di per sé la diagnosi onesta: una ricerca senza vantaggio si legge come il nullo. Il dramma vive nella coda. Su una matrice rappresentativa di random walk (Atto 4) la cella migliore della griglia registra uno Sharpe in-sample di 2.33 — sostanzialmente uguale all'out-of-sample 2.34 del vantaggio piantato, un pareggio quasi perfetto — eppure out-of-sample finisce nella metà inferiore quasi tanto spesso quanto in quella superiore. Quel divario tra un backtest splendido e una selezione priva di valore è invisibile nello Sharpe del vincitore stesso e visibile solo quando valuti la procedura. Questo è ciò che fa il PBO.

Atto 1 — La procedura sotto processo: cosa fa davvero la CSCV

Un'alta matrice di performance di mille righe e duecento colonne di strategia tagliata orizzontalmente in sedici blocchi uguali, con otto blocchi instradati a un pannello di training e gli altri otto a un pannello di test, un'unica colonna migliore-in-sample evidenziata e una freccia che traccia dove quella stessa colonna finisce nel ranking out-of-sample

Il DSR è parametrico: modella la distribuzione del massimo Sharpe sotto un nullo e deflaziona analiticamente la significatività del vincitore. La CSCV è la risposta non parametrica allo stesso problema di selection bias — invece di modellare il massimo, ricampiona lo split train/test in ogni modo possibile e osserva, empiricamente, se il vincitore in-sample continua a vincere. Nessuna assunzione distribuzionale, nessun conteggio di "trial effettivi." Solo: la scelta generalizza?

Inizia dalla materia prima. Hai backtestato N = 200 configurazioni di una classe di strategia su T = 1000 osservazioni sincrone. Impila la serie dei rendimenti di ogni configurazione in una colonna e ottieni una matrice di performance M di dimensione T × N — 1,000 righe di tempo, 200 colonne di strategia. Questo è l'unico input di cui la CSCV ha bisogno.

Ora la costruzione, in quattro mosse:

  1. Dividi il tempo in S = 16 blocchi disgiunti di uguale lunghezza (T/S righe ciascuno). I blocchi preservano la struttura temporale locale — una scelta di design che conta nel momento in cui i rendimenti hanno memoria.
  2. Scegli ogni modo di usare metà dei blocchi per il training e metà per il test. Con S = 16, sono tutti i C(16, 8) = 12,870 modi di scegliere 8 blocchi su 16 come training set; gli altri 8 sono il test set. È qui che nasce "combinatorially symmetric": ogni split ha uno specchio (scambia train e test), quindi lo schema usa i tuoi dati in modo simmetrico invece dell'unico taglio passato→futuro privilegiato che ti dà una singola walk-forward.
  3. Su ogni split, classifica tutte le 200 configurazioni per Sharpe in-sample e scegli il vincitore n*. Poi trova dove si posiziona quella stessa configurazione n* out-of-sample, sugli 8 blocchi tenuti da parte.
  4. Registra il rank relativo out-of-sample del vincitore e trasformalo in un logit. Il PBO è la frazione dei 12,870 split in cui quel logit è ≤ 0.

L'enumerazione è minuscola da scrivere:

from itertools import combinations

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

Per ogni split, sia rˉnc\bar r^{\,c}_{n^*} il rank out-of-sample del vincitore in-sample tra le NN configurazioni (rank 1 = peggiore, NN = migliore). Normalizzalo a un rank relativo ωˉc(0,1)\bar\omega_c \in (0,1), prendine il logit λc\lambda_c, e integra sugli split:

ωˉ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\}

Il logit è solo un righello comodo. λc>0\lambda_c > 0 significa che il vincitore è finito nella metà superiore out-of-sample (rank relativo sopra ½) — coerenza in-sample/out-of-sample, bene. λc0\lambda_c \le 0 significa che è finito al di sotto o alla mediana out-of-sample — la scelta in-sample non ha generalizzato su quello split. Il PBO è la frazione di split in cui il vincitore in-sample non è riuscito a battere la mediana out-of-sample. È l'intera matrice a determinarlo: dati M e S, il PBO è deterministico — nessun seed di ricampionamento, tutti i 12,870 split sono enumerati esaustivamente.

Nel codice, una volta ottenuti lo Sharpe in-sample e out-of-sample di ogni configurazione su ogni split (matrici R_tr e R_te, ciascuna 12,870 × 200), il cuore dello stimatore sono sei righe:

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

Nota cosa non c'è qui: nessun p-value, nessuna soglia sullo Sharpe del vincitore, nessun modello della distribuzione nulla. Il PBO non chiede mai se il vincitore sia buono. Chiede se scegliere il migliore in-sample sia una decisione che sopravvive al contatto con dati tenuti da parte. È una proprietà della tua ricerca, non della tua strategia — motivo esatto per cui cattura cose che le statistiche del vincitore stesso non possono cogliere.

Atto 2 — La calibrazione è l'intera dimostrazione: il nullo è 0.5

Un quadrante orizzontale del PBO che va da zero a sinistra a uno a destra con una brillante linea di pericolo tracciata esattamente a metà etichettata la linea dell'overfitting, una moneta che gira in bilico su quel punto medio, e la barra alta dello Sharpe in-sample di una strategia a vantaggio zero che collassa a una barra piatta vicina allo zero out-of-sample

Una diagnostica che non puoi calibrare è una voce di corridoio. Quindi, prima di fidarti del PBO su qualcosa di reale, fissa due estremi su dati di cui la risposta è nota: un campo con nessun vantaggio da nessuna parte, e un campo con un vantaggio genuino. Se il PBO non si colloca vicino a 0.5 sul primo e vicino a 0 sul secondo, non vale nulla.

L'estremo nullo. Costruisci M da 200 colonne di rumore Normale indipendente, a drift zero, a vantaggio zero — vero Sharpe esattamente 0 per ogni configurazione — ed esegui la CSCV. Media su 60 matrici di questo tipo. La strategia selezionata (la migliore in-sample) registra una media di Sharpe annualizzato in-sample di 1.98. Non è un numero piccolo; è la stessa inflazione da selezione che l'articolo sul DSR misurava — la migliore tra 200 colonne di rumore sembra una strategia finanziabile. Out-of-sample, quello stesso vincitore restituisce uno Sharpe annualizzato di 0.06. Ha reso indietro sostanzialmente tutto. E il verdetto sulla procedura:

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

Questo è il lancio di moneta, misurato. Attraverso i 12,870 split, il vincitore in-sample ha la stessa probabilità di finire sotto la mediana out-of-sample quanto sopra — 0.476, un pelo sotto ½, indistinguibile da 0.5 data la dispersione Monte-Carlo. La diagnostica complementare concorda: la probabilità che lo Sharpe out-of-sample della strategia selezionata sia negativo è 0.475 — scegli il migliore in-sample da puro rumore e perde denaro out-of-sample circa la metà delle volte. Non c'è abilità nella selezione perché non c'è abilità da trovare, e il PBO riporta esattamente questo: 0.5 è la linea dell'overfitting, e il puro rumore vi si colloca sopra.

Perché 0.5 e non 1? Perché sotto un vero nullo tutte le 200 colonne sono scambiabili — estrazioni statisticamente intercambiabili dallo stesso processo di rumore. Il vincitore in-sample è speciale solo in-sample; out-of-sample è solo un'altra colonna, con la stessa probabilità di classificarsi ovunque. Quindi il suo rank relativo out-of-sample ωˉc\bar\omega_c è uniforme su (0,1)(0,1), il logit λc\lambda_c è simmetrico intorno a 0, e la frazione con λc0\lambda_c \le 0 converge a ½. Un PBO di 1 sarebbe peggiore di un lancio di moneta — significherebbe che il successo in-sample predice affidabilmente il fallimento out-of-sample, il che richiede un meccanismo attivo di anti-persistenza, non la semplice assenza di vantaggio (maggiori dettagli nelle note di onestà).

L'estremo del vantaggio. Ora costruisci un campo in cui 20 delle 200 configurazioni portano un vantaggio reale e piantato — uno Sharpe per-osservazione di 0.15, che annualizzato dà 2.38 (derivazione: 0.15×2522.380.15 \times \sqrt{252} \approx 2.38) — e lascia le altre 180 come rumore. Esegui la stessa identica CSCV. La storia si inverte completamente:

Sharpe in-sample (ann.) Sharpe out-of-sample (ann.) PBO P(perdita OOS)
Nullo (vantaggio 0) 1.98 0.06 0.476 0.475
Vantaggio piantato (Sharpe 2.38) 3.73 2.34 0.001 0.0006

Il vincitore a vantaggio piantato registra uno Sharpe annualizzato in-sample di 3.73 — gonfiato dalla selezione, come sempre — ma questa volta mantiene un out-of-sample di 2.34, e il PBO collassa a 0.001. Attraverso tutti i 12,870 split, il vincitore in-sample finisce nella metà inferiore out-of-sample praticamente mai. La probabilità di una perdita out-of-sample scende a 0.0006. Questo è l'aspetto di una procedura di selezione affidabile: in qualunque modo tu tagli train contro test, lo stesso tipo di configurazione continua a vincere, perché c'è un effetto reale e robusto su cui la ricerca può agganciarsi. I due estremi — 0.476 sul rumore, 0.001 su un vantaggio genuino — sono la calibrazione. Il PBO funziona.

Atto 3 — Un termometro continuo, non un test sì/no

Una curva a termometro discendente dove l'asse orizzontale è l'intensità di un vantaggio reale piantato e l'asse verticale è il PBO, la curva che scende dolcemente da circa un mezzo a vantaggio zero verso lo zero man mano che il vantaggio cresce, con una curva speculare dello Sharpe out-of-sample della strategia selezionata che sale di pari passo

Due estremi dimostrano che il PBO sa distinguere il rumore dal vantaggio. Ma la proprietà più profonda è che lo fa in modo continuo. Fai variare il vantaggio piantato da nullo a forte e il PBO non scatta da 0.5 a 0 — scivola giù lungo una rampa monotona, e lo Sharpe out-of-sample della strategia selezionata sale per incontrarlo, passo dopo passo:

Vero Sharpe piantato (annualizzato) PBO Sharpe OOS della strategia selezionata (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

Leggi le due colonne di dati insieme. A vantaggio vero zero il PBO è 0.52 e la strategia selezionata guadagna −0.05 out-of-sample — di nuovo il lancio di moneta, e un vincitore che perde denaro. Aggiungi un sussurro di vantaggio (annualizzato 0.48) e il PBO scende a 0.44. A uno Sharpe vero annualizzato di 0.95 — un vantaggio genuinamente modesto e credibile — il PBO è già 0.21 e lo Sharpe out-of-sample è salito a 0.81. A 1.59 è 0.03; a 2.38, 0.001; a 3.17, effettivamente 0.00, con la strategia selezionata che porta a casa un 3.29 out-of-sample. Il PBO scende monotonicamente man mano che il vantaggio reale cresce, e la performance out-of-sample del vincitore sale di pari passo — i due sono lo stesso fatto visto da due lati.

Questa è la proprietà che rende il PBO utilizzabile in pratica: è un termometro continuo dell'overfitting, non un allarme binario. Un PBO di 0.21 non dice solo "non overfit" — dice che la tua selezione ha un'abilità out-of-sample parziale: il vincitore in-sample batte la mediana out-of-sample il 79% delle volte, ma il vantaggio è abbastanza sottile che un quinto degli split lo seppellisce comunque. Puoi osservare il numero muoversi mentre rafforzi il tuo segnale, restringi il tuo universo, o poti la tua griglia, e sapere quale direzione è onesta. La regola pratica dello stesso paper — rigettare quando il PBO supera 0.05 — emerge naturalmente da questa rampa: sotto uno Sharpe annualizzato di ~1.5 la ricerca non l'ha superata; sopra ~1.6 sì. Ma la rampa stessa è più informativa di qualsiasi singola soglia, perché ti dice non solo se sei in overfitting ma quanto sei vicino a un lancio di moneta.

Atto 4 — La trappola realistica: un backtest bellissimo, certificato privo di valore

Una griglia di parametri incandescente di incrocio di medie mobili su un puro random walk che mostra un'unica cella allettante e brillante a uno Sharpe in-sample di 2.33, accanto a uno scatter dei risultati out-of-sample di quello stesso vincitore centrato sotto lo zero, con un indicatore del PBO fermo vicino a un mezzo e una didascalia che recita certificato privo di valore

Il nullo di rumore iid è onesto ma facile da liquidare — "le mie strategie non sono colonne Normali casuali." Quindi ecco la trappola nella forma in cui i praticanti ci finiscono davvero dentro. Prendi un incrocio di medie mobili, la regola più backtestata al mondo: vai long quando una MA veloce incrocia sopra una MA lenta, flat altrimenti. Mettila in griglia — 10 lunghezze veloci ×\times 17 lunghezze lente, mantenendo solo le coppie valide veloce-sotto-lenta, per K = 170 configurazioni. Ora esegui quella griglia su una serie con vantaggio provatamente zero: un puro random walk. Non c'è nulla da trovare. Un incrocio non può predire un random walk. Sappiamo che la risposta è "nessuna strategia."

La griglia non lo sa. Ti consegna un vincitore, e il vincitore è allettante:

Diagnostica (una matrice rappresentativa di random walk, seed 3000, K = 170, S = 16) Valore
Miglior Sharpe in-sample (annualizzato) 2.33
PBO 0.573
Sharpe out-of-sample mediano (annualizzato) −0.22
Probabilità di una perdita out-of-sample 0.63
Pendenza di degradazione out-of-sample-vs-in-sample −0.92
Logit mediano λ\lambda −0.25

Questa è una matrice con un seed specifico. Mediata su 60 matrici indipendenti di random walk, queste stesse diagnostiche danno PBO 0.463 ± 0.223, uno Sharpe in-sample selezionato di 0.97 che decade a 0.04, e P(perdita OOS) 0.47 — statisticamente indistinguibile dal nullo. Lo 0.573 del seed 3000 è un'estrazione sul lato alto della banda nulla ~0.5 — rumore campionario intorno al valore del lancio di moneta, ben dentro la dispersione ±0.223 tra matrice e matrice — e la storia è identica in entrambi i casi.

Uno Sharpe annualizzato in-sample di 2.33 su un incrocio di medie mobili è il tipo di risultato che finisce in un pitch deck. È sostanzialmente uguale allo Sharpe out-of-sample del nostro vantaggio genuinamente piantato dell'Atto 2 (2.34 — un pareggio quasi perfetto). Se ti fossi fermato al backtest, lo avresti finanziato. La CSCV rifiuta. Qui il PBO è un lancio di moneta: 0.463 mediato sulle 60 matrici, 0.573 su questa in particolare — entrambi dicono che la ricerca non ha alcuna abilità out-of-sample. Non leggere troppo nello 0.573: si colloca 0.073 sopra ½, rumore campionario intorno al nullo 0.5 e ben dentro la banda ±0.223 tra matrice e matrice; un PBO genuinamente sopra 0.5 — dove il successo in-sample predirebbe attivamente il fallimento out-of-sample — richiede una struttura di anti-persistenza o di costi di trading che questo random walk non contiene (vedi le note di onestà). Su questa matrice il logit mediano di −0.25 colloca il vincitore in-sample mediano a un rank relativo out-of-sample di circa 0.44 (derivazione: 1/(1+e0.25)1/(1+e^{0.25})) — grosso modo il 75° su 170 (derivazione: 0.44×1710.44 \times 171), appena sotto la metà del campo che avrebbe dovuto guidare. Lo Sharpe out-of-sample mediano di quel vincitore è −0.22negativo — e subisce una perdita out-of-sample il 63% delle volte. Uno Sharpe da backtest di 2.33 la cui aspettativa out-of-sample è una perdita: la definizione di miraggio.

La pendenza di degradazione di −0.92 è il secondo colpo. Regredisci lo Sharpe out-of-sample del vincitore selezionato di ogni split sul suo Sharpe in-sample; la pendenza è ripidamente negativa — quanto migliore appare una configurazione in-sample, tanto peggiore si comporta out-of-sample. Questa è l'impronta digitale dell'overfitting su una serie con memoria: l'incrocio si aggrappa a pattern transitori nei blocchi di training che, essendo artefatti di un random walk, si invertono out-of-sample. Una sottigliezza che vale la pena dichiarare perché tu non legga troppo nella pendenza: una pendenza negativa non è di per sé un verdetto. Anche il regime a vantaggio genuino dell'Atto 2 ha una pendenza di degradazione negativa (−0.52) — la regressione verso la media tira sempre un po' giù il massimo selezionato out-of-sample. Ciò che separa il miraggio dal vantaggio reale non è il fatto che la pendenza sia negativa ma dove finisce il vincitore: il vantaggio genuino resta vicino alla cima (PBO 0.001) restituendo un po' di terreno; il miraggio si colloca sulla linea del lancio di moneta (PBO 0.463 mediato, 0.573 su questo seed), con il suo vincitore che non ha più probabilità di stare sopra la mediana out-of-sample che sotto. Leggi la pendenza per quanto shrinkage c'è; leggi il PBO per se generalizza ancora. Il miraggio fallisce su entrambi i fronti.

Questo è il motivo per cui il PBO si guadagna il suo posto accanto a un backtest grezzo. Lo Sharpe in-sample di 2.33 non è una bugia — la strategia lo ha davvero guadagnato, in-sample, su quel random walk. È selezione, travestita da regola familiare su una griglia dall'aspetto realistico, e nessuna quantità di sguardi fissi sulla equity curve la rivela. Solo valutare la procedura lo fa.

Atto 5 — PBO e DSR: due domande oneste, un solo plateau

Due strumenti di misura complementari puntati sulla stessa ricerca di parametri da angolazioni diverse, uno etichettato PBO che chiede se la procedura di selezione è andata in overfitting leggendo l'intero ricampionamento train-test, l'altro etichettato DSR che chiede se questo Sharpe supera la fortuna deflazionando un'unica barra vincente

Il PBO e il Deflated Sharpe Ratio sono le due metà dello stesso controllo di onestà, e non sono ridondanti — interrogano oggetti diversi:

Deflated Sharpe Ratio (DSR) Probability of Backtest Overfitting (PBO)
Oggetto sotto processo il vincitore la procedura di selezione
Domanda questo Sharpe supera ciò che la fortuna compra su N trial? scegliere il migliore in-sample generalizza out-of-sample?
Metodo parametrico — deflaziona la soglia di significatività non parametrico — ricampiona tutti i C(S, S/2) split train/test
Valore nullo DSR ≈ 0.5 (il vincitore eguaglia appena il tetto di rumore) PBO ≈ 0.5 (il vincitore è un lancio di moneta out-of-sample)
Vuoi DSR vicino a 1 PBO vicino a 0
Serve il conteggio dei trial N? sì — e le griglie correlate rendono N ambiguo no — il ricampionamento degli split gestisce la dipendenza in modo nativo

Possono persino essere in disaccordo, e il disaccordo è diagnostico. Il DSR può essere ingannato da una griglia correlata in una sovra-deflazione (la trappola su cui è interamente basato l'ultimo atto dell'articolo sul DSR — 640 celle correlate non sono 640 trial indipendenti, e dare in pasto il conteggio grezzo gonfia eccessivamente il tetto di rumore). Il PBO non conta mai i trial; ricampiona la matrice di rendimenti effettiva, quindi la correlazione della griglia è incorporata negli split gratuitamente. Al contrario, il PBO ti dice che la procedura generalizza ma non se il vincitore supera una hurdle rate — una ricerca può avere un PBO basso e comunque selezionare qualcosa il cui Sharpe out-of-sample, pur restando affidabilmente sopra la mediana del campo, è troppo piccolo per essere tradato. Il DSR prezza il vincitore; il PBO prezza la procedura. Eseguili entrambi.

Due superfici tridimensionali di griglie di parametri affiancate: a sinistra un ampio plateau liscio di configurazioni vicine buone su cui ogni split train-test concorda, dando un PBO basso, a destra un unico picco solitario circondato da rumore piatto su cui split diversi sono in disaccordo, dando un PBO vicino a un mezzo

C'è un'intuizione geometrica sotto tutto questo, ed è la cosa più utile da portare a casa. Un vantaggio genuino è un plateau; l'overfitting è un picco. Quando un effetto reale guida la tua griglia, le buone configurazioni si raggruppano — fast=3/slow=55 funziona, e così i suoi vicini, perché stanno tutti campionando lo stesso segnale sottostante. Quel plateau è robusto al ricampionamento: qualunque siano gli 8 blocchi su 16 su cui alleni, il vincitore in-sample proviene dalla stessa ampia regione, e quella regione resta in cima anche out-of-sample. Molti split concordano → PBO basso. Quando è l'overfitting a guidare la tua griglia, il "vincitore" è un picco solitario — una cella che per caso si adatta al rumore dei blocchi di training, circondata da vicini mediocri. Quel picco è fragile: uno split train/test diverso incorona un picco solitario diverso, e nessuno di essi sopravvive fino al test set. Gli split sono in disaccordo → PBO ≈ 0.5. Questa è la stessa lezione a cui arriva il nostro studio di analisi del plateau dal lato della mappa dei parametri; il PBO è, in effetti, la distinzione plateau-vs-picco misurata attraverso ogni ricampionamento simmetrico dei tuoi dati contemporaneamente.

Questo spiega anche perché la CSCV batte lo split walk-forward di default dei praticanti. La walk-forward ti dà un solo taglio passato→futuro e un solo verdetto; la CSCV ti dà 12,870 tagli simmetrici e chiede se il vincitore sopravvive a tutti. Un picco può sopravvivere per fortuna a un taglio arbitrario; non può sopravviverne a 12,870. (La Combinatorial Purged Cross-Validation di López de Prado, CPCV, estende esattamente questa idea con purging ed embargo per eliminare il label-leakage che il semplice ricampionamento può subire sotto dipendenza seriale — il gradino naturale successivo una volta che le tue label si sovrappongono.) Lo stesso avvertimento strutturale attraversa l'intera serie: la metrica che ottimizzi sceglie di nascosto la tua strategia (design della funzione obiettivo), un leak di un bar fabbrica uno Sharpe di 15 dal rumore (look-ahead bias), una ricerca a test multipli fabbrica uno Sharpe di 1.63 dal rumore (DSR) — e qui, una procedura di selezione ricampionata fabbrica un vincitore privo di valore che solo il PBO può smascherare.

Note di onestà

Quattro avvertenze, dette chiaramente, perché uno studio controllato guadagna le sue conclusioni solo nominando i propri limiti.

  • I processi generatori dei dati sono sintetici — di proposito. Rumore Normale iid per il nullo, un campo a Sharpe piantato per lo sweep del vantaggio, e una griglia di medie mobili su un puro random walk per la trappola. Nessuno è una pretesa di realismo di mercato; ognuno è scelto per la ground truth controllata. Possiamo provare che il PBO legge 0.5 su "nessuna abilità" e 0 su "abilità reale" solo generando dati di cui sappiamo quale sia quale. I rendimenti reali sono a code grasse, autocorrelati e non stazionari; ciò che questo studio consegna è la diagnostica calibrata, non una strategia.
  • Il nullo del PBO è 0.5, ed è una caratteristica, non una stranezza. Dichiaralo ogni volta che riporti un PBO, perché altrimenti metà dei tuoi lettori tratterà 0.5 come "metà sicuro." Una ricerca senza abilità out-of-sample si colloca a 0.5; un vantaggio genuino lo spinge a 0. Non esiste una lettura "innocente" di PBO ≈ 0.5 — è il verdetto di overfitting completo.
  • PBO > 0.5 è una regione "perversa" che non forziamo. Un PBO sistematicamente sopra 0.5 significa che il successo in-sample predice attivamente il fallimento out-of-sample — le configurazioni peggiori in-sample diventano le migliori out-of-sample. Questo richiede una struttura di anti-persistenza o di costi di trading, non la semplice assenza di vantaggio. Le nostre ricerche in overfitting si collocano a ≈ 0.5 (0.476 per il rumore iid; 0.463 mediato per la griglia MA; 0.573 su un seed sul lato alto, entro la banda Monte-Carlo ±0.14–0.22 attraverso 60 matrici), il che significa già "nessuna abilità out-of-sample." Non fabbrichiamo la regione perversa; mostriamo solo che l'overfitting ti colloca sulla linea del lancio di moneta, il che è già abbastanza compromettente.
  • Il PBO è deterministico data la matrice; solo la matrice è casuale. Per un M e S = 16 fissati, tutti i C(16, 8) = 12,870 split sono enumerati esaustivamente — non c'è alcun seed di bootstrap e nessuna varianza campionaria nel PBO stesso. La dispersione che riportiamo (±0.137 sul nullo, ±0.223 sulla griglia MA) è varianza attraverso le 60 matrici Monte-Carlo, non all'interno dello stimatore. Lo Sharpe su ciascun lato è stimato su circa 500 osservazioni — 496 dopo il troncamento dei blocchi CSCV, dato che T = 1000 diviso in 16 blocchi uguali lascia 992 righe utilizzabili, divise in due metà di 496; poiché lo Sharpe è invariante all'ordine, l'ordine delle righe all'interno di un train o test set non conta (conterebbe per metriche path-dependent come un rapporto rendimento/drawdown).

Punti Chiave

  1. Il PBO valuta la procedura di selezione, non il vincitore — e il suo nullo è 0.5. È la probabilità che la configurazione scelta come migliore in-sample finisca nella metà inferiore out-of-sample. PBO ≈ 0.5 è un lancio di moneta (overfit completo); PBO ≈ 0 è una selezione affidabile. Lo vuoi vicino a zero, e devi dirlo ad alta voce, perché 0.5 appare "sicuro" a un occhio non addestrato e significa l'esatto opposto.
  2. La calibrazione dimostra che funziona. Su 200 strategie iid a vantaggio zero, il miglior Sharpe annualizzato in-sample di 1.98 collassa a 0.06 out-of-sample e PBO = 0.476 — il rumore si colloca sulla linea del lancio di moneta, perdendo denaro out-of-sample il 47.5% delle volte. Pianta un vantaggio genuino (Sharpe annualizzato 2.38) e l'in-sample 3.73 sopravvive a un out-of-sample 2.34 mentre il PBO scende a 0.001. Due estremi, una diagnostica calibrata.
  3. Il PBO è un termometro continuo. Fai variare il vantaggio piantato e il PBO scende monotonicamente — 0.52 → 0.44 → 0.21 → 0.03 → 0.001 → 0.00 a Sharpe veri annualizzati di 0.00 / 0.48 / 0.95 / 1.59 / 2.38 / 3.17 — con lo Sharpe out-of-sample della strategia selezionata che sale di pari passo (da −0.05 fino a 3.29). Misura quanto sei vicino a un lancio di moneta, non solo sì/no.
  4. La trappola realistica è il punto centrale. Una griglia di media mobile a 170 configurazioni su un puro random walk dà in media uno Sharpe in-sample selezionato di appena 0.97 che decade a 0.04, con PBO 0.463 — statisticamente indistinguibile dal nullo, una ricerca senza vantaggio che si legge come il nullo. Su una matrice rappresentativa il miraggio è vivido: un miglior Sharpe in-sample di 2.33 (un numero da pitch deck), uno Sharpe out-of-sample mediano di −0.22, una probabilità del 63% di una perdita out-of-sample, PBO 0.573, e una ripida pendenza di degradazione di −0.92. Un backtest bellissimo con un'aspettativa out-of-sample negativa, invisibile a ogni statistica stampata accanto al vincitore e visibile solo quando valuti la procedura.
  5. Abbina il PBO al Deflated Sharpe Ratio. Il DSR prezza il vincitore (questo Sharpe supera la fortuna, dati N trial?); il PBO prezza la procedura (la selezione generalizza?). Il DSR ha bisogno di un conteggio dei trial e può essere ingannato da griglie correlate; il PBO ricampiona la matrice e non conta mai i trial. Un vantaggio genuino è un ampio plateau su cui molti split concordano (PBO basso); un picco solitario in-sample è overfit (gli split sono in disaccordo, PBO ≈ 0.5). Eseguili entrambi, e leggi il plateau.

Il vincitore di una ricerca è colpevole finché non è dimostrata la sua innocenza — e il PBO controinterroga la ricerca stessa, non l'alibi che ti consegna. Ignora quanto bene appaia il vincitore in-sample e chiede solo se sceglierlo sia stata una decisione che sopravvive a essere ritagliata in 12,870 modi. Quando non lo è — quando il tuo splendido Sharpe di 2.33 finisce per collocarsi nella metà inferiore out-of-sample quasi tanto spesso quanto no — non hai trovato una strategia. Hai trovato la moneta più fortunata, e il PBO è il numero che la coglie mentre gira.

L'esperimento completo — l'infrastruttura di calibrazione del nullo, lo sweep del termometro a vantaggio piantato, la trappola della griglia su random walk, e ogni numero di questo articolo rigenerabile da un unico script deterministico — è nel paper compagno su pbo-search.marketmaker.cc, con codice e dati su github.com/suenot/pbo-search.

Disclaimer: le informazioni fornite in questo articolo hanno solo scopo didattico e informativo e non costituiscono consulenza finanziaria, di investimento o di trading. Il trading di criptovalute comporta un rischio significativo di perdita.

Autori

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

Resta un Passo Avanti al Mercato

Iscriviti alla nostra newsletter per approfondimenti esclusivi sul trading con IA, analisi di mercato e aggiornamenti sulla piattaforma.

Rispettiamo la tua privacy. Annulla l'iscrizione in qualsiasi momento.