La Probability of Backtest Overfitting: ¿superó su búsqueda a una moneda al aire?
Parte de la serie "Backtests Without Illusions".
📄 Este artículo se convirtió en un paper de investigación. Cada número que sigue proviene de un único script determinista que construye una verdad de referencia controlada —búsquedas sin edge, búsquedas con edge plantado y una grilla real de parámetros de medias móviles sobre un paseo aleatorio— y luego ejecuta Combinatorially Symmetric Cross-Validation (CSCV) para estimar sobre ella la Probability of Backtest Overfitting, midiendo directamente qué tan bien generaliza el propio procedimiento de selección. Lea el paper en línea (versión interactiva + PDF) en pbo-search.marketmaker.cc, código y datos en github.com/suenot/pbo-search.
El Deflated Sharpe Ratio puso a juicio a su ganador: dado que usted buscó entre N configuraciones, ¿este Sharpe supera lo que la suerte puede comprar? Este artículo pone a juicio otra cosa: el acto de elegir. Usted ejecutó una grilla, se quedó con la mejor celda y siguió adelante. Pero ¿fue la propia selección digna de confianza? Si volviera a ejecutar toda la división in-sample/out-of-sample de otra manera, ¿saldría ganando la misma configuración, o simplemente coronó a la más afortunada de cien monedas?
La Probability of Backtest Overfitting (PBO), introducida por Bailey, Borwein, López de Prado y Zhu (2017), responde exactamente esa pregunta, y lo hace con un número que la mayoría malinterpreta a primera vista. Aquí está la frase más importante de este artículo, así que léala dos veces:
El valor nulo de PBO es 0.5, no 1. Una búsqueda sin habilidad fuera de muestra obtiene PBO ≈ 0.5. La mitad no significa "medio sobreajustada" —la mitad es totalmente sobreajustada, una moneda al aire. Usted quiere un PBO cercano a cero.
Eso confunde a todo el mundo. Estamos entrenados para leer probabilidades contra un nulo de "nada", y para el sobreajuste nuestro instinto nos dice que la lectura "inocente" es 0. No lo es. PBO es la probabilidad de que la configuración que usted seleccionó como mejor in sample caiga en la mitad inferior del campo fuera de muestra. Si su búsqueda genuinamente no aprendió nada que generalice, el ganador in-sample tiene, fuera de muestra, igual probabilidad de estar en cualquier lugar del ranking, así que cae en la mitad inferior alrededor de la mitad de las veces. PBO ≈ 0.5 significa que su procedimiento de selección es una moneda al aire. PBO ≈ 0 significa que el ganador in-sample sigue siendo confiablemente ganador fuera de muestra: la selección es digna de confianza. Todo lo que sigue está construido para hacer concreto ese único dato de calibración, sobre datos donde conocemos la verdad de referencia.
| Régimen (200 configuraciones, T = 1000, S = 16) | Qué es | Sharpe in-sample del ganador | Sharpe fuera de muestra | PBO | Veredicto |
|---|---|---|---|---|---|
| Campo sin edge (200 estrategias de ruido iid) | pura suerte, sin edge en ninguna parte | 1.98 | 0.06 | 0.476 | sobreajustado — una moneda al aire |
| Edge plantado (20 configuraciones con Sharpe anualizado 2.38) | habilidad genuina y robusta | 3.73 | 2.34 | 0.001 | digna de confianza |
| Grilla de cruce de medias móviles sobre paseo aleatorio puro (170 configuraciones) | un espejismo tentador | 0.97 | 0.04 | 0.463 | sobreajustado — una moneda al aire |
Ratios de Sharpe anualizados ×√252. Las tres filas promedian el Sharpe de la estrategia seleccionada sobre 60 matrices Monte Carlo —comparando manzanas con manzanas, de modo que la grilla sobreajustada se puntúa igual que el nulo y el edge plantado. Sobre esta base promediada, el Sharpe in-sample seleccionado de la grilla (0.97) es en realidad más bajo que el 1.98 inflado del nulo, su Sharpe fuera de muestra es un ligeramente positivo 0.04, y su PBO (0.463) queda apenas por debajo de ½ —estadísticamente indistinguible del nulo. Los números dramáticos de una sola matriz (un mejor Sharpe in-sample de la grilla de 2.33 que colapsa a una mediana fuera de muestra de −0.22, PBO 0.573) pertenecen a una semilla representativa de paseo aleatorio y aparecen, claramente etiquetados, en el Acto 4. Cada número se remonta al archivo de resultados.
Tres regímenes, una lección. Una búsqueda sin edge se sitúa justo en la línea de moneda al aire de 0.5, ya sea que el ruido sea iid (PBO 0.476) o esté disfrazado de una grilla real de medias móviles (PBO 0.463): ambas son estadísticamente indistinguibles, y ambas son condenatorias. Un edge genuino baja el PBO a 0.001. Promediado sobre las matrices, el ganador seleccionado de la grilla es poco notable —un Sharpe in-sample de 0.97, por debajo del 1.98 inflado del nulo— lo cual es en sí mismo el diagnóstico honesto: una búsqueda sin edge se lee como el nulo. El drama vive en la cola. En una matriz representativa de paseo aleatorio (Acto 4), la mejor celda de la grilla registra un Sharpe in-sample de 2.33 —esencialmente igual al 2.34 fuera de muestra del edge plantado, un empate técnico— pero fuera de muestra cae en la mitad inferior casi tan a menudo como en la superior. Esa brecha entre un backtest hermoso y una selección sin valor es invisible en el propio Sharpe del ganador y solo se vuelve visible cuando se puntúa el procedimiento. Eso es lo que hace PBO.
Acto 1 — El procedimiento a juicio: qué hace realmente CSCV

DSR es paramétrico: modela la distribución del Sharpe máximo bajo un nulo y desinfla analíticamente la significancia del ganador. CSCV es la respuesta no paramétrica al mismo problema de sesgo de selección: en lugar de modelar el máximo, remuestrea la división train/test de todas las formas posibles y observa, empíricamente, si el ganador in-sample sigue ganando. Sin supuestos distribucionales, sin contar "pruebas efectivas". Solo: ¿la elección generaliza?
Comience con la materia prima. Usted hizo backtesting de N = 200 configuraciones de una clase de estrategia sobre T = 1000 observaciones sincrónicas. Apile la serie de retornos de cada configuración en una columna y obtendrá una matriz de rendimiento M de T × N —1.000 filas de tiempo, 200 columnas de estrategia. Este es el único insumo que necesita CSCV.
Ahora la construcción, en cuatro movimientos:
- Divida el tiempo en
S = 16bloques disjuntos de igual longitud (T/Sfilas cada uno). Los bloques preservan la estructura temporal local: una decisión de diseño que importa en cuanto los retornos tienen memoria. - Elija cada forma de usar la mitad de los bloques para entrenar y la mitad para probar. Con
S = 16, eso es lasC(16, 8) = 12.870formas de elegir 8 de 16 bloques como conjunto de entrenamiento; los otros 8 son el conjunto de prueba. De aquí viene "combinatoriamente simétrico": cada división tiene un espejo (intercambiar train y test), de modo que el esquema usa sus datos simétricamente en lugar del único corte pasado→futuro privilegiado que da una sola caminata hacia adelante. - En cada división, ordene las 200 configuraciones por Sharpe in-sample y elija al ganador
n*. Luego encuentre dónde queda esa misma configuraciónn*fuera de muestra, sobre los 8 bloques retenidos. - Registre el rango relativo fuera de muestra del ganador y conviértalo en un logit. PBO es la fracción de las 12.870 divisiones donde ese logit es ≤ 0.
La enumeración es trivial de escribir:
from itertools import combinations
combos = list(combinations(range(S), S // 2)) # C(16, 8) = 12,870 splits
Para cada división, sea el rango fuera de muestra del ganador in-sample entre las configuraciones (rango 1 = peor, = mejor). Normalícelo a un rango relativo , tome su logit , e integre sobre las divisiones:
El logit es solo una regla conveniente. significa que el ganador cayó en la mitad superior fuera de muestra (rango relativo por encima de ½) —consistencia in-sample/fuera de muestra, bueno. significa que cayó en o por debajo de la mediana fuera de muestra: la elección in-sample no generalizó en esa división. PBO es la fracción de divisiones en las que el ganador in-sample no logró superar la mediana fuera de muestra. Toda la matriz lo determina: dado M y S, PBO es determinista; sin semilla de remuestreo, las 12.870 divisiones se enumeran exhaustivamente.
En código, una vez que tiene el Sharpe in-sample y fuera de muestra de cada configuración en cada división (matrices R_tr y R_te, cada una 12.870 × 200), el corazón del estimador son seis líneas:
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
Note lo que no está aquí: ningún p-valor, ningún umbral sobre el Sharpe del ganador, ningún modelo de la distribución nula. PBO nunca pregunta si el ganador es bueno. Pregunta si elegir el mejor in-sample es una decisión que sobrevive al contacto con datos retenidos. Eso es una propiedad de su búsqueda, no de su estrategia, precisamente por lo que captura cosas que las propias estadísticas del ganador no pueden.
Acto 2 — La calibración es todo el argumento: el nulo es 0.5

Un diagnóstico que no se puede calibrar es un rumor. Así que antes de confiar en PBO en algo real, fije dos puntos de referencia en datos donde la respuesta se conoce: un campo sin edge en ninguna parte y un campo con edge genuino. Si PBO no cae cerca de 0.5 en el primero y cerca de 0 en el segundo, no vale nada.
El punto de referencia nulo. Construya M a partir de 200 columnas de ruido Normal independiente, sin deriva, sin edge —Sharpe verdadero exactamente 0 para cada configuración— y ejecute CSCV. Promedie sobre 60 de esas matrices. La estrategia seleccionada (la mejor in-sample) registra un Sharpe anualizado in-sample promedio de 1.98. Eso no es un número pequeño; es la misma inflación por selección que midió el artículo de DSR: la mejor de 200 columnas de ruido parece una estrategia financiable. Fuera de muestra, ese mismo ganador entrega un Sharpe anualizado de 0.06. Devolvió esencialmente todo. Y el veredicto sobre el procedimiento:
Esa es la moneda al aire, medida. A lo largo de las 12.870 divisiones, el ganador in-sample tiene igual probabilidad de caer por debajo de la mediana fuera de muestra que por encima: 0.476, apenas por debajo de ½, indistinguible de 0.5 dada la dispersión Monte Carlo. El diagnóstico complementario coincide: la probabilidad de que el Sharpe fuera de muestra de la estrategia seleccionada sea negativo es 0.475: elija el mejor in-sample de puro ruido y pierde dinero fuera de muestra aproximadamente la mitad de las veces. No hay habilidad en la selección porque no hay habilidad que encontrar, y PBO informa exactamente eso: 0.5 es la línea de sobreajuste, y el ruido puro se sitúa justo sobre ella.
¿Por qué 0.5 y no 1? Porque bajo un nulo verdadero las 200 columnas son intercambiables —extracciones estadísticamente intercambiables del mismo proceso de ruido. El ganador in-sample es especial solo in sample; fuera de muestra es solo otra columna, con igual probabilidad de estar en cualquier posición del ranking. Así que su rango relativo fuera de muestra es uniforme en , el logit es simétrico alrededor de 0, y la fracción con converge a ½. Un PBO de 1 sería peor que una moneda al aire: significaría que el éxito in-sample predice de forma confiable el fracaso fuera de muestra, lo cual requiere un mecanismo activo de antipersistencia, no mera ausencia de edge (más sobre esto en las notas de honestidad).
El punto de referencia con edge. Ahora construya un campo donde 20 de las 200 configuraciones tienen un edge real y plantado —un Sharpe por observación de 0.15, que anualizado da 2.38 (derivado: )— y deje las otras 180 como ruido. Ejecute el mismo CSCV idéntico. La historia se invierte por completo:
| Sharpe in-sample (anual.) | Sharpe fuera de muestra (anual.) | PBO | P(pérdida OOS) | |
|---|---|---|---|---|
| Nulo (0 edge) | 1.98 | 0.06 | 0.476 | 0.475 |
| Edge plantado (Sharpe 2.38) | 3.73 | 2.34 | 0.001 | 0.0006 |
El ganador con edge plantado registra un Sharpe anualizado in-sample de 3.73 —inflado por la selección, como siempre— pero esta vez mantiene un 2.34 fuera de muestra, y PBO colapsa a 0.001. A lo largo de las 12.870 divisiones, el ganador in-sample cae en la mitad inferior fuera de muestra prácticamente nunca. La probabilidad de una pérdida fuera de muestra baja a 0.0006. Así se ve un procedimiento de selección digno de confianza: sea como sea que corte train contra test, el mismo tipo de configuración sigue ganando, porque hay un efecto real y robusto al que la búsqueda puede aferrarse. Los dos puntos de referencia —0.476 en ruido, 0.001 en un edge genuino— son la calibración. PBO funciona.
Acto 3 — Un termómetro continuo, no una prueba de sí/no

Dos puntos de referencia demuestran que PBO puede distinguir ruido de edge. Pero la propiedad más profunda es que lo hace de forma suave. Barra el edge plantado desde nada hasta fuerte y PBO no salta de 0.5 a 0: se desliza por una rampa monótona, y el Sharpe fuera de muestra de la estrategia seleccionada sube al mismo ritmo, paso a paso:
| Sharpe verdadero plantado (anualizado) | PBO | Sharpe OOS de la estrategia seleccionada (anual.) |
|---|---|---|
| 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 |
Lea las dos columnas de datos juntas. Con edge verdadero cero, PBO es 0.52 y la estrategia seleccionada gana −0.05 fuera de muestra: la moneda al aire, otra vez, y un ganador que pierde dinero. Añada un susurro de edge (anualizado 0.48) y PBO baja a 0.44. Con un Sharpe verdadero anualizado de 0.95 —un edge genuinamente modesto y creíble— PBO ya es 0.21 y el Sharpe fuera de muestra ha subido a 0.81. En 1.59 es 0.03; en 2.38, 0.001; en 3.17, efectivamente 0.00, con la estrategia seleccionada llevando 3.29 fuera de muestra. PBO cae monótonamente a medida que crece el edge real, y el rendimiento fuera de muestra del ganador sube al mismo ritmo: los dos son el mismo hecho visto desde dos ángulos.
Esta es la propiedad que hace que PBO sea utilizable en la práctica: es un termómetro continuo de sobreajuste, no una alarma binaria. Un PBO de 0.21 no solo dice "no sobreajustado": dice que su selección tiene habilidad parcial fuera de muestra: el ganador in-sample supera la mediana fuera de muestra el 79% de las veces, pero el edge es suficientemente delgado como para que una quinta parte de las divisiones aún lo entierren. Puede observar cómo se mueve el número mientras fortalece su señal, ajusta su universo o poda su grilla, y saber qué dirección es honesta. La regla general del propio paper —rechazar cuando PBO supera 0.05— surge naturalmente de esta rampa: por debajo de un Sharpe anualizado de ~1.5 la búsqueda no la ha superado; por encima de ~1.6 sí. Pero la rampa en sí es más informativa que cualquier umbral único, porque le dice no solo si sobreajustó, sino qué tan cerca de una moneda al aire está.
Acto 4 — La trampa realista: un backtest hermoso, certificado sin valor

El nulo de ruido iid es honesto pero fácil de descartar: "mis estrategias no son columnas Normales aleatorias". Así que aquí está la trampa en la forma en que los profesionales realmente caen. Tome un cruce de medias móviles, la regla más respaldada por backtests del mundo: entre en largo cuando una MA rápida cruza por encima de una MA lenta, plano en caso contrario. Constrúyala en grilla —10 longitudes rápidas 17 longitudes lentas, conservando los pares válidos rápida-por-debajo-de-lenta, para K = 170 configuraciones. Ahora ejecute esa grilla sobre una serie con edge cero comprobable: un paseo aleatorio puro. No hay nada que encontrar. Un cruce no puede predecir un paseo aleatorio. Sabemos que la respuesta es "ninguna estrategia".
La grilla no lo sabe. Le entrega un ganador, y el ganador es tentador:
| Diagnóstico (una matriz representativa de paseo aleatorio, semilla 3000, K = 170, S = 16) | Valor |
|---|---|
| Mejor Sharpe in-sample (anualizado) | 2.33 |
| PBO | 0.573 |
| Sharpe mediano fuera de muestra (anualizado) | −0.22 |
| Probabilidad de una pérdida fuera de muestra | 0.63 |
| Pendiente de degradación fuera de muestra vs. in-sample | −0.92 |
| Logit mediano | −0.25 |
Esta es una matriz con semilla única. Promediado sobre 60 matrices independientes de paseo aleatorio, estos mismos diagnósticos dan PBO 0.463 ± 0.223, un Sharpe in-sample seleccionado de 0.97 que decae a 0.04, y P(pérdida OOS) 0.47: estadísticamente indistinguible del nulo. El 0.573 de la semilla 3000 es una extracción en el lado alto de la banda nula de ~0.5 —ruido de muestreo alrededor del valor de moneda al aire, bien dentro de la dispersión de ±0.223 entre matrices— y la historia es idéntica de cualquier manera.
Un Sharpe anualizado in-sample de 2.33 en un cruce de medias móviles es el tipo de resultado que termina en una presentación a inversores. Es esencialmente igual al Sharpe fuera de muestra de nuestro edge genuinamente plantado del Acto 2 (2.34: un empate técnico). Si se hubiera detenido en el backtest, lo habría financiado. CSCV se niega. PBO es una moneda al aire aquí: 0.463 promediado sobre las 60 matrices, 0.573 en esta en particular; ambos dicen que la búsqueda no tiene habilidad fuera de muestra. No sobreinterprete el 0.573: está 0.073 por encima de ½, ruido de muestreo alrededor del nulo de 0.5 y bien dentro de la banda de ±0.223 entre matrices; un PBO genuinamente por encima de 0.5 —donde el éxito in-sample predeciría activamente el fracaso fuera de muestra— necesita una estructura de antipersistencia o de costos de transacción que este paseo aleatorio no contiene (vea las notas de honestidad). En esta matriz, el logit mediano de −0.25 sitúa al ganador in-sample mediano en un rango relativo fuera de muestra de aproximadamente 0.44 (derivado: ) —aproximadamente el puesto 75 de 170 (derivado: ), justo por debajo de la mitad del campo que se suponía que debía liderar. El Sharpe mediano fuera de muestra de ese ganador es −0.22 —negativo— y sufre una pérdida fuera de muestra el 63% de las veces. Un Sharpe de backtest de 2.33 cuya expectativa fuera de muestra es una pérdida: la definición de un espejismo.
La pendiente de degradación de −0.92 es el segundo golpe. Regrese el Sharpe fuera de muestra del ganador seleccionado de cada división sobre su Sharpe in-sample; la pendiente es marcadamente negativa: cuanto mejor se ve una configuración in-sample, peor le va fuera de muestra. Esta es la huella dactilar del sobreajuste en una serie con memoria: el cruce se aferra a patrones transitorios en los bloques de entrenamiento que, al ser artefactos de un paseo aleatorio, se revierten fuera de muestra. Una sutileza que vale la pena mencionar para no sobreinterpretar la pendiente: una pendiente negativa no es en sí misma un veredicto. Incluso el régimen de edge genuino del Acto 2 tiene una pendiente de degradación negativa (−0.52): la regresión a la media siempre tira un poco hacia abajo el máximo seleccionado fuera de muestra. Lo que separa el espejismo del edge real no es que la pendiente sea negativa, sino dónde cae el ganador: el edge genuino permanece cerca de la cima (PBO 0.001) mientras cede un poco; el espejismo se sitúa en la línea de moneda al aire (PBO 0.463 promediado, 0.573 en esta semilla), con su ganador no más propenso a estar por encima de la mediana fuera de muestra que por debajo. Lea la pendiente para saber cuánta contracción hay; lea PBO para saber si aún generaliza. El espejismo falla en ambos.
Por esto PBO se gana su lugar junto a un backtest crudo. El Sharpe in-sample de 2.33 no es una mentira: la estrategia realmente lo ganó, in sample, sobre ese paseo aleatorio. Es selección, disfrazada de una regla familiar sobre una grilla de aspecto realista, y ninguna cantidad de mirar fijamente la curva de capital la revela. Solo puntuar el procedimiento lo hace.
Acto 5 — PBO y DSR: dos preguntas honestas, un plateau

PBO y el Deflated Sharpe Ratio son las dos mitades del mismo control de honestidad, y no son redundantes: interrogan objetos diferentes:
| Deflated Sharpe Ratio (DSR) | Probability of Backtest Overfitting (PBO) | |
|---|---|---|
| Objeto a juicio | el ganador | el procedimiento de selección |
| Pregunta | ¿este Sharpe supera lo que la suerte compra en N pruebas? | ¿elegir el mejor in-sample generaliza fuera de muestra? |
| Método | paramétrico — desinfla el umbral de significancia | no paramétrico — remuestrea todas las C(S, S/2) divisiones train/test |
| Valor nulo | DSR ≈ 0.5 (el ganador apenas iguala el techo de ruido) | PBO ≈ 0.5 (el ganador es una moneda al aire fuera de muestra) |
| Usted quiere | DSR cerca de 1 | PBO cerca de 0 |
| ¿Necesita el número de pruebas N? | sí — y las grillas correlacionadas hacen que N sea ambiguo | no — el remuestreo de divisiones maneja la dependencia de forma nativa |
Incluso pueden discrepar, y esa discrepancia es diagnóstica. DSR puede ser engañado por una grilla correlacionada hacia una desinflación excesiva (la trampa de la que trata por completo el último acto del artículo de DSR: 640 celdas correlacionadas no son 640 pruebas independientes, y usar el conteo bruto infla en exceso el techo de ruido). PBO nunca cuenta pruebas; remuestrea la matriz de retornos real, así que la correlación de la grilla queda incorporada de forma gratuita en las divisiones. Por el contrario, PBO le dice que el procedimiento generaliza pero no si el ganador supera una tasa mínima: una búsqueda puede tener PBO bajo y aun así seleccionar algo cuyo Sharpe fuera de muestra, aunque de forma confiable por encima de la mediana del campo, sea demasiado pequeño para operar. DSR evalúa al ganador; PBO evalúa el procedimiento. Ejecute ambos.

Hay una intuición geométrica que subyace a todo esto, y es lo más útil que se puede llevar. Un edge genuino es un plateau; el sobreajuste es un pico. Cuando un efecto real impulsa su grilla, las buenas configuraciones se agrupan —rápida=3/lenta=55 funciona, y también sus vecinas, porque todas están muestreando la misma señal subyacente. Ese plateau es robusto al remuestreo: sea cuales sean los 8 de 16 bloques con los que entrene, el ganador in-sample proviene de la misma región amplia, y esa región sigue arriba fuera de muestra. Muchas divisiones concuerdan → PBO bajo. Cuando el sobreajuste impulsa su grilla, el "ganador" es un pico solitario: una celda que casualmente se ajustó al ruido de los bloques de entrenamiento, rodeada de vecinos mediocres. Ese pico es frágil: una división train/test diferente corona un pico solitario diferente, y ninguno de ellos sobrevive al conjunto de prueba. Las divisiones discrepan → PBO ≈ 0.5. Esta es la misma lección a la que llega nuestro estudio de análisis de plateau desde el lado del mapa de parámetros; PBO es, en efecto, la distinción plateau-versus-pico medida en cada remuestreo simétrico de sus datos a la vez.
También explica por qué CSCV supera a la división walk-forward por defecto del profesional. Walk-forward le da un corte pasado→futuro y un veredicto; CSCV le da 12.870 cortes simétricos y pregunta si el ganador sobrevive a todos ellos. Un pico puede sobrevivir a un corte arbitrario por suerte; no puede sobrevivir a 12.870. (El Combinatorial Purged Cross-Validation de López de Prado, CPCV, extiende exactamente esta idea con purga y embargo para eliminar la fuga de etiquetas que el remuestreo simple puede sufrir bajo dependencia serial: el siguiente escalón natural una vez que sus etiquetas se superponen.) La misma advertencia estructural atraviesa toda la serie: la métrica que optimiza elige secretamente su estrategia (diseño de la función objetivo), una fuga de una sola barra fabrica un Sharpe de 15 a partir de ruido (look-ahead bias), una búsqueda de pruebas múltiples fabrica un Sharpe de 1.63 a partir de ruido (DSR), y aquí, un procedimiento de selección remuestreado fabrica un ganador sin valor que solo PBO puede exponer.
Notas de honestidad
Cuatro salvedades, expresadas con claridad, porque un estudio controlado solo se gana sus conclusiones si nombra sus límites.
- Los procesos generadores de datos son sintéticos, a propósito. Ruido Normal iid para el nulo, un campo con Sharpe plantado para el barrido de edge, y una grilla de medias móviles sobre un paseo aleatorio puro para la trampa. Ninguno es una afirmación sobre el realismo del mercado; cada uno se eligió por su verdad de referencia controlada. Solo podemos demostrar que PBO lee 0.5 en "sin habilidad" y 0 en "habilidad real" generando datos donde sabemos cuál es cuál. Los retornos reales tienen colas gruesas, están autocorrelacionados y no son estacionarios; lo que se entrega aquí es el diagnóstico calibrado, no una estrategia.
- El valor nulo de PBO es 0.5, y eso es una característica, no una rareza. Dígalo cada vez que reporte un PBO, porque de lo contrario la mitad de sus lectores tratará 0.5 como "medio seguro". Una búsqueda sin habilidad fuera de muestra se sitúa en 0.5; un edge genuino la lleva a 0. No hay una lectura "inocente" de PBO ≈ 0.5: es el veredicto de sobreajuste total.
- PBO > 0.5 es una región "perversa" que no forzamos. Un PBO sistemáticamente por encima de 0.5 significa que el éxito in-sample predice activamente el fracaso fuera de muestra: las configuraciones peores in-sample se convierten en las mejores fuera de muestra. Eso requiere una estructura de antipersistencia o de costos de transacción, no mera ausencia de edge. Nuestras búsquedas sobreajustadas se sitúan en ≈ 0.5 (0.476 para ruido iid; 0.463 promediado para la grilla de MA; 0.573 en una semilla en el lado alto, dentro de la banda Monte Carlo de ±0.14–0.22 a través de 60 matrices), lo que ya significa "sin habilidad fuera de muestra". No fabricamos la región perversa; solo mostramos que el sobreajuste lo deja justo sobre la línea de moneda al aire, lo cual ya es suficientemente condenatorio.
- PBO es determinista dada la matriz; solo la matriz es aleatoria. Para un
MyS = 16fijos, lasC(16, 8) = 12.870divisiones se enumeran exhaustivamente: no hay semilla de bootstrap ni varianza de muestreo en el propio PBO. La dispersión que reportamos (±0.137 en el nulo, ±0.223 en la grilla de MA) es varianza entre las 60 matrices Monte Carlo, no dentro del estimador. El Sharpe en cada lado se estima sobre unas 500 observaciones —496 tras el truncamiento de bloques de CSCV, ya queT = 1000dividido en 16 bloques iguales deja 992 filas utilizables, divididas en dos mitades de 496; como el Sharpe es invariante al orden, el orden de las filas dentro de un conjunto de entrenamiento o prueba no importa (sí importaría para métricas dependientes de la trayectoria, como un ratio retorno/drawdown).
Conclusiones clave
- PBO evalúa el procedimiento de selección, no al ganador, y su valor nulo es 0.5. Es la probabilidad de que la configuración que usted eligió como mejor in-sample caiga en la mitad inferior fuera de muestra. PBO ≈ 0.5 es una moneda al aire (totalmente sobreajustado); PBO ≈ 0 es una selección digna de confianza. Usted lo quiere cerca de cero, y debe decirlo en voz alta, porque 0.5 se lee como "seguro" para un ojo no entrenado y significa exactamente lo contrario.
- La calibración demuestra que funciona. En 200 estrategias iid sin edge, el mejor Sharpe anualizado in-sample de 1.98 colapsa a 0.06 fuera de muestra y PBO = 0.476: el ruido se sitúa en la línea de moneda al aire, perdiendo dinero fuera de muestra el 47.5% de las veces. Plante un edge genuino (Sharpe anualizado 2.38) y el 3.73 in-sample sobrevive a un 2.34 fuera de muestra mientras PBO cae a 0.001. Dos puntos de referencia, un diagnóstico calibrado.
- PBO es un termómetro continuo. Barra el edge plantado y PBO cae monótonamente —0.52 → 0.44 → 0.21 → 0.03 → 0.001 → 0.00 en Sharpes verdaderos anualizados de 0.00 / 0.48 / 0.95 / 1.59 / 2.38 / 3.17— con el Sharpe fuera de muestra de la estrategia seleccionada subiendo al mismo ritmo (de −0.05 hasta 3.29). Mide qué tan cerca de una moneda al aire está, no solo sí/no.
- La trampa realista es todo el punto. Una grilla de 170 configuraciones de medias móviles sobre un paseo aleatorio puro promedia un Sharpe in-sample seleccionado de apenas 0.97 que decae a 0.04, con PBO 0.463: estadísticamente indistinguible del nulo, una búsqueda sin edge que se lee como el nulo. En una matriz representativa el espejismo es evidente: un mejor Sharpe in-sample de 2.33 (una cifra de presentación a inversores), un Sharpe mediano fuera de muestra de −0.22, un 63% de probabilidad de pérdida fuera de muestra, PBO 0.573, y una pronunciada pendiente de degradación de −0.92. Un backtest hermoso con una expectativa fuera de muestra negativa, invisible para cualquier estadística impresa junto al ganador y visible solo cuando se evalúa el procedimiento.
- Combine PBO con el Deflated Sharpe Ratio. DSR evalúa al ganador (¿este Sharpe supera la suerte, dadas N pruebas?); PBO evalúa el procedimiento (¿la selección generaliza?). DSR necesita un conteo de pruebas y puede ser engañado por grillas correlacionadas; PBO remuestrea la matriz y nunca cuenta pruebas. Un edge genuino es un amplio plateau que muchas divisiones concuerdan (PBO bajo); un pico solitario in-sample está sobreajustado (las divisiones discrepan, PBO ≈ 0.5). Ejecute ambos, y lea el plateau.
El ganador de una búsqueda es culpable hasta que se demuestre lo contrario, y PBO interroga a la propia búsqueda, no a la coartada que le entrega. Ignora qué tan bien se ve el ganador in-sample y solo pregunta si elegirlo fue una decisión que sobrevive a ser cortada de nuevo de 12.870 maneras. Cuando no lo hace —cuando su hermoso Sharpe de 2.33 termina cayendo en la mitad inferior fuera de muestra tan a menudo como no— usted no ha encontrado una estrategia. Ha encontrado la moneda más afortunada, y PBO es el número que la atrapa en el aire.
El experimento completo —el arnés de calibración nula, el barrido termométrico de edge plantado, la trampa de la grilla de paseo aleatorio, y cada número de este artículo regenerable a partir de un único script determinista— está en el paper complementario en pbo-search.marketmaker.cc, con código y datos en 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.