La Probability of Backtest Overfitting : votre recherche a-t-elle battu un pile ou face ?
Fait partie de la série « Backtests Without Illusions ».
📄 Cet article est devenu un article de recherche. Chaque chiffre ci-dessous provient d'un unique script déterministe qui construit une vérité terrain contrôlée — recherches sans edge, recherches avec edge planté, et une grille réelle de paramètres de moyennes mobiles sur une marche aléatoire — puis exécute la Combinatorially Symmetric Cross-Validation (CSCV) pour estimer sur cette base la Probability of Backtest Overfitting, en mesurant directement à quel point la procédure de sélection elle-même se généralise. Lisez l'article en ligne (version interactive + PDF) sur pbo-search.marketmaker.cc, code et données sur github.com/suenot/pbo-search.
Le Deflated Sharpe Ratio mettait votre gagnant à l'épreuve : étant donné que vous avez recherché N configurations, ce Sharpe dépasse-t-il ce que la chance peut acheter ? Cet article met autre chose à l'épreuve — l'acte de choisir lui-même. Vous avez exécuté une grille, gardé la meilleure cellule, et êtes passé à autre chose. Mais la sélection elle-même était-elle digne de confiance ? Si vous refaisiez tout le découpage in-sample/hors échantillon d'une autre manière, la même configuration ressortirait-elle gagnante — ou avez-vous simplement couronné la plus chanceuse de cent pièces ?
La Probability of Backtest Overfitting (PBO), introduite par Bailey, Borwein, López de Prado et Zhu (2017), répond exactement à cette question, et elle le fait avec un chiffre que la plupart des gens interprètent mal au premier coup d'œil. Voici la phrase la plus importante de cet article, alors lisez-la deux fois :
La valeur nulle de PBO est 0.5, pas 1. Une recherche sans compétence hors échantillon obtient un PBO ≈ 0.5. La moitié ne signifie pas « à moitié surajustée » — la moitié est entièrement surajustée, un pile ou face. Vous voulez un PBO proche de zéro.
Cela piège tout le monde. Nous sommes entraînés à lire les probabilités par rapport à un nul de « rien », et pour le surajustement notre instinct nous dit que la lecture « innocente » est 0. Ce n'est pas le cas. PBO est la probabilité que la configuration que vous avez sélectionnée comme la meilleure in sample atterrisse dans la moitié inférieure du champ hors échantillon. Si votre recherche n'a vraiment rien appris qui se généralise, le gagnant in-sample a, hors échantillon, une probabilité égale d'être n'importe où dans le classement — il tombe donc dans la moitié inférieure environ la moitié du temps. PBO ≈ 0.5 signifie que votre procédure de sélection est un pile ou face. PBO ≈ 0 signifie que le gagnant in-sample reste fiablement un gagnant hors échantillon — la sélection est digne de confiance. Tout ce qui suit est construit pour rendre ce seul fait de calibration concret, sur des données où nous connaissons la vérité terrain.
| Régime (200 configurations, T = 1000, S = 16) | Ce que c'est | Sharpe in-sample du gagnant | Sharpe hors échantillon | PBO | Verdict |
|---|---|---|---|---|---|
| Champ sans edge (200 stratégies de bruit iid) | pure chance, aucun edge nulle part | 1.98 | 0.06 | 0.476 | surajusté — un pile ou face |
| Edge planté (20 configurations avec Sharpe annualisé 2.38) | compétence réelle et robuste | 3.73 | 2.34 | 0.001 | digne de confiance |
| Grille de croisement de MM sur marche aléatoire pure (170 configurations) | un mirage tentant | 0.97 | 0.04 | 0.463 | surajusté — un pile ou face |
Ratios de Sharpe annualisés ×√252. Les trois lignes font la moyenne du Sharpe de la stratégie sélectionnée sur 60 matrices Monte-Carlo — pommes contre pommes, de sorte que la grille surajustée est notée de la même manière que le nul et l'edge planté. Sur cette base moyennée, le Sharpe in-sample sélectionné de la grille (0.97) est en fait inférieur au 1.98 gonflé du nul, son Sharpe hors échantillon est un léger 0.04 positif, et son PBO (0.463) se situe juste en dessous de ½ — statistiquement indiscernable du nul. Les chiffres spectaculaires d'une matrice unique (un meilleur Sharpe in-sample de la grille de 2.33 s'effondrant à une médiane hors échantillon de −0.22, PBO 0.573) appartiennent à une graine de marche aléatoire représentative et apparaissent, clairement identifiés, dans l'Acte 4. Chaque chiffre remonte au fichier de résultats.
Trois régimes, une leçon. Une recherche sans edge se situe juste sur la ligne de pile ou face à 0.5, que le bruit soit iid (PBO 0.476) ou déguisé en véritable grille de moyennes mobiles (PBO 0.463) — les deux sont statistiquement indiscernables, et les deux sont accablants. Un edge véritable fait chuter PBO à 0.001. En moyenne sur les matrices, le gagnant sélectionné de la grille n'a rien d'exceptionnel — un Sharpe in-sample de 0.97, en dessous du 1.98 gonflé du nul — ce qui constitue en soi le diagnostic honnête : une recherche sans edge se lit comme le nul. Le drame se niche dans la queue de distribution. Sur une matrice de marche aléatoire représentative (Acte 4), la meilleure cellule de la grille affiche un Sharpe in-sample de 2.33 — essentiellement égal au 2.34 hors échantillon de l'edge planté, une égalité parfaite — mais hors échantillon elle atterrit dans la moitié inférieure presque aussi souvent que dans la moitié supérieure. Cet écart entre un beau backtest et une sélection sans valeur est invisible dans le propre Sharpe du gagnant et ne devient visible que lorsqu'on note la procédure. C'est ce que fait PBO.
Acte 1 — La procédure sur le banc des accusés : ce que fait vraiment CSCV

DSR est paramétrique : il modélise la distribution du Sharpe maximal sous un nul et déflate analytiquement la significativité du gagnant. CSCV est la réponse non paramétrique au même problème de biais de sélection — au lieu de modéliser le maximum, il rééchantillonne le découpage train/test de toutes les manières possibles et observe, empiriquement, si le gagnant in-sample continue de gagner. Aucune hypothèse de distribution, aucun comptage d'« essais effectifs ». Simplement : le choix se généralise-t-il ?
Commencez par la matière première. Vous avez backtesté N = 200 configurations d'une classe de stratégie sur T = 1000 observations synchrones. Empilez la série de rendements de chaque configuration en colonne et vous obtenez une matrice de performance M de T × N — 1 000 lignes de temps, 200 colonnes de stratégie. C'est le seul intrant dont CSCV a besoin.
Voici maintenant la construction, en quatre étapes :
- Divisez le temps en
S = 16blocs disjoints de longueur égale (T/Slignes chacun). Les blocs préservent la structure temporelle locale — un choix de conception qui compte dès que les rendements ont de la mémoire. - Choisissez chaque façon d'utiliser la moitié des blocs pour l'entraînement et la moitié pour le test. Avec
S = 16, cela fait lesC(16, 8) = 12 870façons de choisir 8 blocs sur 16 comme ensemble d'entraînement ; les 8 autres constituent l'ensemble de test. C'est de là que vient « combinatoirement symétrique » : chaque découpage a un miroir (échanger train et test), de sorte que le schéma utilise vos données de manière symétrique au lieu de la coupe unique et privilégiée passé→futur d'une simple marche avant. - À chaque découpage, classez les 200 configurations par Sharpe in-sample et choisissez le gagnant
n*. Trouvez ensuite où cette même configurationn*se classe hors échantillon, sur les 8 blocs retenus. - Enregistrez le rang relatif hors échantillon du gagnant et transformez-le en logit. PBO est la fraction des 12 870 découpages où ce logit est ≤ 0.
L'énumération s'écrit en quelques lignes :
from itertools import combinations
combos = list(combinations(range(S), S // 2)) # C(16, 8) = 12,870 splits
Pour chaque découpage, soit le rang hors échantillon du gagnant in-sample parmi les configurations (rang 1 = le pire, = le meilleur). Normalisez-le en un rang relatif , prenez son logit , et intégrez sur les découpages :
Le logit n'est qu'une règle de mesure pratique. signifie que le gagnant a atterri dans la moitié supérieure hors échantillon (rang relatif au-dessus de ½) — cohérence in-sample/hors échantillon, bon signe. signifie qu'il a atterri à ou en dessous de la médiane hors échantillon — le choix in-sample ne s'est pas généralisé sur ce découpage. PBO est la fraction des découpages où le gagnant in-sample n'a pas réussi à battre la médiane hors échantillon. C'est la matrice entière qui le détermine : étant donné M et S, PBO est déterministe — pas de graine de rééchantillonnage, les 12 870 découpages sont énumérés de manière exhaustive.
En code, une fois que vous disposez du Sharpe in-sample et hors échantillon de chaque configuration sur chaque découpage (matrices R_tr et R_te, chacune 12 870 × 200), le cœur de l'estimateur tient en six lignes :
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
Remarquez ce qui n'est pas présent ici : pas de p-value, pas de seuil sur le Sharpe du gagnant, pas de modèle de la distribution nulle. PBO ne demande jamais si le gagnant est bon. Il demande si choisir le meilleur in-sample est une décision qui survit au contact avec des données retenues. C'est une propriété de votre recherche, pas de votre stratégie — c'est précisément pour cela qu'il capture ce que les propres statistiques du gagnant ne peuvent pas capturer.
Acte 2 — La calibration est tout l'argument : le nul est 0.5

Un diagnostic qu'on ne peut pas calibrer n'est qu'une rumeur. Donc avant de faire confiance à PBO sur quoi que ce soit de réel, fixez deux points de référence sur des données dont la réponse est connue : un champ sans edge du tout, et un champ avec un edge véritable. Si PBO n'atterrit pas près de 0.5 sur le premier et près de 0 sur le second, il ne vaut rien.
Le point de référence nul. Construisez M à partir de 200 colonnes de bruit Normal indépendant, sans dérive, sans edge — Sharpe véritable exactement 0 pour chaque configuration — et exécutez CSCV. Faites la moyenne sur 60 matrices de ce type. La stratégie sélectionnée (la meilleure in-sample) affiche un Sharpe annualisé in-sample moyen de 1.98. Ce n'est pas un petit chiffre ; c'est la même inflation de sélection que l'article DSR a mesurée — la meilleure de 200 colonnes de bruit ressemble à une stratégie finançable. Hors échantillon, ce même gagnant délivre un Sharpe annualisé de 0.06. Il a essentiellement tout rendu. Et le verdict sur la procédure :
C'est le pile ou face, mesuré. Sur les 12 870 découpages, le gagnant in-sample a autant de chances d'atterrir en dessous de la médiane hors échantillon qu'au-dessus — 0.476, à peine sous ½, indiscernable de 0.5 compte tenu de la dispersion Monte-Carlo. Le diagnostic complémentaire concorde : la probabilité que le Sharpe hors échantillon de la stratégie sélectionnée soit négatif est de 0.475 — choisissez le meilleur in-sample à partir de bruit pur, et il perd de l'argent hors échantillon environ la moitié du temps. Il n'y a aucune compétence dans la sélection parce qu'il n'y a aucune compétence à trouver, et PBO rapporte exactement cela : 0.5 est la ligne de surajustement, et le bruit pur s'y trouve exactement.
Pourquoi 0.5 et pas 1 ? Parce que sous un vrai nul, les 200 colonnes sont interchangeables — des tirages statistiquement interchangeables du même processus de bruit. Le gagnant in-sample n'est spécial que in sample ; hors échantillon, ce n'est qu'une colonne parmi d'autres, avec une probabilité égale de se classer n'importe où. Ainsi, son rang relatif hors échantillon est uniforme sur , le logit est symétrique autour de 0, et la fraction avec converge vers ½. Un PBO de 1 serait pire qu'un pile ou face — cela signifierait que le succès in-sample prédit de manière fiable l'échec hors échantillon, ce qui nécessite un mécanisme actif d'anti-persistance, pas simplement une absence d'edge (plus de détails dans les notes d'honnêteté).
Le point de référence avec edge. Construisez maintenant un champ où 20 des 200 configurations portent un edge réel, planté — un Sharpe par observation de 0.15, qui s'annualise à 2.38 (dérivé : ) — et laissez les 180 autres comme du bruit. Exécutez le CSCV identique. L'histoire s'inverse complètement :
| Sharpe in-sample (ann.) | Sharpe hors échantillon (ann.) | PBO | P(perte OOS) | |
|---|---|---|---|---|
| Nul (0 edge) | 1.98 | 0.06 | 0.476 | 0.475 |
| Edge planté (Sharpe 2.38) | 3.73 | 2.34 | 0.001 | 0.0006 |
Le gagnant à l'edge planté affiche un Sharpe annualisé in-sample de 3.73 — gonflé par la sélection, comme toujours — mais cette fois il conserve un 2.34 hors échantillon, et PBO s'effondre à 0.001. Sur les 12 870 découpages, le gagnant in-sample tombe dans la moitié inférieure hors échantillon pratiquement jamais. La probabilité d'une perte hors échantillon chute à 0.0006. C'est à quoi ressemble une procédure de sélection digne de confiance : quelle que soit la manière dont vous découpez train contre test, le même type de configuration continue de gagner, parce qu'il existe un effet réel et robuste sur lequel la recherche peut s'accrocher. Les deux points de référence — 0.476 sur du bruit, 0.001 sur un edge véritable — constituent la calibration. PBO fonctionne.
Acte 3 — Un thermomètre continu, pas un test oui/non

Deux points de référence prouvent que PBO peut distinguer le bruit de l'edge. Mais la propriété la plus profonde est qu'il le fait en douceur. Faites varier l'edge planté de rien à fort, et PBO ne saute pas de 0.5 à 0 — il descend le long d'une rampe monotone, et le Sharpe hors échantillon de la stratégie sélectionnée grimpe pour le rejoindre, pas à pas :
| Sharpe véritable planté (annualisé) | PBO | Sharpe OOS de la stratégie sélectionnée (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 |
Lisez les deux colonnes de données ensemble. À edge véritable nul, PBO est de 0.52 et la stratégie sélectionnée gagne −0.05 hors échantillon — le pile ou face, encore une fois, et un gagnant qui perd de l'argent. Ajoutez un soupçon d'edge (annualisé 0.48) et PBO descend à 0.44. À un Sharpe véritable annualisé de 0.95 — un edge véritablement modeste et crédible — PBO est déjà à 0.21 et le Sharpe hors échantillon a grimpé à 0.81. À 1.59, il est de 0.03 ; à 2.38, 0.001 ; à 3.17, effectivement 0.00, avec la stratégie sélectionnée affichant 3.29 hors échantillon. PBO chute de manière monotone à mesure que l'edge réel croît, et la performance hors échantillon du gagnant grimpe en parallèle — les deux sont le même fait vu sous deux angles.
C'est cette propriété qui rend PBO utilisable en pratique : c'est un thermomètre continu du surajustement, pas une alarme binaire. Un PBO de 0.21 ne dit pas seulement « pas surajusté » — il dit que votre sélection a une compétence partielle hors échantillon : le gagnant in-sample bat la médiane hors échantillon 79 % du temps, mais l'edge est suffisamment mince pour qu'un cinquième des découpages l'ensevelisse encore. Vous pouvez observer ce chiffre bouger à mesure que vous renforcez votre signal, resserrez votre univers ou élaguez votre grille, et savoir dans quelle direction est l'honnêteté. La règle empirique de l'article lui-même — rejeter quand PBO dépasse 0.05 — découle naturellement de cette rampe : en dessous d'un Sharpe annualisé d'environ 1.5, la recherche ne l'a pas franchie ; au-dessus d'environ 1.6, elle l'a franchie. Mais la rampe elle-même est plus informative que n'importe quel seuil unique, car elle vous indique non seulement si vous avez surajusté, mais à quel point vous êtes proche d'un pile ou face.
Acte 4 — Le piège réaliste : un beau backtest, certifié sans valeur

Le nul de bruit iid est honnête mais facile à écarter — « mes stratégies ne sont pas des colonnes Normales aléatoires ». Voici donc le piège sous la forme dans laquelle les praticiens tombent réellement. Prenez un croisement de moyennes mobiles, la règle la plus backtestée au monde : allez long quand une MM rapide croise au-dessus d'une MM lente, plat sinon. Faites-en une grille — 10 longueurs rapides 17 longueurs lentes, en ne gardant que les paires valides rapide-en-dessous-de-lente, pour K = 170 configurations. Exécutez maintenant cette grille sur une série avec un edge nul prouvé : une marche aléatoire pure. Il n'y a rien à trouver. Un croisement ne peut pas prédire une marche aléatoire. Nous savons que la réponse est « aucune stratégie ».
La grille ne le sait pas. Elle vous fournit un gagnant, et le gagnant est tentant :
| Diagnostic (une matrice de marche aléatoire représentative, graine 3000, K = 170, S = 16) | Valeur |
|---|---|
| Meilleur Sharpe in-sample (annualisé) | 2.33 |
| PBO | 0.573 |
| Sharpe médian hors échantillon (annualisé) | −0.22 |
| Probabilité d'une perte hors échantillon | 0.63 |
| Pente de dégradation hors échantillon vs in-sample | −0.92 |
| Logit médian | −0.25 |
Il s'agit d'une matrice avec graine unique. En moyenne sur 60 matrices indépendantes de marche aléatoire, ces mêmes diagnostics donnent PBO 0.463 ± 0.223, un Sharpe in-sample sélectionné de 0.97 décroissant à 0.04, et P(perte OOS) 0.47 — statistiquement indiscernable du nul. Le 0.573 de la graine 3000 est un tirage du côté élevé de la bande nulle à ~0.5 — du bruit d'échantillonnage autour de la valeur de pile ou face, bien à l'intérieur de la dispersion de ±0.223 entre matrices — et l'histoire est identique dans les deux cas.
Un Sharpe annualisé in-sample de 2.33 sur un croisement de moyennes mobiles est le genre de résultat qui finit dans une présentation aux investisseurs. Il est essentiellement égal au Sharpe hors échantillon de notre edge véritablement planté de l'Acte 2 (2.34 — une égalité parfaite). Si vous vous étiez arrêté au backtest, vous l'auriez financé. CSCV refuse. PBO est un pile ou face ici : 0.463 en moyenne sur les 60 matrices, 0.573 sur celle-ci en particulier — les deux disent que la recherche n'a aucune compétence hors échantillon. Ne surinterprétez pas le 0.573 : il se situe à 0.073 au-dessus de ½, du bruit d'échantillonnage autour du nul de 0.5 et bien à l'intérieur de la bande de ±0.223 entre matrices ; un PBO véritablement au-dessus de 0.5 — où le succès in-sample prédirait activement l'échec hors échantillon — nécessite une structure d'anti-persistance ou de coûts de transaction que cette marche aléatoire ne contient pas (voir les notes d'honnêteté). Sur cette matrice, le logit médian de −0.25 place le gagnant in-sample médian à un rang relatif hors échantillon d'environ 0.44 (dérivé : ) — à peu près 75e sur 170 (dérivé : ), juste en dessous du milieu du champ qu'il était censé mener. Le Sharpe médian hors échantillon de ce gagnant est de −0.22 — négatif — et il subit une perte hors échantillon 63 % du temps. Un Sharpe de backtest de 2.33 dont l'espérance hors échantillon est une perte : la définition même d'un mirage.
La pente de dégradation de −0.92 est le second coup de poignard. Régressez le Sharpe hors échantillon du gagnant sélectionné de chaque découpage sur son Sharpe in-sample ; la pente est fortement négative — plus une configuration a l'air bonne in-sample, plus elle est mauvaise hors échantillon. C'est l'empreinte digitale du surajustement sur une série avec de la mémoire : le croisement s'accroche à des motifs transitoires dans les blocs d'entraînement qui, étant des artefacts d'une marche aléatoire, s'inversent hors échantillon. Une subtilité qui mérite d'être énoncée pour ne pas surinterpréter la pente : une pente négative n'est pas en soi un verdict. Même le régime d'edge véritable de l'Acte 2 a une pente de dégradation négative (−0.52) — la régression vers la moyenne tire toujours un peu vers le bas le maximum sélectionné hors échantillon. Ce qui sépare le mirage de l'edge réel n'est pas que la pente soit négative, mais où atterrit le gagnant : l'edge véritable reste proche du sommet (PBO 0.001) tout en en cédant un peu ; le mirage se situe sur la ligne du pile ou face (PBO 0.463 en moyenne, 0.573 sur cette graine), son gagnant n'étant pas plus susceptible d'être au-dessus de la médiane hors échantillon qu'en dessous. Lisez la pente pour savoir combien de contraction il y a ; lisez PBO pour savoir si cela se généralise encore. Le mirage échoue sur les deux plans.
C'est pourquoi PBO mérite sa place à côté d'un backtest brut. Le Sharpe in-sample de 2.33 n'est pas un mensonge — la stratégie l'a vraiment gagné, in sample, sur cette marche aléatoire. C'est de la sélection, déguisée en une règle familière sur une grille d'apparence réaliste, et aucune quantité d'observation de la courbe de capital ne la révèle. Seule la notation de la procédure le fait.
Acte 5 — PBO et DSR : deux questions honnêtes, un plateau

PBO et le Deflated Sharpe Ratio sont les deux moitiés du même contrôle d'honnêteté, et ils ne sont pas redondants — ils interrogent des objets différents :
| Deflated Sharpe Ratio (DSR) | Probability of Backtest Overfitting (PBO) | |
|---|---|---|
| Objet sur le banc des accusés | le gagnant | la procédure de sélection |
| Question | ce Sharpe dépasse-t-il ce que la chance achète sur N essais ? | choisir le meilleur in-sample se généralise-t-il hors échantillon ? |
| Méthode | paramétrique — déflate le seuil de significativité | non paramétrique — rééchantillonne tous les C(S, S/2) découpages train/test |
| Valeur nulle | DSR ≈ 0.5 (le gagnant égale tout juste le plafond de bruit) | PBO ≈ 0.5 (le gagnant est un pile ou face hors échantillon) |
| Vous voulez | DSR proche de 1 | PBO proche de 0 |
| Nécessite le nombre d'essais N ? | oui — et les grilles corrélées rendent N ambigu | non — le rééchantillonnage des découpages gère nativement la dépendance |
Ils peuvent même être en désaccord, et ce désaccord est diagnostique. DSR peut être trompé par une grille corrélée vers une sur-déflation (le piège dont traite entièrement le dernier acte de l'article DSR — 640 cellules corrélées ne sont pas 640 essais indépendants, et utiliser le nombre brut gonfle excessivement le plafond de bruit). PBO ne compte jamais d'essais ; il rééchantillonne la matrice de rendements réelle, de sorte que la corrélation de la grille est intégrée gratuitement dans les découpages. Inversement, PBO vous dit que la procédure se généralise mais pas si le gagnant franchit un taux plancher — une recherche peut avoir un PBO bas et néanmoins sélectionner quelque chose dont le Sharpe hors échantillon, bien que fiablement au-dessus de la médiane du champ, est trop faible pour être négocié. DSR évalue le gagnant ; PBO évalue la procédure. Exécutez les deux.

Il y a une intuition géométrique sous tout cela, et c'est la chose la plus utile à retenir. Un edge véritable est un plateau ; le surajustement est un pic. Quand un effet réel anime votre grille, les bonnes configurations se regroupent — rapide=3/lente=55 fonctionne, tout comme ses voisines, parce qu'elles échantillonnent toutes le même signal sous-jacent. Ce plateau est robuste au rééchantillonnage : quels que soient les 8 blocs sur 16 sur lesquels vous vous entraînez, le gagnant in-sample provient de la même vaste région, et cette région reste au sommet hors échantillon. De nombreux découpages sont d'accord → PBO bas. Quand le surajustement anime votre grille, le « gagnant » est un pic solitaire — une cellule qui a par hasard collé au bruit des blocs d'entraînement, entourée de voisins médiocres. Ce pic est fragile : un découpage train/test différent couronne un pic solitaire différent, et aucun d'eux ne survit à l'ensemble de test. Les découpages sont en désaccord → PBO ≈ 0.5. C'est la même leçon à laquelle parvient notre étude d'analyse de plateau du côté de la carte des paramètres ; PBO est, en effet, la distinction plateau-contre-pic mesurée sur chaque rééchantillonnage symétrique de vos données à la fois.
Cela explique aussi pourquoi CSCV surpasse le découpage walk-forward par défaut du praticien. Le walk-forward vous donne une seule coupe passé→futur et un seul verdict ; CSCV vous donne 12 870 coupes symétriques et demande si le gagnant les survit toutes. Un pic peut survivre à une coupe arbitraire par chance ; il ne peut pas en survivre 12 870. (Le Combinatorial Purged Cross-Validation de López de Prado, CPCV, étend exactement cette idée avec purge et embargo pour éliminer la fuite d'étiquettes dont le simple rééchantillonnage peut souffrir sous dépendance sérielle — l'échelon naturel suivant dès que vos étiquettes se chevauchent.) Le même avertissement structurel traverse toute la série : la métrique que vous optimisez choisit secrètement votre stratégie (conception de la fonction objectif), une fuite d'une seule barre fabrique un Sharpe de 15 à partir de bruit (look-ahead bias), une recherche à tests multiples fabrique un Sharpe de 1.63 à partir de bruit (DSR) — et ici, une procédure de sélection rééchantillonnée fabrique un gagnant sans valeur que seul PBO peut démasquer.
Notes d'honnêteté
Quatre mises en garde, énoncées clairement, car une étude contrôlée ne mérite ses conclusions que si elle nomme ses limites.
- Les processus générateurs de données sont synthétiques — délibérément. Bruit Normal iid pour le nul, un champ à Sharpe planté pour le balayage d'edge, et une grille de moyennes mobiles sur une marche aléatoire pure pour le piège. Aucun n'est une affirmation sur le réalisme du marché ; chacun est choisi pour sa vérité terrain contrôlée. Nous ne pouvons prouver que PBO lit 0.5 sur « aucune compétence » et 0 sur « compétence réelle » qu'en générant des données où nous savons laquelle est laquelle. Les rendements réels sont à queues épaisses, autocorrélés et non stationnaires ; ce qui est livré ici est le diagnostic calibré, pas une stratégie.
- La valeur nulle de PBO est 0.5, et c'est une caractéristique, pas une bizarrerie. Énoncez-le à chaque fois que vous rapportez un PBO, car sinon la moitié de vos lecteurs traitera 0.5 comme « à moitié sûr ». Une recherche sans compétence hors échantillon se situe à 0.5 ; un edge véritable la pousse vers 0. Il n'existe pas de lecture « innocente » de PBO ≈ 0.5 — c'est le verdict de surajustement complet.
- PBO > 0.5 est une région « perverse » que nous ne forçons pas. Un PBO systématiquement au-dessus de 0.5 signifie que le succès in-sample prédit activement l'échec hors échantillon — les configurations les pires in-sample deviennent les meilleures hors échantillon. Cela nécessite une structure d'anti-persistance ou de coûts de transaction, pas simplement une absence d'edge. Nos recherches surajustées se situent à ≈ 0.5 (0.476 pour le bruit iid ; 0.463 en moyenne pour la grille de MM ; 0.573 sur une graine du côté élevé, dans la bande Monte-Carlo de ±0.14–0.22 sur 60 matrices), ce qui signifie déjà « aucune compétence hors échantillon ». Nous ne fabriquons pas la région perverse ; nous montrons seulement que le surajustement vous place sur la ligne du pile ou face, ce qui est déjà suffisamment accablant.
- PBO est déterministe étant donné la matrice ; seule la matrice est aléatoire. Pour un
Met unS = 16fixes, lesC(16, 8) = 12 870découpages sont énumérés de manière exhaustive — il n'y a pas de graine de bootstrap ni de variance d'échantillonnage dans PBO lui-même. La dispersion que nous rapportons (±0.137 sur le nul, ±0.223 sur la grille de MM) est une variance entre les 60 matrices Monte-Carlo, pas au sein de l'estimateur. Le Sharpe de chaque côté est estimé sur environ 500 observations — 496 après troncature des blocs par CSCV, carT = 1000divisé en 16 blocs égaux laisse 992 lignes utilisables, divisées en deux moitiés de 496 ; comme le Sharpe est invariant à l'ordre, l'ordre des lignes au sein d'un ensemble d'entraînement ou de test n'a pas d'importance (ce serait le cas pour des métriques dépendantes du chemin, comme un ratio rendement/drawdown).
Points à retenir
- PBO note la procédure de sélection, pas le gagnant — et sa valeur nulle est 0.5. C'est la probabilité que la configuration que vous avez choisie comme la meilleure in-sample atterrisse dans la moitié inférieure hors échantillon. PBO ≈ 0.5 est un pile ou face (entièrement surajusté) ; PBO ≈ 0 est une sélection digne de confiance. Vous le voulez proche de zéro, et vous devez le dire à voix haute, car 0.5 se lit comme « sûr » pour un œil non averti et signifie exactement l'inverse.
- La calibration prouve que cela fonctionne. Sur 200 stratégies iid sans edge, le meilleur Sharpe annualisé in-sample de 1.98 s'effondre à 0.06 hors échantillon et PBO = 0.476 — le bruit se situe sur la ligne du pile ou face, perdant de l'argent hors échantillon 47.5 % du temps. Plantez un edge véritable (Sharpe annualisé 2.38) et le 3.73 in-sample survit à un 2.34 hors échantillon tandis que PBO chute à 0.001. Deux points de référence, un diagnostic calibré.
- PBO est un thermomètre continu. Faites varier l'edge planté et PBO chute de manière monotone — 0.52 → 0.44 → 0.21 → 0.03 → 0.001 → 0.00 à des Sharpes véritables annualisés de 0.00 / 0.48 / 0.95 / 1.59 / 2.38 / 3.17 — avec le Sharpe hors échantillon de la stratégie sélectionnée grimpant en parallèle (de −0.05 jusqu'à 3.29). Il mesure à quel point vous êtes proche d'un pile ou face, pas seulement oui/non.
- Le piège réaliste est tout l'intérêt. Une grille de 170 configurations de moyennes mobiles sur une marche aléatoire pure affiche en moyenne un Sharpe in-sample sélectionné de seulement 0.97 décroissant à 0.04, avec un PBO de 0.463 — statistiquement indiscernable du nul, une recherche sans edge se lisant comme le nul. Sur une matrice représentative, le mirage est frappant : un meilleur Sharpe in-sample de 2.33 (un chiffre digne d'une présentation aux investisseurs), un Sharpe médian hors échantillon de −0.22, une probabilité de 63 % de perte hors échantillon, un PBO de 0.573, et une pente de dégradation abrupte de −0.92. Un beau backtest avec une espérance hors échantillon négative, invisible dans toute statistique imprimée à côté du gagnant et visible seulement lorsqu'on note la procédure.
- Associez PBO au Deflated Sharpe Ratio. DSR évalue le gagnant (ce Sharpe dépasse-t-il la chance, étant donné N essais ?) ; PBO évalue la procédure (la sélection se généralise-t-elle ?). DSR nécessite un nombre d'essais et peut être trompé par des grilles corrélées ; PBO rééchantillonne la matrice et ne compte jamais d'essais. Un edge véritable est un large plateau sur lequel de nombreux découpages s'accordent (PBO bas) ; un pic in-sample solitaire est surajusté (les découpages sont en désaccord, PBO ≈ 0.5). Exécutez les deux, et lisez le plateau.
Le gagnant d'une recherche est coupable jusqu'à preuve du contraire — et PBO fait subir un contre-interrogatoire à la recherche elle-même, pas à l'alibi qu'elle vous fournit. Il ignore à quel point le gagnant a l'air bon in-sample et demande seulement si le choisir était une décision qui survit à un redécoupage de 12 870 manières différentes. Quand ce n'est pas le cas — quand votre magnifique Sharpe de 2.33 finit par atterrir dans la moitié inférieure hors échantillon aussi souvent qu'ailleurs — vous n'avez pas trouvé de stratégie. Vous avez trouvé la pièce la plus chanceuse, et PBO est le chiffre qui la prend en flagrant délit.
L'expérience complète — le harnais de calibration nulle, le balayage thermométrique de l'edge planté, le piège de la grille de marche aléatoire, et chaque chiffre de cet article régénérable à partir d'un unique script déterministe — se trouve dans l'article compagnon sur pbo-search.marketmaker.cc, avec code et données sur 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.