Le machine learning en partant de zéro · Leçon 4.1 · 20 sur 33 leçons prêtes · 12 min
Exploration : regarder avant de modéliser
En bref
Quatre jeux avec la même moyenne, la même corrélation 0,82 et la même droite ne se ressemblent pas. Dessinez les données avant de croire les nombres.
Échauffement Deux questions de leçons précédentes. Une minute, sans jamais bloquer la leçon.
Le module 4 commence avant le modèle. Avant d’entraîner quoi que ce soit, regardez les données. L’analyse exploratoire des données (EDA, de l’anglais exploratory data analysis) consiste à dessiner les données et à calculer des résumés simples pour voir à quoi vous avez affaire : la forme, les groupes, les points loin du reste. Une moyenne ou une corrélation est un résumé, et un résumé peut cacher justement l’essentiel. Deux exemples aujourd’hui : les quatre petits jeux d’Anscombe et les manchots de la leçon 0.1.
Choisissez une réponse et votre degré de certitude.
Répondez pour débloquer le labo.
Labo interactif
Ce labo interactif fonctionne dans un navigateur avec JavaScript activé. Le texte qui l’entoure décrit ce qu’il montre.
Voir la réponse
Bonne réponse : Très différents : un nuage, un arc, un point aberrant et un point loin des autres
Très différents. Le jeu I est un nuage autour de la droite. Le jeu II est sur un arc : une parabole explique R² = 1,000 de la variation de y, la droite seulement 0,666. Dans le jeu III, dix points sont presque exactement sur une autre droite, moins pentue (pente 0,345), et un point aberrant tire vers lui la droite ajustée, jusqu’à une pente de 0,5. Dans le jeu IV, dix points ont le même x = 8, et un seul point en (19 ; 12,50) fixe la droite.
À vous de jouer
- Passez par les jeux I–IV. Quels nombres sous les graphiques changent, lesquels restent les mêmes ?
- Dans quel jeu un seul point fixe-t-il la droite ? Que deviendrait la droite sans lui ?
- Passez aux manchots et choisissez longueur du bec × hauteur du bec. Quel signe a la corrélation ? Puis découpez les manchots par espèce.
- Regardez la même paire découpée par île. Pourquoi l’image diffère-t-elle de celle par espèce ?
Une fois vérifié dans le lab, mettons un nom sur ce que vous voyez.
L’idée en quelques mots
Les statistiques descriptives, c’est-à-dire la moyenne, la variance, la corrélation et la droite de régression, résument les données en quelques nombres. Un résumé perd toujours quelque chose. En 1973, Francis Anscombe a construit quatre jeux de 11 points où ces nombres sont presque identiques : moyenne de x 9, de y 7,50, variance de x 11, de y 4,12–4,13, corrélation 0,816, droite y = 3,00 + 0,500·x. Sur un graphique, le jeu I est un nuage, le II un arc, le III une droite avec un point aberrant, le IV une colonne verticale et un point lointain. Une régression linéaire ajustée sur chacun donne la même droite, alors qu’elle ne décrit sensément que le premier.
Les manchots montrent la même chose sur des données réelles. Sur les 342 manchots, la corrélation entre la longueur et la hauteur du bec vaut −0,235 : plus le bec est long, moins il est haut. Découpé par espèce, le signe s’inverse : Adelie 0,391, Chinstrap 0,654, Gentoo 0,643. Dans chaque espèce, un bec plus long est aussi plus haut. Un seul nombre pour tout le jeu décrit une relation qui n’existe dans aucun groupe.
Jak to policzono
- Quartet : Anscombe (1973), The American Statistician. 4 jeux de 11 points, copie du dépôt seaborn-data. Variance divisée par n − 1.
- Manchots : Palmer Penguins (Gorman, Williams et Fraser, 2014 ; paquet palmerpenguins : Horst, Hill et Gorman, 2020), licence CC0. 342 manchots avec les mesures du bec, 3 espèces : Adelie 151, Chinstrap 68, Gentoo 123.
- Corrélation r : coefficient de Pearson, de −1 à 1 ; 0 signifie aucune relation linéaire.
- Droites : moindres carrés, séparément pour chaque jeu et chaque groupe.
Pourquoi ça marche
D’où vient le signe inversé chez les manchots ? Les Gentoo ont des becs longs mais bas : en moyenne 47,5 mm de long et 15,0 mm de haut. Les Adelie ont des becs courts et hauts : 38,8 et 18,3 mm. Une seule corrélation pour tous compare surtout les espèces entre elles : les Gentoo sont en bas à droite du graphique, les Adelie en haut à gauche, donc la droite de tous les points descend. Dans chaque espèce, la relation est positive, car un manchot plus grand a un bec plus grand dans les deux directions. C’est le paradoxe de Simpson : quand des groupes diffèrent par leurs moyennes, la relation dans l’ensemble peut avoir le signe opposé à celui de chaque groupe.
Dans le quartet, le mécanisme est encore plus simple. La moyenne, la variance et la corrélation sont des sommes sur les points, et des dispositions différentes de points donnent les mêmes sommes, comme des séries de nombres différentes ont la même moyenne. Les points loin du reste tirent le plus fort. Dans le jeu IV, le point en x = 19 fixe à lui seul la pente, car les 10 autres points ont le même x = 8 et ne disent rien de la direction.
Est-ce un hasard de cet échantillon de manchots ? Dans le code ci-dessous, on rééchantillonne les manchots avec remise 1000 fois : autant de manchots, certains deux fois, d’autres pas du tout. Dans 1000 rééchantillonnages sur 1000, la corrélation sur tous est négative et positive dans chaque espèce.
Erreur fréquente
Vrai ou faux : « les statistiques descriptives suffisent ; si deux jeux ont la même moyenne, la même variance et la même corrélation, ils se ressemblent ». Faux. Dans le lab, les quatre jeux d’Anscombe partagent ces nombres à deux décimales près et ne se ressemblent pas du tout. Les nombres résument : ils ne montrent ni la forme, ni les groupes, ni les points isolés qui tirent le résultat. Chez les manchots, une seule corrélation de −0,235 dit « bec plus long, bec moins haut », et dans chaque espèce c’est l’inverse.
Pour un modèle, cela a des conséquences concrètes. Une régression linéaire ajustée sur le jeu II prédit une droite là où les données forment un arc. Un modèle de manchots qui ne connaît pas l’espèce apprend une relation négative qui n’existe dans aucune espèce. C’est pourquoi on dessine d’abord les données, et ensuite seulement on choisit le modèle et les variables.
Quiz
Trois questions pour vérifier vos acquis. Choisissez une réponse ou dépliez la solution sous chaque question. Au clavier : les flèches choisissent, Entrée ou Espace valide.
À retenir
- Avant de construire un modèle, dessinez les données : la distribution de chaque variable, les paires de variables et les groupes.
- Les mêmes moyennes, variances et corrélations peuvent cacher un nuage, un arc, un point aberrant ou un point de levier.
- Une relation dans l’ensemble des données peut avoir le signe opposé à celui de chaque groupe (paradoxe de Simpson) ; colorez vos graphiques par groupe.
- Un seul point lointain peut fixer la droite à lui seul : vérifiez ce qui change sans lui.
Pour aller plus loin : formule, code, pratique
Les maths
Corrélation de Pearson : r = Σ(xᵢ − x̄)(yᵢ − ȳ) / √(Σ(xᵢ − x̄)² · Σ(yᵢ − ȳ)²). Droite des moindres carrés : b = r · s_y / s_x, a = ȳ − b · x̄. La droite ne dépend donc que des moyennes, des écarts types et de la corrélation : des jeux qui partagent ces nombres partagent la droite, quelle que soit leur allure.
Le paradoxe de Simpson dans une corrélation vient du découpage de la covariance par groupe : cov(x, y) = Σ_g p_g · cov_g(x, y) + Σ_g p_g · (x̄_g − x̄)(ȳ_g − ȳ), où p_g est la part du groupe g. Le premier terme est la relation à l’intérieur des groupes, le second la relation entre les moyennes des groupes. Quand les moyennes des groupes sont sur une droite descendante, le second terme est négatif et peut l’emporter sur le premier, positif.
En code (Python)
Le même calcul avec pandas : les nombres du quartet, la corrélation du bec sur tous les manchots et dans chaque espèce, et 1000 rééchantillonnages avec remise qui vérifient si le signe inversé est un hasard de cet échantillon.
import numpy as np
import pandas as pd
q = pd.read_csv("data/raw/anscombe.csv")
for name, d in q.groupby("dataset"):
slope, intercept = np.polyfit(d.x, d.y, 1)
print(f"set {name}: mean x {d.x.mean():.2f}, mean y {d.y.mean():.2f}, variance x {d.x.var():.2f}, variance y {d.y.var():.2f}, r {d.x.corr(d.y):.3f}, line y = {intercept:.2f} + {slope:.3f}x")
df = pd.read_csv("data/raw/penguins.csv").dropna(subset=["bill_length_mm", "bill_depth_mm"])
r = lambda d: d.bill_length_mm.corr(d.bill_depth_mm)
print(f"{len(df)} penguins, bill length vs bill depth: all r = {r(df):.3f}; " + ", ".join(f"{s} {r(g):.3f}" for s, g in df.groupby("species")))
rng = np.random.default_rng(0)
same = 0
for b in range(1000):
s = df.sample(len(df), replace=True, random_state=rng) # rééchantillonnage avec remise : autant de manchots, certains deux fois
same += r(s) < 0 and all(r(g) > 0 for _, g in s.groupby("species"))
print(f"1000 bootstrap resamples: negative over all and positive in every species in {same}")
Sortie
set I: mean x 9.00, mean y 7.50, variance x 11.00, variance y 4.13, r 0.816, line y = 3.00 + 0.500x
set II: mean x 9.00, mean y 7.50, variance x 11.00, variance y 4.13, r 0.816, line y = 3.00 + 0.500x
set III: mean x 9.00, mean y 7.50, variance x 11.00, variance y 4.12, r 0.816, line y = 3.00 + 0.500x
set IV: mean x 9.00, mean y 7.50, variance x 11.00, variance y 4.12, r 0.817, line y = 3.00 + 0.500x
342 penguins, bill length vs bill depth: all r = -0.235; Adelie 0.391, Chinstrap 0.654, Gentoo 0.643
1000 bootstrap resamples: negative over all and positive in every species in 1000
Les quatre jeux ne diffèrent qu’à la troisième décimale. Chez les manchots, le signe inversé n’est pas un hasard de cet échantillon : il tient dans 1000 rééchantillonnages avec remise sur 1000.
Télécharger le notebook (.ipynb). Ouvrez-le dans Jupyter ou importez-le dans Google Colab ; il télécharge lui-même les données manquantes.
Pour les praticiens
- Avec pandas :
df.describe(),df.isna().sum()etdf.groupby("species").mean(). Avec seaborn,pairplot(df, hue="species")dessine toutes les paires de mesures aux couleurs des groupes en un seul appel. - Regardez la distribution de chaque variable (histogramme), les paires de variables (nuage de points) et les valeurs manquantes avant de découper ou d’entraîner quoi que ce soit.
- Faites l’EDA qui guide des décisions (choix des variables, seuils, suppression de lignes) sur la partie d’entraînement. Regarder le jeu de test pour de telles décisions est une fuite (leçon 4.5).
- Notez ce que vous avez vu : groupes, points aberrants, codes étranges (par ex. 0 au lieu d’une valeur manquante). C’est une liste de choses à vérifier quand le modèle se comporte bizarrement.
Cela vous a-t-il aidé ?
Merci ! Cela nous aide à nous améliorer.
Aller plus loin dans l’Atlas
Articles de l’encyclopédie sur les notions de cette leçon :