Préparer les données
Ce que ce chapitre apporte 6 points
- Ordonner les étapes de préparation et dire pourquoi cet ordre.
- Nettoyer un tableau : supprimer les doublons, normaliser les libellés, convertir une sentinelle en valeur manquante déclarée.
- Choisir une stratégie d'imputation et nommer le biais qu'elle introduit.
- Encoder une variable ordinale et une variable nominale, et justifier la différence.
- Traiter une valeur extrême ou tronquée, et choisir entre mise à l'échelle, standardisation et transformation logarithmique.
- Reconnaître une fuite de données, sous ses deux formes.
L'ordre des opérations
Sept étapes, et l'ordre n'est pas arbitraire.
- Dédoublonner, avant tout calcul : un doublon fausse toutes les statistiques qui suivent.
- Normaliser les libellés, sans quoi les regroupements seront faux.
- Convertir les sentinelles en valeurs manquantes déclarées, pour cesser de les compter comme des mesures.
- Imputer ou supprimer les valeurs manquantes, maintenant qu'elles sont toutes visibles.
- Traiter les valeurs aberrantes, une fois les fausses valeurs écartées.
- Encoder les variables qualitatives.
- Mettre à l'échelle, en dernier, sur des colonnes toutes numériques et complètes.
Inverser deux de ces étapes produit rarement une erreur visible, et souvent un résultat faux. Imputer avant de convertir les sentinelles, par exemple, laisse vingt-huit zéros dans le calcul de la médiane qui servira à imputer.
Dans quel ordre traiter doublons, sentinelles et imputation ?
Nettoyer
Le nettoyage n'a pas dégradé le signal, il l'a révélé. Avant nettoyage, le calcaire rendait 50,3 q/ha, le limon 59,4 et l'argile 60,7, avec un quatrième sol fantôme, « Limon ». Après, ils rendent 53,5, 62,0 et 63,7 q/ha, et le sol fantôme a rejoint le limon.
Rien n'a été inventé : les vingt-huit zéros tiraient toutes les moyennes vers le bas, et le calcaire, qui en portait la plus forte proportion, gagne le plus. Le rendement moyen de la coopérative passe de 58,1 à 60,9 q/ha : la mauvaise année de l'ouverture était surtout un mauvais tableau.
C'est le résultat qu'on doit attendre d'un nettoyage réussi. Il ne rend pas les données plus belles, il les rend plus fidèles, et le signal qui existait devient mesurable.
d.groupby("sol")["rendement"].transform("median") par d["rendement"].median(), la médiane de toute la coopérative, puis relancer. Comparer la ligne « apres » : le calcaire passe de 53,5 à 53,9 q/ha et l'argile de 63,7 à 63,6. Constater que la médiane globale donne aux parcelles de calcaire non pesées le rendement d'un limon, et que l'erreur se loge précisément dans le sol qui rend le moins.
Les valeurs manquantes
Manquant complètement au hasard : la disparition ne dépend de rien. Supprimer ces lignes ne biaise rien, on perd seulement de la taille d'échantillon.
Manquant au hasard conditionnellement : la disparition dépend d'autres variables observées. Un pluviomètre qui tombe en panne surtout sur les parcelles les plus éloignées du silo, par exemple. On peut corriger, à condition d'utiliser ces autres variables.
Manquant non au hasard : la disparition dépend de la valeur elle-même. Les salaires les plus élevés sont ceux qu'on ne déclare pas. Aucune imputation ne répare cela, et c'est le cas le plus fréquent.
Remplacer par la moyenne ou la médiane : conserve la taille, mais réduit artificiellement la variance et crée un pic sur une valeur qui n'a été mesurée nulle part. Toutes les corrélations impliquant cette colonne sont affaiblies.
Remplacer par la médiane du groupe : nettement mieux quand un groupe explique la variable, ce qui est le cas ici avec le sol. C'est l'imputation employée ci-dessus pour le rendement.
Prédire la valeur par une régression sur les autres colonnes : le plus fidèle, et le plus risqué, parce qu'il renforce artificiellement les relations qu'il utilise.
Aucune de ces options n'est neutre. La seule faute est de ne pas savoir laquelle on a prise.
Si les pluviomètres tombent en panne surtout sur les parcelles isolées, et que ces parcelles sont aussi les moins suivies contre la rouille, l'absence de mesure est corrélée à la cible. Imputer sans garder cette trace efface une information réelle.
Le geste est bon marché et il faut le faire dès que le taux de valeurs manquantes dépasse quelques pour cent.
Les variables qualitatives
Ordinale : les modalités sont ordonnées. On les remplace par des entiers respectant cet ordre. aucun → 0, un passage → 1, deux passages → 2.
Nominale : aucun ordre. On crée une colonne binaire par modalité, valant 1 si l'individu la porte. C'est l'encodage dit « un parmi n ».
Tout algorithme qui calcule des distances, des sommes ou des moyennes prendra ces affirmations au sérieux. Un partitionnement rapprochera le limon et l'argile parce que leurs codes sont voisins, ce qui n'a aucun sens agronomique.
Le prix de l'encodage « un parmi n » est de créer des colonnes supplémentaires. C'est un prix qu'il faut payer.
Quand il y a trop de modalités. Une colonne « commune » à trois cents valeurs distinctes produirait trois cents colonnes, dont presque toutes seraient à zéro presque partout. C'est inexploitable.
Trois parades. Regrouper selon une hiérarchie métier : commune, puis canton, puis département. Rassembler la queue : garder les vingt modalités les plus fréquentes et coder le reste en « autre ». Ou remplacer la modalité par une statistique calculée dessus, comme le taux de rouille moyen de la commune, ce qui est puissant et qui est aussi une porte d'entrée pour la fuite de données décrite plus bas.
Une colonne « sol » vaut limon, argile ou calcaire. Elle doit être encodée…
Les valeurs aberrantes
Les détecter relève du chapitre sur la supervision et la détection d'anomalies, qui donne le z-score, sa version robuste et l'écart interquartile. Ce qu'il faut décider ici, c'est ce qu'on en fait.
Trois traitements, du plus brutal au plus prudent.
Supprimer l'observation. À réserver aux cas où l'on a établi que la mesure est fausse : un rendement de 400 q/ha, une surface négative. Supprimer une valeur simplement parce qu'elle est extrême revient à jeter l'information la plus intéressante du jeu.
Écrêter. Ramener toute valeur au-delà d'un seuil à ce seuil, par exemple au 99e centile. On conserve l'observation et l'on borne son influence. C'est le traitement par défaut raisonnable.
Ne rien faire. Certains modèles, les arbres notamment, sont insensibles aux valeurs extrêmes puisqu'ils ne raisonnent que sur des seuils. Il est inutile de traiter ce qui ne gêne pas.
Les écrêter revient à effacer les exemples positifs, et à produire un modèle qui ne détecte plus rien tout en affichant d'excellentes statistiques.
La question à poser avant tout traitement est donc : cette valeur extrême est-elle une erreur de mesure ou un événement rare ? La réponse ne se lit pas dans le tableau, elle vient du métier.
La mise à l'échelle
Mise à l'échelle min-max : , qui ramène tout entre 0 et 1. Simple, et très sensible aux valeurs extrêmes, puisque deux valeurs suffisent à fixer l'échelle.
Standardisation, ou Z-score : , qui donne une moyenne nulle et un écart-type de 1. Moins sensible aux extrêmes, et c'est le choix par défaut.
Transformation logarithmique : , qui redresse une distribution à queue lourde. Elle change la forme, pas seulement l'échelle, et elle exige des valeurs strictement positives.
Pourquoi c'est indispensable, et pour quels algorithmes. Une variable qui varie de 1 à 100 000 et une autre de 0 à 1 ne pèsent pas le même poids dans un calcul de distance : la première écrase la seconde, quel que soit son intérêt réel. Pour une parcelle, la distance au silo se compte en milliers de mètres et l'azote en dizaines de kilogrammes : sans mise à l'échelle, seule la distance compterait.
Les algorithmes concernés sont tous ceux qui calculent des distances ou des sommes pondérées : partitionnement, plus proches voisins, régressions ajustées par descente de gradient, réseaux de neurones, machines à vecteurs de support.
Les algorithmes indifférents sont ceux qui ne comparent que des seuils, variable par variable : les arbres de décision et tout ce qui en dérive. Mettre à l'échelle avant un arbre ne coûte rien et ne sert à rien.
La distinction qui compte. Une mise à l'échelle est une transformation affine : elle déplace et redimensionne, sans rien changer à la forme de la distribution ni aux corrélations. L'asymétrie reste identique au dix-millième près, ce que la figure vérifie.
Une transformation logarithmique comprime les grandes valeurs plus que les petites. Elle change la forme, réduit l'asymétrie, et modifie les corrélations.
Confondre les deux mène à standardiser une distribution à queue lourde en croyant l'avoir corrigée. Il faut souvent faire les deux, et dans cet ordre : le logarithme d'abord, la standardisation ensuite.
Le Z-score corrige-t-il une distribution à queue lourde ?
La fuite de données
Il y a fuite lorsqu'une information qui ne sera pas disponible au moment de la prédiction se retrouve dans les données d'apprentissage.
Le modèle affiche alors d'excellentes performances en évaluation, et s'effondre en production.
C'est l'erreur la plus coûteuse du domaine. Elle ne provoque aucun message, aucune anomalie, aucun avertissement. Au contraire : elle améliore tous les indicateurs, ce qui la rend indétectable par les moyens habituels et parfaitement convaincante en réunion.
Elle se découvre en production, quand le modèle qui affichait 95 % en fait 60, et il est alors difficile de comprendre pourquoi.
Deux formes principales, et le code ci-dessous les montre toutes les deux.
Ce que ces deux exemples montrent.
La fuite par variable conséquence. Le nombre de bennes déclassées à la livraison est corrélé à 0,83 avec la rouille, et une règle d'une ligne donne 95 % de bonnes réponses. C'est logique : les bennes ont été déclassées parce que la maladie a touché la parcelle. Au moment où l'on voudrait prédire, au printemps, pour décider d'un traitement, ce chiffre n'existe pour aucune parcelle.
La fuite par choix informé. Sur des données sans le moindre signal, choisir les cinq variables les plus corrélées à la cible en regardant tout le jeu produit une performance apparente de près de 67 % sur le jeu de test. Le même choix fait sur les seules données d'entraînement retombe au niveau du hasard, aux fluctuations d'échantillonnage près.
Dans les deux cas, aucun code n'est faux et aucune erreur n'est signalée.
Pour chaque traitement : ai-je regardé le jeu de test pour le décider ? Sélection de variables, médiane d'imputation, moyenne et écart-type de standardisation, seuils d'écrêtage : tous doivent être calculés sur l'entraînement seul, puis appliqués tels quels au test.
La deuxième règle a une conséquence pratique forte : la découpe entraînement-test doit avoir lieu avant la préparation, pas après. Le chapitre 7 en fait un principe.
1.Une colonne « bennes déclassées à la livraison » prédit la rouille à 93 %. Qu'en penser ?
2.Sur quel jeu calculer la moyenne et l'écart-type d'une standardisation ?
Mettre en pratique
Chaque décision de préparation déplace un chiffre. Mesurer ce déplacement est la seule façon de savoir quel biais on vient d'introduire.
Ce qu'une imputation déplace
- 1.
Une colonne de 1 000 valeurs en compte 200 manquantes. Combien de lignes resteraient si l'on supprimait simplement les lignes incomplètes ?
- 2.
Quel pourcentage du jeu cela ferait perdre ?
- 3.
Les 800 valeurs connues ont une moyenne de 50. Après imputation des 200 manquantes par cette moyenne, quelle est la moyenne des 1 000 valeurs ?
- 4.
Ces 800 valeurs ont un écart-type de 10. Après cette même imputation, l'écart-type des 1 000 valeurs vaut l'ancien multiplié par la racine de 800 sur 1 000. Quelle est sa valeur, au dixième ?
Le biais que l'imputation par la moyenne introduit. Elle préserve la moyenne et réduit la variance, ici de 10 à 8,9. Un modèle entraîné ensuite verra la colonne comme plus stable qu'elle ne l'est, et se montrera plus confiant qu'il ne devrait.
Aucune stratégie d'imputation n'est neutre. Ce qui distingue une bonne pratique d'une mauvaise n'est pas le choix de la méthode, c'est de nommer le biais introduit et de le consigner.
La coopérative prépare l'extrait ci-dessous pour son modèle de rendement. Quelles valeurs donner aux rendements inconnus, et quel rendement moyen en tirer ?
Les deux zéros sont des bennes livrées mais jamais pesées.
| Ligne | Sol | Rendement (q/ha) |
|---|---|---|
| 1 | limon | 62 |
| 2 | argile | 66 |
| 3 | limon | 0 |
| 4 | calcaire | 52 |
| 5 | argile | 64 |
| 6 | limon | 60 |
| 7 | argile | 0 |
| 8 | calcaire | 54 |
Par où commencer ? Décider de ce que sont les deux zéros avant de toucher à une seule moyenne, puis chercher la colonne qui explique le rendement.
Pourquoi boucher chaque trou par la médiane de son sol plutôt que par la médiane de tout l'extrait ?
Le corrigé
- Déclarer les sentinelles. Les lignes 3 et 7 valent 0 pour des bennes livrées : ce sont des pesées manquantes, à convertir en valeurs inconnues avant tout calcul.
- Calculer la médiane de chaque sol sur les valeurs connues. Limon : 62 et 60, médiane 61. Argile : 66 et 64, médiane 65. Calcaire : 52 et 54, médiane 53.
- Boucher chaque trou par la médiane de son sol. La ligne 3, en limon, reçoit 61 q/ha ; la ligne 7, en argile, reçoit 65 q/ha.
- Calculer le rendement moyen. (62 + 66 + 61 + 52 + 64 + 60 + 65 + 54) / 8 = 484 / 8 = 60,5 q/ha, contre 358 / 8 ≈ 44,8 q/ha avec les zéros.
- Vérifier l'effet du choix. Avec la médiane globale des six valeurs connues, 61, les deux trous recevraient 61 et la moyenne vaudrait 480 / 8 = 60,0 q/ha. L'écart est faible ici, mais la parcelle d'argile serait sous-estimée de 4 q/ha : c'est elle qui portera la prévision de la parcelle, pas la moyenne.
Dans les relevés de la coopérative, l'azote est plafonné à 160 kg/ha par le logiciel de saisie. Que faire de cette colonne ?
Par où commencer ? Se demander si l'information perdue peut être retrouvée dans le tableau, avant de chercher comment la traiter.
Le corrigé
- Constater la perte. Aucune reconstruction n'est possible : l'information a été perdue à la saisie, et rien dans le tableau ne dit si une parcelle à 160 a reçu 165 ou 220 kg/ha.
- Documenter et laisser tel quel, en sachant que toute relation entre l'azote et le rendement sera aplatie au-delà de 160.
- Ou ajouter une colonne booléenne « azote plafonné », pour que le modèle puisse au moins traiter ce groupe à part.
- Ou découper l'azote en tranches, la dernière étant « 160 et plus » : on perd de la finesse là où l'on n'en avait déjà plus, et l'on cesse de faire semblant.
- Vérifier ce qu'il ne faut pas faire. Traiter les 160 comme des mesures ordinaires dans une régression donnerait une pente fausse : les apports les plus forts seraient crédités d'un rendement obtenu avec plus d'azote que le tableau ne le dit.
Un hôpital relève la durée de séjour de huit patients, et un logiciel a saisi 0 pour deux durées inconnues. Quelles valeurs leur donner, et quelle durée moyenne en tirer ?
| Ligne | Service | Durée de séjour (jours) |
|---|---|---|
| 1 | cardiologie | 6 |
| 2 | chirurgie | 4 |
| 3 | cardiologie | 0 |
| 4 | maternité | 3 |
| 5 | chirurgie | 5 |
| 6 | cardiologie | 8 |
| 7 | maternité | 0 |
| 8 | chirurgie | 6 |
Par où commencer ? Décider de ce que sont les deux zéros, puis chercher la colonne qui explique la durée.
Le corrigé
- Déclarer les sentinelles. Aucun patient hospitalisé ne reste zéro jour : les lignes 3 et 7 sont des durées inconnues, à convertir avant tout calcul.
- Calculer la médiane de chaque service sur les valeurs connues. Cardiologie : 6 et 8, médiane 7. Chirurgie : 4, 5 et 6, médiane 5. Maternité : 3, seule valeur connue.
- Boucher chaque trou par la médiane de son service. La ligne 3 reçoit 7 jours, la ligne 7 en reçoit 3.
- Calculer la durée moyenne. (6 + 4 + 7 + 3 + 5 + 8 + 3 + 6) / 8 = 42 / 8 = 5,25 jours, contre 32 / 8 = 4 jours avec les zéros.
- Vérifier l'effet du choix. La médiane globale des six valeurs connues vaut 5,5 : elle donnerait 5,5 jours à la patiente de maternité, près du double de ce que son service connaît, et une moyenne de 43 / 8 ≈ 5,4 jours. Le service décide de la valeur bien plus que l'ensemble.
Chapitre révisé en novembre 2026 · Une erreur dans ce chapitre ?
Dans la bibliothèque d'exercices
Valeurs manquantes, mise à l'échelle, et la fuite de données.
- Boucher une valeur manquanteNiveau 1
- Ramener une colonne entre 0 et 1Niveau 1
- Débogage : une fuite de donnéesNiveau 2
- Un statut n'est pas une échelleNiveau 2
- Un seuil qui survit à la standardisationNiveau 2
- La moyenne qui a vu le testNiveau 3