Pruebas de Integración para Modelos Estadísticos
1. Introducción
Después de entrenar un modelo y antes de desplegarlo en producción, es esencial ejecutar pruebas de integración que verifiquen:
- El artefacto del modelo (
.pkl,.rds, etc.) es válido y se puede cargar. - Las predicciones tienen el formato, tipo y rango esperados.
- El rendimiento no se ha degradado respecto a una versión anterior.
- El modelo maneja correctamente casos extremos (valores nulos, entradas parciales).
Estas pruebas actúan como un gate en el pipeline de CI/CD: si fallan, el modelo no se promociona a entornos superiores (staging → producción).
Diagrama de flujo general de las pruebas
2. Tipos de Pruebas de Integración para Modelos
| Tipo | Qué prueba | Cuándo falla | Ejemplo |
|---|---|---|---|
| Smoke test | El modelo se carga sin errores | No se puede leer el artefacto, clases/funciones faltan | model = mlflow.pyfunc.load_model(model_uri) |
| Formato de salida | Estructura esperada (shape, tipo, rangos) | Output no es lista/array, shape incorrecto, valores fuera de rango | assert prediction.shape == (batch_size, 1) |
| Consistencia | Misma entrada → misma salida (determinismo) | Ejecución repetida con misma entrada produce diferente salida | assert np.allclose(pred1, pred2) |
| Rendimiento | Métricas (AUC, RMSE, etc.) superan umbral mínimo en validación fija | Modelo es peor que un baseline simple | assert valid_auc > 0.75 |
| Integridad de características | No falla con datos faltantes (si el modelo imputa) | Lanza excepción por valores nulos no manejados | model.predict(df_with_nans) |
| Latencia (opcional) | Tiempo de inferencia dentro de límite | Predicción en batch pequeño tarda más de N ms | assert elapsed_seconds < 0.5 |
Mapa conceptual de las pruebas
3. Ejemplo Práctico con Python + pytest + MLflow
Supongamos un modelo de clasificación registrado en MLflow con el alias "champion". Usaremos pytest para escribir las pruebas.
3.1. Estructura de archivos
text
3.2. Fixtures (conftest.py)
python
3.3. Pruebas de Integración (test_model_integration.py)
python
4. Integración en el Pipeline CI/CD (GitHub Actions)
Crea un workflow que se ejecute después del entrenamiento y antes del despliegue.
yaml
Diagrama del pipeline CI/CD con gate de pruebas
5. Mejores Prácticas
| Práctica | Descripción |
|---|---|
| Usar datos de validación fijos | No generar muestras aleatorias en cada ejecución; usar un archivo versionado con Git LFS. |
| Aislar las pruebas del entorno de producción | No ejecutar pruebas contra el endpoint real; usar artefacto local o staging. |
| Establecer umbrales realistas | El rendimiento en un batch pequeño puede fluctuar; usar un intervalo de tolerancia (ej. AUC ± 0.02). |
| Automatizar la descarga del modelo | En CI/CD, descargar la versión candidata desde el model registry (MLflow, S3, etc.). |
| Documentar cada prueba | Cada prueba debe tener un comentario claro de qué verifica y por qué el umbral es ese. |
6. Referencias
Documentos relacionados
- Guía de Despliegue: ejecución automática de las pruebas de integración en cada push.
- MLflow para la Gestión del Ciclo de Vida de Modelos Estadísticos: descarga del modelo candidato desde el registry para ejecutar los tests.
- Getting Started: configuración inicial del entorno donde se ejecutan las pruebas.