8 · Seguimiento de experimentos con MLflow
Entrenas un modelo cincuenta veces con ajustes distintos — y luego alguien pregunta '¿cuál corrida fue la mejor, y cómo la reproduzco?'. MLflow convierte eso de un juego de memoria en una consulta: cada corrida registra sus parámetros, métricas y artefactos, así que la respuesta es un clic, no una adivinanza.
El tracking de MLflow envuelve cada intento de entrenamiento en una CORRIDA (run) que registra sus parámetros (las perillas que ajustaste), sus métricas (qué tan bien lo hizo) y sus artefactos (el archivo del modelo, gráficas, el pipeline entrenado) — así '¿cuál corrida fue la mejor?' y '¿cómo la reproduzco?' se vuelven una consulta contra un registro estructurado en lugar de una búsqueda en tu memoria y notebooks dispersos.
Sin esto:
Sin tracking, cada experimento vive en estado volátil — un número impreso, una celda de notebook que sobrescribiste, un nombre de archivo como `model_v3_final_FINAL.joblib`. No puedes comparar corridas, no puedes decir qué hiperparámetros ganaron, y no puedes reproducir el mejor resultado de la semana pasada.
Entrenar un modelo rara vez es de un solo tiro. Pruebas una tasa de aprendizaje, luego otra; añades una característica, cambias de modelo, ajustas max_depth. Tras docenas de intentos llega la pregunta inevitable: ¿cuál corrida fue la mejor — y cómo la reproduzco? Si tu único registro son números de precisión impresos pasando por una terminal y una carpeta de archivos model_final_v2.joblib, la respuesta honesta es "no estoy seguro". MLflow existe para volver esa respuesta una consulta en lugar de una adivinanza.
La abstracción central es la corrida (run). Una corrida es una ejecución de tu código de entrenamiento, y a su alrededor MLflow registra cuatro tipos de cosas:
1. Parámetros — las entradas que elegiste: la tasa de aprendizaje, n_estimators, la semilla del split train/test, qué conjunto de características. Estas son las perillas. Las registras con mlflow.log_param("max_depth", 8). Los parámetros son cómo luego preguntas "¿qué ajustes produjeron este resultado?".
2. Métricas — las salidas que miden la calidad: accuracy, F1, AUC, pérdida de validación. Se registran con mlflow.log_metric("val_auc", 0.91). Las métricas pueden registrarse repetidamente con un paso (step) (p. ej. la pérdida por época), así que MLflow guarda una curva, no solo un número final.
3. Artefactos — los archivos que produce una corrida: el modelo serializado (model.joblib), una gráfica de matriz de confusión, un gráfico de importancia de características, incluso el dataset de entrada. Se registran con mlflow.log_artifact("plots/confusion.png"). El modelo entrenado en sí es el artefacto más importante — mlflow.sklearn.log_model(...) lo guarda en un formato cargable.
4. La identidad de la corrida — MLflow estampa automáticamente cada corrida con un ID único, una hora de inicio, la versión del código fuente (commit de git), y agrupa las corridas en experimentos con nombre.
Envuelves tu entrenamiento en with mlflow.start_run(): — todo lo registrado dentro pertenece a esa corrida. Luego la UI de tracking (mlflow ui, una app web local) muestra cada corrida como una fila en una tabla ordenable y filtrable: ordena por val_auc descendente y la mejor corrida es la fila de arriba, con sus parámetros exactos justo ahí. El autolog (mlflow.sklearn.autolog()) va más allá — captura automáticamente parámetros, métricas y el modelo para librerías soportadas con una sola línea, sin llamadas manuales a log_*.
MLflow necesita un servidor de tracking / un almacén local y no es algo de navegador, así que el código de abajo es solo para leer — pero lo que importa es la forma: envuelve el entrenamiento en una corrida, registra parámetros + métricas + el modelo, consulta después.
Un script de entrenamiento envuelto en `mlflow.start_run()`: registra parámetros, registra métricas, registra el artefacto del modelo — más `mlflow.sklearn.autolog()` para capturarlo todo en una línea.
¿Qué registra una sola corrida (run) de MLflow?
- Una corrida de MLflow envuelve un intento de entrenamiento y registra sus parámetros (entradas), métricas (calidad) y artefactos (archivo del modelo, gráficas) — con un ID, hora y versión de código estampados automáticamente.
- Envuelve el entrenamiento en `with mlflow.start_run():` y registra parámetros/métricas/el modelo; la UI de tracking convierte luego '¿cuál corrida fue la mejor?' en una consulta ordenable y filtrable.
- `mlflow.sklearn.autolog()` captura parámetros, métricas y el modelo automáticamente para librerías soportadas en una sola línea — sin necesidad de llamadas manuales a `log_*`.
Todo equipo serio de ML usa un rastreador de experimentos (MLflow, Weights & Biases, Neptune). Es cómo comparas cientos de corridas, defiendes 'este es nuestro mejor modelo' con evidencia, y reproduces un resultado meses después.
Si lo quitas: Tus experimentos vivirían en estado volátil — números impresos y archivos sobrescritos — así que no podrías comparar corridas de forma fiable, justificar la elección de un modelo, ni reproducir un resultado pasado.