Projets finaux : 3 classiques + 1 deep
Livrer quatre expériences complètes et comparées.
Énoncé
Le tronc commun se conclut par quatre expériences. Prévoyez plusieurs séances : les 480 minutes sont une estimation de travail, pas un chronomètre.
- Prix des colis : sur
data/colis_propres.csv, prédisezprix_euravec les quatre entrées de l'atelier de régression. Baseline médiane, Ridge, puis un modèle d'arbres si utile. Mesurez la MAE en euros, tracez résidus vs prédictions et commentez les erreurs par tranche de distance. - Retard des colis : sur le même fichier et le même découpage par
client_id, prédisezretard. Entrées : distance, poids, urgence, transporteur. Excluezdelai_joursetprix_eur. ComparezDummyClassifierà une régression logistique, puis éventuellement à une forêt. Montrez matrice de confusion, précision et rappel du retard, et justifiez le seuil choisi sur validation. - Profils de colis : sans utiliser
prix_eur,delai_joursniretardpour former les groupes, standardisez distance et poids, projetez en PCA et essayez k-means ou DBSCAN. Décrivez les groupes ou concluez qu'ils ne sont pas assez stables pour être nommés. La silhouette ne prouve pas un sens métier. - Vision avec un petit réseau : utilisez
sklearn.datasets.load_digits()(chiffres 8×8 inclus dans scikit-learn, sans téléchargement). Comparez une baseline simple à un MLP PyTorch, sur un split train/validation/test stratifié. Affichez la matrice de confusion et neuf erreurs de prédiction. CPU suffisant.
Contraintes
Pour chaque expérience, livrez README.md, script(s), un requirements.txt ou une liste de versions, une commande de reproduction, une fiche d'une page (question, données, protocole, baseline, métrique, résultats, limites) et les figures utiles. Pour les modèles supervisés, gardez le test fermé jusqu'au choix final et sérialisez le pipeline choisi. Le CSV brut et son générateur restent versionnés dans le dépôt ; votre nettoyage doit être relançable. Conservez les indices de train/test ou la graine et la règle de découpage. Les données de colis sont fabriquées : aucune conclusion sur un transporteur réel n'est permise.
Indices
Réutilisez clean.py, regression.py et lunes_torch.py comme points de départ. Pour les projets 1 et 2, GroupShuffleSplit sépare les clients et GroupKFold sert à choisir sur train. Pour les projets 3 et 4, écrivez explicitement ce qui est appris sur train et ce qui est réservé au test. load_digits() donne data, target et des images 8×8 ; commencez par afficher quelques exemples et vérifier les formes. Si un modèle complexe ne bat pas la baseline, c'est un résultat à expliquer, pas à cacher.
Correction disponibleCherchez d’abord par vous-même.Voir la correction
Correction
Une correction unique n'existe pas pour quatre projets. Vérifiez cette grille sur chacun avant de marquer la leçon terminée :
| Contrôle | Preuve attendue |
|---|---|
| Entrées et cible | Tableau des colonnes disponibles au moment de décider ; aucune cible ou donnée future dans X. |
| Protocole | Script qui crée les mêmes découpages ; transformations apprises dans les plis ; test consulté une seule fois. |
| Comparaison | Baseline et modèle(s) évalués avec la même métrique et les mêmes plis ; résultat CV et test distingués. |
| Erreurs | Résidus, matrice ou cas mal classés lus et commentés, pas seulement affichés. |
| Reproduction | Depuis un environnement vide, commandes de préparation puis d'entraînement documentées ; versions, graine et source des données notées. |
| Limites | Ce que le jeu synthétique ou les chiffres 8×8 ne permettent pas d'affirmer ; cas où le modèle peut échouer. |
Un modèle qui perd face à la baseline mais respecte ce protocole donne une expérience exploitable. À l'inverse, un score élevé obtenu avec une fuite ne valide rien. Faites relire la fiche et la commande de reproduction par une autre personne si possible : elle doit pouvoir retrouver vos résultats sans explication orale.