Du notebook au code de production
⏱ 50 minUn modèle qui marche dans un notebook n'a aucune valeur tant qu'il n'est pas utilisable de façon fiable.
Structurer un projet ML :
projet/
├── data/ # jamais versionné dans git (DVC)
├── notebooks/ # exploration uniquement
├── src/
│ ├── features.py # transformations réutilisables
│ ├── train.py # entraînement reproductible
│ └── predict.py # inférence
├── tests/
└── configs/ # hyperparamètres en YAML
Règles d'or :
- Fixer les seeds aléatoires (reproductibilité)
- Versionner code (git), données (DVC) et modèles (MLflow)
- Tracker chaque expérience : hyperparamètres, métriques, artefacts
- Écrire des tests : sur les features, sur les formats de données, sur la non-régression du modèle
import mlflow
with mlflow.start_run():
mlflow.log_params({"lr": 0.01, "depth": 8})
mlflow.log_metric("f1", 0.91)
mlflow.sklearn.log_model(model, "model")
📚 Pour aller plus loin
📄 Documentation
✍️ Exercices de la leçon
2 exercicesFais-les dans l'ordre, dans un vrai fichier .py — pas dans ta tête. Ne déplie la correction qu'après avoir écrit quelque chose, même faux.
Exercice A — Sortir un modèle de son notebook
Application directe · Tu appliques ce que tu viens de lire.
Prends un notebook d'entraînement que tu as écrit dans un module précédent et transforme-le en projet de production :
- 1.extrais les transformations dans
src/features.py - 2.extrais l'entraînement dans
src/train.py, pilotable par un fichierconfigs/train.yaml - 3.fixe toutes les graines aléatoires
- 4.enregistre l'expérience avec MLflow : paramètres, métriques, modèle
- 5.écris un test qui vérifie qu'une fonction de transformation produit bien ce qu'on attend
Vérifie ensuite que python src/train.py --config configs/train.yaml reproduit exactement le score du notebook.
Exercice B — « Chez moi ça donne 0,89 »
Page blanche · Aucun squelette : à toi de choisir la méthode.
Page blanche. Enquête de reproductibilité.
Tu annonces un F1 de 0,89. Ton collègue clone le dépôt, lance le script, obtient 0,84. Vous avez le même code.
Écris la checklist de diagnostic ordonnée : toutes les causes possibles, de la plus fréquente à la plus rare, avec pour chacune le test qui la confirme ou l'élimine.
Puis :
- implémente un script verifier_reproductibilite.py qui contrôle automatiquement les causes les plus courantes
- explique laquelle de ces causes est impossible à éliminer complètement, et comment on vit avec
Une différence de 5 points n'est pas du bruit. Quelque chose de concret diffère entre vos deux exécutions — trouve quoi.