0.0.1 🎯 Objectifs d’apprentissage
- Comprendre pourquoi le tracking est essentiel en MLOps
- Logger paramètres, métriques et artefacts avec MLflow
- Comparer des runs et sélectionner le meilleur modèle
- Utiliser le Model Registry pour versionner les modèles
- Servir un modèle depuis MLflow
📚 Prérequis : Python, scikit-learn/statsmodels, Docker
⏱️ Temps estimé : 3 heures
1 Pourquoi MLflow ?
1.1 Le problème du “quel modèle était le meilleur ?”
Sans tracking, après quelques semaines d’expérimentation :
- “Quel était le hyperparamètre du modèle de mardi ?”
- “C’était le GLM ou le XGBoost qui avait le meilleur Gini ?”
- “Quelle version du feature engineering a été utilisée ?”
MLflow résout ce problème en loggant automatiquement chaque expérience.
1.2 Les 4 composantes de MLflow
| Composante | Rôle |
|---|---|
| Tracking | Logger paramètres, métriques, artefacts |
| Projects | Packager le code pour la reproductibilité |
| Models | Format standard pour les modèles |
| Model Registry | Versionner et déployer les modèles |
2 Tracking des expériences
2.1 Logger un run
import mlflow
import mlflow.sklearn
from sklearn.linear_model import PoissonRegressor
from sklearn.metrics import mean_poisson_deviance
import numpy as np
# Démarrer une expérience
mlflow.set_experiment("tarification-auto-frequence")
with mlflow.start_run(run_name="glm-poisson-v1"):
# Paramètres
alpha = 0.01
mlflow.log_param("model_type", "PoissonRegressor")
mlflow.log_param("alpha", alpha)
mlflow.log_param("features", "age,zone,puissance,crm")
mlflow.log_param("n_samples", len(X_train))
# Entraînement
model = PoissonRegressor(alpha=alpha)
model.fit(X_train, y_train, sample_weight=exposure_train)
# Métriques
y_pred = model.predict(X_test)
deviance = mean_poisson_deviance(y_test, y_pred, sample_weight=exposure_test)
gini = calculate_gini(y_test, y_pred)
mlflow.log_metric("deviance", deviance)
mlflow.log_metric("gini", gini)
mlflow.log_metric("n_features", X_train.shape[1])
# Sauvegarder le modèle
mlflow.sklearn.log_model(model, "model")
# Artefacts (graphiques, tableaux)
mlflow.log_artifact("relativites.csv")
mlflow.log_artifact("lift_curve.png")
print(f"Run logged: deviance={deviance:.4f}, gini={gini:.3f}")2.2 Interface web
# Lancer l’interface MLflow
$ mlflow ui –port 5000
[INFO] Listening at: http://127.0.0.1:5000
L’interface web permet de :
- Voir tous les runs d’une expérience
- Comparer les métriques entre runs
- Télécharger les artefacts (modèles, graphiques)
- Filtrer et trier les résultats
3 Comparer et sélectionner
3.1 Comparaison de runs
# Rechercher les meilleurs runs
runs = mlflow.search_runs(
experiment_names=["tarification-auto-frequence"],
order_by=["metrics.gini DESC"],
max_results=5
)
print(runs[["run_id", "params.model_type", "params.alpha",
"metrics.gini", "metrics.deviance"]])| Run | Modèle | Alpha | Gini | Déviance |
|---|---|---|---|---|
| abc123 | PoissonRegressor | 0.01 | 0.342 | 0.1823 |
| def456 | PoissonRegressor | 0.001 | 0.338 | 0.1831 |
| ghi789 | XGBRegressor | - | 0.365 | 0.1798 |
💡 Point clé
MLflow ne te dit pas quel modèle choisir — il te donne les données pour décider. En assurance, le choix dépend aussi de l’interprétabilité, de la conformité réglementaire et de la stabilité dans le temps.
4 Model Registry
4.1 Versionner les modèles
Le Model Registry est un catalogue centralisé des modèles :
# Enregistrer un modèle
model_uri = f"runs:/{run_id}/model"
mlflow.register_model(model_uri, "modele-frequence-auto")
# Passer en production
from mlflow.tracking import MlflowClient
client = MlflowClient()
client.transition_model_version_stage(
name="modele-frequence-auto",
version=3,
stage="Production"
)Les stages disponibles :
| Stage | Description |
|---|---|
| None | Modèle enregistré, pas encore évalué |
| Staging | En cours de validation / test |
| Production | Modèle actif utilisé en production |
| Archived | Ancien modèle, conservé pour traçabilité |
⚠️ Gouvernance
En assurance, le passage d’un modèle en production doit être validé par un comité (actuaire, compliance, direction technique). MLflow fournit la traçabilité nécessaire : qui a entraîné quoi, avec quelles données, quelles performances, quand.
Synthèse
4.1.1 🎯 Les 5 points essentiels
- MLflow Tracking logge tout : paramètres, métriques, artefacts, modèles
- L’interface web permet de comparer visuellement les runs
- search_runs() pour trouver le meilleur modèle programmatiquement
- Model Registry versionne et gère le cycle de vie des modèles
- Traçabilité complète pour la gouvernance et la conformité
Auto-évaluation
Réponse : Pour la reproductibilité. Si un modèle a un bon Gini, il faut savoir avec quels paramètres il a été entraîné pour pouvoir le reproduire. Aussi pour comprendre l’impact des paramètres sur la performance (ex : quel alpha donne le meilleur résultat ?).
Réponse : Un run est une exécution unique d’un entraînement (avec ses paramètres et métriques). Un modèle enregistré (Model Registry) est un modèle promu depuis un run, avec un nom, une version et un stage (Staging, Production). Beaucoup de runs → peu de modèles enregistrés → un seul en production.
Réponse : MLflow fournit une piste d’audit complète : qui a entraîné le modèle, quand, avec quelles données, quels paramètres, quelles performances. Le régulateur peut vérifier que le modèle en production a bien été validé et que les versions précédentes sont conservées.
Réponse : mlflow models serve -m "models:/modele-frequence-auto/Production" -p 5001 lance une API REST. On peut aussi charger le modèle dans une Lambda ou un endpoint FastAPI avec mlflow.pyfunc.load_model().