3. Sesgo de selección: eliges el universo sin saberlo
Nivel 2: Los sesgos que rompen un backtest
Los dos sesgos anteriores viven en el código. Este vive en tu cabeza, y por eso es el más difícil de eliminar: no aparece en ninguna línea que puedas corregir, aparece en el conjunto de decisiones que tomaste después de mirar un resultado y antes de escribir el informe.
Elegir después de mirar
El patrón es siempre el mismo. Ejecutas el backtest, no sale bien, y modificas algo razonable:
- El periodo. Empiezas en 2010 porque antes los datos son de peor calidad, y da la casualidad de que 2008 era el tramo que estropeaba la curva.
- El universo. Quitas los valores por debajo de cierto volumen medio porque no son operables, con el umbral puesto justo donde el resultado mejora.
- La frecuencia. Pasas el rebalanceo de mensual a semanal porque encaja mejor con el horizonte de la señal, cosa que descubriste al probarlo.
- El mercado. Cambias de índice y te quedas con aquel en el que la idea funciona, con la explicación económica escrita después.
Cada cambio individual es defendible. El problema es que la defensa se construyó después de ver el número, y eso convierte cada decisión en un parámetro más del modelo.
Ninguno de esos parámetros aparece en tu recuento de grados de libertad. Si has probado seis periodos de inicio, cuatro umbrales de liquidez y tres frecuencias de rebalanceo, has hecho setenta y dos backtests aunque solo hayas guardado uno, y el que has guardado es el máximo de setenta y dos.
El máximo de N intentos no es una estimación, es un estadístico de orden
Esta es la parte que la intuición no maneja bien. Aunque la estrategia no tenga ningún borde real, el mejor de muchos intentos sobre datos ruidosos sale positivo casi siempre, y su valor esperado crece con el número de intentos aproximadamente como la raíz cuadrada del logaritmo de ese número. Merece la pena verlo con datos generados sin ninguna señal.
import numpy as np
import pandas as pd
rng = np.random.default_rng(0)
n_dias, n_intentos = 2520, 200 # 10 anos, 200 variantes
# Ruido puro: por construccion no hay ninguna estrategia que valga
ruido = rng.normal(0, 0.01, size=(n_dias, n_intentos))
pnl = pd.DataFrame(ruido)
sharpes = pnl.mean() / pnl.std() * 252 ** 0.5
print(round(sharpes.median(), 2), round(sharpes.max(), 2))
# la mediana ronda cero; el maximo se acerca comodamente a 1Ese máximo es el número que acabarías presentando si esas doscientas columnas fueran doscientas variantes de tu idea. Y si además solo cuentas las variantes que recuerdas haber probado, estarás corrigiendo por doscientas cuando en realidad fueron mil. Lopez de Prado insiste en este punto: el dato imprescindible para juzgar un backtest no es su Sharpe, es cuántos backtests se hicieron antes de quedarse con ese.
El universo es un parámetro disfrazado
La variante más escurridiza es la elección del mercado. Pruebas la idea en el S&P 500 y no funciona; la pruebas en el Russell 2000 y funciona; construyes la explicación de que las pequeñas son menos eficientes. La explicación puede ser cierta, pero no la has contrastado: la has fabricado para encajar con el resultado que ya tenías.
resultados = {}
for indice in ["sp500", "russell2000", "stoxx600", "topix"]:
for umbral_volumen in [0, 1e5, 5e5, 1e6]:
for inicio in ["2000-01-01", "2005-01-01", "2010-01-01"]:
r = backtest(indice, umbral_volumen, inicio)
resultados[(indice, umbral_volumen, inicio)] = r.sharpe
s = pd.Series(resultados)
print(s.describe()) # 48 combinaciones
print(s.idxmax(), s.max()) # el titular
print((s > 0.5).mean()) # la fraccion que aguanta: esto es lo informativoLa forma correcta de leer esa tabla no es buscar el máximo, es mirar la distribución completa. Una idea con contenido económico produce resultados decentes en la mayoría de las celdas y ninguna espectacular; una idea vacía produce una celda brillante rodeada de nada. El titular es la celda; la evidencia es la distribución.
El sesgo que no cometes tú
Hay una capa más, y es social. Las estrategias que se publican son las que funcionaron, y las que no funcionaron no llegan a existir en la literatura. Tú heredas ese filtro sin haber participado en él: cuando lees un artículo sobre un factor, estás viendo el superviviente de un proceso de selección cuyo cementerio no puedes inspeccionar.
El mecanismo es el mismo del primer módulo, con las revistas y los blogs haciendo de índice y los resultados nulos haciendo de empresas dadas de baja. Un investigador que prueba una idea y no encuentra nada no escribe un artículo titulado "esto no funciona": archiva el cuaderno y prueba otra cosa. Un vendedor de cursos que ha probado treinta reglas te enseña la que quedó bien. Y una gestora que lanza ocho fondos cuantitativos cierra los tres peores a los dos años y publicita el historial de los cinco que quedan. En los tres casos, lo que llega a tus ojos ya ha pasado por un embudo que tú no controlas y cuya tasa de rechazo desconoces.
Caso real: qué queda de lo publicado
Las cifras aquí son incómodas y están medidas. McLean y Pontiff siguieron un conjunto amplio de anomalías documentadas en revistas académicas y encontraron que su rentabilidad cae en torno a un veintiséis por ciento fuera de la muestra original, antes de que nadie las conozca, y en torno a un cincuenta y ocho por ciento después de publicarse. Esa doble caída separa las dos causas: la primera parte es sobreajuste y selección, la segunda es el mercado incorporando lo que ya se ha hecho público.
Harvey, Liu y Zhu inventariaron más de trescientos factores publicados y argumentaron que, con ese volumen de pruebas sobre los mismos datos, el listón habitual de significación estadística es insuficiente y habría que exigir un estadístico t cercano a tres en lugar de dos. Y la replicación a gran escala de Hou, Xue y Zhang, sobre varios cientos de anomalías, dejó alrededor de dos tercios de ellas sin significación al aplicar criterios de construcción más exigentes.
Conclusión operativa: registra por escrito, antes de ejecutar nada, el universo, el periodo, las reglas de filtrado y el número de variantes que piensas probar. No porque sea buena práctica burocrática, sino porque es la única forma de saber después por cuántas pruebas tienes que corregir.