Guía de Resolución de Problemas Comunes en Ingeniería de Software Estadístico
Esta guía es un runbook práctico para diagnosticar y resolver incidentes típicos en pipelines de datos, modelos y despliegues. Cada problema incluye síntomas, causas probables y pasos concretos de verificación y corrección.
Flujo general de diagnóstico
1. Problemas con Data Drift
1.1. Alerta de drift en feature crítica
Síntomas:
- Evidently / WhyLabs reporta Hellinger distance > 0.1 o PSI > 0.25 para una o más variables.
- El dashboard de monitoreo muestra cambio en la distribución de una feature.
Causas probables:
- Cambio en el sistema upstream (ej. nueva versión de API que modifica formato).
- Error en pipeline de transformación (ej. imputación incorrecta).
- Cambio estacional real en los datos (ej. comportamiento de clientes).
Diagrama de diagnóstico:
Pasos de diagnóstico:
- Comparar distribuciones visualmente
- Revisar logs de ingesta de datos
- Verificar fechas y ventanas temporales (point‑in‑time correctness)
Acciones correctivas:
- Drift estacional: ajustar umbrales o reentrenar con datos recientes.
- Error en pipeline: revertir cambio y reprocesar datos.
- Cambio upstream: contactar al equipo propietario y adaptar el contrato de datos.
2. Fallos en Validación de Datos (Contrato)
2.1. Contrato de datos falla en ingesta
Síntomas:
- Pipeline falla con error "Columnas faltantes: X" o "Tipo inesperado en columna Y".
- Log de auditoría registra
validation_status: failed.
Causas probables:
- Cambio de esquema en la fuente (nueva columna, cambio de tipo, columna renombrada).
- Versión incorrecta del contrato.
- Problema de codificación o formato en el archivo fuente.
Diagrama de diagnóstico:
Pasos de diagnóstico:
- Obtener esquema real de los datos entrantes
- Comparar con el contrato esperado (
contracts/data_contract.yaml):
- Columnas faltantes o extra.
- Tipos de datos (
objectvsstring,int64vsfloat64).
- Revisar el historial del contrato en Git
Acciones correctivas:
- Cambio legítimo: actualizar el contrato y versionarlo.
- Error temporal: rechazar el archivo y notificar al proveedor.
- Coerción de tipos automática (si es seguro): implementar y registrar advertencia.
3. Degradación del Rendimiento del Modelo
3.1. AUC / precisión cae por debajo del umbral
Síntomas:
- Métricas de rendimiento (ground truth diferido) caen >5% respecto al champion.
- Aumento de falsos positivos o falsos negativos en el dashboard.
Causas probables:
- Concept drift (cambio en la relación features → target).
- Data drift no detectado previamente.
- Error en la obtención de ground truth (etiquetas incorrectas o atrasadas).
Diagrama de diagnóstico:
Pasos de diagnóstico:
- Comparar curvas de rendimiento por cohorte temporal
- Analizar matriz de confusión reciente
- Revisar si el problema es global o solo en un segmento (ej. caída solo en una región).
Acciones correctivas:
- Concept drift: reentrenar con datos más recientes.
- Segmento específico: modelo específico o añadir nuevas features.
- Error en etiquetas: corregir pipeline de anotación y regenerar ground truth.
4. Problemas en Despliegue o Rollback
4.1. El nuevo modelo no recibe tráfico después del canary
Síntomas:
canaryTrafficPercent> 0 pero todas las solicitudes van al champion.- El endpoint del canary no aparece en los logs de acceso.
Causas probables:
- Error en configuración de KServe / Istio (virtual service mal definido).
- Contenedor del canary en crash loop.
- Versión del modelo no existe en el storage URI.
Diagrama de diagnóstico:
Pasos de diagnóstico:
- Verificar el estado del InferenceService
- Revisar logs del pod canary
- Probar el endpoint del canary directamente (port‑forward)
Acciones correctivas:
- Corregir
storageUrio definición del virtual service. - Reconstruir imagen si faltan dependencias.
- Temporalmente, poner
canaryTrafficPercent=0y depurar en staging.
5. Fallos en Feature Store (Feast)
5.1. Materialización falla (offline → online)
Síntomas:
- Job de materialización (Airflow) falla con error de conexión a Redis o BigQuery.
- Valores online desactualizados o ausentes.
Causas probables:
- Credenciales de base de datos expiradas.
- Timeout en consulta a offline store (dataset muy grande).
- Inconsistencia en el esquema de feature views.
Diagrama de diagnóstico:
Pasos de diagnóstico:
- Revisar logs del job de materialización
- Probar conexión a Redis
- Ejecutar la consulta SQL manualmente en BigQuery
Acciones correctivas:
- Rotar credenciales e inyectarlas mediante Vault.
- Particionar la materialización en rangos más pequeños (por horas).
- Actualizar la definición de feature view si el esquema cambió.
6. Problemas con Logs y Auditoría
6.1. No se encuentran logs de un incidente específico
Síntomas:
- El audit trail no contiene una predicción concreta.
- Logs rotos o incompletos.
Causas probables:
- Volumen de logs excedió la retención configurada.
- Error en la aplicación de logging (logger no inicializado).
- Log escrito en archivo local dentro de contenedor efímero.
Diagrama de diagnóstico:
Pasos de diagnóstico:
- Verificar que el logger está configurado para stdout
- Comprobar la política de retención de logs (ej. Loki, Elasticsearch).
- Buscar logs en el sistema de archivos del pod (si aún existe)
Acciones correctivas:
- Aumentar retención (ej. 30 días para logs de auditoría).
- Configurar la aplicación para escribir logs en stdout y que un recolector (Fluentd, Logstash) los envíe a almacenamiento central.
- Implementar logging estructurado con
trace_idpara correlacionar eventos.
7. Checklist de Diagnóstico Rápido
| Síntoma | Primer comando / acción |
|---|---|
| Alerta de drift | kubectl logs -n monitoring drift-detector |
| Fallo en ingesta de datos | cat audit/data_ingestion.log | tail -50 |
| Modelo lento en inferencia | kubectl top pod -l app=model |
| No se actualiza el alias champion | mlflow models get-version --model-name X --version Y |
| Feast materialization timeout | kubectl logs -n feast job-xxxx | grep "timeout" |
| Error de conexión a base de datos | kubectl exec -it pod-name -- nc -zv db-host 5432 |
| Rollback no funciona | Verificar que el alias @champion apunta a la versión correcta: mlflow models get-versions --model-name X |
8. Recursos y enlaces útiles
| Herramienta / Tema | Enlace de referencia |
|---|---|
| Evidently AI (drift) | Documentación oficial |
| Great Expectations (contratos) | Great Expectations Docs |
| MLflow (model registry) | MLflow Tracking |
| KServe (canary deployments) | KServe Documentation |
| Feast (feature store) | Feast Troubleshooting |
| OpenTelemetry (logging) | OpenTelemetry Logs |
| Prometheus (alertas) | Prometheus Alerting |
| HashiCorp Vault (secretos) | Vault Documentation |
Buenas Prácticas para Dashboards Analíticos en R/Shiny
Documentos relacionados
- Getting Started: configuración inicial y primer modelo, base para entender los errores comunes.
- Monitoreo de Modelos en Producción: alertas y métricas que diagnostican problemas en producción.
- Estrategia de Rollback de Modelos: solución de último recurso cuando el troubleshooting no es suficiente.
- Pruebas de Integración para Modelos Estadísticos: tests que previenen los problemas descritos en esta guía.