Technologie

Quelle est la meilleure façon de gérer les valeurs NaN?

Quelle est la meilleure façon de gérer les valeurs NaN?


En faisant ma pratique de l'analyse de Big Data, j'ai trouvé un obstacle qui peut détruire tous les processus d'analyse de données. Cet obstacle est connu sous le nom de valeurs NaN dans la science des données et l'apprentissage automatique.

Quelles sont les valeurs de NaN?

NaN ou Not a Number sont des valeurs spéciales dans DataFrame et des tableaux numpy qui représentent la valeur manquante dans une cellule. Dans les langages de programmation, ils sont également représentés, par exemple en Python, ils sont représentés comme une valeur None.

Vous pouvez penser que les valeurs Aucune (ou NaN) ne sont que des zéros car elles représentent l'absence d'une valeur. Mais voici un piège, la différence entre zéro et la valeur None est que zéro est une valeur (par exemple entier ou flottant), tandis que la valeur None représente l'absence de cette valeur. Voici un mème qui explique très bien la différence entre les valeurs Aucune et zéro:

La différence entre 0 et NULL (Source - Google)

En quoi la valeur NaN est-elle dangereuse?

Les valeurs de NaN sont dangereuses de deux manières:

Comment y faire face?

Donc, si les valeurs de NaN sont si dangereuses pour le travail des Data Scientists, que devons-nous en faire? Il existe quelques solutions:

Il existe de nombreuses façons d’imputer ces lacunes et, dans la plupart des cas, les Data Scientists, en particulier les débutants, ne les connaissent pas. Voici comment procéder:

Voyons donc comment chaque méthode fonctionne et comment elles affectent l'ensemble de données.

L'expérience!

Pour vérifier chaque méthode, j'ai choisi un ensemble de données appelé Iris Dataset - peut-être le jeu de données le plus courant pour les tests en Machine Learning. J'ai également essayé ces méthodes sur des ensembles de données plus grands et plus complexes, mais pour certains algorithmes, il a fallu trop de temps pour effectuer des imputations.

J'ai d'abord généré pour chaque colonne d'entités de cet ensemble de données 15 index aléatoires et uniques entre 0 et 149. En utilisant ces index (pour chaque colonne, ils ont été générés séparément), j'ai changé les valeurs des colonnes avec NaN.

Et après avoir appliqué chaque méthode à ces valeurs de NaN, j'ai utilisé l'erreur quadratique moyenne (MSE) pour vérifier la «précision» de chaque méthode.

Commençons donc.

Méthode 1: imputation avec des valeurs spécifiques.

Dans cette méthode, les valeurs NaN sont modifiées avec une valeur spécifique (un nombre par exemple), dans la plupart des cas, il s'agit de 0. Parfois, c'est la meilleure option, comme lorsque votre fonctionnalité est le montant d'argent dépensé en bonbons, mais parfois c'est le cas. le pire, comme pour l'âge.

Voyons maintenant comment cela affecte l'ensemble de données initial:

Les valeurs imputées sont représentées par des étoiles (*) et les valeurs normales par des points.

Comme vous le voyez, le remplissage des valeurs NaN avec zéro affecte fortement les colonnes où la valeur 0 est quelque chose d'impossible. Cela affecterait fortement l'espace en fonction des algorithmes utilisés, en particulier KNN et TreeDecissionClassifier.

Allusion: nous pouvons voir si zéro est un bon choix en appliquant .décris() fonction à notre dataframe. Si la valeur min est égale à 0, cela pourrait être un bon choix, sinon vous devriez opter pour une autre option.

Méthode 2: imputation des mesures.

L'imputation des métriques est un moyen de remplir les valeurs NaN avec des métriques spéciales qui dépendent de vos données: moyenne ou médiane par exemple.

La valeur moyenne est la somme d'une valeur dans une série divisée par un nombre de toutes les valeurs de la série. Il s'agit de l'un des types de mesures les plus utilisés dans les statistiques. Mais pourquoi imputons-nous les valeurs de NaN avec une valeur moyenne? Mean a une propriété très intéressante, elle ne change pas si vous ajoutez des valeurs moyennes à votre série.

La visualisation des données après imputations moyennes.

Sur le graphique ci-dessus, vous pouvez voir que cela n'affecte pas trop la structure de l'ensemble de données et le plus important est qu'il ne place aucun échantillon d'une classe dans la zone d'une autre classe.

La valeur médiane divise les nombres en 2 moitiés qui ont un nombre égal d'échantillons. Parfois, en analyse statistique, la médiane est plus informative que la moyenne, car elle n'est pas tellement biaisée par de nouvelles valeurs. Dans une distribution normale (qui n’existe en fait pas), les valeurs moyenne et médiane sont égales.

En raison du fait qu'il n'y a pas de distributions normales, dans la plupart des cas, la valeur moyenne et la valeur médiane sont très proches l'une de l'autre.

La visualisation des données après imputations médianes.

D'après l'intrigue ci-dessus, il est clair comment fonctionne la médiane, si vous regardez attentivement toutes les étoiles (valeur qui a été imputée) sont alignées sur 2 lignes orthogonales (5,6 pour sepal_lenght et 3,0 pour sepal_width).

Méthode 3: imputation avec KNN

Cet algorithme d'imputation est très similaire à KNearesNeighbours de sklearn. Il trouve les k échantillons les plus proches de l'ensemble de données à l'échantillon avec une valeur NaN, et impute avec lui la valeur moyenne de ces échantillons.

Cette méthode est implémentée dans la bibliothèque impyute et sklearn (Quand j'ai commencé à écrire cet article, je ne connaissais pas l'implémentation de sklearn.)

La visualisation des données après imputation KNN avec 3 voisins.

Du graphique ci-dessus, nous pouvons voir une erreur critique - placer l'échantillon de la classe rouge dans la zone bleu-vert (c'est une implémentation connue avec 3 voisins).

Méthode 4: imputation avec MICE

Et le dernier algorithme de cet article, et le meilleur que je connaisse actuellement - Imputation multiple par équations chaînées. Cet algorithme pour chaque colonne qui a des valeurs manquantes correspond à une régression linéaire avec les valeurs actuelles. Après cela, il utilise ces fonctions linéaires pour imputer les valeurs de NaN avec la prédiction de ces valeurs.

La visualisation des données après imputation MICE.

Nous pouvons voir que sur le tracé ci-dessus, cela n'affecte pas fortement la représentation du jeu de données sur le tracé 2D. Mais pourquoi?

Les imputations KNN et MICE utilisent l'ensemble de données pour remplacer la valeur NaN, tandis que la médiane et la moyenne n'utilisent que la colonne de la valeur manquante, c'est pourquoi les 2 derniers algorithmes n'affectent pas fortement la structure de l'ensemble de données et ne modifient pas ses informations.

Mais que disent les chiffres?

Le dernier mot est donné aux figures. Pour savoir à quel point les méthodes mentionnées ci-dessus fonctionnent, j'utilise le MSE (Mean Squared Error). J'ai calculé les valeurs MSE entre les valeurs d'origine et celles qui ont été imputées.

Le tableau ci-dessus montre le MSE pour chaque méthode (sur KNN et MICE j'ai utilisé 2 versions: une incluant la valeur cible (avec y) et une ne l'incluant pas).

Vous trouverez ci-dessous quel algorithme a fonctionné le mieux pour quelle colonne.

Exactement comme je le pensais, MICE fonctionnait bien dans la majorité des cas.

La conclusion que j'ai tirée de cette expérience est que les meilleures façons d'imputer des valeurs continues sont celles qui utilisent l'ensemble de données comme MICE ou KNN, pas seulement une colonne.

Merci pour la lecture!

Afficher plus

SupportIvy

SupportIvy.com : Un lieu pour partager le savoir et mieux comprendre le monde. Meilleure plate-forme de support gratuit pour vous, Documentation &Tutoriels par les experts.

Articles similaires

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Bouton retour en haut de la page
Fermer