Guide du débutant pour la création de jeux de données de haute qualité pour l’apprentissage automatique

Guide du débutant pour créer des jeux de données de haute qualité pour l'apprentissage automatique

Outils et techniques pour le nettoyage des données, la visualisation, l’augmentation et la génération de données synthétiques

Des données intelligentes plutôt que des données massives. Tel est le postulat du paradigme “IA centrée sur les données”.

Plus qu’une simple “prétraitement” des données, les scientifiques des données devraient construire une pratique continue et systématique de compréhension et d’amélioration de leurs ensembles de données.

Cela nous permettra finalement de passer d’une poursuite aveugle de résultats de classification plus élevés en lançant des algorithmes de plus en plus complexes sur le problème à une compréhension approfondie des raisons pour lesquelles les résultats de classification sont ce qu’ils sont, quelle est réellement la source de complexité du problème et comment nous pouvons ajuster les données pour que les classificateurs puissent mieux apprendre le problème, augmentant ainsi leurs performances.

Si vous découvrez l’apprentissage automatique, cela peut sembler un peu intimidant : “Quelles sont les meilleures pratiques pour construire des ensembles de données de haute qualité et comment les mettre en place ?”

Dans ce tutoriel, nous passerons par un cas simple d’utilisation du paradigme de l’IA centrée sur les données pour obtenir des données de haute qualité et améliorer nos résultats de classification en apprentissage automatique.

En suivant le mantra de l’IA centrée sur les données – tout est dans les données – à aucun moment nous n’entrerons dans le modèle lui-même (honestly, it will be a simple decision tree).

Nous utiliserons le jeu de données sur le diabète des Indiens Pima, disponible gratuitement sur Kaggle (Licence : CC0 : domaine public). Vous trouverez également tout le code et les documents supplémentaires sur Data-Centric AI Community GitHub.

Commençons, voulez-vous ?

Étape 1 : Réalisation d’un profilage des données pour la compréhension des données

Avant de commencer à créer notre ensemble de données, nous devons comprendre le problème que nous essayons de résoudre et les particularités des données avec lesquelles nous travaillons. Comprendre en profondeur les caractéristiques de nos données, la complexité du problème et le domaine d’utilisation est l’un des premiers principes de l’IA centrée sur les données.

Cela nous aidera à déterminer les prochaines étapes à suivre dans votre pipeline d’apprentissage automatique.

En ce qui concerne le profilage des données, il existe plusieurs outils open source intéressants que vous pouvez explorer : j’ai moi-même fait une revue de quelques-uns, dont ydata-profiling, dataprep, sweetviz, autoviz et lux.

J’utilise principalement ydata-profiling : je trouve que c’est un outil de premier ordre pour les praticiens des données qui, au lieu de nous faire sauter à travers des cerceaux pandas pour tirer le meilleur parti des caractéristiques et des visualisations de nos données, nous permet de tout faire en quelques lignes de code.

Tout d’abord, vous devrez installer ydata-profiling (il vaut mieux utiliser un environnement virtuel pour cela – si vous ne savez pas comment faire, vous pouvez regarder cette vidéo de 2 minutes, ou ce tutoriel complet si vous n’avez jamais travaillé dans des environnements conda) :

Ensuite, nous pouvons obtenir une vue d’ensemble complète des données en enregistrant un rapport .html de toutes les caractéristiques et visualisations dont nous avons besoin pour commencer:

Le rapport de données nous permet de connaître immédiatement les caractéristiques globales de nos données et met en évidence certaines alertes que nous devons prendre en compte:

YData Profiling Report: Recherche des statistiques de base, des visualisations et des avertissements de qualité de l'ensemble de données.

L’ensemble de données contient 768 observations et 9 variables/caractéristiques. Alors que 8 sont numériques, 1 est identifiée comme catégorique (Outcome semble être notre objectif). Il n’y a pas de lignes en double et a priori il n’y a pas de valeurs manquantes. Enfin, plusieurs avertissements de Corrélation élevée sont trouvés parmi les caractéristiques. De plus, plusieurs caractéristiques ont un grand nombre de Zéros.

Il est maintenant temps de jouer les détectives des données. Les Corrélations élevées sont plutôt attendues dans les caractéristiques biologiques, mais que dire de ces valeurs Zéro?

En examinant certaines des caractéristiques mises en évidence (par exemple, BMI), nous pouvons voir que ces valeurs sont assez éloignées de la distribution globale. Et en faisant appel à des connaissances spécialisées, ces valeurs “0” sont en réalité dénuées de sens : une valeur de 0 est acceptable pour Pregnancies, mais pour le BMI, la glycémie, l’insuline, la pression artérielle ou l’épaisseur de la peau, elle est invalide.

YData Profiling Report: Caractéristique BMI, indiquant que les valeurs zéro sont plutôt

Nous réalisons rapidement ce que codent ces zéros : des données manquantes.

Pour l’instant, nous allons résoudre ce problème, mais un processus approfondi d’EDA peut comprendre beaucoup plus. Consultez ce Guide Essentiel de l’Analyse Exploratoire des Données pour voir ce que vous pourriez découvrir d’autre dans vos données.

Étape 2 : Investigation des problèmes de qualité des données

Maintenant que nous avons constaté que certaines colonnes ont des valeurs nulles invalides, nous pouvons commencer par gérer le problème des données manquantes dans notre ensemble de données.

De nombreux modèles d’apprentissage automatique et estimateurs scikit-learn ne prennent pas en charge nativement les valeurs manquantes, nous devons donc gérer ces valeurs NaN d’une manière ou d’une autre avant de fournir notre ensemble de données à l’estimateur.

Tout d’abord, marquons ces valeurs 0 comme valeurs NaN :

Ensuite, nous pouvons utiliser l’imputation des données pour remplacer les observations NaN par des valeurs de remplacement plausibles.

Le théorème du “repas gratuit” nous dit qu’il n’y a pas de meilleure solution pour chaque situation – nous devons étudier comment différentes solutions affectent la complexité de nos données d’entraînement et déterminer ce qui renforce le mieux notre modèle d’apprentissage automatique. C’est en fait un autre principe de l’IA centrée sur les données : itération constante et amélioration.

Pour l’instant, nous utiliserons une méthode très simple – SimpleImputer – pour remplacer les valeurs zéro par la valeur moyenne de chaque caractéristique. Il s’agit d’une approche très naïve qui est susceptible de créer des “pics” indésirables dans nos distributions, mais le but est simplement de montrer comment mettre en évidence et imputer les données manquantes, nous pourrons essayer de meilleures approches ultérieurement :

Ensuite, nous pouvons essayer un classificateur d’arbres de décision très simple et voir quelle serait la ligne de base de nos résultats de classification. En tant que note annexe, les arbres de décision peuvent être étendus pour prendre en charge naturellement les valeurs manquantes, via des divisions de substitution ou d’autres méthodes. En effet, dans la documentation de scikit-learn, il semble que les arbres de décision prennent en charge nativement les valeurs manquantes dans certaines conditions dans la version actuelle (1.3.2). Cependant, comme j’utilisais la version 1.2.2, je suis tombé sur cette erreur :

Cependant, même si les valeurs NaN sont traitées en interne, l’entraînement de vos modèles avec des données manquantes n’est pas une bonne pratique, car cela compromettra les concepts que le modèle apprend à partir d’informations désordonnées et limitées.

Voici la matrice de confusion :

Les résultats de classification ne sont pas extraordinaires. Gardez à l’esprit que nous utilisons un simple arbre de décision, mais quand même… il y a une différence significative entre la prédiction pour nos catégories cibles. Pourquoi le classifieur fonctionne-t-il mieux pour la classe “0” que pour la classe “1” ?

Étape 3 : Augmentation des classes sous-représentées

Si nous avons bien fait attention à l’Étape 1 (vous avez peut-être déjà découvert cela), notre classe cible, Outcome, est déséquilibrée. Peut-être pas au point de déclencher un avertissement dans les paramètres par défaut (le seuil par défaut est de 0.5), mais suffisamment pour biaiser le classifieur en faveur de la classe majoritaire, négligeant ainsi la minoritaire. Cela est clair à partir de la visualisation des données présentée dans le rapport de profilage :

Rapport de profilage YData : Les classes « 0 » et « 1 » de l'issue ne sont pas également représentées. Les classifieurs seront naturellement plus biaisés en faveur de la classe bien représentée « 0 », négligeant la classe « 1 ».

Notez que si les données manquantes peuvent être causées par plusieurs erreurs lors de la collecte, de la transmission ou du stockage des données, le déséquilibre des classes peut refléter une caractéristique naturelle du domaine : par exemple, il y a simplement moins de patients diagnostiqués avec le diabète dans ce centre médical.

Néanmoins, il est toujours important d’agir sur les données d’entraînement pour garantir que le modèle ne néglige pas les cas minoritaires : en fait, c’est ce que nous essayons de prédire avec plus de précision.

Un faux positif est mauvais, car il donnera des informations erronées à un patient en bonne santé en lui indiquant qu’il a le diabète. Mais lorsque des tests supplémentaires sont effectués, ce ne sera qu’une simple “alerte”.

Cependant, dans ce cas, un faux négatif est pire. Nous dirions à un patient atteint de diabète que tout va bien, il passe sans être diagnostiqué et la maladie progresse.

Une façon d’augmenter ces chiffres est d’utiliser des techniques de suréchantillonnage des données. Le suréchantillonnage des données est une technique populaire parmi les praticiens des données pour ajuster les distributions d’un ensemble de données, c’est-à-dire le rapport entre les classes ou catégories existantes dans les données, atténuant ainsi le problème des données déséquilibrées.

Et ce n’est qu’une des nombreuses applications intéressantes et utiles des données synthétiques.

Alors que les données synthétiques peuvent avoir plusieurs interprétations – par exemple, “fausses données”, “données fictives”, “données simulées” – ici nous faisons référence à la génération de données synthétiques “axées sur les données”.

En ce sens, les données synthétiques sont générées artificiellement et préservent les caractéristiques des données réelles – leur structure, leurs propriétés statistiques, leurs dépendances et leurs corrélations.

Il existe une pléthore de méthodes et d’outils open source pour générer des données synthétiques – ydata-synthetic, sdv, gretel-synthetics, nbsynthetic et synthcity ne sont que quelques-uns avec lesquels j’ai expérimenté par le passé.

Et encore une fois… il n’y a “pas de repas gratuit” : le choix de la méthode la plus appropriée dépendra invariablement de l’objectif pour lequel les données synthétiques sont nécessaires.

Pour avoir rapidement une idée de la façon dont les données synthétiques peuvent être utilisées pour l’augmentation, nous utiliserons le package ydata-synthetic et expérimenterons avec leurs modèles de mélange gaussien.

Tout d’abord, nous devrons installer le package:

Et une fois que cela est fait, la création de données synthétiques est extrêmement simple:

Après avoir nos données synthétiques, nous pouvons simplement extraire un sous-ensemble des nouveaux échantillons de la classe minoritaire générés en échantillonnant à partir des données synthétiques, et l’ajouter aux données d’entraînement pour créer une distribution équilibrée (c’est-à-dire 50%-50%):

Voyons comment cela influence l’apprentissage de notre arbre de décision et ses résultats ultérieurs:

Et la matrice de confusion:

Remarquez comment cette modification simple de notre ensemble d’entraînement a amélioré de manière significative notre score F de 10% et une amélioration significative des résultats de sensibilité de la classe minoritaire (de 53% à 73%).

Voici la beauté du paradigme de l’IA centrée sur les données: sans jamais toucher à notre paramétrisation de modèle, nous avons amélioré de manière significative la qualité de notre ensemble d’entraînement avec des heuristiques très simples et des techniques standard – imaginez ce que nous pourrions faire avec des stratégies plus avancées et des pipelines de préparation de données spécialisées!

Il est vrai que le rappel de la classe 0 a souffert un peu, mais en fin de compte, nous avons besoin que ce modèle soit plus sensible que spécifique (c’est-à-dire détecter mieux la classe positive que la classe négative) en raison des contraintes particulières auxquelles nous sommes confrontés: le diagnostic de maladie – encore une fois, un autre principe de l’IA centrée sur les données: les méthodes et les résultats doivent être évalués en fonction des besoins et des contraintes du domaine.

Réflexions finales et orientations futures

Tout au long de cet article, nous avons expérimenté le paradigme de l’IA centrée sur les données avec un cas d’utilisation très pratique et pratique.

Nous avons commencé, comme toujours, par comprendre nos données. Nous avons découvert, étudié et résolu des problèmes particuliers de qualité des données tels que les données manquantes et l’amélioration de nos données d’entraînement avec des données synthétiques pour surmonter la nature déséquilibrée du domaine. Bien sûr, pour une étude de cas aussi rapide et simple, nous nous sommes concentrés sur des heuristiques simples pour accomplir la tâche, mais le travail d’un data scientist ne s’arrête jamais ici.

Comment les résultats changeraient-ils si nous considérions une méthode d’imputation différente? Comment aurions-nous pu obtenir un meilleur ajustement dans la génération de nos données synthétiques? Aurait-il fallu équilibrer les deux classes de manière égale ou augmenter encore davantage la représentation de la classe minoritaire? Est-ce que certaines transformations de caractéristiques ou une réduction de la dimensionnalité auraient pu aider le résultat de classification? Aurait-il fallu supprimer certaines fonctionnalités biaisantes?

Toutes ces questions semblent inconnues au début de tout projet d’apprentissage automatique. Mais à mesure que nous commençons à mesurer et à découvrir la source de complexité dans chaque ensemble de données, nous obtenons de meilleures informations sur les méthodes qui pourraient améliorer les résultats de classification (une sorte d’approche “méta-apprentissage”). Et bien sûr, les données doivent être manipulées et améliorées en fonction à la fois des caractéristiques des données et de l’objectif ultime du projet.

Produire un pipeline prédéfini et traiter la préparation des données comme une solution universelle revient à voler à l’aveugle. À la place, un data scientist qualifié joue en permanence les détectives des données et essaie de trouver les meilleures techniques en fonction des indices laissés par les données pour que nous puissions les attraper. Et cela fonctionne généralement. Nous devons simplement garder les yeux ouverts!

J’espère que vous avez apprécié le tutoriel et comme toujours, les commentaires, les questions et les suggestions sont très appréciés. Faites-moi savoir sur quels autres sujets vous souhaiteriez que j’écrive dans les commentaires!

Vous voulez commencer avec la science des données? Venez nous rencontrer jeudi prochain, le 23 novembre!

Si vous ne faites pas encore partie de la communauté de l’IA centrée sur les données, vous devriez vraiment le faire. Nous sommes un groupe amical de passionnés de données qui partagent une passion pour l’apprentissage de la science des données. Nous organisons occasionnellement des sessions Code with Me très sympas, et nous venons de lancer des groupes d’étude super informels.

Je serai l’hôte de la prochaine session le 23 novembre2023, où nous aborderons certains concepts de l’Analyse exploratoire des données.

On se voit là-bas ?

À propos de moi

Ph.D., chercheuse en apprentissage automatique, éducatrice, militante pour les données et véritable “touche-à-tout”. Ici sur VoAGI, j’écris sur l'<strong'intelligence artificielle="" centrée="" des="" données="" données, en éduquant les communautés de la science des données et de l’apprentissage automatique sur la façon de passer des données imparfaites aux données intelligentes.

Relations développeurs @ YData | Communauté d’IA centrée sur les données | GitHub | Google Scholar | LinkedIn

We will continue to update IPGirl; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

AI

Cet article sur l'IA de l'Imperial College London et d'Eleuther AI explore le jeu de rôle en tant que cadre pour comprendre le comportement des agents de dialogue.

Dans notre monde contemporain, l’intégration de l’intelligence artificielle (IA) a profondément transform...

AI

Cette recherche en IA de Google révèle comment l'encodage des données de graphe améliore les performances des modèles de langage sur des tâches complexes.

La recherche et les applications des grands modèles linguistiques (LM) ont considérablement progressé ces dernières a...

AI

Naviguer dans le paysage des grands modèles de langage

Microsoft et Meta ont récemment dévoilé Llama 2, le modèle de langue grand format open-source de nouvelle génération ...

AI

Pour que le monde puisse voir une organisation à but non lucratif déploie des simulateurs alimentés par GPU pour former les prestataires à la chirurgie de préservation de la vue

Les dispositifs de simulation chirurgicale alimentés par GPU aident à former plus de 2 000 médecins par an dans les p...

AI

Cet article sur l'IA déploie pour la première fois dans l'espace un modèle de base léger

La technologie spatiale avance jour après jour. Différents groupes de recherche ont fait des efforts pour construire ...