1. 1Datos crudos
  2. 2Features
  3. 3Baseline model
  4. 4Infra core
  5. 5Feature store
  6. 6Modelo definitivo
  7. 7API de inferencia
  8. 8Monitoreo
  9. 9Dashboard
  10. 10Drift real

Pipeline · 8 de 10

Monitoreo

Zoom sobre Evidently y Prometheus, leyendo de Postgres y de la API
Dos observadores distintos del mismo sistema: Prometheus mira la API en vivo, Evidently compara contra lo que ya está guardado en Postgres.

Con la API sirviendo tráfico real, dos preguntas separadas necesitan dos herramientas separadas: ¿la infraestructura está sana? ¿los datos que le llegan al modelo siguen pareciéndose a los de entrenamiento?

Infra

Prometheus + prom-client

prom-client en Node expone /metrics: un histograma de duración (http_request_duration_seconds) y un contador de requests (http_requests_total), ambos etiquetados por método, ruta y status code — la tasa de error es derivable del label sin un contador aparte. Prometheus (prom/prometheus:v3.6.0) scrapea ese endpoint. Verificado con tráfico real generado a propósito, no solo con el healthcheck del contenedor.

Librería

Evidently

Compara la distribución de district/surface/property_type en features (entrenamiento) contra prediction_logs (tráfico reciente) — un reporte HTML por operation_type, guardado en su formato nativo, sin una capa nueva de parseo. “Periódico” acá significa invocable a mano (python3 ml/monitoring/drift_report.py), no un contenedor de cron nuevo — demostrar el mecanismo primero, agregar scheduling después si hace falta.

Un bug de entorno real antes de que esto corriera: import evidently fallaba con Blocked import of regex from current working directory — un hook de seguridad de NLTK (dependencia transitiva de Evidently) que bloquea cualquier import cuyo archivo resuelto viva bajo el directorio de trabajo actual. Como el .venv del proyecto vive dentro del repo, su propio paquete regex daba falso positivo. Confirmado leyendo el código fuente de la librería, no adivinado — la variable de escape (NLTK_DISABLE_IMPORT_SECURITY=1) se fija al inicio del script antes de importar evidently.

El drift interesante — 2020 contra el mercado real de hoy — es justamente el contenido de la última parada del pipeline: Drift real.

Artefactos de este paso

ArtefactoTipoQué es
api/src/metrics.jsCódigoRegistry, Histogram (http_request_duration_seconds) y Counter (http_requests_total) de prom-client.
infra/prometheus/prometheus.ymlConfigJob de scrape apuntando al /metrics de la API.
ml/monitoring/drift_report.pyScriptCompara features (entrenamiento) contra prediction_logs (tráfico reciente), un reporte por operation_type.
data/processed/drift_reports/{venta,alquiler}_drift.htmlReporteSalida nativa de Evidently — gitignored, se regenera corriendo el script.