Traitement des données manquantes catégorielles

Résolu/Fermé
FerhatYous Messages postés 20 Date d'inscription jeudi 24 février 2022 Statut Membre Dernière intervention 8 août 2022 - Modifié le 2 mars 2022 à 14:47
mamiemando Messages postés 33506 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 31 janvier 2025 - 4 mars 2022 à 12:43
Bonjour à tous,

J'ai un ensemble de données constitué de 3 millions de lignes, chacune d'elle contenant des données catégorielles (str). Je travaille actuellement sur un échantillon de 100 000 lignes, et sur quelques variables (colonnes). J'ai entre 50 000 et 55 000 de valeurs manquantes sur un total de 100 000, donc un peu plus de la moitié.

J'ai pensé en premier temps faire un modèle qui prédit les valeurs manquantes, en encodant mes données catégorielles. Mais je ne peux pas, car je n'ai pas assez de RAM et il y a beaucoup de catégories pour plusieurs variables.

Je me suis penché donc sur la méthode de création d'une catégorie "Unknown" pour chaque variable.
Pensez-vous que c'est une bonne démarche ?

Je vous remercie d'avance de votre retour.
A voir également:

1 réponse

mamiemando Messages postés 33506 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 31 janvier 2025 7 819
Modifié le 2 mars 2022 à 14:50
Bonjour,

Le problème présenté tel quel est un peu vague, peux-tu l'illustrer avec un petit exemple (ce que tu as, ce que tu aimerais obtenir) ?

Ensuite il faudrait spécifier un peu comment la prédiction serait faite. Tu peux effectivement utiliser du machine learning pour essayer de prédire des données manquantes, encore faut-il que ton échantillon soit bien constitué (et ton réseau bien dimensionné) pour faire une prédiction correcte et sans sur-apprentissage.

Peut-être aussi que tu devrais nous dire quel est ton objectif, afin qu'on voit si tu pars dans la bonne direction.

Bonne chance
0
FerhatYous Messages postés 20 Date d'inscription jeudi 24 février 2022 Statut Membre Dernière intervention 8 août 2022
2 mars 2022 à 15:27
J'ai un dataframe qui contient que des chaines de caractères.

Si on prend par exemple la colonne url (www.qlqchose.fr) et qui contient beaucoup de catégories. pour 100k valeurs j'ai 50k valeurs manquantes donc la moitié. J'aimerai savoir si les remplacer par une nouvelle catégorie ("Unknown") serai une bonne méthode, mon but c'est trouver la meilleure méthode de traitement de données manquantes quand on a des millions de lignes.
Je sais que quand on a que quelques valeurs manquantes, en général on supprime les lignes ou remplace par la plus courante, et quand la majorité des valeurs sont manquantes dans une variable, on supprime cette dernière.
Mais quand on a la moitié sont des valeurs manquantes, je ne sais pas trop quelle méthode suivre(si je supprime je perd beaucoup d'information, et si je remplace par la valeur la plus courante, ça risque de chambouler mes résultats à l'avenir, si je fais du clustering ou autre ) .
PS: pour la méthode de prédiction, je viens de tester mais j'arrive même pas a encoder mes données en binaire car j'ai beaucoup de catégories différentes (C'est valable pour toutes les autres colonnes, il y en a 40).
Commenter
0
0
mamiemando Messages postés 33506 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 31 janvier 2025 7 819 > FerhatYous Messages postés 20 Date d'inscription jeudi 24 février 2022 Statut Membre Dernière intervention 8 août 2022
2 mars 2022 à 16:02
En fait je ne peux pas répondre car tu me parles d'une manière de remettre en forme ton dataset sans me dire ce que tu as l'intention d'en faire.
  • Quel est l'ensemble de tes attributs (colonnes), leur type, et la taille de leur domaine (nombre de valeurs possibles) ?
  • Que veux-tu faire tes échantillons ? Quel est le but de ton analyse de données ?


Voici à ce stade mon opinion :
  • Si tu "bouches" les trous avec des "Unknown", ton algorithme verra tous ces échantillons comme aillant la même valeur d'attribut alors qu'en pratique ça n'est pas forcément le cas. Ça risque de biaiser ton résultat.
  • Si tu "bouches" les trous en inférant une réponse crédible, tu biaises tes résultats conformément à ton prédicteur (or rien ne dit qu'il est juste) et j'ai du mal à voir le bénéfice apporté par ça.
  • Si certains attributs sont incomplets, mais ne te paraissent pas pertinent pour lancer ton algorithme de clustering (PCA ou autre), il suffit de ne pas tenir compte de ces colonnes. Si tu es convaincu que la colonne est pertinente, peut-être faut-il te limiter aux échantillons pour lesquels ladite colonne est renseignée.


Bonne chance
1
FerhatYous Messages postés 20 Date d'inscription jeudi 24 février 2022 Statut Membre Dernière intervention 8 août 2022 > mamiemando Messages postés 33506 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 31 janvier 2025
2 mars 2022 à 16:39
Désolé si j'étais pas très clair sur mon message précédent.
Donc je suis entrain d'extraire des données à partir des logs (logs web) ( la colonne action qui prend par exemple les valeurs allow ou blocking, j'ai des dates, j'ai des usernames, des adresses ip et d'autres colonnes de la même structure ) toutes ces colonnes sont de type object. Pour le nombre de valeurs possibles pour chaque colonne, ça varie y'en a elles en ont des centaines, et d'autres des dizaines.
Mon but à la fin c'est de faire de la détection d'anomalies.
Je ne sais pas trop comment y procéder pour le moment, mais ce qui me pose problème c'est plus les valeurs manquantes pour le moment.
PS : désolé je peux pas donné plus d'informations sur les données car c'est confidentiel.
0
mamiemando Messages postés 33506 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 31 janvier 2025 7 819 > FerhatYous Messages postés 20 Date d'inscription jeudi 24 février 2022 Statut Membre Dernière intervention 8 août 2022
4 mars 2022 à 12:43
Pas de soucis pour la confidentialité, je comprends. À mon avis avant de te lancer dans quelque chose, il faut d'abord faire un petit état de l'art des techniques de clustering tolérantes aux données manquantes. Cette page est sans doute un bon point de départ.

Bonne chance
1