

Centrale Méditerranée · École centrale de Marseille
Machine Learning : des théorèmes au modèle en service
Page compagnon de l'électif de 54 heures pour les élèves-ingénieurs de Centrale Méditerranée, nom d'usage de l'École centrale de Marseille. Trois blocs intensifs de deux jours, en octobre, décembre et janvier, avec un jalon à atteindre entre chaque bloc.
Par Sitraka Forler · Enseignant, Centrale Méditerranée et Aix-Marseille School of EconomicsMis à jour le 3 octobre 2026 À propos du site
54 heures
3 blocs de 2 jours, 9 h par jour
Oct. · Déc. · Janv.
Deux jalons entre les blocs
27 séances
On cadre, on dérive, puis du code qui vérifie
55 % sans IA
Note individuelle obtenue en salle
Le cours, côté terrain
Les théorèmes, c'est bien. Savoir qui s'en sert, pour quoi, et comment on se fait embaucher pour ça, c'est mieux. Quatre pages écrites pour l'option DDEFI (Données et Décisions Économiques et Financières), avec des sources partout, des scènes à manipuler et quelques Shadoks.

Pourquoi deux logos ? L'école a pris le nom d'usage Centrale Méditerranée en 2022 ; son nom légal reste École centrale de Marseille. Et moi j'ai un faible pour l'ancien logo orange, alors je mets les deux.
Vous cherchez plutôt l'analyse de données côté entreprise ? Mon autre cours, Data Analytics for Business (Université Catholique de Lille), a aussi sa page en français.
Comment ce cours est construit
54 heures en trois blocs de deux jours (octobre, décembre, janvier) pour les élèves-ingénieurs de Centrale Méditerranée, nom d'usage de l'École centrale de Marseille. On commence par cadrer : la décision, la cible, la métrique, les garde-fous, la pipeline de données. Ensuite seulement les modèles, toujours dans le même ordre : une dérivation au tableau, du numpy qui la reproduit, scikit-learn qui confirme, puis le projet fil rouge, un score de défaut de crédit sur données ouvertes, calibré, seuillé par coût, audité, surveillé et exposé derrière une API testée. L'IA est autorisée et déclarée pour la plomberie ; 55 % de la note est individuelle et obtenue en salle sans elle.
On dérive
Chaque séance part d'un résultat démontré au tableau : projection des moindres carrés, maximum de vraisemblance, convexité, dualité, bornes de généralisation, rétropropagation. La liste des dérivations exigibles est publiée à l'avance.
On vérifie
La dérivation est ensuite recodée en numpy et confrontée à scikit-learn sur de vraies données. Un résultat que vous ne savez pas reproduire par une commande ne compte pas.
On livre
Un projet fil rouge traverse les trois blocs : un score de défaut de crédit calibré, seuillé par coût, audité, surveillé, documenté et exposé derrière une API testée.
Avant le bloc d'octobre
Le pré-test et la mise à niveau tournent dans le navigateur, sans installation ni compte.
- 1Algèbre linéaire : produit scalaire, projection orthogonale, valeurs propres, décomposition en valeurs singulières (singular value decomposition, SVD), rang, conditionnement (condition number).
- 2Calcul différentiel : gradient, hessienne, règle de la chaîne, Taylor à l'ordre 2.
- 3Probabilités : espérance, variance, lois normale et de Bernoulli, maximum de vraisemblance (maximum likelihood estimation, MLE).
- 4Python de base (fonctions, numpy) et SQL de base. Pré-test de 30 minutes dans le navigateur sur ecofinlearning.com avant le bloc 1 (date à confirmer) : il dose les rappels, il ne note pas.
- 5Mise à niveau gratuite dans le navigateur : parcours python-foundations, python-pandas, sql-basics et le deck /studio/ols-logistic.
- 6Environnement livré avant le bloc 1 : gabarit de dépôt avec lockfile, devcontainer testé, procédure locale Python 3.12 + git. PyTorch arrive au bloc 3 (secours : sklearn MLPClassifier).
Les slides du bloc 1
Une demi-journée, un deck, en français ou en anglais (même contenu, même mot de passe, bascule FR · EN dans le pied de chaque slide). Le mot de passe est donné en séance ; sur ordinateur, les slides s'ouvrent en mode lecture avec les notes sous chaque slide, pour relire ou rattraper. Après chaque résultat mathématique, une slide « Le détail, pas à pas » déroule la dérivation ligne par ligne.
- 1Cadrer avant de modéliser, puis les moindres carrésMercredi 14 octobre, matin · English version
- 2Vraisemblance, généralisation, lancement du projetMercredi 14 octobre, après-midi · English version
- 3Optimisation convexe et régularisationJeudi 15 octobre, matin · English version
- 4Décider sous coût, livrer un dépôt reproductibleJeudi 15 octobre, après-midi · English version
Les devoirs maison, un entre chaque bloc
Le même projet avance d'un bloc à l'autre. Chaque deck se lit seul : ce que vous rendez, le calendrier, la notation, l'IA, les pièges.
- 1Devoir après le bloc 1 : une baseline défendableDu 16 octobre au 20 novembre 2026 · 10 % de la note
- 2Devoir entre les blocs 2 et 3 : un modèle champion documentéDe décembre 2026 à début janvier 2027 · 12 %
- 3Devoir après le bloc 3 : le projet livréFin janvier 2027 · 18 % + soutenance 15 %
Toutes les séances et le cours de la Catho : sitraka.lu/teaching.
Le programme, bloc par bloc
Chaque séance affiche ce que vous construisez. Dépliez pour voir la dérivation exigible, les données et le livrable. Les liens d'entraînement sont gratuits et s'exécutent dans votre navigateur.
Bloc 1 · octobre 2026 · 18 heures
Bloc 1 : cadrer, puis du linéaire au convexe
D'abord cadrer : la décision, la cible, la métrique, les garde-fous, la pipeline de données. Puis moindres carrés ordinaires (ordinary least squares, OLS), vraisemblance (likelihood), validation sans fuite de données (data leakage), optimisation convexe, régularisation, décision sous coût, dépôt reproductible. Mercredi 14 et jeudi 15 octobre 2026, salles à confirmer.
Jour 1 : cadrer, puis le linéaire
S0. Cadrer avant de modéliser
2 hFiche de cadrage du jeu crédit, puis le cadre de travail : la boucle cadrer, préparer, modéliser, vérifier, livrer, les rôles, DECISIONS.md, la définition de « terminé ». Enfin la pipeline de données : sources, jointures à date de validité (point-in-time join), coupe figée (train / validation / test split), carte des fuites (leakage map). En poste, c'est la phase que les juniors sautent et que les seniors font durer.
Les maths, les données, le livrable
Ce qu'on démontre
Pas de théorème ce matin, des définitions noir sur blanc : la décision à prendre, la question posée aux données, la cible y (target) et ce qu'elle ne capture pas (un défaut à 30 jours n'est pas une perte), la métrique du métier et celle du modèle, reliées en S7. Les garde-fous : ce que le modèle ne doit jamais faire, qui signe, quand on arrête.
Données et outils
Fiche de cadrage du cours ; UCI Default of Credit Card Clients (archive.ics.uci.edu/dataset/350, CC BY 4.0)
Ce que vous rendez
FRAMING.md : décision, question, cible et limites, deux métriques, garde-fous, rôles, schéma de la pipeline.
S1. La géométrie des moindres carrés
2 hols(X, y) en numpy par équations normales (normal equations) puis par SVD, contre sklearn sur California Housing ; vérifier Xᵀe ≈ 0, retrouver les erreurs-types (standard errors) de statsmodels, puis une colonne quasi colinéaire (multicollinearity) pour voir Var(β̂) partir en vrille.
Les maths, les données, le livrable
Ce qu'on démontre
Minimiser ||y − Xβ||² donne XᵀXβ̂ = Xᵀy ; ŷ = Hy où H = X(XᵀX)⁻¹Xᵀ projette sur Im(X), d'où Xᵀe = 0. Gauss-Markov : Var(β̂) = σ²(XᵀX)⁻¹ ; on résout par SVD.
Données et outils
California Housing (scikit-learn) ; numpy, scikit-learn, statsmodels
Ce que vous rendez
ols_from_scratch.ipynb : trois implémentations concordantes à 1e-8, vérifications géométriques.
S2. Maximum de vraisemblance : de la loi à la perte
1,5 hLa régression logistique (logistic regression) deux fois (gradient, Newton) contre sklearn sur le jeu crédit (30 000 clients). En poste : le modèle de score de crédit (credit scoring) des banques, et les écarts-types sont ce qu'un régulateur demande.
Les maths, les données, le livrable
Ce qu'on démontre
ℓ(θ) = Σ log p(y_i | x_i ; θ) ; en gaussien, OLS est un MLE. En Bernoulli avec p_i = σ(x_iᵀβ) : ∇ℓ = Xᵀ(y − p), ∇²ℓ = −XᵀWX, donc ℓ concave, Newton = IRLS, I(β) = XᵀWX donne les écarts-types.
Données et outils
UCI Default ; load_digits pour le bonus multiclasse ; numpy, scikit-learn, statsmodels
Ce que vous rendez
logit_from_scratch.py + coefficients (GD, Newton, sklearn, statsmodels) concordants à 1e-4.
S3. Biais-variance, validation sans fuite, taille d'échantillon
1,5 hChiffrer deux fuites sur le jeu crédit et, sur UCI Bike Sharing, validation croisée (cross-validation) par KFold mélangé contre TimeSeriesSplit avec gap. En poste, la fuite est la première cause des modèles qui « marchaient en dev ».
Les maths, les données, le livrable
Ce qu'on démontre
Compromis biais-variance (bias-variance trade-off) : erreur attendue = σ² + biais² + variance. Une fuite, c'est toute statistique du test qui entre dans le modèle. Inégalité de Hoeffding (Hoeffding's inequality) : P(|R̂ − R| > ε) ≤ 2exp(−2nε²), donc 1 000 lignes de test donnent ±4,3 points à 95 %.
Données et outils
UCI Default ; UCI Bike Sharing (archive.ics.uci.edu/dataset/275, CC BY 4.0) ; scikit-learn Pipeline, TimeSeriesSplit
Ce que vous rendez
fuites.ipynb : deux fuites chiffrées, KFold contre TimeSeriesSplit, marge Hoeffding du projet.
S4. Lancement du projet : audit SQL, fuites, coupe figée, baselines
1 hPar équipe de trois, on exécute la pipeline cadrée en S0 : audit du CSV avec DuckDB, fiche de données (datasheet), carte des fuites colonne par colonne (PAY_0 est connu fin septembre 2005, la cible est octobre), coupe figée, deux modèles de référence (baselines).
Les maths, les données, le livrable
Ce qu'on démontre
Taux de base (base rate) p̂ et son intervalle de confiance (confidence interval) de Wilson ; entropie H(p̂) = log-loss du modèle constant. Jointure à date de validité : on ne joint que ce qui était connu à la date de prédiction.
Données et outils
UCI Default ; DuckDB, pandas, scikit-learn ; gabarit de dépôt (GitHub Classroom, à confirmer)
Ce que vous rendez
DATA_CARD.md + LEAKAGE_MAP.md + coupe figée + baseline.py + première entrée de DECISIONS.md.
Fin de journée : contrôle papier et oraux tirés au sort · 1 h
30 minutes sur papier, sans documents ni IA, sur les dérivations du jour. Puis 30 minutes d'oraux de 3 minutes, tirés au sort, devant votre propre notebook : expliquez, modifiez, prédisez, lancez.
Jour 2 : optimiser, régulariser, décider, livrer proprement
S5. Convexité, descente de gradient (gradient descent), SGD, Adam
2 hUn mini-optimiseur numpy (GD, SGD par mini-lots ou mini-batches, Adam) sur la perte logistique ; f(x_k) − f* en échelle log avec et sans standardisation, et l'échec de GD quand η > 2/L.
Les maths, les données, le livrable
Ce qu'on démontre
Convexe : tout minimum local est global. Avec un pas d'apprentissage (learning rate) η = 1/L, f(x_k) − f* ≤ L||x_0 − x*||²/(2k), au-delà de 2/L on diverge ; pour la logistique L ≤ λ_max(XᵀX)/(4n), d'où l'effet de la standardisation (feature scaling). Descente de gradient stochastique (stochastic gradient descent, SGD) : gradient bruyant mais sans biais ; Adam : sans garantie convexe, redoutable en pratique.
Données et outils
UCI Default ; numpy, matplotlib
Ce que vous rendez
optim_bench.py + courbes de convergence + 10 lignes reliant chaque courbe à sa borne.
S6. Régularisation : ridge, lasso, lecture bayésienne
2 hRidge par SVD et lasso par ISTA en numpy, contre sklearn ; chemin de régularisation (regularisation path) de la logistique L1, C par CV, stabilité du support. En poste : 8 variables stables se déploient, 60 instables non.
Les maths, les données, le livrable
Ce qu'on démontre
Ridge : β̂_λ = (XᵀX + λI)⁻¹Xᵀy rétrécit (shrinkage) chaque direction SVD par σ_j²/(σ_j² + λ). Lasso : β̂_j = signe(β̂_j^{OLS})(|β̂_j^{OLS}| − λ)₊, le seuillage doux (soft thresholding) qui fabrique des zéros exacts. Lecture bayésienne : avec un a priori (prior) gaussien, ridge = MAP ; avec un a priori de Laplace, lasso = MAP.
Données et outils
UCI Default ; numpy, scikit-learn (LogisticRegressionCV, lasso_path)
Ce que vous rendez
Chemin de régularisation + stabilité du support + C retenu justifié dans DECISIONS.md.
S7. Métriques, calibration, seuil sous coût
2 hCourbe de fiabilité (reliability curve), score de Brier (Brier score) décomposé, courbes ROC (ROC curve) et précision-rappel (precision-recall curve) avec IC bootstrap ; class_weight corrigé, recalibration isotonique ; coûts de la fiche de cadrage, seuil de décision (decision threshold) t*, courbe de coût attendu (expected cost) C(t). En poste, le seuil est la décision métier, à justifier en comité.
Les maths, les données, le livrable
Ce qu'on démontre
Aire sous la courbe ROC (area under the ROC curve, AUC) = P(s(X⁺) > s(X⁻)), muette sur la calibration. Prédire 1 ssi p(x) > t* = c_FP/(c_FP + c_FN), seulement si p est calibrée ; la pondération des classes (class weights) par w déplace p en wp/(wp + 1 − p), à ramener avant t*.
Données et outils
UCI Default ; scikit-learn (roc_curve, calibration_curve, CalibratedClassifierCV)
Ce que vous rendez
Note d'une page « Seuil et coût » : hypothèses, t*, coût attendu pour 10 000 clients.
S8. Ingénierie reproductible : git, tests, CI, journal de décisions
2 hTransformer S4 à S7 en dépôt : src/, tests/ (pytest), make reproduce, lockfile, intégration continue (continuous integration, CI) ; branche par tâche, demande de fusion (pull request) relue, un conflit résolu. En poste, les juniors trébuchent plus sur les branches que sur les maths.
Les maths, les données, le livrable
Ce qu'on démontre
Pas de théorème, une discipline : un Pipeline sklearn est ajusté sur le pli (fold) d'entraînement, donc sans fuite par construction, et un test est une propriété vérifiable (AUC = 1 sur données séparables, predict(chargé) = predict(entraîné)).
Données et outils
git, GitHub, GitHub Actions, pytest, make ; assistant IA autorisé (niveau 4)
Ce que vous rendez
Dépôt d'équipe avec CI verte, make reproduce, 5 tests, une PR fusionnée, DECISIONS.md (5 entrées datées).
Fin de journée : contrôle papier et oraux tirés au sort · 1 h
30 minutes sur papier, sans IA. Puis 30 minutes d'oraux de 3 minutes, tirés au sort, sur le dépôt d'équipe : expliquez ce test, modifiez cette fonction, prédisez, lancez. On annonce le jalon 1.
Jalon 1 : un modèle de référence défendable
À confirmer : vers le 20 novembre 2026, une semaine avant le bloc de décembre, tag git jalon-1. Point d'étape en visio de 15 minutes par équipe trois semaines après le bloc 1.
Ce que vous rendez
- Dépôt d'équipe avec CI verte, make reproduce, tests, lockfile, coupe figée ; README suivi par une autre équipe.
- Notebooks OLS et logistique « from scratch » concordants avec scikit-learn.
- Note de 2 pages « Baseline et seuil » : cadrage, données, fuites, modèle retenu, calibration, t* et coût attendu.
- Tableau d'ablation (ablation study) pré-enregistré (pre-registration) : AUC et Brier sans chaque groupe de variables, prédiction déposée en issue avant le calcul.
- DECISIONS.md (au moins 10 entrées datées) et annexe IA avec deux propositions de l'IA prouvées fausses.
Les preuves que vous avez réfléchi
- La prédiction d'ablation est en issue avant le calcul : une IA produit des résultats, pas des paris faits à l'avance.
- Le journal garde les hésitations ; une entrée tirée au sort est interrogée à chaque oral.
- Chaque membre signe une fonction de src/. Le git shortlog s'attribue à n'importe qui, une fonction qu'on doit expliquer devant moi, non.
Vérification en salle, sans IA
Début du bloc 2, 45 minutes sans IA ni documents : ridge en base SVD, t* et coût attendu d'une matrice de confusion (confusion matrix), puis une fonction de votre propre dépôt imprimée avec une modification dont vous prédisez l'effet.
Bloc 2 · décembre 2026 · 18 heures
Bloc 2 : noyaux, arbres, ensembles, comparaison honnête, équité
Marge et dualité, noyaux, bornes de généralisation, arbres de décision (decision trees), forêts aléatoires (random forests) et boosting, comparaison avec des intervalles plutôt que trois décimales, interprétabilité, équité (fairness) et droit, apprentissage non supervisé (unsupervised learning). Dates à confirmer, avant les vacances indicatives (19 décembre 2026 au 3 janvier 2027).
Jour 3 : noyaux, généralisation, arbres, forêts
Point d'entrée : contrôle sans IA du jalon 1 · 1 h
45 minutes de contrôle individuel sur papier, puis 15 minutes de retour sur les erreurs fréquentes du jalon 1 : fuites résiduelles, seuils non justifiés, intervalles mal lus.
S9. SVM, dualité, KKT et astuce du noyau
2 hSVC linéaire sur 200 points 2D : reconstruire w depuis dual_coef_, vérifier KKT, tracer la marge pour trois C ; kernel ridge en cinq lignes numpy ; logistique sur RFF contre SVC RBF, temps mesuré.
Les maths, les données, le livrable
Ce qu'on démontre
Machines à vecteurs de support (support vector machines, SVM), marge dure : min (1/2)||w||² sous y_i(wᵀx_i + b) ≥ 1 ; KKT donne w = Σα_i y_i x_i, seuls les supports ont α_i > 0. Le dual ne voit les données qu'à travers x_iᵀx_j, d'où l'astuce du noyau (kernel trick) et f = Σα_i k(x_i, ·) ; kernel ridge coûte O(n³).
Données et outils
Synthétique 2D + UCI Default ; scikit-learn (SVC, KernelRidge, RBFSampler)
Ce que vous rendez
svm_kernels.ipynb : vérification KKT, marge et supports, kernel ridge validé, tableau temps × AUC.
S10. Généralisation : Hoeffding, VC, Rademacher, étiquettes aléatoires
1 hScript fourni : remplacer y par du bruit, entraîner logistique, SVC RBF et arbre profond, regarder qui mémorise.
Les maths, les données, le livrable
Ce qu'on démontre
Classe finie : avec probabilité ≥ 1 − δ, R(h) ≤ R̂(h) + √((log|H| + log(2/δ))/(2n)). Rademacher : pour ||w|| ≤ B et ||x|| ≤ R, R_n ≤ BR/√n, indépendant de la dimension. Zhang et al. 2017 : les étiquettes aléatoires montrent la limite.
Données et outils
UCI Default ; scikit-learn ; script fourni
Ce que vous rendez
Tableau étiquettes aléatoires + borne VC + issue PREREG pour la courbe de généralisation.
S11. Arbres de décision et théorie de l'information
2 hLa meilleure coupure et un arbre récursif sur trois variables du jeu crédit, racine vérifiée contre DecisionTreeClassifier, élagage par CV. En poste : un arbre de profondeur 3 est souvent le seul modèle qu'un métier accepte de lire.
Les maths, les données, le livrable
Ce qu'on démontre
Entropie H(Y) = −Σ p_k log₂ p_k, gain I(Y ; A) = H(Y) − H(Y | A) ≥ 0, Gini remplace ln p par p − 1. CART choisit gloutonnement (variable, seuil) ; élagage R_α(T) = R(T) + α|feuilles|. Variance énorme : d'où les forêts.
Données et outils
UCI Default ; numpy, scikit-learn (DecisionTreeClassifier, export_text)
Ce que vous rendez
cart_from_scratch.py + gains à la racine + arbre élagué exporté en texte.
S12. Bagging et forêts aléatoires : réduire la variance
2 hOOB contre CV 5 plis, AUC selon B et m, MDI contre permutation avec une variable aléatoire injectée (en tête à la MDI, pas à la permutation), PD et ICE de PAY_0 et LIMIT_BAL.
Les maths, les données, le livrable
Ce qu'on démontre
Var d'une moyenne de B estimateurs corrélés = ρσ² + (1 − ρ)σ²/B → ρσ² ; le bootstrap baisse la variance, m ≈ √p variables par nœud baisse ρ. Chaque arbre ignore 37 % des lignes, d'où l'erreur out-of-bag.
Données et outils
UCI Default ; scikit-learn (RandomForestClassifier, permutation_importance, PartialDependenceDisplay)
Ce que vous rendez
Figure AUC(B, m) + MDI contre permutation avec la variable piège + PD/ICE.
Fin de journée : contrôle papier et oraux tirés au sort · 1 h
30 minutes sur papier, sans IA. Puis 30 minutes d'oraux de 3 minutes, tirés au sort : modifiez cette fonction de votre dépôt, prédisez, lancez.
Jour 4 : boosting, comparaison, équité, non-supervisé
S13. Boosting : descente de gradient dans l'espace des fonctions
2 hGradient boosting logistique en 40 lignes avec DecisionTreeRegressor, contre sklearn ; HistGradientBoostingClassifier avec early_stopping, AUC selon M pour trois ν.
Les maths, les données, le livrable
Ce qu'on démontre
Gradient boosting (Friedman 2001) : F_m = F_{m−1} + νh_m, h_m ajusté sur r_i = −∂L/∂F, soit y_i − σ(F_{m−1}(x_i)) en logistique. Newton (XGBoost, LightGBM) : feuille w* = −Σg_i/(Σh_i + λ).
Données et outils
UCI Default ; scikit-learn (HistGradientBoostingClassifier) ; LightGBM en option
Ce que vous rendez
gb_from_scratch.py concordant avec sklearn + AUC(M) + tableau logistique / forêt / boosting.
S14. Comparaison honnête : CV imbriquée, tests corrigés, pires erreurs
2 hCV imbriquée 5×3 pour logistique L1, forêt et boosting, 3 graines aléatoires (random seeds) × 5 plis, AUC et Brier avec IC, test corrigé, règle du modèle champion (champion model) écrite en issue avant les résultats ; les 20 pires erreurs du test, une par membre.
Les maths, les données, le livrable
Ce qu'on démontre
Choisir les hyperparamètres (hyperparameters) sur le pli d'évaluation gonfle la performance : CV imbriquée. Le t apparié sur k plis est biaisé car les plis se recouvrent : test corrigé de Nadeau et Bengio (corrected resampled t-test), Var_corr = (1/k + n_test/n_train)·s².
Données et outils
UCI Default ; scikit-learn (cross_validate, RandomizedSearchCV), scipy.stats ; MLflow en extension
Ce que vous rendez
Tableau 3 modèles × (AUC, Brier, IC 95 %) + test corrigé + champion selon la règle pré-enregistrée + WORST20.md.
S15. Interprétabilité : valeurs de Shapley (Shapley values) et SHAP
1,5 hSHAP sur le champion : importance globale, dépendance de PAY_0, trois explications locales en français métier. En poste, c'est ce que demandent la conformité et le service client.
Les maths, les données, le livrable
Ce qu'on démontre
φ_j = Σ_{S ⊆ N∖{j}} |S|!(p − |S| − 1)!/p! · [v(S ∪ {j}) − v(S)], l'unique attribution vérifiant efficacité, symétrie, nullité, additivité. Association, pas causalité.
Données et outils
UCI Default ; shap (devcontainer ; secours scikit-learn)
Ce que vous rendez
Section « Explicabilité » de la fiche de modèle (model card) : vue globale, trois explications locales, limites.
S16. Équité, droit et AI Act : variables relais et audit par groupe
1,5 hRetirer SEX du champion, mesurer si les variables relais le reconstruisent, auditer par SEX et par tranche d'AGE (acceptation, TPR/FPR, calibration, IC, verdict par puissance), rédiger la fiche de modèle v1 (Mitchell et al. 2019).
Les maths, les données, le livrable
Ce qu'on démontre
Parité démographique, égalité des chances, calibration par groupe : incompatibles dès que les taux de base diffèrent (Kleinberg, Mullainathan et Raghavan 2016 ; Chouldechova 2017). Variable relais (proxy variable) : X corrélée à A transmet A même retirée ; un sous-groupe trop petit se déclare « non concluant », pas « équitable ». Droit : la directive 2004/113/CE interdit la discrimination par le sexe dans les services financiers (arrêt Test-Achats C-236/09). AI Act : règlement (UE) 2024/1689, en vigueur le 1er août 2024, application générale le 2 août 2026 ; le scoring de crédit des personnes physiques (annexe III, haut risque) s'applique à partir du 2 décembre 2027 après le règlement (UE) 2026/1744 (omnibus numérique, en vigueur le 27 juillet 2026). À vérifier sur le texte consolidé le jour du cours.
Données et outils
UCI Default ; pandas, scikit-learn ; gabarit de fiche de modèle
Ce que vous rendez
MODEL_CARD.md v1 + tableau d'équité par groupe avec IC et verdict + test de variable relais.
S17. Non-supervisé : ACP, k-means, mélanges gaussiens
1 hACP sur BILL_AMT* et PAY_AMT*, k-means et GaussianMixture sur les scores, k par silhouette et BIC, taux de défaut par segment.
Les maths, les données, le livrable
Ce qu'on démontre
Analyse en composantes principales (principal component analysis, ACP ou PCA) : vecteurs propres de la covariance, variance expliquée λ_j/Σλ ; Eckart-Young : la troncature de rang k est la meilleure approximation. Partitionnement k-means (k-means clustering) : Lloyd descend vers un minimum local ; mélanges gaussiens (Gaussian mixture models, GMM) par espérance-maximisation (expectation-maximisation, EM), dont k-means est la limite à variance nulle.
Données et outils
UCI Default ; scikit-learn (PCA, KMeans, GaussianMixture)
Ce que vous rendez
Figure ACP + tableau des segments + effet sur le champion ; issue PREREG pour em_1d.py.
Fin de journée : contrôle papier et oraux tirés au sort · 1 h
30 minutes sur papier, sans IA. Puis 30 minutes d'oraux de 3 minutes, tirés au sort, sur gb_from_scratch.py et le tableau de comparaison. On annonce le jalon 2.
Jalon 2 : un modèle champion documenté
À confirmer : début janvier 2027, une semaine avant le bloc de janvier, tag git jalon-2. Point d'étape en visio dans la semaine qui suit le bloc 2, au plus tard le 18 décembre 2026.
Ce que vous rendez
- Dépôt : make compare reproductible, tableau AUC/Brier/IC 95 % pour logistique, forêt, boosting et un modèle à noyau, 3 graines × 5 plis, test corrigé.
- Champion retenu selon la règle pré-enregistrée ; si la règle a changé après coup, le dire.
- MODEL_CARD.md v2 : usage, données, métriques avec IC, seuil et coûts, calibration, audit d'équité sans SEX, limites.
- Trois « from scratch » validés contre scikit-learn : gradient boosting logistique, kernel ridge, EM 1D.
- Un résultat surprenant testé, WORST20.md (une erreur par membre), DECISIONS.md et annexe IA à jour.
Les preuves que vous avez réfléchi
- Les prédictions sont en issue avant les expériences ; désigner ce qu'on n'attendait pas et le tester ne se délègue pas.
- Chaque membre défend à l'oral sa ligne d'ablation, son erreur du top 20 et une entrée de DECISIONS.md tirée au sort.
Vérification en salle, sans IA
Début du bloc 3, 60 minutes sans IA : 30 minutes sur papier (dual du SVM, biais de la MDI, « votre AUC est X avec IC [a, b], votre modèle de référence Y : la différence est-elle établie ? »), puis 30 minutes de chasse à l'erreur sur un bug que j'ai injecté dans votre propre dépôt.
Bloc 3 · janvier 2027 · 18 heures
Bloc 3 : réseaux, dérive, incertitude garantie, valeur, mise en service, examen
Rétropropagation (backpropagation), ablations multi-graines, dérive (drift) sur un vrai jeu temporel, prédiction conforme (conformal prediction), de la métrique à l'euro, AI Act, API testée, examen individuel hors ligne, soutenances. Dates à confirmer.
Jour 5 : réseaux de neurones, dérive, prédiction conforme
Point d'entrée : contrôle sans IA du jalon 2 et chasse à l'erreur · 1 h
30 minutes de contrôle papier, puis 30 minutes de chasse à l'erreur, seul, sur le diff imprimé de votre propre dépôt.
S18. Perceptron multicouche et rétropropagation
2 hMLP numpy (deux couches cachées, ReLU) avec forward, backward, mini-batch SGD et gradient check ; entraînement sur le jeu crédit contre la logistique.
Les maths, les données, le livrable
Ce qu'on démontre
Perceptron multicouche (multilayer perceptron, MLP) : f = f_L ∘ ... ∘ f_1, z^{(l)} = W^{(l)}a^{(l−1)} + b^{(l)}. Règle de la chaîne : δ^{(l)} = (W^{(l+1)ᵀ}δ^{(l+1)}) ⊙ g'(z^{(l)}), ∂L/∂W^{(l)} = δ^{(l)}a^{(l−1)ᵀ} ; la passe arrière coûte une passe avant.
Données et outils
UCI Default ; numpy
Ce que vous rendez
mlp_numpy.py avec gradient check < 1e-6, courbes d'apprentissage, trois initialisations.
S19. Entraîner en pratique : PyTorch, régularisation, ablations multi-graines
2 hMLP en PyTorch (nn.Module, DataLoader, Adam, early stopping), batch norm, dropout, plongements (embeddings) ; ablation à quatre lignes, trois graines chacune, pré-enregistrée. En poste, l'ablation multi-graines distingue un résultat d'un coup de chance.
Les maths, les données, le livrable
Ce qu'on démontre
Perte non convexe : plus de garantie, donc on mesure. Batch norm, dropout, arrêt précoce ≈ ridge. À vérifier vous-mêmes : sur des tables de taille moyenne, le boosting reste au niveau des MLP (Grinsztajn, Oyallon et Varoquaux 2022).
Données et outils
UCI Default ; PyTorch (devcontainer ; secours MLPClassifier)
Ce que vous rendez
Tableau d'ablation (4 variantes × 3 graines) + décision dans DECISIONS.md : le réseau remplace-t-il le champion ?
S20. Dérive et réentraînement sur un vrai jeu temporel
1,5 hSur UCI Bike Sharing : modèle de demande entraîné sur 2011, sous surveillance (monitoring) mois par mois sur 2012 ; PSI, KS, validation adversariale, erreur réelle quand les étiquettes arrivent. En poste, c'est la partie qui survit à la production.
Les maths, les données, le livrable
Ce qu'on démontre
Walk-forward : entraîner sur [1, t], tester sur [t + 1, t + h], glisser. Dérive de covariables : PSI = Σ_b(q_b − p_b)ln(q_b/p_b), Kolmogorov-Smirnov, validation adversariale. Dérive de concept : visible seulement avec des étiquettes, souvent en retard.
Données et outils
UCI Bike Sharing ; pandas, scipy.stats, scikit-learn
Ce que vous rendez
MONITORING.md : PSI/KS par variable, AUC adversariale, politiques de réentraînement, seuils justifiés.
S21. Incertitude garantie : prédiction conforme et option de rejet
1,5 hLe split conformal en numpy en moins de 30 lignes ; sur Bike Sharing, calibration glissante et couverture mois par mois ; sur le crédit, option de rejet (reject option) avec politique d'abstention chiffrée.
Les maths, les données, le livrable
Ce qu'on démontre
Split conformal : scores s_i = |y_i − f̂(x_i)| sur n points de calibration, q̂ = le ⌈(n + 1)(1 − α)⌉-ième plus petit, C(x) = f̂(x) ± q̂. Sous échangeabilité, sans hypothèse sur f̂ : P(Y ∈ C(X)) ≥ 1 − α.
Données et outils
UCI Bike Sharing, UCI Default ; numpy ; MAPIE en option
Ce que vous rendez
conformal.py (< 30 lignes) + couverture empirique par segment + politique d'abstention (taux, coût, gain).
Fin de journée : contrôle papier et derniers oraux · 1 h
30 minutes sur papier, sans IA. Puis 30 minutes d'oraux pour ceux qui ne sont pas encore passés ; les autres rédigent, sans IA, la réflexion de 300 mots : la décision la plus difficile du projet et pourquoi.
Jour 6 : valeur, mise en service, examen, soutenances
S22. De la métrique à l'euro : courbe de profit, mémo client, test A/B
1 hCourbe de profit du champion avec les coûts de la fiche de cadrage ; mémo d'une page pour le décideur : ce que le modèle rapporte par an, sous quelles hypothèses, quel test A/B pour le vérifier.
Les maths, les données, le livrable
Ce qu'on démontre
Valeur d'un seuil V(t) = Σ_i[gain_i·1{s_i ≥ t, y_i = 1} − c_FP·1{s_i ≥ t, y_i = 0} − c_FN·1{s_i < t, y_i = 1}], comparée à « sans modèle ». Test A/B : n = (z_{1−α/2} + z_{1−β})²·2p̄(1 − p̄)/δ² par bras.
Données et outils
UCI Default ; numpy, pandas, matplotlib, statsmodels
Ce que vous rendez
Courbe de profit + MEMO_CLIENT.md d'une page + dimensionnement A/B.
S23. AI Act : analyse d'écart, fiche de modèle, fiche de données
1 hRèglement (UE) 2024/1689 (en vigueur le 1er août 2024, application générale le 2 août 2026 ; annexe III, dont le scoring de crédit des personnes physiques, applicable à partir du 2 décembre 2027 après le règlement (UE) 2026/1744 ; à vérifier sur le texte consolidé) : pyramide de risques, obligations du fournisseur et du déployeur, contrôle humain. Atelier : analyse d'écart contre l'annexe IV, fiche de modèle v3, fiche de données, revue par une autre équipe.
Les maths, les données, le livrable
Ce qu'on démontre
Toute allégation de performance est une estimation avec un intervalle et un n ; comparaisons multiples : Bonferroni ou Benjamini-Hochberg.
Données et outils
Portail AI Act de la Commission européenne (digital-strategy.ec.europa.eu) ; gabarits du cours
Ce que vous rendez
AI_ACT_GAP.md (2 pages) + MODEL_CARD.md v3 + DATASHEET.md + fiche de revue reçue et réponses.
S24. Du modèle au service : contrat, tests de propriété, latence
1,5 hMise en service (deployment, model serving) : sérialiser le champion, l'exposer derrière l'API FastAPI du gabarit (/predict avec abstention, /health, /model-info), écrire soi-même quatre tests d'intégration. En poste, c'est la différence entre un notebook et un livrable.
Les maths, les données, le livrable
Ce qu'on démontre
Contrat de schéma (schema contract) en entrée : schéma typé et domaine de chaque variable (pydantic). Tests de propriété (property-based tests) : invariance predict(chargé) = predict(entraîné) ; monotonie : le score croît avec PAY_0 ; latence p50 et p95.
Données et outils
FastAPI, pydantic, joblib, pytest (devcontainer)
Ce que vous rendez
Dossier service/ avec API, quatre tests d'intégration verts, latences p50/p95 dans MODEL_CARD.md.
S25. Examen individuel sans IA : papier, puis pratique hors ligne
2,5 hConditions à cadrer avec l'école (à confirmer) : postes ou portables en mode examen, réseau coupé, documentation scikit-learn locale autorisée. Ce que l'examen teste : ce que vous savez faire seul en deux heures, autrement dit un entretien technique.
Les maths, les données, le livrable
Ce qu'on démontre
Partie A (45 minutes, papier) : deux dérivations de la liste publiée et la lecture critique d'un code défectueux. Partie B (1 h 45, poste hors ligne) : un jeu tabulaire inédit avec une fuite cachée et une composante temporelle ; pipeline sans fuite, métrique avec IC, seuil par coût, note d'une page.
Données et outils
Papier ; Python, scikit-learn, pandas hors ligne ; jeu inédit préparé par l'enseignant
Ce que vous rendez
Copie papier + notebook et note d'une page rendus sur clé.
S26. Soutenances : démonstration en direct, dérivation tirée au sort
3 h12 équipes × 14 minutes (5 de pitch, 9 de questions) ; au-delà, deux salles ou 12 minutes (à confirmer). Je clone le dépôt, je lance make reproduce et l'API, je modifie une entrée et un membre tiré au sort prédit la sortie avant l'exécution. Praticien invité (à confirmer).
Les maths, les données, le livrable
Ce qu'on démontre
Attendu : la décision cadrée en S0, la règle pré-enregistrée, le champion et son IC, le seuil et son coût, la couverture conforme, l'équité, la surveillance, l'AI Act. Une dérivation au tableau, tirée au sort.
Données et outils
Dépôt d'équipe projeté, devcontainer, urne de questions, grille d'oral
Ce que vous rendez
Support de 10 diapositives maximum déposé dans le dépôt avant la séance ; grille d'oral par étudiant.
Rendu final : le projet livré
À confirmer : deux semaines après le bloc de janvier (fin janvier ou début février 2027), tag git final.
Ce que vous rendez
- Dépôt final tagué : make reproduce, make compare, tests, service/ avec API, CI verte, README suivi par une autre équipe.
- Rapport de 8 pages maximum : cadrage, données et fuites, méthodes, comparaison avec IC, seuil et coût, prédiction conforme, équité, surveillance, valeur en euros, limites.
- MODEL_CARD.md v3, DATASHEET.md, MONITORING.md, AI_ACT_GAP.md, MEMO_CLIENT.md, DECISIONS.md et annexe IA complets.
- Réflexion de 300 mots rédigée en séance (jour 5) et fiche individuelle d'une page : ma contribution, ce que j'ai vérifié moi-même.
Les preuves que vous avez réfléchi
- La réflexion de 300 mots a été écrite en salle sans IA et cite des chiffres de votre projet ; la fiche individuelle est recoupée avec les livrables signés.
- L'examen, la dérivation au tableau et la modification en direct ont déjà vérifié la maîtrise individuelle ; le rendu final doit être cohérent avec ce qui a été montré.
Vérification en salle, sans IA
Pas de bloc suivant : la vérification finale est l'examen S25 et la soutenance S26. Un entretien de 10 minutes peut être demandé en cas d'incohérence entre le rendu et les traces.
Construire avec l'IA, sans tricher
L'IA générative est autorisée et même attendue sur une partie du travail. Ce qui est noté, c'est ce que vous savez dériver, expliquer et vérifier sans elle.
- Deux voies, comme le modèle « two-lane » de l'université de Sydney (Bridgeman, Liu et Weeks 2024) : la note certifiante vient d'épreuves en présence sans IA, soit 55 % ; le projet entre les blocs est ouvert, l'IA y est autorisée et déclarée. Les niveaux d'usage suivent l'AI Assessment Scale 2 (Perkins, Roe et Furze 2025).
- Aucun détecteur d'IA : ils ne sont ni exacts ni fiables (Weber-Wulff et al. 2023), OpenAI a retiré le sien en 2023, et ils pénalisent les non-natifs (Liang et al. 2023). La preuve vient de vous : une dérivation en salle, un oral sur votre code, des chiffres reproductibles.
- Déclarer un usage de l'IA n'est jamais pénalisé. Ne pas le déclarer là où il est interdit, ou inventer un chiffre, une source ou un résultat, est une fraude traitée selon le règlement de l'école (à confirmer).
Les cinq niveaux d'usage de l'IA
1 · No AI (sans IA)
Aucun outil d'IA ; papier, poste hors ligne ou dépôt projeté sans assistant.
S'applique à : Contrôles, chasse à l'erreur, oraux, examen S25, soutenance, réflexion de 300 mots.
2 · AI Planning (IA pour planifier)
L'IA peut expliquer un théorème, proposer un plan, aider à réviser ; rien de ce qu'elle produit n'est rendu.
S'applique à : Préparation des contrôles, cadrage, implémentations « from scratch » (l'IA explique, elle n'écrit pas le code).
3 · AI Collaboration (IA en collaboration, sortie évaluée)
L'IA peut proposer des brouillons et relire ; chaque chiffre et chaque décision est vérifié par l'équipe, et l'usage est déclaré.
S'applique à : Notes de jalon, rapport final, fiche de modèle, fiche de données, mémo client, analyse d'écart AI Act, support de soutenance.
4 · Full AI (IA complète, jugement humain)
L'IA peut produire du code si chaque sortie est testée, comprise, déclarée et explicable à l'oral par n'importe quel membre.
S'applique à : Plomberie du dépôt (S8, S24), pipelines sklearn, figures, scripts d'expérience, API, CI.
5 · AI Exploration (IA explorée)
L'usage de l'IA est l'objet de l'exercice : on vous note sur la façon de la piloter, de la contredire et de prouver ses erreurs.
S'applique à : Annexe IA (deux erreurs prouvées par jalon), IA comme premier relecteur puis contre-vérification humaine.
Ce qui rend la triche inutile
Contrôles sur papier, sans IA, en fin de journée
30 minutes en fin de chaque journée sur les dérivations du jour, et un contrôle un peu plus long au début des blocs 2 et 3, avec des questions sur votre propre dépôt.
Détecte : Celui qui a fait générer les dérivations sans les comprendre, et l'écart entre le rendu d'équipe et ce que chacun sait faire seul.
Oraux tirés au sort sur votre propre code
À chaque fin de journée, quelques étudiants tirés au sort ouvrent leur dépôt : expliquez cette fonction, modifiez-la, dites ce qui va se passer, lancez. Tout le monde passe au moins une fois.
Détecte : Le membre passif et le code collé dont personne ne connaît la logique. Prédire l'effet d'une modification sépare comprendre de réciter.
Journal de décisions et prédictions écrites avant les expériences
DECISIONS.md consigne chaque choix avec l'alternative rejetée ; avant chaque expérience notée, la prédiction est déposée en issue.
Détecte : La rationalisation après coup, le projet généré en une nuit, le passager clandestin.
Examen individuel hors ligne et soutenance avec démonstration en direct
Jour 6 : dérivations sur papier puis un jeu inédit avec une fuite cachée, sur un poste sans réseau. En soutenance, je modifie une entrée et un membre tiré au sort prédit la sortie avant l'exécution.
Détecte : Le pitch appris par cœur sans maîtrise du code, et ce que vous savez vraiment faire seul en conditions d'entretien.
La note
55 % de la note est individuelle et obtenue en salle sans IA : contrôles, examen, oraux.
Les références du cours
Pour approfondir. Gratuit = une version intégrale et légale est en ligne.
Lisez le chapitre correspondant avant chaque bloc. Version Python gratuite.
Le texte des dérivations : moindres carrés et ridge (ch. 3), noyaux (ch. 5 et 12), boosting (ch. 10), forêts (ch. 15). Gratuit.
Les rappels d'algèbre linéaire, de calcul différentiel et de probabilités que le cours suppose. Gratuit.
S10 suit ce livre : PAC, VC, Rademacher ; le théorème de représentation (ch. 16) sert à S9. Gratuit.
Convexité, dualité et KKT pour S5 et S9. Gratuit.
La lecture probabiliste : MLE, MAP, calibration, EM (S2, S6, S7, S17). Gratuit.
Noyaux (ch. 6) et mélanges gaussiens (ch. 9) pour S9 et S17. Gratuit.
Rétropropagation, initialisation, régularisation des réseaux (ch. 6 à 8) pour S18 et S19. Gratuit.
L'inférence derrière S1 : Gauss-Markov, erreurs-types, hétéroscédasticité. Non gratuit.
Validation croisée purgée et sur-apprentissage (overfitting) des backtests : l'avertissement temporel de S3 et S20. Non gratuit.
Le côté pratique de scikit-learn : pipelines, hyperparamètres, mise en production. Notebooks gratuits.
Free companion notebooksCourbes de coût et de profit, seuil de décision (S7, S22) ; à lire avant la note « Seuil et coût ».
Et quatre ressources en accès libre
Questions fréquentes
Par quoi on commence, le modèle ?
Non, par le cadrage, et c'est toute la matinée du jour 1 : quelle décision quelqu'un doit prendre, quelle question on pose aux données, quelle cible et ce qu'elle ne capture pas, quelle métrique pour le métier et laquelle pour le modèle, quels garde-fous, puis le cadre de travail et la pipeline de données. Un modèle qui répond à la mauvaise question est un très bon modèle inutile. Les Shadoks disaient « pourquoi faire simple quand on peut faire compliqué » ; nous, on fait l'inverse.
Puis-je utiliser ChatGPT, Claude ou Copilot pour le projet ?
Oui, pour tout ce qui est au niveau 4 : plomberie du dépôt, pipelines, API, figures, CI ; vous déclarez, vous testez, vous expliquez à l'oral. Les « from scratch » sont au plus niveau 2 : l'IA explique l'algorithme, elle n'écrit pas le code. Contrôles, examen, oraux et soutenance sont sans IA. Déclarer n'est jamais pénalisé ; inventer un chiffre est une fraude.
Pourquoi autant de maths si scikit-learn fait tout en trois lignes ?
Parce que les trois lignes ne vous diront pas pourquoi le score monte quand vous standardisez avant la coupe, pourquoi le lasso met des zéros exacts, ni si la différence entre deux AUC est établie. En comité, « c'est la librairie qui fait ça » ne passe pas haha.
Comment sont notés les membres d'une équipe où quelqu'un ne travaille pas ?
55 % de la note est individuelle et sans IA. Les notes d'équipe sont modulées par les livrables signés (une fonction, une ligne d'ablation, une erreur du top 20 par membre, interrogés à l'oral). Un membre sans livrable défendu à l'oral est reçu individuellement.
Que se passe-t-il en cas d'absence, de retard ou d'échec à un jalon ?
Absence justifiée à un contrôle : note neutralisée ; non justifiée : zéro, et seuls les 4 meilleurs contrôles sur 5 comptent. Examen et soutenance se rattrapent sur justificatif, selon le règlement de l'école (à confirmer). Tag en retard : 10 % par jour ouvré, trois jours maximum.
Faut-il installer quelque chose avant octobre, et les données sont-elles réelles ?
Un gabarit de dépôt et un devcontainer testé (GitHub Codespaces ou Docker) arrivent avant le bloc 1 ; en local, Python 3.12 et git suffisent. Les données sont réelles : UCI Default of Credit Card Clients (30 000 clients) et UCI Bike Sharing (demande horaire 2011-2012), licence CC BY 4.0. Comptez 15 à 20 heures par personne entre les blocs.
Ce qui reste à confirmer
Cette maquette est une proposition d'enseignant. Voici honnêtement ce qui dépend de l'école ou reste à arbitrer.
- Journées de 9 h, horaires à confirmer. Chaque séance a un cœur (dérivation + vérification) et une extension qui saute si on déborde ; le jour 6 n'a aucune marge.
- Calendrier : le bloc 1 est fixé aux 14 et 15 octobre 2026 ; blocs 2 et 3, jalons et positionnement dans la maquette (électif S7 ou option INFO, parcours IAM, en S9) sont à confirmer, hors vacances indicatives (17 octobre au 1er novembre 2026, 19 décembre 2026 au 3 janvier 2027).
- Conditions des épreuves sans IA : salle, postes hors ligne ou mode examen, 40 étudiants pour un seul enseignant, documentation locale, aménagements : à cadrer avec le règlement de l'école.
- Réglementation mouvante : les dates de l'AI Act reflètent le règlement (UE) 2026/1744 du 27 juillet 2026 ; on relit le texte consolidé le jour de S16 et S23, jamais les diapositives de l'an dernier. Les généraux se préparent toujours à la guerre précédente.
Prendre de l'avance dès maintenant
Le parcours Machine Learning tourne dans votre navigateur, sans installation ni compte. Faites-le avant octobre : la première séance commencera plus haut.
Commencer le parcours ML, gratuitementCette page compagnon est tenue par Sitraka Forler, enseignant vacataire à Centrale Marseille. Le syllabus, les dates, les salles et le règlement des épreuves qui font foi sont ceux de l'école. Une erreur ? Signalez-la et je la corrige.