L'apprentissage non supervisé
- Leçon 3
- 50 min
- Module 1 : Comprendre l'apprentissage automatique
Leçon 3 sur 27 · Apprentissage automatique : du problème à un modèle fiableL'apprentissage non supervisé
1. Comprendre l'apprentissage automatique
2. Cadrer le problème de prédiction
3. Évaluer les modèles supervisés
4. Créer les premiers modèles
5. Essayer d'autres familles de modèles
6. Régler et finaliser le modèle
7. Comprendre et choisir le modèle
8. Préparer la passation du modèle
Ce que vous saurez faire
Comprenez ce qu’un programme peut apprendre à partir de données sans étiquettes : des groupes d’exemples semblables. Vous pourrez ensuite utiliser le regroupement pour explorer des données. Vous saurez aussi pourquoi son résultat est une suggestion à juger, et non une réponse à vérifier.
Carnet JupyterFaites cette leçon dans un carnet Jupyter
Le carnet (notebook) Jupyter trie les échantillons de couleur de la dernière leçon en piles, sans leurs noms. Il compare ensuite les piles aux noms. Puis il fait un premier regroupement des clients de Larkfield. Ses cellules de préparation installent pandas et scikit-learn et téléchargent les données d’exercice. Aucune configuration locale n’est donc nécessaire. Environ 20 minutes.
Le carnet est en anglais. Colab et Kaggle ouvrent votre propre copie. Il faut un compte Google ou Kaggle gratuit. Vous êtes bloqué ? Consultez le carnet de solution.
Avant de commencerCe qu’il faut savoir et avoir sous la main
Ce que vous devez savoir
- Les caractéristiques, les étiquettes,
Xety, présentés dans L’apprentissage supervisé : caractéristiques et étiquettes. - Les échantillons de couleur représentés par trois nombres (lumière rouge, verte et bleue), dans L’apprentissage supervisé : un tout petit exemple.
Ce qu’il vous faut sur votre ordinateur (seulement pour travailler localement; le carnet n’en a pas besoin)
- Rien pour le moment. Vous créerez le dossier de projet
~/projects/ticket-modelau module 2, dans Définir une référence de base : préparer votre projet.
Le carnet a été testé dans Jupyter sur macOS. Il utilisait Python 3.14.6, pandas 3.0.6, scikit-learn 1.9.1 et matplotlib 3.11.2.
Trier une boîte de boutons
Section intitulée « Trier une boîte de boutons »Imaginez une grande boîte de boutons mélangés. Quelqu’un vous demande de les trier. Personne ne vous indique les bons groupes, et personne n’a écrit de noms sur les boutons. Vous commencez quand même : vous mettez les boutons semblables ensemble. Vous obtenez bientôt une pile de boutons rouges, une pile de noirs et une pile de blancs.
Votre ami trie la même boîte autrement : les grands boutons et les petits boutons. Un tailleur les trie selon le nombre de trous, parce que c’est ce qui compte pour la couture. Personne n’a tort. Chaque tri révèle une structure réelle dans les boutons. Le meilleur dépend de ce que vous voulez faire des piles.
C’est la deuxième façon dont un programme peut apprendre. Il n’y a pas de bonnes réponses pour guider l’apprentissage. Le programme cherche seul des groupes d’exemples semblables.
Apprendre sans superviseur
Section intitulée « Apprendre sans superviseur »En apprentissage supervisé, chaque exemple a une étiquette : la bonne réponse donnée par un superviseur. Mais souvent, il n’y a pas d’étiquette. Les étiquettes peuvent coûter trop cher : personne ne lira et n’étiquettera un million de vieux courriels. Ou personne ne connaît encore la bonne réponse. Avant qu’un magasin étudie ses clients, personne ne peut dire quels « types » de clients il a.
Sans étiquettes, un programme peut quand même trouver une structure dans les caractéristiques. Il trouve des exemples semblables entre eux et différents des autres. C’est l’apprentissage non supervisé : apprendre à partir des caractéristiques seules, sans superviseur qui donne les bonnes réponses. La méthode reçoit X, et il n’y a pas de y.
La tâche non supervisée la plus courante est le regroupement (clustering). Elle rassemble les exemples semblables dans des groupes. Vous rencontrez le regroupement dans bien des contextes :
- Un magasin regroupe ses clients selon leurs achats et leur fréquence d’achat, par exemple « petites commandes fréquentes » et « grosses commandes rares ». Chaque groupe reçoit des offres différentes. On appelle souvent ces groupes des segments de clientèle.
- Un site de nouvelles regroupe chaque jour des milliers de nouveaux articles par sujet, sans qu’une personne lise chacun.
- Une application photo regroupe les photos d’un même visage, puis vous demande le nom de la personne.
- Un service de soutien regroupe les demandes de soutien semblables pour trouver les types de problèmes les plus courants.
L’apprentissage non supervisé a aussi d’autres usages. La détection d’anomalies trouve les quelques exemples qui ne ressemblent à aucun autre. Par exemple, un paiement par carte qui ne correspond pas aux habitudes d’un client. La réduction de dimensionnalité résume de nombreuses colonnes en quelques-unes, par exemple pour représenter les données en deux dimensions. L’exploration non supervisée utilise une de ces méthodes, la PCA.
Un tout petit exemple : les échantillons sans noms
Section intitulée « Un tout petit exemple : les échantillons sans noms »Rappelez-vous les 15 échantillons de couleur de la dernière leçon. Retirez maintenant les cartes de noms. Un programme reçoit seulement les trois nombres de chaque échantillon. Peut-il encore trouver les groupes de couleurs?
Priya utilise k-means, la méthode de regroupement la plus courante. Vous choisissez k, le nombre de groupes. La méthode fonctionne ensuite ainsi :
- Elle place
kcentres parmi les exemples. - Elle place chaque exemple dans le groupe du centre le plus proche.
- Elle déplace chaque centre au milieu de son groupe.
- Elle répète les étapes 2 et 3 jusqu’à ce que plus rien ne change.
Le carnet recrée les échantillons, mais garde leurs noms dans une colonne distincte, hidden_names. La méthode voit seulement X. Priya utilise les noms seulement à la fin, pour comparer. Priya demande 5 groupes :
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=5, n_init=10, random_state=0)swatches["pile"] = kmeans.fit_predict(X) # no labels hereprint(swatches["pile"].tolist())Le résultat :
[1, 1, 1, 4, 4, 4, 3, 3, 3, 2, 2, 2, 0, 0, 0]fit_predict(X) n’a pas de y : la méthode apprend à partir des caractéristiques seules. Chaque échantillon reçoit un numéro de groupe de 0 à 4. Les lignes suivent l’ordre du tableau : trois rouges, trois oranges, trois jaunes, trois verts et trois bleus. Chacun des cinq groupes contient donc trois échantillons. Les réglages n_init=10 et random_state=0 donnent le même résultat à chaque exécution.
Priya compare maintenant les groupes aux noms que la méthode n’a jamais vus. Dans le tableau, chaque ligne est un groupe et chaque colonne est un nom :
pd.crosstab(swatches["pile"], swatches["hidden_names"])Le résultat :
hidden_names blue green orange red yellowpile0 3 0 0 0 01 0 0 0 3 02 0 3 0 0 03 0 0 0 0 34 0 0 3 0 0Chaque groupe correspond à exactement un nom de couleur. La méthode a trouvé les mêmes groupes qu’une personne, sans une seule étiquette. Mais regardez ce qu’elle n’a pas trouvé : les noms. Le groupe 1 n’est qu’un numéro. Une personne doit le regarder et dire « ce sont les rouges ».
Priya demande ensuite 2 groupes plutôt que 5. Un groupe contient maintenant tous les échantillons rouges, oranges et jaunes, et l’autre, les verts et les bleus. Ce sont les couleurs chaudes et les couleurs froides. C’est une autre bonne façon de trier la même boîte. L’image montre les deux résultats.
Description textuelle du diagramme
À gauche, les 15 échantillons de la dernière leçon forment un tas mélangé. Ils n’ont pas de cartes de noms : personne n’a donné les bonnes réponses.
Deux flèches mènent à deux façons de trier. En haut, k-means avec cinq groupes fait cinq piles de trois : les rouges, les oranges, les jaunes, les verts et les bleus. En bas, k-means avec deux groupes fait deux piles. L’une contient les neuf échantillons rouges, oranges et jaunes (couleurs chaudes). L’autre contient les six échantillons verts et bleus (couleurs froides). Les deux tris sont corrects. Leur utilité dépend de ce que vous voulez faire des piles.
Pourquoi une personne doit juger les groupes
Section intitulée « Pourquoi une personne doit juger les groupes »En apprentissage supervisé, vous pouvez vérifier un modèle : comparez ses prédictions aux étiquettes et comptez les bonnes réponses. En regroupement, il n’y a rien à comparer. Il n’y a pas d’étiquettes, donc aucun « bon » groupe pour un exemple donné. Cinq piles ou deux piles? Les deux correspondent aux données.
Ainsi, de « bons groupes » sont des groupes utiles : des groupes qui aident quelqu’un à prendre une décision. Un peintre qui mélange des peintures peut vouloir cinq piles. Une designer qui choisit un thème chaud ou froid pour une pièce peut en vouloir deux. Seule une personne qui connaît la décision à prendre peut dire quel regroupement aide. Cette personne donne aussi un nom à chaque groupe, parce que la méthode ne donne que des numéros.
Omar demande : « L’ordinateur ne peut pas nous dire quel est le meilleur nombre de groupes? » Certaines mesures aident, et L’exploration non supervisée en présente deux. Mais elles indiquent seulement à quel point les groupes sont compacts et séparés. Elles ne peuvent pas dire si un groupe signifie quelque chose pour Larkfield. Dans ce cours, elles servent d’indices, et une personne fait le choix.
Comparer l’apprentissage supervisé et non supervisé
Section intitulée « Comparer l’apprentissage supervisé et non supervisé »Les deux types d’apprentissage répondent à des questions différentes. L’apprentissage supervisé répond à « quelle est la bonne réponse pour ce nouvel exemple? » Il a besoin d’exemples accompagnés de cette réponse. L’apprentissage non supervisé répond à « quels groupes ou structures trouve-t-on dans ces données? » Il a seulement besoin des exemples. Vous pouvez mesurer l’apprentissage supervisé à l’aide des étiquettes. Vous devez juger l’apprentissage non supervisé selon son utilité. Le tableau résume les différences.
| Apprentissage supervisé | Apprentissage non supervisé | |
|---|---|---|
| Image du quotidien | Un enfant apprend les noms des couleurs avec un parent | Vous triez une boîte de boutons mélangés |
| Les données | Des caractéristiques et une étiquette (X et y) |
Des caractéristiques seulement (X) |
| Ce qu’il apprend | Une règle qui relie les caractéristiques à l’étiquette | Des groupes ou une structure dans les caractéristiques |
| Tâches principales | Classification, régression | Regroupement (aussi détection d’anomalies et réduction de dimensionnalité) |
| Son résultat pour un exemple | Une étiquette prédite : « orange », 261,67 | Un numéro de groupe : 4 |
| Comment le vérifier | Comparer les prédictions aux vraies étiquettes | Une personne juge si les groupes sont utiles |
| Exemple chez Larkfield | Ce billet sera-t-il transmis à un niveau supérieur? | Quels types de clients avons-nous? |
Larkfield : des groupes de clients
Section intitulée « Larkfield : des groupes de clients »Grace pose une question à laquelle aucune colonne ne répond : « Quels types de clients avons-nous? » Il n’y a pas d’étiquette, parce que personne n’a jamais noté de « type » pour chaque client. C’est donc une question de regroupement.
Priya crée une ligne par client à partir des billets de soutien des données d’entraînement, avec deux variables. La première est le nombre de billets que le client a écrits. L’autre est son ancienneté chez Larkfield (tenure_days, en jours). Les billets des invités n’ont pas d’identifiant client, donc elle les exclut :
train = pd.read_csv("data/train.csv", dtype={"customer_id": "string"}, keep_default_na=False, na_values=[""])known = train.dropna(subset=["customer_id"])customers = known.groupby("customer_id").agg( tickets=("ticket_id", "size"), tenure_days=("customer_tenure_days", "max"),)print(customers.shape)customers.head(3)Le résultat :
(847, 2) tickets tenure_dayscustomer_idC-00001 62 2579.0C-00002 10 1688.0C-00003 2 277.0847 clients, deux variables et aucune étiquette. Priya demande ensuite 3 groupes à k-means. Une étape vient d’abord : StandardScaler met les deux colonnes à la même échelle. Sans cela, les jours (jusqu’à environ 2 600) compteraient beaucoup plus que les billets. L’exploration non supervisée explique cette étape. Les dernières lignes décrivent chaque groupe par sa taille et ses valeurs moyennes :
from sklearn.pipeline import make_pipelinefrom sklearn.preprocessing import StandardScaler
grouper = make_pipeline(StandardScaler(), KMeans(n_clusters=3, n_init=10, random_state=0))customers["group"] = grouper.fit_predict(customers[["tickets", "tenure_days"]])customers.groupby("group").agg( customers=("tickets", "size"), tickets=("tickets", "mean"), tenure_days=("tenure_days", "mean")).round(1)Le résultat :
customers tickets tenure_daysgroup0 401 15.7 1882.71 384 10.8 594.92 62 101.5 1528.2La méthode donne trois numéros. Grace donne les noms. Le groupe 0 contient 401 clients qui sont chez Larkfield depuis environ cinq ans : « clients de longue date ». Le groupe 1 contient 384 clients présents depuis environ un an et demi : « clients plus récents ». Le groupe 2 ne contient que 62 clients, mais chacun a écrit environ 100 billets : « quelques comptes très actifs ».
Grace juge ensuite si les groupes sont utiles. Les comptes très actifs pourraient chacun avoir besoin d’un gestionnaire de compte. Ce groupe aide donc à prendre une décision. Son équipe doit décider si les deux autres groupes ont besoin d’un traitement différent, pas la méthode. Dans L’exploration non supervisée, Priya regroupe les mêmes clients avec plus de colonnes. Grace décide alors quoi faire des groupes.
Exercice guidé : trier les échantillons
Section intitulée « Exercice guidé : trier les échantillons »- Ouvrez le carnet dans l’encadré Faites cette leçon dans un carnet Jupyter en haut de cette page.
- Exécutez les cellules de préparation. La cellule des données se termine par
Ready: train 16939 rows (1983 escalated), valid 1179 (183), test 1002 (157).(Prêt : 16 939 lignes d’entraînement, dont 1 983 transmises à un niveau supérieur; 1 179 de validation, dont 183; 1 002 de test, dont 157.) - Exécutez la section 1. Vérifiez que
Xa 15 lignes, 3 colonnes et aucune étiquette. - Avant d’exécuter la section 2, faites une prédiction : les cinq groupes correspondront-ils aux cinq noms de couleurs?
- Exécutez la section 2. Comparez les numéros des groupes et le tableau au tout petit exemple ci-dessus.
- Exécutez la section 3. Repérez les cinq couleurs dans l’image, chacune avec son propre numéro de groupe.
- Écrivez une phrase : qu’a trouvé k-means, et qu’est-ce qu’une personne a dû ajouter?
Afficher un exemple de réponse
k-means a trouvé cinq groupes de trois échantillons, et chaque groupe correspond à une couleur. Il n’a pas trouvé les noms : les groupes portent des numéros de 0 à 4. Une personne doit dire « le groupe 1 contient les rouges ». Dans l’image, les groupes sont faciles à voir, mais le vert et le bleu sont proches. La troisième caractéristique, la lumière bleue, les sépare.
À vous de jouer : deux piles plutôt que cinq
Section intitulée « À vous de jouer : deux piles plutôt que cinq »Changez une seule chose : le nombre de groupes. Dans la section 4 du carnet, triez les échantillons en 2 groupes avec KMeans(n_clusters=2, n_init=10, random_state=0). Mettez la taille de chaque groupe, du plus grand au plus petit, dans la liste pile_sizes. Avant d’exécuter le code, prédisez quelles couleurs iront ensemble.
Afficher un exemple de réponse
swatches["pile2"] = KMeans(n_clusters=2, n_init=10, random_state=0).fit_predict(X)pile_sizes = sorted(swatches["pile2"].value_counts().tolist(), reverse=True)print(pile_sizes)[9, 6]Le groupe de 9 contient les échantillons rouges, oranges et jaunes. Le groupe de 6 contient les verts et les bleus. Ce sont les couleurs chaudes et froides. Les données n’ont pas changé, seulement k. Les deux regroupements révèlent des structures réelles. Le choix dépend de la décision à prendre.
Erreur courante
Un numéro de groupe n'est pas un nom
Symptôme : Tomás enregistre les cinq groupes et écrit dans ses notes : « groupe 1 = rouge ». Son code envoie chaque échantillon du groupe 1 à l’étagère de peinture rouge. Le lendemain, il exécute de nouveau k-means avec un autre random_state :
again = KMeans(n_clusters=5, n_init=10, random_state=1).fit_predict(X)print("First run: ", swatches["pile"].tolist())print("Second run:", again.tolist())print("Reds are in pile", again[0], "now")Le résultat :
First run: [1, 1, 1, 4, 4, 4, 3, 3, 3, 2, 2, 2, 0, 0, 0]Second run: [2, 2, 2, 4, 4, 4, 0, 0, 0, 1, 1, 1, 3, 3, 3]Reds are in pile 2 nowLe groupe 1 contient maintenant les verts, et ils vont sur l’étagère rouge.
Cause : les groupes sont les mêmes, mais leurs numéros ont changé. Un numéro de groupe est une étiquette aléatoire. Il dépend de l’endroit où la méthode a placé ses premiers centres. Une nouvelle exécution, de nouvelles données ou un autre réglage peuvent le changer.
Solution : n’écrivez jamais de code ou de notes qui dépendent d’un numéro de groupe. Décrivez chaque groupe par son contenu, par exemple ses valeurs moyennes ou quelques exemples typiques. Laissez ensuite une personne lui donner un nom, et enregistrez ce nom avec la description.
Conséquence dans le travail en IA : quand on refait un regroupement chaque mois sur de nouvelles données, les numéros changent sans avertissement. Un rapport qui dit « le groupe 2 a augmenté de 40 % » peut comparer deux groupes différents. Les équipes qui suivent les groupes au fil du temps doivent les associer selon leur contenu, pas leurs numéros.
Vérification des connaissances
Section intitulée « Vérification des connaissances »Vérifiez votre compréhension
Larkfield a 5 000 vieux courriels de soutien sans étiquettes et veut y trouver les principaux types de problèmes. Est-ce de l'apprentissage supervisé ou non supervisé? De quelle tâche s'agit-il, et qui décide si le résultat est bon?
Afficher la réponse
C’est de l’apprentissage non supervisé : les courriels n’ont pas d’étiquettes. La tâche est le regroupement : mettre ensemble les courriels semblables. Une personne qui connaît le travail de soutien, comme Grace, doit examiner les groupes, les nommer et juger leur utilité. Par exemple, un groupe peut révéler un problème qu’une page d’aide pourrait résoudre. Il n’y a pas de bonne réponse à laquelle comparer le résultat.
Votre réponse contient-elle les points principaux de la nôtre ?
Connectez-vous et inscrivez-vous au cours pour enregistrer vos réponses. Chaque vérification compte pour le certificat.
Vérifiez votre compréhension
Tomás dit : « k-means a trouvé 4 groupes, donc nos clients sont de 4 types. » Qu'est-ce qui ne va pas dans cette phrase?
Afficher la réponse
k-means a trouvé 4 groupes parce que Tomás en a demandé 4 : le nombre de groupes est un choix, pas une découverte. Avec 3 ou 5, il trouve 3 ou 5 groupes. Chaque regroupement est une façon possible de trier les clients. Les 4 groupes sont-ils les bons « types »? Cela dépend de leur utilité pour une décision, et une personne doit en juger.
Votre réponse contient-elle les points principaux de la nôtre ?
Connectez-vous et inscrivez-vous au cours pour enregistrer vos réponses. Chaque vérification compte pour le certificat.
Vérifiez votre compréhension
Pourquoi pouvez-vous compter les bonnes réponses d'un classificateur de pourriels, mais pas celles d'un regroupement de clients?
Afficher la réponse
Un classificateur de pourriels est supervisé : chaque courriel de test a une étiquette. Vous pouvez donc y comparer chaque prédiction et compter les bonnes réponses. Un regroupement est non supervisé : aucun client n’a de « bon » groupe, donc il n’y a rien à comparer. Vous pouvez seulement juger les groupes selon leur utilité, par exemple si un groupe nécessite un autre type de soutien.
Votre réponse contient-elle les points principaux de la nôtre ?
Connectez-vous et inscrivez-vous au cours pour enregistrer vos réponses. Chaque vérification compte pour le certificat.
Récapitulatif
- L’apprentissage non supervisé apprend à partir des caractéristiques seules (
X, sansy). C’est comme trier une boîte de boutons que personne n’a étiquetés. - Le regroupement rassemble les exemples semblables dans des groupes. k-means le fait avec un nombre de groupes
kque vous choisissez. D’autres usages non supervisés sont la détection d’anomalies et la réduction de dimensionnalité. - Sans les noms, k-means a trié les 15 échantillons en cinq piles correspondant aux noms des couleurs. Avec deux groupes, il a fait une pile de couleurs chaudes et une de couleurs froides. Les deux révèlent des structures réelles.
- Il n’y a pas de bonne réponse à laquelle comparer le résultat. Une personne doit donc juger l’utilité des groupes et les nommer. Un numéro de groupe est une étiquette aléatoire, pas un nom.
- Les 847 clients de Larkfield se sont répartis en trois groupes. Grace les a nommés et en a trouvé un qui exige une action : 62 comptes très actifs.
Ensuite, vous réunirez les trois tâches et choisirez celle qui convient à une nouvelle question, ou aucun modèle.
Leçon suivante : Choisir la tâche d'apprentissage