Le cours, et l’atelier dans lequel il se pratique
Département de Mathématiques et Informatique, Faculté des Sciences et Techniques, Université Cheikh Anta Diop de Dakar
Contenu
Cette séance répond à la question fondatrice — qu’est-ce que le Machine Learning ? — puis installe l’atelier dans lequel il se pratique. À la fin de la séance, chacun sait situer le ML, nommer ses trois familles, et exécute sa première cellule de code.
ml \(\to\) Jupyter.Le mystère de la fraude
Chaque jour, des millions de transferts d’argent mobile circulent au Sénégal. Parmi eux, quelques centaines sont frauduleux — et l’opérateur les repère en temps réel. Pourtant, personne n’a écrit la règle « si le montant dépasse X et que l’heure est Y, alors fraude » : les fraudeurs changent de méthode chaque semaine, et toute règle écrite à la main serait obsolète avant d’être déployée.
Comment une machine peut-elle détecter ce qu’aucun programmeur ne sait décrire ? C’est exactement la question à laquelle répond le Machine Learning — et cette séance.
Des décisions apprises des données
Derrière des services quotidiens se cache la même mécanique : une machine qui a appris une règle de décision à partir de milliers d’exemples passés, au lieu qu’un programmeur l’écrive.
Quatre domaines, un seul mécanisme — et c’est ce mécanisme que le cours apprend à manier.
En programmation classique, les règles sont écrites à la main et appliquées aux données. En Machine Learning, on fournit des couples (données, réponses) et la machine produit la règle — qu’on appelle alors un modèle.
La transition
Trois ingrédients reviennent toujours : une tâche, de l’expérience (les exemples), et une mesure de performance. Il ne reste qu’à en faire une définition — c’est exactement ce que fit Tom Mitchell.
Arthur Samuel — 1959
Le Machine Learning est « le champ d’étude qui donne aux ordinateurs la capacité d’apprendre sans être explicitement programmés ». (« Field of study that gives computers the ability to learn without being explicitly programmed. »)
L’anecdote fondatrice
Samuel écrit un programme de jeu de dames qui joue des dizaines de milliers de parties contre lui-même. À force de parties, le programme apprend quelles positions mènent à la victoire — et finit par battre Samuel lui-même, qui n’était pourtant pas un grand joueur. La machine a dépassé son programmeur : elle n’a pas été programmée pour bien jouer, elle a appris à bien jouer.
L’idée en une phrase
La définition de Samuel dit quoi ; celle de Tom Mitchell (1997) dit comment le vérifier — elle rend l’apprentissage mesurable.
Définition de Mitchell
Un programme apprend de l’expérience \(E\), relativement à une tâche \(T\) et une mesure de performance \(P\), si sa performance sur \(T\), mesurée par \(P\), s’améliore avec \(E\).
Décryptage : \(T\) est ce qu’on veut faire ; \(E\) est ce qu’on montre à la machine (les exemples) ; \(P\) est le chiffre qui dit si ça marche. Apprendre \(=\) voir \(P\) monter quand \(E\) grandit. Sans \(P\), impossible de distinguer un programme qui apprend d’un programme qui récite.
Sur la fraude mobile money
\(T\) : classer chaque transfert en fraude ou légitime. \(E\) : l’historique de millions de transferts, étiquetés après enquête. \(P\) : la proportion de fraudes correctement détectées sur les transferts du mois suivant.
Sur le fil rouge du cours
\(T\) : prédire si le séjour hospitalier d’un patient sera long. \(E\) : un registre de \(10\,000\) patients passés, pour lesquels la réponse est connue. \(P\) : la proportion de prédictions correctes sur des patients jamais vus.
Le triplet \((T, E, P)\) est la grille de lecture de tout problème de ML : chaque séance du cours commencera, implicitement, par le remplir.
Énoncé
Une coopérative veut prédire le rendement d’arachide (en tonnes par hectare) de chaque parcelle, à partir de la pluviométrie, du type de sol et de la date de semis. Elle dispose des relevés complets des \(12\) dernières campagnes. Identifier \(T\), \(E\) et \(P\).
Correction
\(T\) : prédire le rendement d’une parcelle (un nombre). \(E\) : les relevés des \(12\) campagnes — parcelles avec leur rendement observé. \(P\) : l’écart moyen entre rendement prédit et rendement réel sur une campagne non utilisée pour apprendre. Noter que \(P\) n’est pas « un pourcentage de bonnes réponses » : la sortie étant un nombre, on mesure une erreur — la distinction arrive dans quelques diapositives.
Le ML est un sous-domaine de l’Intelligence Artificielle ; le Deep Learning est un sous-domaine du ML. Ce cours occupe le cercle du milieu.
Le pont avec le cours d’IA
Le raisonnement bayésien et les MDP rencontrés en IA reviendront : le ML en est le prolongement naturel, quand les probabilités cessent d’être données et doivent être estimées à partir des données.
Supervisé : des exemples étiquetés, une frontière à apprendre. Non supervisé : des données sans étiquettes, des structures à découvrir. Par renforcement : un agent qui apprend de ses récompenses, par essai-erreur.
Définition
En apprentissage supervisé, chaque exemple est accompagné de la bonne réponse (l’étiquette). La machine apprend l’application entrée \(\to\) sortie, pour répondre ensuite sur des entrées nouvelles.
C’est de très loin le type le plus utilisé en pratique — l’essentiel de la valeur créée par le ML aujourd’hui repose sur ce simple schéma entrée \(\to\) sortie. Les Séances 3 à 8 lui sont consacrées.
Énoncé
Pour chaque tâche, dire s’il s’agit de régression ou de classification : (a) prédire la durée d’un séjour hospitalier en jours ; (b) décider si un mail est un spam ; (c) prédire le prix d’un mouton de Tabaski ; (d) reconnaître la lettre manuscrite sur une copie (\(26\) possibilités).
Correction
(a) régression — la sortie est un nombre ; (b) classification — deux catégories ; (c) régression ; (d) classification — la sortie est une catégorie parmi \(26\), pas une quantité qu’on mesure. Le critère est toujours la nature de la sortie, jamais celle des entrées.
Définition
En apprentissage non supervisé, les données arrivent sans étiquettes. La machine ne prédit pas une réponse : elle découvre une structure cachée dans les données.
Plus exploratoire, souvent préparatoire au supervisé — la Séance 9 y revient.
Définition
En apprentissage par renforcement, un agent agit dans un environnement et reçoit des récompenses. Personne ne lui montre la bonne action : il la découvre par essai-erreur, en maximisant sa récompense cumulée.
Pour être complet
Il existe des variantes intermédiaires (semi-supervisé, auto-supervisé) — hors du périmètre de ce cours, qui se concentre sur le supervisé et ouvre une porte vers le non supervisé.
Énoncé
Pour chaque situation, identifier le type d’apprentissage : (a) regrouper \(50\,000\) abonnés télécom en profils de consommation, sans catégories prédéfinies ; (b) prédire si un patient sera réadmis sous \(30\) jours, à partir de dossiers où la réadmission est connue ; (c) faire apprendre à un thermostat à climatiser une salle en le récompensant quand la température est bonne et la consommation basse.
Correction
(a) non supervisé (clustering) — aucune étiquette ; (b) supervisé (classification) — l’étiquette réadmis/non réadmis est présente dans les données ; (c) par renforcement — pas d’étiquette, mais une récompense et de l’essai-erreur. La question à se poser est toujours : qu’est-ce que la machine reçoit pour apprendre ?
| Terme | Ce que c’est | Dans le fil rouge |
|---|---|---|
| Caractéristiques (features, \(X\)) | les variables qui décrivent un exemple | âge, glycémie, hémoglobine, fièvre, saison |
| Étiquette (label, \(y\)) | la réponse à prédire | séjour long ou court |
| Exemple | un cas complet — caractéristiques et étiquette | un patient du registre |
| Jeu d’entraînement | les exemples montrés à la machine | les patients passés |
| Modèle | la règle apprise qui prédit \(y\) à partir de \(X\) | le produit final du cours |
Définition
Généraliser, c’est prédire juste sur des exemples jamais vus pendant l’apprentissage. C’est le seul objectif du ML : un modèle qui ne sait répondre que sur ses données d’entraînement n’a rien appris — il a mémorisé.
Analogie
Un étudiant qui récite par cœur les exercices du TD peut échouer à l’examen : réussir le TD ne prouve rien, réussir des exercices nouveaux prouve la compréhension. Pour le modèle, c’est pareil — on gardera toujours des données de côté pour lui faire passer un examen.
Cette idée — séparer des données pour évaluer honnêtement — structure tout le cours ; elle est mise en pratique dès la Séance 3.
Erreur fréquente
Croire un chiffre de performance sans demander sur quelles données il a été mesuré. Un score calculé sur les données d’entraînement est une illusion — toute la suite du cours apprend à mesurer honnêtement.
Trois séances d’outillage (environnement, Python, données), sept séances de Machine Learning — presque toutes consacrées au supervisé, avec l’ouverture non supervisée en Séance 9 — et un projet final sur données réelles. Tout commence ici, par l’atelier.
Le fil rouge
DataSANTÉ-221 : un registre hospitalier de \(10\,000\) patients de cinq régions du Sénégal — âge, glycémie, hémoglobine, fièvre, saison — avec la durée de séjour observée. Toutes les notions du cours s’y incarnent d’abord.
Le choix du cours
Le cours travaille en local : tout s’installe sur la machine de chacun. C’est l’outillage du métier — celui qui fonctionne sans connexion, sur ses propres fichiers, et que l’on contrôle de bout en bout.
Erreur fréquente
Compter sur un service en ligne « le jour J » : une coupure de connexion pendant une évaluation ou une démonstration, et plus rien ne tourne. L’atelier local, lui, ne dépend que de la machine.
Quatre étages
Anaconda installe Python et l’outil conda ; conda crée l’environnement ml ; l’environnement contient les bibliothèques ; Jupyter est la salle de travail où on les utilise.
Toute la séance consiste à monter ces étages, un par un, dans l’ordre.
| Terme | Ce que c’est |
|---|---|
| Terminal | La fenêtre où l’on tape des commandes texte (Anaconda Prompt sous Windows ; Terminal sous macOS et Linux). |
| Distribution | Un paquet « tout-en-un » : Anaconda fournit Python, conda et des centaines de bibliothèques. |
| Environnement | Une bulle isolée contenant une version de Python et ses bibliothèques. Le nôtre s’appelle ml. |
| Bibliothèque | Du code prêt à l’emploi qu’on importe : numpy, pandas, matplotlib, scikit-learn. |
| Notebook | Un document interactif mêlant texte, code et résultats — le format de tous les TP. |
fit / predict.Les Séances 1 et 2 apprennent à manier les trois premières ; scikit-learn entre en scène à la Séance 3 — et n’en sort plus.
Un notebook est une suite de cellules. Les cellules Markdown portent le texte ; les cellules de code s’exécutent avec Maj+Entrée et affichent leur résultat juste en dessous. On expérimente, on corrige, on réexécute — le cycle naturel du ML.
Énoncé
Associer chaque besoin à l’outil de la pile : (a) créer une bulle isolée pour le cours ; (b) lire un fichier de patients et filtrer les plus de \(60\) ans ; (c) entraîner un arbre de décision ; (d) écrire et exécuter le TP cellule par cellule.
Correction
(a) conda (commande conda env create) ; (b) pandas ; (c) scikit-learn ; (d) Jupyter. Chaque outil a un rôle unique — c’est leur empilement qui fait l’atelier.
Le chemin complet
1. Télécharger Anaconda. ;2. L’installer. ;3. Vérifier conda dans un terminal. ;4. Créer l’environnement ml. ;5. L’activer. ;6. Lancer Jupyter et exécuter la cellule de vérification.
Chaque étape se vérifie avant de passer à la suivante : une installation qui échoue à l’étape \(4\) se répare à l’étape \(4\) — jamais en recommençant tout.
.exe (\(64\) bits). macOS : installeur .pkg — attention au choix entre puce Apple Silicon (M1 à M4) et Intel. Linux : script .sh.Erreur fréquente
Sur macOS, télécharger la version Intel sur une machine Apple Silicon (ou l’inverse) : l’installation passe, mais les performances s’effondrent. Vérifier sa puce dans « À propos de ce Mac ».
.exe, accepter les choix par défaut — installation « Just Me », ne pas cocher l’ajout manuel au PATH (l’Anaconda Prompt s’en charge proprement)..pkg et suivre l’assistant.bash Anaconda3-*.sh, accepter la licence, accepter l’initialisation de conda en fin d’installation, puis rouvrir le terminal.Erreur fréquente
Installer dans un dossier dont le chemin contient des espaces ou des accents (« C:\Users\Mamadou Bâ\... ») : certains outils s’y perdent. En cas de doute, choisir un chemin court et sans accents, par exemple C:\anaconda3.
Windows : menu Démarrer \(\to\) Anaconda Prompt. macOS / Linux : application Terminal.
Si une version s’affiche, l’étage Anaconda est posé. Sinon, voir le dépannage en fin de séance — la cause est presque toujours l’utilisation du mauvais terminal sous Windows.
Réflexe à prendre
Sous Windows, toutes les commandes du cours se tapent dans l’Anaconda Prompt — jamais dans l’invite de commandes classique, qui ne connaît pas conda.
L’environnement du cours est décrit dans un petit fichier texte, environnement-ml.yml, distribué avec la séance :
Une ligne par bibliothèque : le fichier est la liste de courses de l’atelier. Le même fichier recrée le même environnement sur n’importe quelle machine — c’est sa force.
Dans le terminal, se placer dans le dossier contenant le fichier (commande cd), puis :
En cas d’absence du fichier, la commande équivalente tient en une ligne :
La création ne se fait qu’une seule fois : l’environnement reste installé pour tout le cours.
Ce que fait l’activation
Activer, c’est entrer dans la bulle : à partir de là, python et jupyter désignent ceux de l’environnement ml, avec ses bibliothèques. Le préfixe (ml) dans l’invite confirme qu’on est dedans.
Réflexe à prendre
À chaque nouvelle session de travail : ouvrir le terminal, taper conda activate ml, puis lancer Jupyter. L’activation ne survit pas à la fermeture du terminal.
Ctrl+C dans le terminal.Erreur fréquente
Fermer la fenêtre du terminal pendant le travail : Jupyter s’éteint avec elle et les cellules cessent de répondre. Le terminal reste ouvert, en arrière-plan, toute la session.
Créer un notebook, le renommer seance0_test, puis taper dans la première cellule :
Maj+Entrée exécute la cellule : le texte s’affiche dessous, et une cellule vide apparaît. C’est le geste fondamental — il sera répété des centaines de fois dans ce cours.
Ce qui vient de se passer
La cellule a traversé toute la pile : Jupyter a transmis le code au Python de l’environnement ml, qui l’a exécuté et renvoyé le résultat. Quatre étages, un aller-retour — en quelques millisecondes.
Dans une nouvelle cellule, vérifier que les quatre bibliothèques répondent :
Quatre numéros de version s’affichent : l’atelier est complet. Cette cellule est le certificat d’installation — elle ouvre tous les notebooks du cours, et son échec désigne immédiatement l’étage en panne.
Énoncé
Un étudiant tape les trois commandes suivantes, dans cet ordre : conda activate ml, puis jupyter notebook, puis il ferme le terminal. (a) Que fait chacune des deux commandes ? (b) Que se passe-t-il à la fermeture du terminal ?
Correction
(a) La première entre dans la bulle ml (le préfixe (ml) apparaît) ; la seconde démarre Jupyter, dont le terminal devient le moteur. (b) Le moteur s’éteint avec le terminal : le notebook ouvert dans le navigateur ne répond plus. Il fallait laisser le terminal ouvert.
Pour aller plus loin
Visual Studio Code (code.visualstudio.com) est l’éditeur le plus répandu du métier. Avec ses extensions Python et Jupyter, il ouvre les notebooks du cours et sait utiliser l’environnement ml (sélecteur de noyau, en haut à droite).
.py, recherche dans le code, flake8 intégré.Une arborescence pour tout le cours
Créer un dossier intro-ml (chemin sans espaces ni accents), avec un sous-dossier par séance : seance00, seance01, … Chaque sous-dossier reçoit le notebook de TP et les données de la séance. Lancer Jupyter depuis intro-ml.
Une arborescence stable évite la moitié des pannes : fichiers de données « introuvables », notebooks égarés, doublons. L’autre moitié se traite à la section suivante.
| Symptôme | Cause probable et remède |
|---|---|
conda~:~commande introuvable |
Mauvais terminal (Windows) : ouvrir l’Anaconda Prompt. Sous Linux : rouvrir le terminal après l’installation. |
ModuleNotFoundError~:~sklearn |
Jupyter lancé hors de la bulle : fermer, conda activate ml, relancer. |
L’invite n’affiche pas (ml) |
L’activation a été oubliée ou faite dans un autre terminal. |
| Les cellules ne répondent plus | Le terminal-moteur a été fermé : relancer Jupyter (l’environnement, lui, est intact). |
EnvironmentLocationNotFound |
L’environnement n’a jamais été créé : refaire l’étape \(4\). |
Énoncé
Une étudiante lance jupyter notebook, ouvre un notebook et exécute import sklearn : ModuleNotFoundError. Pourtant, l’étape \(4\) s’était terminée sans erreur la veille. (a) Quelle est la cause la plus probable ? (b) Donner la séquence exacte de commandes qui répare.
Correction
(a) Jupyter a été lancé hors de l’environnement ml : il utilise le Python de base, où scikit-learn n’est pas installé. L’environnement, créé la veille, existe toujours — il n’était simplement pas activé. (b) Fermer Jupyter (Ctrl+C), puis : conda activate ml et jupyter notebook.
Avant de quitter la séance
1. conda --version répond. ;2. conda activate ml affiche le préfixe (ml). ;3. Jupyter s’ouvre dans le navigateur. ;4. La cellule de vérification affiche les quatre versions. ;5. Le dossier intro-ml existe, sans espaces ni accents dans son chemin.
Cinq cases cochées : la machine est prête pour les dix séances. Une case manquante : la table « symptôme et remède » donne la réparation — et la séance ne se termine pas avant que tout le monde coche les cinq.
L’essentiel
conda \(\to\) environnement ml \(\to\) bibliothèques \(\to\) Jupyter ; le rituel de chaque session est conda activate ml puis jupyter notebook.ml : tout semble marcher — jusqu’au premier import sklearn.Séance 1 — Python de zéro
L’atelier est monté ; il reste à apprendre la langue qu’on y parle. La Séance 1 enseigne Python en partant de zéro — variables, listes, conditions, boucles, fonctions — entièrement dans Jupyter, sur l’environnement installé aujourd’hui.