Stack

Stack tecnológico

Cada fila es una elección concreta, no un default. La columna "dominio" es la misma paleta del diagrama de arquitectura — para ver de un vistazo qué corre en Python, qué es infraestructura pura y qué es Node.js.

ComponenteTecnologíaDominio
Feature store (offline)Feast + PostgresInfra
Feature store (online)Feast + RedisInfra
Catálogo de metadata de featuresTabla feature_metadata en PostgresInfra
Entrenamiento y trackingPython + XGBoost + MLflowPython
Registro de modelosMLflow Model RegistryPython
Formato de despliegue del modeloONNXPython
API de inferenciaNode.js / Fastify + onnxruntime-nodeNode.js
Métricas de servicioPrometheus (prom-client en Node)Monitoreo
Detección de driftEvidently (Python)Monitoreo
Dashboard de monitoreoNext.js + RechartsNode.js
Orquestación / infraestructuraDocker + Docker Compose (servidor propio)Infra

Algunas elecciones, con su porqué

XGBoost sobre LightGBM

Decidido sin necesitar una comparación empírica — en un dataset de ~6,800 filas, ambos darían calidad similar. Dos motivos concretos: su export a ONNX es más maduro (necesario para servir desde Node.js), y su soporte nativo de categóricas evita tener que decidir un encoding manual.

ONNX como formato de despliegue

Permite que el modelo entrenado en Python se sirva desdeonnxruntime-node sin depender de un runtime de Python en producción. Validado con la comparación real: diferencia absoluta máxima de 8.58e-06 entre las predicciones del modelo original y el exportado — muy por debajo de la tolerancia elegida (1e-3).

Postgres consultado directo por cada servicio que lo necesita

Feast, la API de inferencia y el dashboard se conectan cada uno directo a Postgres para lo que necesitan — sin una capa de indirección extra. La API de inferencia no se convierte en un gateway general de datos; queda enfocada en su trabajo real: servir predicciones.