Activité pratique, programmer une IA avec IA

Durée1h15

Consignes globales

Dans cette activité, vous n’allez (presque) pas écrire de code vous-même : vous allez le faire produire par un agent IA de codage (par exemple GitHub Copilot). Votre travail à vous consiste à bien poser le problème, pour que l’agent IA puisse produire une solution pertinente.

Le déroulement est le suivant :

  1. Choisissez un des quatre problèmes présentés dans la section Quelques problèmes d’apprentissage ci-dessous.
  2. Parmi les solutions présentées dans Quelques solutions d’IA, identifiez celle qui est adaptée à votre problème, et justifiez brièvement votre choix.
  3. Parmi les métriques présentées dans Quelques métriques d’évaluation, identifiez celle qui permet d’évaluer la pertinence de la solution choisie, et justifiez brièvement votre choix.
  4. Demandez à votre agent IA de coder la solution retenue : chargement et préparation des données, entraînement, prédiction, puis calcul de la métrique choisie.
  5. Analysez le résultat obtenu : la valeur de la métrique est-elle satisfaisante ? Que pourriez-vous faire pour l’améliorer (autre solution, autres paramètres, préparation des données différente) ?
Important

L’agent IA sait très bien écrire du code, mais il ne sait pas choisir à votre place la solution ou la métrique adaptées à un problème donné : c’est le rôle que vous devez jouer. Un bon prompt commence donc par expliquer le problème, la solution retenue et la métrique d’évaluation, avant de demander du code.

Contenu de l’activité

Préparation de l’environnement

Avant de commencer, créez un projet uv dédié à cette séance. Dans un terminal, placez-vous dans le dossier de la séance (par exemple imt/s5/info/prog/session5), puis lancez la commande suivante :

​
uv init --no-package
uv init --no-package
uv init --no-package
uv init --no-package

C’est dans ce projet que l’agent IA écrira le code. Pensez à lui préciser que le projet est géré avec uv : les bibliothèques s’ajoutent avec uv add et les programmes s’exécutent dans l’environnement virtuel associé. Au besoin, revoyez la fiche Gestion moderne de projet Python avec uv.

Quelques problèmes d’apprentissage

Voici quatre problèmes d’apprentissage, chacun d’un type de tâche différent (classification, régression, clustering, détection d’anomalie) et appuyé sur un jeu de données de taille réduite disponible sur Kaggle.

C’est quoi, Kaggle ?

Kaggle est une plateforme en ligne (propriété de Google) devenue une référence en science des données et en apprentissage automatique. Elle héberge un vaste catalogue de jeux de données publics, couvrant des domaines très variés, que chacun peut télécharger et réutiliser. Elle est aussi connue pour ses compétitions, où l’on rivalise pour produire le modèle le plus performant selon une métrique fixée, et pour ses notebooks exécutables directement dans le navigateur. Le téléchargement d’un jeu de données nécessite un compte gratuit ; chaque jeu est accompagné d’une fiche décrivant ses colonnes et l’origine des données, utile au moment de l’exploration.

Classification supervisée

  • Problème : prédire l’espèce d’une fleur d’iris (setosa, versicolor ou virginica) à partir de ses mesures. La cible est une catégorie parmi trois ; chaque exemple est accompagné de son étiquette.
  • Jeu de données : Iris Species
  • Taille : 150 lignes, 4 variables numériques (longueur/largeur des sépales et des pétales) + 1 étiquette

Régression

  • Problème : prédire le montant des frais médicaux facturés par une assurance santé (charges). La cible est une valeur numérique continue.
  • Jeu de données : Medical Cost Personal Datasets
  • Taille : environ 1 338 lignes, 6 variables (âge, sexe, IMC, nombre d’enfants, statut fumeur, région)

Clustering

  • Problème : regrouper les clients d’un centre commercial en segments homogènes selon leur revenu et leur comportement d’achat. Aucune étiquette n’est fournie à l’avance, c’est au modèle de faire émerger une structure.
  • Jeu de données : Mall Customer Segmentation Data
  • Taille : 200 lignes, variables : âge, revenu annuel, score de dépense

Détection d’anomalie

  • Problème : détecter les transactions frauduleuses (très minoritaires) parmi des transactions bancaires normales.
  • Jeu de données : Credit Card Fraud Detection
  • Taille : 284 807 lignes au total, mais très déséquilibré (moins de 0,2 % de fraudes). Pour cette activité, ne chargez qu’un échantillon réduit (par exemple les 10 000 premières lignes avec pd.read_csv(..., nrows=10000)), afin de rester rapide à manipuler en séance.
A savoir

Pour chaque jeu de données, la page Kaggle correspondante décrit précisément les colonnes disponibles. Prenez quelques minutes pour la consulter avant de vous lancer.

Quelques solutions d’IA

Voici, brièvement, une solution d’IA adaptée à chacun des quatre problèmes ci-dessus. Trois d’entre elles ont été présentées dans l’UE ; la dernière (Isolation Forest) est nouvelle, mais repose sur un principe proche des forêts aléatoires que vous connaissez.

  • K plus proches voisins (KNN) : algorithme de classification supervisée qui attribue à un nouvel exemple (nouveau point) l’étiquette majoritaire parmi ses K voisins les plus proches dans le jeu d’entraînement.
  • Régression linéaire : algorithme d’apprentissage supervisé qui apprend une relation linéaire entre les caractéristiques d’entrée et une cible numérique continue, en minimisant l’écart entre les valeurs prédites et les valeurs réelles.
  • K-Means : algorithme de clustering non supervisé qui regroupe les exemples en K clusters : chaque point est assigné au centroïde le plus proche, puis les centroïdes sont recalculés de façon itérative jusqu’à stabilisation. Ne nécessite aucune étiquette.
  • Isolation Forest: algorithme de détection d’anomalie non supervisée qui construit des arbres de décision aléatoires qui isolent chaque exemple en le séparant du reste des données. Les points atypiques (anomalies) nécessitent en moyenne moins de coupures pour être isolés : ils sont donc repérés comme anomalies.

Quelques métriques d’évaluation

Voici quatre métriques pouvant être pertinentes pour évaluer une solution d’IA, selon le problème traité.

  • Exactitude (accuracy) : proportion de prédictions correctes parmi l’ensemble des prédictions. Adaptée à un problème de classification dont les classes sont à peu près équilibrées.
  • Erreur quadratique moyenne (MSE) / racine de l’erreur quadratique moyenne (RMSE) : mesure l’écart moyen entre les valeurs prédites et les valeurs réelles pour une variable numérique continue. Plus la valeur est faible, meilleure est la prédiction.
  • Score de silhouette : mesure, pour chaque point, à quel point il est bien regroupé dans son cluster (cohésion) par rapport aux autres clusters (séparation). Compris entre -1 et 1, plus il est proche de 1, meilleur est le clustering. Ne nécessite pas d’étiquettes réelles, ce qui la rend adaptée à l’évaluation d’un clustering.
  • Précision, rappel et F1-score : particulièrement utiles quand les classes sont très déséquilibrées (par exemple une fraude très minoritaire). L’exactitude seule serait trompeuse dans ce cas (un modèle qui prédit toujours “pas de fraude” aurait déjà une exactitude proche de 100 %) : la précision mesure la proportion de vraies fraudes parmi les cas prédits comme frauduleux, le rappel la proportion de fraudes effectivement détectées, et le F1-score combine les deux.

Étapes à faire réaliser par l’agent IA

Plutôt que de demander tout le programme d’un coup, faites produire le code étape par étape, en exécutant et en vérifiant le résultat de chaque étape avant de passer à la suivante. Chaque étape doit afficher des informations qui vous permettent de contrôler que tout se passe comme prévu.

À faire
  1. Chargement des données et statistiques descriptives

    • Charger le fichier CSV téléchargé depuis Kaggle (avec pandas).
    • Afficher le nombre de lignes et de colonnes, le nom et le type de chaque colonne, les premières lignes du tableau.
    • Afficher quelques statistiques par variable (minimum, maximum, moyenne, écart-type) et le nombre éventuel de valeurs manquantes.
    • Si le jeu de données contient une étiquette (espèce, fraude), afficher la répartition des exemples par classe : est-elle équilibrée ?
    • Si certaines variables ne sont pas numériques (par exemple sex, smoker ou region dans le jeu de données de régression), demander à l’agent de les convertir en valeurs numériques.
  2. Découpage en données d’apprentissage et de test (si pertinent)

    • Pour un problème supervisé (classification, régression), séparer les données en un ensemble d’apprentissage et un ensemble de test (par exemple 80 % / 20 %).
    • Afficher la taille de chaque ensemble et, pour la classification, la répartition des classes dans chacun : est-elle comparable à celle du jeu complet ?
    • Pour le clustering, ce découpage n’a pas de sens : le modèle est appliqué à l’ensemble des données. Pour la détection d’anomalie, l’étiquette de fraude ne doit pas être utilisée pour l’apprentissage, mais seulement pour l’évaluation.
    • Demandez-vous également s’il est utile de normaliser les variables (mettre toutes les variables à la même échelle), notamment pour les méthodes reposant sur des distances (KNN, K-Means).
  3. Création du modèle et affichage de ses hyper-paramètres (si pertinent)

    • Instancier la méthode d’apprentissage choisie (par exemple avec scikit-learn).
    • Afficher les hyper-paramètres utilisés, c’est-à-dire les réglages fixés avant l’apprentissage : le nombre de voisins K pour KNN, le nombre de clusters K pour K-Means, le nombre d’arbres et la proportion d’anomalies attendue (contamination) pour Isolation Forest, etc.
    • Justifier la valeur choisie pour chacun de ces hyper-paramètres.
  4. Entraînement du modèle

    • Entraîner le modèle sur les données d’apprentissage (ou sur l’ensemble des données pour les méthodes non supervisées).
    • Mesurer et afficher le temps d’entraînement (par exemple avec le module time).
  5. Application sur les données de test et évaluation

    • Appliquer le modèle entraîné aux données de test (ou à l’ensemble des données pour le clustering et la détection d’anomalie) et afficher quelques prédictions à côté des valeurs réelles quand elles sont connues.
    • Calculer et afficher la métrique d’évaluation choisie.
    • Afficher, si pertinent, les paramètres appris par le modèle : les coefficients de la régression linéaire (quelle variable influe le plus sur les frais médicaux ?), les centroïdes des clusters K-Means (comment décrire chaque segment de clients ?), le nombre de transactions signalées comme anomalies, etc.