Construín unha plataforma que adestra 72 modelos de machine learning (aprendizaxe automática) para predicir a dirección do S&P 500. Executa un pipeline de datos diario, readestra cada modelo unha vez ao mes e fai backtest (simulación retrospectiva con datos históricos) de cada predición con custos de transacción reais. Está despregada en produción e podes usala agora mesmo.
Ningún dos modelos superou o baseline.
Publico ese resultado en vez de escondelo, porque o camiño até chegar aí é máis interesante que calquera cifra que puidese ter presentado se tivesen funcionado.
Que é en realidade "o baseline"
O baseline (modelo de referencia) é deliberadamente parvo. Ignora todas as variables — cada medida de volatilidade, cada indicador de momentum, cada variable macro — e sempre predí a rendibilidade media observada durante o adestramento.
Soa trivial de superar. Non o é, por unha razón: o mercado bolsista sobe. Dos 6,641 días de negociación do meu conxunto de datos, o 54.1% pecharon en positivo. Un modelo que sempre predí "sobe" e non mira nada acerta o 54% das veces antes sequera de empezar.
Na práctica, predicir sempre unha rendibilidade media positiva equivale a manter unha posición longa de forma permanente. Así que o baseline é, en efecto, comprar e manter (buy and hold) — de aí o título deste artigo —, aínda que o seu nome técnico no código sexa baseline_mean.
Así de esixente é ese listón, medido en Sharpe ratio (ratio de rendibilidade axustada ao risco):
| Frecuencia de adestramento | 1 período adiante | 5 períodos | 21 períodos |
|---|---|---|---|
| Diaria | 0.721 | 0.781 | 0.797 |
| Semanal | 1.620 | 1.724 | 2.168 |
| Mensual | 3.825 | 4.653 | — |
O Sharpe ratio mide a rendibilidade por unidade de risco: canto gañaches, dividido entre canto oscilou o valor da túa carteira mentres o gañabas, anualizado. Canto máis alto, mellor. Un Sharpe arredor de 1 considérase bo para unha estratexia real. Un Sharpe de 2 é moi bo.
Entón, por que o baseline mensual amosa 3.825? Porque case nunca opera. Toma unha posición ao mes e mantena nun índice que tende a subir co tempo. Poucas decisións, baixa volatilidade medida, exposición permanente a un mercado alcista. Esa cifra non é un sinal de habilidade: é un sinal de que a métrica premia non facer nada nun mercado que tende a subir. Calquera modelo que compita nese segmento ten que ser drasticamente mellor, non marxinalmente mellor, para xustificar a súa existencia.
Como se avaliaron os modelos
72 modelos significa nove algoritmos — regresión ridge e lasso, random forests, XGBoost, un ensemble de stacking, redes neuronais LSTM e GRU, e as súas variantes de clasificación — combinados con oito combinacións de frecuencia de adestramento e horizonte de predición.
O método de avaliación importa máis cós algoritmos, así que isto é o que fai:
Validación walk-forward (que respecta a orde temporal). Non se poden mesturar datos financeiros e dividilos ao chou. Se adestras con datos de 2020 e avalías con datos de 2015, o modelo viu o futuro. Por iso os datos avanzan no tempo: adéstrase cun bloque temperán, avalíase co bloque inmediatamente posterior, desprázase cara adiante e repítese. Cada período de avaliación é estritamente posterior aos datos de adestramento que produciron a predición.
Un oco entre adestramento e avaliación. Cando predís a suma de rendibilidades dos próximos 21 días, o obxectivo do último día de adestramento solápase cos primeiros días do período de avaliación. Un modelo pode aprender dese solapamento sen que ninguén o note. Por iso a división forza un oco igual ao horizonte de predición.
Un fallo duro, non un aviso. Cada partición comproba que a última data de adestramento sexa estritamente anterior á primeira data de avaliación, e lanza un erro en tempo de execución se non o é. Non é un test unitario: é un invariante que se executa en produción. A fuga de información é a razón máis habitual pola que un backtest financeiro parece brillante e despois perde diñeiro, e quería que fose imposible despregalo por accidente, non só improbable.
Custos reais. Cada operación cárgase con 5 basis points (puntos básicos) de comisión e 2 basis points de slippage (diferenza entre o prezo esperado e o prezo real de execución) — un 0.07% por operación. Estes custos réstanse dentro do propio Sharpe ratio, así que unha estratexia que opera constantemente é penalizada por iso automaticamente. Asumir que se executa ao prezo medio é unha fantasía, mesmo para o ETF máis líquido do mundo.
Sen cherry-picking. Cando existen varias execucións de adestramento do mesmo modelo, o código escolle entre elas por tipo de execución e marca temporal — nunca pola puntuación out-of-sample (fóra da mostra de adestramento). Escoller a execución con mellor puntuación é a forma de enganarte a ti mesmo e acabar publicando ruído.
Nos 27 segmentos diarios que non son baseline, ningún modelo o superou.
Os dous que parecían funcionar
Dous segmentos si quedaron por diante:
| Segmento | Modelo | Sharpe | vs. baseline | R² out-of-sample |
|---|---|---|---|---|
| Semanal, 1 período | LSTM (parámetros por defecto) | 1.832 | +0.212 (+13%) | −0.038 |
| Mensual, 1 período | Clasificador de stacking | 3.904 | +0.079 (+2%) | — |
Unha mellora do 13% sobre o baseline grazas a unha rede neuronal soa a achado. Non o é, e hai dúas razóns.
O R² é negativo. O R² mide que parte da variación do resultado explica o teu modelo. Cero significa que non o fas mellor que predicir sempre a media. Negativo significa que o fas peor que predicir sempre a media. Así que esta LSTM predí a magnitude das rendibilidades semanais peor que unha constante, aínda que acerte a dirección con frecuencia abondo para producir un Sharpe decente. Esa é a sinatura dun modelo que capturou un lixeiro sesgo direccional e nada máis.
A mostra é diminuta. Son modelos semanais e mensuais, así que as fiestras out-of-sample conteñen entre 50 e 100 observacións aproximadamente. Non 50,000: cincuenta. Con tan poucos datos, un exceso do 2% ao 13% sobre un baseline é perfectamente compatible coa variación propia do mostraxe ao chou. Se lanzas unha moeda lixeiramente trucada cen veces, ás veces obterás unha racha que parece habilidade.
O caso mensual é aínda máis débil: unha vantaxe do 2% sobre un baseline cuxo Sharpe xa é 3.825, medida ao longo dunhas poucas ducias de meses.
Cando avalías 72 modelos, algúns parecerán bos por azar. Iso non é un defecto dos modelos: é aritmética. A resposta honesta é tratar unha pequena vantaxe sobre unha mostra pequena como ruído até que se demostre o contrario, non escribir unha nota de prensa sobre a túa rede neuronal.
A parte que ninguén publica
Este é o achado que máis me sorprendeu, e non ten nada que ver coa precisión preditiva.
Comprobei que producen realmente os modelos despregados, facendo que cada un xerase predicións sobre as últimas 252 observacións. Oito deles producen un único valor constante. Desviación típica cero. O mesmo número cada día, para sempre.
O peor caso: XGBoost, frecuencia diaria, horizonte de 21 días. O seu Sharpe out-of-sample aniñado era 0.606 — unha cifra de aspecto perfectamente respectable. Pero o modelo final, readestrado co conxunto de datos completo para o despregamento, colapsou. O seu parámetro de regularización L1 era abondo forte como para achatar cada árbore nunha soa folla ao ver os datos completos, aínda que non o fixera cos bloques de adestramento máis pequenos usados durante a validación.
Os modelos lasso fixeron o mesmo, por unha razón máis limpa: coa súa penalización axustada, todos os coeficientes van exactamente a cero co conxunto de datos completo. O modelo é, matematicamente, unha constante.
A lección é incómoda e merece dicirse sen rodeos: as métricas de validación out-of-sample non che din que fai o teu modelo despregado. O modelo que validas e o modelo que despregas adéstranse con cantidades de datos distintas, e esa diferenza abonda para cambiar o comportamento por completo. Comprobar se o artefacto final dexenera non é opcional. Só o descubrín porque fun buscalo.
Que significa todo isto?
Significa que a hipótese do mercado eficiente na súa forma débil se sostivo, que é a resposta aburrida e esperable. SPY está entre os instrumentos máis líquidos do planeta. As miñas variables son públicas: indicadores técnicos que calquera pode calcular, series macro que calquera pode descargar, sentimento de noticias dunha API pública. A idea de que uns poucos miles de filas de adestramento de datos públicos fosen revelar un patrón explotable no índice máis analizado do mundo nunca foi plausible.
A literatura avisa exactamente disto. A maioría dos backtests positivos en machine learning financeiro son artefactos do overfitting (sobreaxuste aos datos de adestramento) ou de probar moitas cousas e reportar a mellor. Un pipeline con illamento temporal axeitado e contabilidade de custos honesta produce o resultado que predí a teoría, e o meu fíxoo.
Iso non é un proxecto fallido. O obxectivo nunca foi demostrar rendibilidades anómalas, senón construír unha infraestrutura capaz de medir a pregunta con honestidade e darche de verdade a resposta. Un sistema que informa "isto non funciona" vale máis que un que reporta unha cifra bonita que non podes reproducir.
A verdade incómoda sobre a maioría dos resultados de machine learning en finanzas non é que os modelos sexan malos. É que a avaliación o é.
STAIR é unha plataforma de investigación construída como traballo de fin de grao na Universidade da Coruña. Non constitúe asesoramento financeiro. Cada cifra deste artigo procede do rexistro de modelos do propio sistema e pode consultarse na plataforma.