Comment utiliser Python pour analyser des données, détecter des erreurs dans un programme et comprendre les limites d’un algorithme ?

C’est le défi proposé aux élèves de spécialité NSI du lycée Lamarck à Albert à travers un exercice inspiré de l’épreuve pratique du baccalauréat.

Le sujet part d’une problématique bien réelle : les écarts de salaires entre les femmes et les hommes. Les élèves disposent de données représentant des employés et doivent écrire, tester et corriger plusieurs programmes Python afin de les analyser.

Derrière cette situation se cachent plusieurs compétences essentielles de la spécialité NSI : programmation Python, manipulation de données, tests, débogage et découverte d’un algorithme utilisé en intelligence artificielle.

Des données pour mener l’enquête

Chaque employé est représenté en Python par un dictionnaire contenant plusieurs informations :

  • son expérience professionnelle ;
  • son nombre d’années d’études après le baccalauréat ;
  • son sexe ;
  • son salaire.

Un premier petit jeu de données permet de tester facilement les programmes. Les élèves disposent ensuite d’un ensemble beaucoup plus important contenant 2 000 employés.

On passe donc rapidement d’un simple exercice de programmation à une véritable petite analyse de données.

Programmer pour extraire une information

Première mission : être capable de calculer automatiquement un salaire moyen selon un critère.

Par exemple :

Quel est le salaire moyen des femmes ?

Mais la même fonction doit également pouvoir répondre à d’autres questions :

Quel est le salaire moyen des employés ayant trois années d’études ?

ou encore :

Quel est le salaire moyen des personnes possédant une certaine expérience ?

Les élèves doivent donc concevoir une fonction suffisamment générale pour travailler avec plusieurs critères. L’énoncé prévoit également un cas important : si aucun employé ne correspond à la recherche, la fonction doit être capable de le signaler correctement.

C’est une compétence fondamentale en informatique : ne pas programmer uniquement pour un exemple, mais concevoir une solution réutilisable.

Tester son programme : une étape essentielle

Un programme qui s’exécute n’est pas nécessairement un programme correct.

Dans les fichiers proposés aux élèves, certaines fonctions sont volontairement incomplètes ou comportent des erreurs. Par exemple, des tests utilisant assert permettent de vérifier automatiquement le comportement attendu d’une fonction.

Les élèves doivent alors adopter une démarche proche de celle d’un développeur :

observer → formuler une hypothèse → tester → identifier l’erreur → corriger → vérifier à nouveau.

Cette activité permet de comprendre une idée essentielle de la programmation : les tests ne servent pas seulement à vérifier un programme terminé. Ils aident aussi à trouver les erreurs.

Calculer et interpréter un écart de salaire

Le projet demande ensuite de comparer les salaires moyens des femmes et des hommes.

La difficulté n’est plus seulement d’obtenir deux nombres. Il faut calculer correctement un écart exprimé en pourcentage, puis vérifier que le résultat obtenu est cohérent.

L’énoncé demande notamment aux élèves d’imaginer des tests permettant de vérifier qu’un résultat impossible n’est pas produit et de corriger la fonction fournie lorsqu’elle ne respecte pas les spécifications.

Les élèves découvrent ainsi qu’en informatique, une erreur peut être plus subtile qu’un programme qui plante.

Un programme peut parfaitement fonctionner… tout en donnant une mauvaise réponse.

Quand un algorithme reproduit les écarts présents dans les données

La dernière partie est particulièrement intéressante.

Les élèves découvrent l’algorithme des k plus proches voisins, souvent abrégé k-NN.

L’idée est relativement simple.

Pour proposer un salaire à une nouvelle personne, le programme recherche dans les données les trois employés dont les caractéristiques sont les plus proches, puis calcule la moyenne de leurs salaires.

Les caractéristiques prises en compte par le programme sont notamment l’expérience, les études et le sexe. Le fichier Python contient une fonction de distance utilisée pour rechercher les employés les plus proches.

Les élèves doivent alors comparer le salaire proposé à deux personnes possédant exactement la même expérience et le même niveau d’études, mais de sexes différents.

Et une question apparaît :

Pourquoi l’algorithme peut-il proposer deux salaires différents à deux profils pourtant comparables ?

Comprendre les biais des algorithmes

C’est probablement l’un des enseignements les plus importants du projet.

Un algorithme ne prend pas nécessairement une décision « neutre » simplement parce qu’il s’agit d’un programme informatique.

Tout dépend :

  • des données utilisées ;
  • des critères choisis ;
  • de la manière dont ces critères sont intégrés dans les calculs ;
  • des choix effectués par les programmeurs.

Les élèves ne se contentent donc plus d’écrire du Python.

Ils commencent à réfléchir à une question devenue centrale dans le monde numérique :

comment éviter qu’un algorithme reproduise ou amplifie des différences déjà présentes dans les données ?

C’est notamment l’un des enjeux que l’on retrouve aujourd’hui dans les systèmes utilisant l’intelligence artificielle.

Ce que les élèves travaillent réellement

À travers ce projet, plusieurs notions étudiées en spécialité NSI se rencontrent dans une même activité : les fonctions Python, les dictionnaires et listes, le parcours de données, les moyennes, les tests par assertions, le débogage, la notion de distance et l’algorithme des k plus proches voisins.

Mais les élèves développent également une compétence plus générale : apprendre à analyser un programme plutôt que simplement écrire du code.

Ils doivent comprendre ce qu’un programme est censé faire, identifier ses erreurs, proposer des tests et améliorer progressivement la solution.

La NSI, ce n’est pas seulement apprendre à coder

Cet exercice illustre bien la philosophie de la spécialité Numérique et Sciences Informatiques.

Apprendre Python est important, mais ce n’est qu’un outil.

L’objectif est surtout d’apprendre à :

décomposer un problème, manipuler des données, construire un algorithme, tester une solution, comprendre ses limites et porter un regard critique sur les résultats produits par une machine.

Autrement dit, il ne s’agit pas simplement d’apprendre à utiliser l’informatique.

Il s’agit d’apprendre comment l’informatique fonctionne.

Et parfois, quelques lignes de Python suffisent pour ouvrir des questions qui dépassent largement la programmation.

C’est aussi cela, la spécialité NSI au lycée Lamarck.