📈 NVIDIA Anomaly Detector
Este proyecto simula un sistema avanzado de detección de anomalías en datos financieros de acciones, utilizando la plataforma de streaming Quix, potentes modelos de machine learning de scikit-learn, y una visualización interactiva con Streamlit para análisis en tiempo real.
Componentes Principales
/producer
: Simula el envío de datos históricos al tópicostocks
en Quix./anomalydetector
: Consume datos del tópicostocks
, aplica un enfoque de detección de anomalías en conjunto (ensemble) y envía los resultados al tópicoanomalies
. Lógica para el entrenamiento y reentrenamiento de modelos de machine learning./visualizer
: Interfaz construida con Streamlit para el monitoreo en tiempo real de anomalías.
📦 Datos de Entrada
Los datos originales son registros de trades de NASDAQ, descargados desde Databento. Estos datos corresponden a los últimos 30 días de operaciones del mercado accionario y contienen información detallada como:
Campo | Descripción |
---|---|
ts_recv | Timestamp de recepción del mensaje |
ts_event | Timestamp del evento de trade |
rtype | Tipo de registro (ej. 02 para trades) |
publisher_id | Identificador del publicador de datos |
instrument_id | Identificador del instrumento financiero (ej. NVDA) |
action | Acción realizada (ej. T para trade) |
side | Lado del trade (A=Ask, B=Bid, N=None/Neutral) |
depth | Nivel de profundidad del libro de órdenes |
price | Precio de ejecución del trade |
size | Volumen del trade |
flags | Banderas adicionales |
ts_in_delta | Diferencia de tiempo |
sequence | Número de secuencia del mensaje |
symbol | Símbolo del ticker (ej. NVDA) |
Volumen de datos: ~216,000 registros procesados secuencialmente para simular un flujo en tiempo real.
🛠️ Ingeniería de Features
Antes de la detección, los datos de los trades brutos son transformados y enriquecidos a través de un meticuloso proceso de ingeniería de features. Para cada trade en una ventana deslizante de 100 trades, se calculan las siguientes características:
Features Básicos
current_price
ycurrent_size
: Precio y volumen del trade actual
Estadísticas de Ventana
- Precios:
price_mean
,price_std
,price_min
,price_max
,price_range
- Volúmenes:
volume_mean
,volume_std
,volume_total
- Actividad:
trade_count
,trades_per_second
,avg_time_between_trades
Indicadores Avanzados
price_volatility
: Desviación estándar del precio normalizada por el precio promedioprice_momentum
yvolume_momentum
: Cambio porcentual respecto al inicio de la ventanaask_ratio
ybid_ratio
: Proporción de trades por lado, indicando desequilibrio de oferta/demanda
⚙️ Productor (Producer)
El /producer
publica datos históricos enriquecidos con features al tópico stocks
de Quix. Simula un flujo de datos en tiempo real, procesando registros con un pequeño retardo para imitar la latencia del mercado.
🧠 Consumidor (Consumer)
El /anomalydetection
implementa un robusto sistema de detección de anomalías que combina múltiples algoritmos y lógica estadística mediante un enfoque de conjunto (ensemble).
Modelos de Detección
1. Isolation Forest
- Aísla anomalías mediante particiones mínimas
- Eficaz en espacios de alta dimensión
- Adaptado para datos en streaming
2. Elliptic Envelope
- Asume distribución gaussiana de datos normales
- Ajusta un "sobre" elíptico a datos centrales
- Detecta anomalías basadas en densidad
3. Detección por Z-score
- Calcula Z-score para features críticos (precio, volumen, volatilidad)
- Umbral: >4-5 desviaciones estándar según el feature
Proceso de Detección
- Ventana Deslizante: Entrenamiento y evaluación continua
- Reentrenamiento Adaptativo: Cada 500 muestras con datos recientes
- Escalado de Features: StandardScaler para contribución equitativa
- Votación por Consenso: Anomalía confirmada por ≥2 de 3 métodos
Los registros anómalos son enviados al tópico anomalies
con sus scores e información original.
📊 Visualizador (Streamlit)
La aplicación /visualizer
proporciona una interfaz amigable para visualizar anomalías en tiempo real.
Características Principales
- Consumo en vivo desde el tópico
anomalies
- Panel de métricas clave:
- Total de anomalías detectadas
- Severidad promedio y máxima
- Conteo de anomalías críticas
- Distribución por lado (Ask/Bid)
- Buffer circular de hasta 1000 registros
- Registro de errores en la UI para depuración
🔍 Clasificación de Severidad
El sistema calcula una severidad compuesta para cada anomalía utilizando ponderaciones específicas:
Componente | Peso | Descripción |
---|---|---|
Anomaly Score | 40% | Score general de anomalía |
Confidence | 20% | Confianza de la detección |
Z-Score Volumen | 25% | Desviación en volumen |
Z-Score Precio | 15% | Desviación en precio |
Niveles de Severidad
- 🔴 Crítica: >0.8
- 🟠 Alta: >0.6
- 🟡 Media: >0.4
- 🟢 Baja: ≤0.4
📚 Tecnologías Utilizadas
- Quix: Plataforma de streaming para comunicación escalable entre microservicios
- Redpanda: Plataforma de streaming de datos compatible con Kafka, diseñada para alto rendimiento y baja latencia
- scikit-learn: Modelos de machine learning para detección de anomalías
- pandas: Manipulación y análisis numérico de datos
- Streamlit: Framework para dashboards interactivos y visualizaciones
- Plotly: Gráficas interactivas
- Databento: Fuente de datos de mercado financiero de alta calidad
🎯 Objetivo
Este proyecto demuestra un pipeline de detección de anomalías multicanal, altamente adaptativo y aplicado a mercados financieros. Emula condiciones reales, desde la ingestión de datos y la ingeniería de features hasta la detección inteligente y la interpretación visual en tiempo real.
🚀 Características Destacadas
- Detección en tiempo real con baja latencia
- Modelos adaptativos que evolucionan con el mercado
- Reducción de falsos positivos mediante votación por consenso
- Visualización interactiva para análisis inmediato
Desarrollado para demostrar capacidades avanzadas de detección de anomalías en mercados financieros utilizando tecnologías modernas de streaming y machine learning.