Analítica y visualización
"Los datos crudos no toman decisiones. Los gráficos bien diseñados sí."
Qué vas a aprender en este capítulo
Construimos pipelines, almacenamos datos, los procesamos. Pero todo eso es para una sola cosa: tomar mejores decisiones. Este capítulo cubre cómo: BI, dashboards, KPIs, y las bases de ML en producción.
5.1 KPIs y métricas que importan
💡 Intuición
Los datos por sí solos son ruido. Los KPIs (Key Performance Indicators) son las métricas que realmente determinan si el negocio está funcionando.
Una empresa con 50 dashboards y 200 métricas suele tener menos claridad que una con 5 KPIs claros y 1 dashboard ejecutivo bien diseñado.
📐 Fundamento
Tipos de métricas:
| Tipo | Pregunta | Ejemplo |
|---|---|---|
| Vanity metric | "¿Suena bien?" | Número total de usuarios registrados |
| Actionable metric | "¿Te dice qué hacer?" | DAU/MAU ratio, conversion rate por canal |
KPIs típicos por tipo de negocio:
E-commerce / SaaS:
- MRR (Monthly Recurring Revenue).
- CAC (Customer Acquisition Cost).
- LTV (Customer Lifetime Value).
- Churn rate (% que cancela cada mes).
- NPS (Net Promoter Score).
- DAU/MAU (Daily Active Users / Monthly Active Users).
La Esquina Cloud (delivery):
| KPI | Cálculo | Por qué importa |
|---|---|---|
| Tiempo promedio de entrega | AVG(fecha_entrega - fecha_pedido) | Satisfacción del cliente |
| Tasa de cancelación | cancelados / total | Operacional |
| Ticket promedio | revenue / num_pedidos | Estrategia de pricing |
| Conversion rate (visita → pedido) | pedidos / sesiones | Eficacia del funnel |
| Repeat customer rate | clientes_recurrentes / total_clientes | Retención |
| Hora pico vs valle | pedidos_hora_pico / pedidos_hora_valle | Staffing |
| Margen por platillo | (precio - costo) / precio | Rentabilidad |
North Star Metric:
Una métrica única que captura el valor que tu producto entrega.
- Spotify: tiempo escuchado.
- Airbnb: noches reservadas.
- La Esquina Cloud: pedidos completados con éxito.
Toda la organización se alinea en torno a mover esa métrica.
Funnel analysis — el viaje del usuario:
Visitas al sitio: 100,000
↓ 30% conversion
Carrito creado: 30,000
↓ 60% conversion
Iniciar checkout: 18,000
↓ 80% conversion
Pedido completado: 14,400
Tasa de conversión total: 14.4%
Mayor caída: visitas → carrito (70% pérdida)
→ Ahí está la oportunidad de mejora
5.2 Dashboards efectivos
📐 Fundamento
Principios (Edward Tufte, Stephen Few):
- Maximizar el data-ink ratio: quitar todo lo decorativo (fondos, sombras, gradientes innecesarios).
- El gráfico correcto para el dato correcto.
- No usar 3D (distorsiona percepción).
- Usar color con propósito, no decoración.
- Permitir comparación (mismo eje, mismo scaling).
Elegir el gráfico correcto:
| Quiero mostrar... | Usar |
|---|---|
| Tendencia en el tiempo | Línea |
| Composición (% de un total) | Barras apiladas (NO pie) |
| Comparación entre categorías | Barras horizontales |
| Distribución | Histograma, box plot |
| Relación entre 2 variables | Scatter plot |
| Geográfico | Mapa |
| KPI individual destacado | Big number con sparkline |
Gráficos a evitar:
- Pie charts con > 5 categorías — el ojo no compara ángulos bien.
- 3D anything — sesga la percepción.
- Gradientes y sombras — solo distraen.
- Demasiados colores — usar máx 4-5.
Layout de un dashboard ejecutivo:
┌─────────────────────────────────────────────────┐
│ Título • Período: Mayo 2026 • [Filtros] │
├──────────┬──────────┬──────────┬────────────────┤
│ KPI 1 │ KPI 2 │ KPI 3 │ KPI 4 │ ← Big numbers
│ $50K │ 1,240 │ 18.5min │ 4.7/5 │
│ ↑ +12% │ ↓ -3% │ ↓ -2min │ ↑ +0.2 │
├──────────┴──────────┴──────────┴────────────────┤
│ [Gráfico principal: tendencia 30 días] │ ← Story principal
├──────────────────────┬──────────────────────────┤
│ [Top platillos] │ [Mapa de zonas] │ ← Detalles
└──────────────────────┴──────────────────────────┘
5.3 Herramientas de BI
📐 Fundamento
Comparación de plataformas BI:
| Tool | Tipo | Pros | Cons |
|---|---|---|---|
| Tableau | Comercial | Muy poderoso, drag-and-drop | Caro, curva de aprendizaje |
| Looker | Comercial (Google) | LookML para modelado, embedded | Caro |
| Power BI | Comercial (Microsoft) | Integración Office, asequible | Mejor en stack Microsoft |
| Metabase | Open source | Setup en minutos, UI amigable | Menos features avanzados |
| Superset | Open source (Apache) | Muy customizable | Más técnico |
| Grafana | Open source | Excelente para métricas/series tiempo | No para BI tradicional |
Setup de Metabase:
# Docker quick start
docker run -d -p 3000:3000 \
-v metabase-data:/metabase.db \
--name metabase metabase/metabase
Después: ir a http://localhost:3000, conectar a tu warehouse (PostgreSQL, BigQuery, etc.), y empezar a crear dashboards arrastrando.
Embedded analytics:
En lugar de un dashboard separado, embeber gráficos dentro de tu propia app.
// Embeber un dashboard de Metabase en tu app
import jwt from 'jsonwebtoken';
const payload = {
resource: { dashboard: 1 },
params: { user_id: currentUser.id }
};
const token = jwt.sign(payload, METABASE_SECRET, { expiresIn: '10m' });
const url = `https://metabase.la-esquina.com/embed/dashboard/${token}#bordered=true&titled=false`;
return <iframe src={url} width="100%" height="600" />;
Metabase, Looker, Mode, Holistics — todos soportan embedding.
5.4 Storytelling con datos
📐 Fundamento
Un dashboard no es para "mostrar datos" — es para contar una historia.
Estructura típica de presentación de datos:
- Contexto: ¿de qué hablamos? Período, métrica.
- Resultado: ¿qué pasó? Magnitud y dirección del cambio.
- Comparación: ¿vs qué? Mes pasado, año pasado, objetivo.
- Causa: ¿por qué? Drill-down a las dimensiones que explican.
- Acción: ¿qué hacemos? Recomendación concreta.
Ejemplo MAL:
"Las ventas en mayo fueron $50,000."
Ejemplo BIEN:
"Las ventas en mayo fueron $50,000, +12% vs abril y +25% vs mayo del año pasado, superando el objetivo del trimestre. El crecimiento vino principalmente de la categoría 'pupusas especiales' (+45% YoY) impulsada por la campaña de Día de la Madre. Recomendación: repetir la campaña en septiembre para Día del Padre."
Pirámide invertida (técnica de periodismo):
Conclusión más importante ← arriba (first impression)
↓
Datos de apoyo
↓
Detalles, metodología ← abajo (para quien quiera profundizar)
Anti-patrones comunes:
- Cherry picking: elegir el período/comparación que apoya tu narrativa preexistente.
- Eje truncado: el eje Y empieza en 50 en lugar de 0 → exagera diferencias.
- Correlation = causation: "las ventas subieron cuando lanzamos X" — pero hubo 5 cosas más que cambiaron.
- Sin baseline: "1000 usuarios nuevos" — ¿es bueno o malo? Sin contexto no significa nada.
5.5 ML en producción — MLOps
📐 Fundamento
Ciclo de vida de un modelo ML:
[Datos]
↓
[Feature engineering]
↓
[Training]
↓
[Evaluación] ← Modelo entrenado
↓
[Deploy] ← API que sirve predicciones
↓
[Monitoreo]
↓
[Retraining] ← cuando degrada
↺
MLOps = DevOps + ML:
Aplicar prácticas de DevOps (CI/CD, IaC, monitoreo) al ML.
Componentes típicos:
| Componente | Herramientas |
|---|---|
| Feature Store | Feast, Tecton, Sagemaker Feature Store |
| Experiment Tracking | MLflow, Weights & Biases |
| Model Registry | MLflow, Sagemaker |
| Training Pipeline | Kubeflow, Sagemaker Pipelines, Vertex AI |
| Serving | Sagemaker Endpoints, TorchServe, Triton |
| Monitoring | Arize, Fiddler, Evidently |
Patrón: Feature Store:
Centraliza los features para que sean consistentes entre training y serving.
# Definir feature
@on_demand_feature_view(...)
def hora_del_dia():
return ...
# Training: leer del feature store
training_df = feature_store.get_historical_features(...).to_df()
modelo.fit(training_df)
# Serving: leer del mismo feature store
features = feature_store.get_online_features(...)
prediccion = modelo.predict(features)
Sin feature store: training usa una versión, serving otra → "training-serving skew" → modelo da resultados peores en producción.
Drift detection — el modelo se degrada:
# Comparar la distribución de features en producción vs training
from scipy.stats import ks_2samp
stat, p_value = ks_2samp(features_training, features_production)
if p_value < 0.05:
alert("Distribution shift detected: retrain model")
Causas comunes de degradación:
- Data drift: la distribución de inputs cambió (nuevos comportamientos de clientes).
- Concept drift: la relación input → output cambió (cambió el contexto del negocio).
- Adversarial drift: atacantes adaptan su comportamiento.
🛠️ En la práctica
La Esquina Cloud — modelo de predicción de demanda:
# 1. Feature engineering (en dbt o Spark)
# Por hora y por local: pedidos historicos, día de la semana, feriados, clima
# 2. Training
import xgboost as xgb
import mlflow
with mlflow.start_run():
modelo = xgb.XGBRegressor(n_estimators=500, max_depth=6)
modelo.fit(X_train, y_train)
# Loggear hiperparámetros, métricas, modelo
mlflow.log_params(modelo.get_params())
mlflow.log_metric("mae", mae(y_test, modelo.predict(X_test)))
mlflow.xgboost.log_model(modelo, "modelo_demanda")
# 3. Promote a producción
mlflow.register_model(
f"runs:/{run_id}/modelo_demanda",
"demanda_local_hora"
)
# 4. Serving (FastAPI)
@app.get("/predecir/demanda")
def predecir(local_id: int, hora_objetivo: datetime):
features = feature_store.get_online_features(
entity_rows=[{"local_id": local_id, "hora": hora_objetivo}]
)
prediccion = modelo.predict(features)
return {"pedidos_estimados": int(prediccion[0])}
# 5. Monitoreo continuo
@app.middleware("http")
async def log_predictions(request, call_next):
response = await call_next(request)
if request.url.path == "/predecir/demanda":
# Loggear input y output a una BD para análisis posterior
log_to_warehouse({...})
return response
# 6. Retraining automático con Airflow (mensual)
# DAG que: extrae datos nuevos, retrainea, evalua, si mejora → promueve a producción
5.6 Cierre del libro
Este libro recorrió el ecosistema de Big Data y Analítica:
- Fundamentos — las 5 V's, OLTP vs OLAP, modern data stack.
- Hadoop y Spark — procesamiento distribuido masivo.
- Data Warehouses y Lakes — modelado dimensional, dbt, BigQuery/Snowflake.
- Streaming y Kafka — datos en tiempo real, ventanas, exactly-once.
- Analítica y visualización — KPIs, dashboards, MLOps.
La habilidad de extraer valor de los datos a escala es una de las capacidades más valoradas hoy. Las empresas que saben hacerlo dominan; las que no, son commodities.
5.7 Ejercicios
✏️ Ejercicio 5.1 — Diseñar dashboard ejecutivo
Diseñá el dashboard ejecutivo principal para el dueño de La Esquina Cloud. Tiene 30 segundos para revisarlo cada mañana.
Incluí:
- Los 4 KPIs más importantes (con comparaciones).
- 1 gráfico principal (¿qué historia cuenta?).
- 2 detalles secundarios.
- Una "alerta" si algo está mal.
Solución
Header:
- Título: "La Esquina Cloud — Mayo 2026"
- Filtros: período (default: últimos 30 días), local (default: todos)
4 KPIs (big numbers con comparación):
| KPI | Valor | Cambio |
|---|---|---|
| Ingresos | $128,540 | ↑ +18% vs mes anterior |
| Pedidos completados | 8,420 | ↑ +12% vs mes anterior |
| Tiempo promedio de entrega | 22 min | ↓ -3 min vs objetivo |
| NPS | 47 | ↑ +5 puntos |
Gráfico principal: Línea de "ingresos diarios últimos 30 días" con comparación con período anterior (sombreado). Cuenta la historia: tendencia de crecimiento sostenida.
Detalles secundarios:
- Top 5 platillos por ingresos (barras horizontales).
- Mapa de zonas de delivery con tiempo promedio (color heatmap).
Sección de alertas (visible si hay problemas):
🔴 "Tasa de cancelación en Zona Norte: 12% (objetivo < 5%). Investigar."
(Si no hay alertas, no mostrar la sección.)
Por qué este diseño funciona:
- 30 segundos suficientes: todo lo crítico se ve sin scroll.
- Comparaciones sin contexto = inútil: cada número trae su delta.
- Drill-down disponible: clic en cualquier KPI lleva a un dashboard más detallado.
- Alertas accionables: si hay rojo, el dueño sabe exactamente qué revisar.
5.8 Para profundizar
- Storytelling with Data — Cole Nussbaumer Knaflic.
- The Visual Display of Quantitative Information — Edward Tufte.
- MLOps Community — mlops.community.
- Lean Analytics — Alistair Croll.
5.X Mini-proyecto integrador
🏗️ Proyecto final — Pipeline de datos punta a punta
Alcance: construí un pipeline analítico completo para un dataset público (NYC Taxi, GitHub Archive, datos del Banco Mundial — todos gratis).
Entregables:
- Ingesta — descargar 1-10 GB en data lake (S3/MinIO local). Formato Parquet (cap. 1, cap. 3).
- Transformación — Spark notebook que agrega y enriquece (cap. 2).
- Modelo dimensional — fact + dimensiones en DuckDB o Postgres (cap. 3).
- Streaming opcional — Kafka local con un productor que simula nuevos eventos cada minuto (cap. 4).
- Dashboard — 3-5 KPIs con Metabase, Superset o Streamlit; al menos uno con drill-down (cap. 5).
- README con la arquitectura en una imagen + instrucciones para reproducirlo en otra máquina.
Criterio de éxito: un compañero clona el repo, corre make up, y ve el dashboard en menos de 15 minutos.
Tiempo estimado: 3-4 semanas. Es el proyecto más extenso de los 24 libros — y el que más se parece al trabajo de un Data Engineer junior.
Definiciones nuevas: KPI, vanity metric, actionable metric, North Star Metric, MRR, CAC, LTV, churn, DAU/MAU, funnel analysis, data-ink ratio, embedded analytics, MLOps, feature store, training-serving skew, data drift, concept drift, MLflow, Feast.