← Mes projets

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.

Les 100 points du TD et la droite trouvée
Nuage de 100 points et droite de régression

descente de gradient meilleure droite exacte

Le paysage de l'erreur selon m et b, et le chemin de la descente
départ arrivée optimum force brute
Données
  • –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).

  1. 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.
  2. Encoder. Les oui/non en 1/0, le genre et le niveau d'études en nombres.
  3. Élaguer. 20 variables retirées, corrélées à plus de 0,85 avec une autre.
  4. Découper et centrer-réduire. 80 % des journées pour apprendre, 20 % pour tester.
  5. Comparer. Quatre familles de modèles, chacune affinée par recherche en grille et validation croisée à 5 plis.

Les scores du notebook

Exactitude sur les journées de test, selon le modèle
ModèlePar défautAffiné
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.

Journées de test

Chargement des données…

Tous les modèles, rejoués

Exactitude sur les journées de test, selon le découpage. Scikit-learn, graines fixées.

journées tirées au hasard participants séparés toujours « aucun incident »
Exactitude de huit modèles avec et sans séparation des participants
Voir le tableau
ModèleJournées au hasardParticipants 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.

Les huit variables les plus utilisées par la forêt

    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

    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).