Data Engineer
ML Engineer
04-06-2025
Completado
Python
Quix
Redpanda
Docker
Plotly
scikit-learn
Streamlit
pandas
README.md

📈 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.

Visualizador Streamlit

Componentes Principales

  • /producer: Simula el envío de datos históricos al tópico stocks en Quix.
  • /anomalydetector: Consume datos del tópico stocks, aplica un enfoque de detección de anomalías en conjunto (ensemble) y envía los resultados al tópico anomalies. 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:

CampoDescripción
ts_recvTimestamp de recepción del mensaje
ts_eventTimestamp del evento de trade
rtypeTipo de registro (ej. 02 para trades)
publisher_idIdentificador del publicador de datos
instrument_idIdentificador del instrumento financiero (ej. NVDA)
actionAcción realizada (ej. T para trade)
sideLado del trade (A=Ask, B=Bid, N=None/Neutral)
depthNivel de profundidad del libro de órdenes
pricePrecio de ejecución del trade
sizeVolumen del trade
flagsBanderas adicionales
ts_in_deltaDiferencia de tiempo
sequenceNúmero de secuencia del mensaje
symbolSí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 y current_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 promedio
  • price_momentum y volume_momentum: Cambio porcentual respecto al inicio de la ventana
  • ask_ratio y bid_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

  1. Ventana Deslizante: Entrenamiento y evaluación continua
  2. Reentrenamiento Adaptativo: Cada 500 muestras con datos recientes
  3. Escalado de Features: StandardScaler para contribución equitativa
  4. 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:

ComponentePesoDescripción
Anomaly Score40%Score general de anomalía
Confidence20%Confianza de la detección
Z-Score Volumen25%Desviación en volumen
Z-Score Precio15%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.

Contenido sincronizado automáticamente desde GitHub