Cours et projet d'équipe · ESILV · 2023 – 2024
Apprentissage automatique
Trois cours d'intelligence artificielle, trois étapes : comprendre comment un modèle apprend, comparer des modèles sur de vraies données de santé, puis apprendre à faire dire à un modèle sur quoi il s'appuie. En rejouant notre projet en 2026, j'ai compris pourquoi son meilleur score, 98,9 %, était trop beau pour être vrai. Tous les calculs de cette page tournent dans votre navigateur.
Portage web et nouvelles analyses réalisés avec une assistance d'IA, à partir du TD et du notebook du projet.
3e année · TD de data science et IA
Apprendre une droite
Premier exercice d'apprentissage : trouver la droite y = m·x + b la plus proche de 100 points, en minimisant l'erreur quadratique moyenne. Le TD essayait d'abord toutes les droites d'une grille, puis descendait la pente de l'erreur. À droite, le paysage de cette erreur montre ce que le TD ne disait pas.
descente de gradient meilleure droite exacte
- –pente m
- –ordonnée à l'origine b
- –erreur quadratique moyenne
- –optimum exact (m ; b ; erreur)
Force brute
La grille du TD, au pas de 0,1, compte 200 000 droites. À la précision de 0,01 que demandait l'énoncé, il en faudrait 20 millions. Et la meilleure reste approximative (m = 1,3 ; b = 9,1), faute de tomber pile sur l'optimum.
Une vallée étroite
Avec les réglages du TD (α = 0,0001, 500 itérations), la descente trouve vite la pente, m ≈ 1,48, mais b reste à 0,06 au lieu de 7,99. Les x valent entre 25 et 70 : l'erreur est 66 000 fois plus raide selon m que selon b. Un pas assez petit pour ne pas diverger sur m ne fait presque pas bouger b, même en 100 000 itérations.
Centrer-réduire
Ramener x à une moyenne nulle et un écart-type de 1 arrondit la vallée : avec α = 0,5, dix itérations suffisent pour l'optimum exact, m = 1,322 et b = 7,991. C'est pour cela qu'on normalise les données avant d'entraîner un modèle.
4e année · projet de machine learning, en équipe de trois
Prédire un incident de mesure
Il fallait mener un projet complet sur un jeu de données réel. Le nôtre venait de l'étude CitieS-Health de Barcelone : 288 volontaires suivis de septembre 2020 à mars 2021, avec chaque jour un questionnaire de bien-être, un test d'attention (le test de Stroop) et leur exposition à la pollution, au bruit et aux espaces verts. Chacun portait aussi, pendant une semaine, un tube qui mesurait le dioxyde d'azote (NO₂) respiré.
Notre cible : la variable incidence_cat, qui indique si ce tube a connu un incident
(aucun, de mobilité, physique, ou les deux).
- Nettoyer. Sur 3 348 journées, celles sans cible sont écartées, les trous des variables numériques comblés par la moyenne, les autres lignes incomplètes supprimées : restent 2 715 journées de 226 participants.
- Encoder. Les oui/non en 1/0, le genre et le niveau d'études en nombres.
- Élaguer. 20 variables retirées, corrélées à plus de 0,85 avec une autre.
- Découper et centrer-réduire. 80 % des journées pour apprendre, 20 % pour tester.
- Comparer. Quatre familles de modèles, chacune affinée par recherche en grille et validation croisée à 5 plis.
Les scores du notebook
| Modèle | Par défaut | Affiné |
|---|---|---|
| KNNk = 3 | 79,7 % | 82,1 % |
| SVMC = 10, noyau RBF | 72,2 % | 86,7 % |
| Arbre de décisionentropie, profondeur 19 | 98,2 % | 98,9 % |
| Forêt aléatoireentropie, profondeur 13, 200 arbres | 97,2 % | 98,7 % |
Verdict de l'époque : l'arbre de décision, avec 98,9 % de bonnes réponses sur quatre classes.
2026 · le projet rejoué
Un score trop beau
J'ai rejoué le notebook tel quel : mêmes nettoyages, même découpage et, au hasard des arbres près, mêmes scores. Puis j'ai posé la question qui manquait. L'incident concerne le tube de toute une semaine : la cible ne change jamais pour un participant, vérifié sur les 288. Or le découpage tirait des journées au hasard : les 210 participants présents dans le test avaient tous d'autres journées dans l'entraînement. Pour trouver la réponse, il suffisait de reconnaître la personne.
Le KNN ci-dessous tourne sur les vraies données, préparées comme dans le projet. Comparez les deux découpages.
Chargement des données…
- –de bonnes réponses
- –en répondant toujours « aucun incident »
- –des journées de test ont pour plus proche voisin le même participant
- –participants du test déjà vus à l'entraînement
Matrice de confusion
Chaque ligne : la réalité. Chaque colonne : la prédiction. La diagonale compte les bonnes réponses.
Une journée de test, et ses voisins
Les journées d'entraînement les plus proches, avec leur participant.
| Voisin | Participant | Incident | Distance |
|---|
Tous les modèles, rejoués
Exactitude sur les journées de test, selon le découpage. Scikit-learn, graines fixées.
Voir le tableau
| Modèle | Journées au hasard | Participants séparés |
|---|
4e année · cours d'explicabilité de l'IA
Ce que l'explicabilité aurait montré
Au semestre suivant, sur un autre jeu de données (les applications du Google Play Store), le cours d'explicabilité nous a appris à demander à un modèle sur quoi il s'appuie : importance des variables, valeurs de Shapley (SHAP).
Appliqué à la forêt du projet, ce réflexe démasque tout de suite le problème : ses huit variables préférées ne changent jamais d'un jour à l'autre pour un même participant. La mesure de son tube, son âge, ses dates de port… Le modèle ne prédit pas l'incident : il reconnaît la personne.
Importance de chaque variable dans les décisions de la forêt (somme de toutes les variables : 100 %). Toutes les huit sont fixes pour un participant.
Ce que j'en ai retenu
- Découper par individu Quand plusieurs lignes décrivent la même personne, on sépare les personnes entre apprentissage et test, jamais les lignes. Validé par participant, notre meilleur modèle tombe sous la réponse constante.
- Une référence naïve d'abord Répondre toujours la classe la plus fréquente donne ici 58 à 61 % : c'est le score à battre avant de parler de modèle.
- Se méfier du parfait 98,9 % sur des données humaines et quatre classes déséquilibrées, c'est une alarme, pas un résultat.
- Expliquer pour vérifier L'explicabilité n'est pas un supplément pour le client : c'est le contrôle qui démasque un modèle qui a trouvé un raccourci.
- Normaliser avant de descendre Des variables d'échelles différentes allongent la vallée de l'erreur : centrer-réduire fait passer de 100 000 itérations insuffisantes à 10.
- Relire ce que fait vraiment le code Le notebook voulait seulement ne pas centrer-réduire 15 variables déjà codées, des oui/non pour la plupart ; il les retirait en fait du modèle. On ne le voit qu'en rejouant.
Données : CitieS-Health Barcelona Panel Study, ISGlobal (Gignac et al., 2022), licence CC BY 4.0, doi:10.5281/zenodo.6503022. Les 100 points du TD viennent du dépôt GradientDescentExample de Matt Nedrich (licence MIT).