R

RetailAI — MLOps Pipeline Dashboard

Modelo de Predicción de Demanda · LightGBM · Apache Airflow + MLflow + Cloud Run

Pipeline Activo Canary v3.2 GCP Madrid
MAPE actual (prod)
8.7%
Umbral crítico: 15%
▼ 1.2pp vs semana anterior
Duración pipeline
1h 47m
Límite SLA: 2h
▼ 13m vs run anterior
Latencia p99
142ms
SLO: < 200ms
OK · 29% margen
Experimentos semana
24
4 superan baseline
▲ 3 nuevos hoy
Drift score (PSI)
0.08
Umbral alerta: 0.20
Estable · sin alerta
DAG Airflow — Pipeline Demand Forecasting (último run: lunes 09:00)
09:00 Trigger
09:04 Ingestión ✓
09:22 Features ✓
10:01 Training ✓
10:14 Validación ✓
10:47 Canary ⟳
Rollout
1. data_ingestion_bq BigQuery + DVC
Extrae ventas diarias de retail_ventas_diarias (180 tiendas × 8.420 SKUs). Versiona dataset con DVC → GCS.
Filas: 2.847.340 Dataset: retail-v20260616 Tiempo: 18m 22s Estado: SUCCESS
2. data_validation Great Expectations
18 expectativas: nulos <0.5%, rango precios [0.10-999€], fechas continuas. Genera Data Docs HTML.
Checks: 18/18 ✓ Nulos: 0.09% Anomalías: 0 Tiempo: 4m 11s
3. feature_engineering Spark + Featurestore
Genera 47 features: lags 7/14/28d, rolling_mean_7d, day_of_week, semana_festiva, precio_medio_semana_categoria.
Features: 47 Train: 80% Val: 10% Test: últimas 4sem
4. model_training LightGBM + MLflow
Entrena LightGBM con Optuna (50 trials). Loguea params, métricas y artefactos en MLflow. Registra mejor modelo.
Trials: 50 Optuna Best MAPE val: 9.1% Run ID: a4f7c9e2 Tiempo: 39m 05s
5a. model_validation MLflow
MAPE test holdout 8.7% < umbral 12%. Supera baseline prod (9.9%). Aprobado para canary.
MAPE: 8.7% vs Prod: -1.2pp
5b. regression_check pytest
12 tests de regresión: latencia, shapes, tipos, valores extremos. Genera performance report.
Tests: 12/12 ✓ Latencia media: 87ms
6. canary_deployment Cloud Run + KServe
Desplegando v3.2 en 10% de tráfico. Monitoreo 24h. Auto-rollout si MAPE prod <15%. Auto-rollback si >15%.
Tráfico canary: 10% MAPE canary: 8.4% Ventana: 24h Estado: RUNNING
7. full_rollout + monitoring_setup Slack · Grafana
Rollout 100% · Configura alertas drift PSI >0.20 · Activa monitoreo MAPE rolling 7d en Grafana
Estado: PENDING (esperando canary 24h)
Canary saludable — v3.2 lleva 47min en producción (10% tráfico). MAPE observado 8.4%, por debajo del umbral crítico de 15%. Rollout completo programado para mañana 10:47 si métricas se mantienen estables.
{ }
DAG — Airflow definition (extracto)
# dags/demand_forecasting_pipeline.py from airflow.decorators import dag, task from pendulum import datetime @dag(schedule="0 9 * * 1", start_date=datetime(2026,1,1), catchup=False, tags=["mlops","demand"]) def demand_forecasting_pipeline(): @task def ingest_from_bq(): client = BigQueryHook().get_client() df = client.query(BQ_QUERY).to_df() dvc_push(df, version=today()) return {"rows": len(df)} @task def validate_data(meta): suite = ge.load_suite("retail_suite") result = suite.validate(df) if not result.success: raise DataQualityError(result) ## … train → validate → canary_deploy meta = ingest_from_bq() val = validate_data(meta) feats= feature_engineering(val) run = train_model(feats) ok = validate_model(run) canary_deploy(ok)
Despliegue Canary — v3.2 en curso
Distribución de tráfico actual
v3.1 prod — 90% (162 tiendas) v3.2 canary — 10% (18 tiendas)
Fases de rollout
Fase 0 — Shadow
0% tráfico real · validación técnica
✓ OK
Fase 1 — Canary 10%
18 tiendas · MAPE: 8.4% · 47min activo
⟳ activo
Fase 2 — Canary 50%
90 tiendas · espera métricas 12h
pendiente
Fase 3 — Full Rollout 100%
180 tiendas · mañana 10:47 (estimado)
pendiente
Rollback automático configurado: si MAPE supera 15% en ventana 24h, Cloud Run revierte a v3.1 sin intervención manual. Slack #mlops-alerts notificará al equipo.
Monitoreo en producción — semana actual
📊
MAPE rolling 7d
8.7% · umbral: 15%
OK
🌊
Data drift (PSI ventas)
PSI: 0.08 · umbral: 0.20
OK
Latencia p99 serving
142ms · SLO: 200ms
OK
📈
Throughput (req/min)
847 req/min · pico: 1.2k
OK
🔥
Feature drift — precio_semana
PSI: 0.14 · monitorear
WATCH
MAPE diario — últimas 2 semanas
Jun 2Jun 9Jun 16
Mejora sostenida: MAPE bajó 1.4pp en 2 semanas tras optimización de features calendario. Próximo review: Jun 23.