Detección de Volatilidad Anómala

Python PyTorch TFT FastAPI yfinance NumPy Quantile Regression Time Series Anomaly Detection
Detección de Volatilidad Anómala

Sobre el Proyecto

Sistema de detección de movimientos anómalos en activos financieros combinando un Temporal Fusion Transformer (TFT-lite) para predicción de volatilidad a 5 días y análisis de sentimiento de noticias con arquitectura FinBERT-inspired. Entrenado con datos reales históricos de Yahoo Finance (5 años, IBEX35 y principales acciones españolas).

Métricas de efectividad reales — F1, MCC y Calibración

Para detección de anomalías financieras, el accuracy clásico es el peor indicador posible: si el mercado es "normal" el 90% del tiempo, predecir siempre "normal" da 90% de accuracy sin detectar una sola anomalía. Las métricas correctas, calculadas sobre el conjunto de test real (1.245 observaciones de 5 tickers del IBEX35), son:

  • F1-score = 0.816: media armónica de Precisión y Recall. Un F1=0 sería peor que lanzar una moneda; F1=1 sería perfecto. Nuestro modelo alcanza 0.82 en detección de episodios de alta volatilidad.
  • MCC = 0.795 (Matthews Correlation Coefficient): la métrica más honesta para clases desbalanceadas. Un MCC≥0.7 se considera excelente. Tiene en cuenta los cuatro cuadrantes de la matriz de confusión (TP, FP, TN, FN) sin penalizar por desbalanceo.
  • Precision = 0.816: de las 125 alertas emitidas, 102 correspondían a episodios de alta volatilidad real. Solo 23 falsas alarmas.
  • Recall = 0.816: de los 125 episodios reales de volatilidad anómala, el modelo detectó 102. Perdió 23 (FNR=18.4%).
  • Tasa de falsos positivos = 2.1%: de los 1.120 días "normales", solo alertó incorrectamente en 23. Muy por debajo del 10% teórico del cuantil.

Calibración cuantílica

Verificada sobre datos reales: q10→9.9% (ideal 10%), q50→52.9% (ideal 50%), q90→91.5% (ideal 90%). Una calibración casi perfecta significa que las bandas de confianza son fiables y no están infladas artificialmente.

Arquitectura del Modelo

  • Variable Selection Network (VSN): aprende automáticamente qué features son relevantes en cada momento temporal.
  • LSTM (64 unidades, 2 capas): captura dependencias temporales de largo plazo en la volatilidad.
  • Multi-head Self-Attention (4 heads): identifica qué momentos del pasado son más relevantes para predecir el futuro.
  • Salida cuantílica: predice simultáneamente los cuantiles q10 (escenario optimista), q50 (mediana) y q90 (escenario pesimista) para cada uno de los 5 días del horizonte.
  • Datos reales: Yahoo Finance, 5 años histórico (2020-2025), 5 activos del IBEX35. 100% datos reales, 0 sintéticos.

Stack Técnico

Python 3.12 · PyTorch 2.10 · yfinance · FastAPI · NumPy · scikit-learn · Laravel (proxy HTTP)

Resultados

F1 = 0.82
F1-score (detección anomalías)
Medido en test real: Precision=0.82 · Recall=0.82. Solo 23 falsas alarmas de 125 episodios reales detectados
MCC = 0.80
Matthews Correlation Coefficient
MCC≥0.7 indica clasificador excelente incluso con clases desbalanceadas. FPR=2.1% · FNR=18.4%
≈ perfecto
Calibración cuantílica
q10: 9.9% (ideal 10%) · q50: 52.9% (ideal 50%) · q90: 91.5% (ideal 90%). Verificado en 1.245 obs. reales

Funcionalidades implementadas

  • Predicción cuantílica, no puntual. El modelo genera una banda de incertidumbre realista. Saber que la volatilidad estará entre 1.1% y 2.8% es más accionable que una cifra exacta incierta.
  • Detección automática de anomalías. Si la volatilidad real supera el cuantil q90, el sistema emite una alerta. No requiere umbrales manuales — el propio modelo define qué es "normal".
  • Fusión cuantitativa + cualitativa. El análisis de sentimiento de noticias complementa la predicción técnica. Movimientos bruscos suelen anticiparse en el lenguaje antes de reflejarse en el precio.
  • Arquitectura TFT con selección de variables. El Variable Selection Network aprende qué features son relevantes en cada momento (volatilidad realizada, día de la semana, ciclo mensual, etc.).
Try Live Demo View Code
🤖 Asistente Virtual