Etapa 3 de 4 · Nivel hedge fund
Por qué tu backtest miente: sobreajuste y cómo evitarlo
Por qué la mayoría de estrategias que brillan en el backtest fracasan con dinero real: sobreajuste, el problema de las pruebas múltiples, el Sharpe deflactado y una lista de comprobación para validar estrategias, con Python.
En este artículo
Si has hecho algún backtest, conoces la sensación: pruebas una idea, no funciona; cambias un parámetro, mejora un poco; añades un filtro y, de repente, la curva de capital sube como un cohete. Sharpe de 2,5. Parece que has encontrado algo.
Casi siempre, no. Lo que has encontrado es ruido que se ajusta a tus datos. Es el sobreajuste (overfitting), y es la razón número uno por la que las estrategias que brillan en el backtest fracasan con dinero real. En este artículo vas a verlo con tus propios ojos y a aprender cómo se protegen los fondos profesionales.
El experimento: 1.000 estrategias que no valen nada
Vamos a generar 1.000 «estrategias» cuyas rentabilidades diarias son ruido puro: su rentabilidad esperada es exactamente cero. Ninguna tiene ventaja alguna. Después, como haría cualquiera, nos quedamos con la que mejor lo haya hecho en tres años de backtest.
import numpy as np
from scipy.stats import norm
rng = np.random.default_rng(0)
N, años = 1_000, 3
dias = 252 * años
# 1.000 "estrategias" que son ruido puro: rentabilidad esperada cero
r = rng.normal(0, 0.01, size=(N, dias))
sharpe = r.mean(axis=1) / r.std(axis=1) * np.sqrt(252)
mejor = np.argmax(sharpe)
print(f"Sharpe medio de las {N}: {sharpe.mean():.2f}")
print(f"Sharpe de la mejor: {sharpe[mejor]:.2f}")
r_nuevo = rng.normal(0, 0.01, size=252 * 2) # dos años más de la "mejor"
print(f"La mejor, con datos nuevos: {r_nuevo.mean() / r_nuevo.std() * np.sqrt(252):.2f}")Sharpe medio de las 1000: 0.02 Sharpe de la mejor: 1.83 La mejor, con datos nuevos: 0.02
La mejor de mil estrategias sin ninguna ventaja tiene un Sharpe de 1,8 en el backtest, una cifra que muchos fondos firmarían. Con datos nuevos, vuelve a cero. No ha dejado de funcionar: nunca funcionó.
El problema de las pruebas múltiples
Lo que acabamos de ver tiene nombre: el problema de las pruebas múltiples. Cada vez que pruebas una variante (otro parámetro, otro activo, otro filtro) estás lanzando una moneda más. Si lanzas suficientes, alguna saldrá cara diez veces seguidas.
En la práctica nadie prueba mil estrategias a propósito, pero es muy fácil hacerlo sin darse cuenta: diez ventanas de media móvil por cinco umbrales por cuatro activos por cinco filtros ya son 1.000 combinaciones.
Bailey y López de Prado dieron una aproximación del Sharpe máximo que cabe esperar por puro azar después de probar \( N \) estrategias sin ventaja alguna:
\[ \mathbb{E}\left[\max \widehat{SR}\right] \approx \frac{1}{\sqrt{T}}\left[(1-\gamma)\,\Phi^{-1}\!\left(1-\tfrac{1}{N}\right) + \gamma\,\Phi^{-1}\!\left(1-\tfrac{1}{N e}\right)\right] \]
donde \( T \) son los años de datos, \( \gamma \approx 0{,}5772 \) es la constante de Euler-Mascheroni y \( \Phi^{-1} \) la inversa de la normal. El factor \( 1/\sqrt{T} \) es, aproximadamente, el error típico de un Sharpe anual estimado con \( T \) años.
def sharpe_maximo_esperado(N, años):
g = 0.5772156649 # constante de Euler-Mascheroni
z = (1 - g) * norm.ppf(1 - 1 / N) + g * norm.ppf(1 - 1 / (N * np.e))
return z / np.sqrt(años) # error típico del Sharpe ≈ 1/√años
for n in [10, 100, 1_000, 10_000]:
print(f"{n:>6} estrategias probadas -> Sharpe máximo esperado por azar: {sharpe_maximo_esperado(n, años):.2f}")10 estrategias probadas -> Sharpe máximo esperado por azar: 0.91 100 estrategias probadas -> Sharpe máximo esperado por azar: 1.46 1000 estrategias probadas -> Sharpe máximo esperado por azar: 1.88 10000 estrategias probadas -> Sharpe máximo esperado por azar: 2.23
La fórmula da 1,88 para mil pruebas, prácticamente lo que obtuvimos en la simulación. Lo que dice es muy incómodo: un Sharpe de 1,5 en un backtest de tres años no significa nada si has probado cien variantes.
El Sharpe deflactado
La conclusión práctica es que el Sharpe de un backtest hay que compararlo con lo que darías por azar, no con cero. Es la idea del Deflated Sharpe Ratio de Bailey y López de Prado: ajusta el Sharpe observado por el número de pruebas, la longitud del backtest y la forma de la distribución (asimetría y curtosis), y devuelve la probabilidad de que el Sharpe real sea positivo.
No hace falta implementarlo entero para aprovechar la idea. Basta con una regla sencilla: apunta cuántas variantes has probado y compara tu mejor Sharpe con el máximo esperado por azar para ese número. Si no lo supera con holgura, no tienes nada.
Otras formas en que un backtest miente
El sobreajuste no es el único problema. Estos errores son igual de frecuentes:
- Sesgo de anticipación (look-ahead bias): usar información que no estaba disponible en ese momento. Por ejemplo, operar al cierre de hoy con una señal calculada con ese mismo cierre, o usar datos contables antes de su fecha de publicación.
- Sesgo de supervivencia: probar la estrategia solo con las empresas que existen hoy, olvidando las que quebraron o salieron del índice.
- Costes irreales: ignorar comisiones, diferenciales entre compra y venta e impacto en el precio. Muchas estrategias de alta rotación solo ganan antes de costes.
- Régimen único: un backtest que solo incluye un mercado alcista no dice nada sobre lo que pasa en una crisis.
- Parámetros afinados a mano: si has mirado el periodo de prueba aunque sea una vez para decidir algo, ya no es de prueba.
Cómo validan los profesionales
- Hipótesis antes que datos. Una estrategia debería tener una razón económica: quién pierde el dinero que tú ganas y por qué. Si la única justificación es «el backtest sale bien», desconfía.
- Datos fuera de muestra de verdad. Reserva un periodo que no toques hasta el final, y úsalo una sola vez.
- Validación walk-forward. Optimiza con una ventana, prueba en la siguiente, avanza y repite a lo largo de toda la historia. Mide solo los tramos de prueba.
- Pocas variantes y registradas. Lleva la cuenta de todo lo que pruebas; es el \( N \) de la fórmula.
- Robustez ante los parámetros. Si la estrategia solo funciona con una media de 37 días y no con 35 o 40, es sobreajuste. Las buenas ideas funcionan en un rango amplio.
- Costes pesimistas. Si sigue funcionando con el doble de costes, es mejor señal.
- Empezar pequeño con dinero real. El último test es el mercado, con un tamaño que puedas permitirte perder.
La regla de oro: un backtest no sirve para demostrar que una estrategia funciona. Sirve para descartar las que no funcionan. Si tu proceso está diseñado para intentar romper la estrategia y no lo consigue, entonces empieza a merecer tu confianza.
Resumen
- Probar muchas variantes y quedarse con la mejor fabrica Sharpes altos a partir de ruido.
- El Sharpe máximo esperado por azar crece con el número de pruebas y baja con la longitud del backtest.
- El Sharpe deflactado corrige por todo ello; como mínimo, cuenta tus pruebas.
- Look-ahead, supervivencia y costes son las otras tres grandes trampas.
- Walk-forward, datos fuera de muestra usados una vez, hipótesis económica y robustez: así se valida en serio.
Si quieres ver el caso extremo de un modelo en el que todo el mundo confió demasiado, sigue con la cópula gaussiana y la crisis de 2008.
Fuentes
- D. H. Bailey y M. López de Prado (2014), «The Deflated Sharpe Ratio: Correcting for Selection Bias, Backtest Overfitting and Non-Normality», The Journal of Portfolio Management.
- D. H. Bailey, J. Borwein, M. López de Prado y Q. J. Zhu (2014), «Pseudo-Mathematics and Financial Charlatanism: The Effects of Backtest Overfitting on Out-of-Sample Performance», Notices of the AMS.