Data Cleaning
Le nettoyage des données détecte et corrige les fichiers corrompus, les doublons, les valeurs manquantes et les erreurs d’étiquetage d’un jeu de données avant l’entraînement. Découvre les techniques, les outils et le code.
Le nettoyage des données, aussi appelé assainissement ou épuration des données, consiste à repérer et corriger ou supprimer les enregistrements corrompus, en double, incomplets, incohérents ou mal étiquetés d’un jeu de données. En apprentissage automatique (ML), cette étape précède le prétraitement des données et l’entraînement, car un modèle apprend tout ce que contiennent ses données d’entraînement, erreurs comprises. Un détecteur entraîné sur des images où la moitié des vélos sont étiquetés « moto » apprend cette confusion, et un jeu de test contenant des étiquettes erronées fausse l’évaluation du modèle. Le nettoyage est une pratique fondamentale de l’IA centrée sur les données, qui améliore les modèles en améliorant leurs données plutôt que leur architecture.
Pourquoi la qualité des données limite les modèles#
Les erreurs dans les données nuisent à la précision de plusieurs façons. Les exemples mal étiquetés enseignent de mauvaises correspondances entre les entrées et les sorties et favorisent le surapprentissage, car le modèle mémorise le bruit. Les doublons accordent un poids supplémentaire à certains exemples et, lorsque des copies se retrouvent à la fois dans les ensembles d’entraînement et d’évaluation, provoquent une fuite de données qui gonfle les scores. Les fichiers corrompus font planter les chargeurs de données ou sont ignorés sans avertissement, et les noms de classes incohérents répartissent une catégorie entre plusieurs classes. Les benchmarks sont eux aussi touchés : une étude portant sur 10 jeux de test très utilisés a estimé qu’au moins 3,3 % des exemples étaient mal étiquetés en moyenne, et qu’au moins 6 % de l’ensemble de validation ImageNet l’étaient. Évalué avec les étiquettes corrigées, ResNet-18 dépasse ResNet-50 dès que la proportion d’exemples de test initialement mal étiquetés augmente de seulement 6 %.
Tâches courantes de nettoyage des données#
Les données tabulaires sont généralement nettoyées avec des bibliothèques comme pandas, tandis que les jeux de données de vision nécessitent des vérifications des fichiers image et de leurs annotations, des pixels aux coordonnées des boîtes englobantes. Les images presque identiques sont repérées en comparant leurs plongements, tandis que la recherche vectorielle permet d’étendre la comparaison à des millions d’images.
- Valeurs manquantes : Les enregistrements comportant des champs vides sont supprimés ou complétés par imputation à partir des statistiques des colonnes ou des voisins les plus proches. Dans les jeux de données de vision, une image sans fichier d’étiquette est ambiguë : il peut s’agir d’une image d’arrière-plan volontaire ou d’une image que personne n’a annotée.
- Doublons et quasi-doublons : Les fichiers identiques octet par octet partagent le même hachage. Ce n’est pas le cas des copies redimensionnées ou recompressées ni des images vidéo consécutives : elles nécessitent donc des hachages perceptuels ou une comparaison de la similarité des plongements.
- Fichiers corrompus ou non valides : Les téléchargements tronqués, les formats non pris en charge, les modes colorimétriques inattendus et les images minuscules ne peuvent pas être décodés ou ne contiennent aucun signal exploitable.
- Erreurs d’étiquetage : Les classes incorrectes, les objets manquants et les boîtes trop lâches ou mal placées sont les erreurs les plus coûteuses dans les données de vision supervisée et les plus difficiles à repérer à l’œil nu.
- Catégories incohérentes : Les graphies comme « Voiture » et « voiture », ou les classes qui se chevauchent comme « automobile » et « véhicule », sont regroupées dans une taxonomie unique afin que chaque concept ait une seule étiquette.
- Valeurs aberrantes : Les valeurs impossibles, comme les âges négatifs ou les boîtes qui dépassent le bord de l’image, sont des erreurs à corriger. Les cas rares mais valides sont conservés, car ce sont souvent ces cas limites que le modèle doit le plus apprendre.
Repérer les erreurs d’étiquetage à l’aide d’un modèle#
Examiner manuellement chaque étiquette ne passe pas à l’échelle. Les pipelines de nettoyage utilisent donc un modèle entraîné pour classer les étiquettes à vérifier par ordre de priorité. L’apprentissage fiable, mis en œuvre dans la bibliothèque open source cleanlab, utilise les probabilités prédites hors échantillon issues de la validation croisée et signale les exemples pour lesquels le modèle prédit avec assurance une classe différente de l’étiquette fournie. La décision finale revient toujours à des personnes : dans l’étude sur les jeux de test mentionnée plus haut, des évaluateurs recrutés par crowdsourcing ont confirmé que 51 % des exemples signalés par l’algorithme comportaient de véritables erreurs d’étiquetage.
Automatiser la vérification des fichiers#
Les vérifications au niveau des fichiers sont assez peu coûteuses pour être exécutées à chaque nouveau lot de données. Le script suivant crée un petit dossier contenant une image, une copie exacte et un fichier tronqué, puis signale la copie et le fichier corrompu à l’aide de Pillow et d’un hachage du contenu :
import hashlib
from pathlib import Path
from PIL import Image
# A tiny image folder: one original, one exact copy, and one truncated download
folder = Path("images")
folder.mkdir(exist_ok=True)
Image.new("RGB", (640, 480), "orange").save(folder / "a.jpg")
(folder / "b.jpg").write_bytes((folder / "a.jpg").read_bytes())
(folder / "c.jpg").write_bytes((folder / "a.jpg").read_bytes()[:1000])
seen = {}
for path in sorted(folder.glob("*.jpg")):
try:
Image.open(path).load() # decode every pixel; a truncated file raises OSError
except OSError as error:
print(f"{path.name}: corrupt ({error})")
continue
digest = hashlib.md5(path.read_bytes()).hexdigest() # identical bytes give identical hashes
if digest in seen:
print(f"{path.name}: duplicate of {seen[digest]}")
seen.setdefault(digest, path.name)Le script affiche b.jpg: duplicate of a.jpg et c.jpg: corrupt (image file is truncated (5 bytes not processed)). Il est important de décoder entièrement chaque image : l’ouverture d’un fichier ne lit que son en-tête, et un fichier tronqué peut passer cette étape. Ultralytics YOLO effectue des vérifications similaires lorsqu’il crée le cache d’étiquettes d’un jeu de données : il réenregistre les JPEG auxquels il manque un marqueur de fin d’image, supprime les lignes d’étiquettes en double et ignore les paires image-étiquette dont l’image fait moins de 10 pixels, dont les coordonnées sortent de l’image ou dont les identifiants de classe dépassent ceux définis dans le YAML du jeu de données. Le récapitulatif de l’analyse indique ensuite le nombre d’images, d’arrière-plans et de fichiers corrompus.
Nettoyage des données et notions connexes#
- Prétraitement des données : Transforme des données déjà correctes dans le format attendu par un modèle, par exemple en redimensionnant les images et en normalisant les valeurs des pixels. Le nettoyage détermine quelles données sont correctes.
- Augmentation des données : Ajoute volontairement des variations, comme des retournements et des changements de couleur, aux données propres pendant l’entraînement.
- Étiquetage des données : Crée des étiquettes pour les données non étiquetées, tandis que le nettoyage vérifie et corrige celles qui existent déjà.
- Biais des jeux de données : Un jeu de données peut être exempt d’erreurs tout en sous-représentant certaines conditions ou certains groupes. Corriger ce biais nécessite de recueillir des données différentes, ce que le nettoyage seul ne peut pas faire.










