Comment puis-je faire une distinction dynamique entre les données catégorielles et les données numériques?


12

Je connais quelqu'un qui travaille sur un projet qui implique l'ingestion de fichiers de données sans tenir compte des colonnes ou des types de données. La tâche consiste à prendre un fichier avec un nombre quelconque de colonnes et divers types de données et à produire des statistiques récapitulatives sur les données numériques.

Cependant, il ne sait pas comment procéder pour attribuer dynamiquement des types de données à certaines données numériques. Par exemple:

    CITY
    Albuquerque
    Boston
    Chicago

Ce ne sont évidemment pas des données numériques et seront stockées sous forme de texte. cependant,

    ZIP
    80221
    60653
    25525

ne sont pas clairement marqués comme catégoriques. Son logiciel lui attribuerait le code postal sous forme de statistiques résumées numériques et de sortie, ce qui n'a aucun sens pour ce type de données.


Quelques idées que nous avions:

  1. Si une colonne est composée de nombres entiers, étiquetez-la comme catégorielle. Cela ne fonctionnerait clairement pas, mais c'était une idée.
  2. Si une colonne a moins de n valeurs uniques et est numérique, étiquetez-la catégoriquement. Cela pourrait être plus proche, mais il pourrait toujours y avoir des problèmes avec les données numériques qui passent.
  3. Conservez une liste de données numériques courantes qui devraient être catégoriques et comparez les en-têtes de colonne à cette liste pour les correspondances. Par exemple, tout ce qui contient "ZIP" serait catégorique.

Mon instinct me dit qu'il n'y a aucun moyen d'attribuer avec précision des données numériques catégorielles ou numériques, mais j'espérais une suggestion. Toute idée que vous avez est grandement appréciée.


Pas une preuve complète, mais si elle commence par un 0, elle n'est généralement pas numérique
paparazzo

Vous devriez probablement aussi vous demander quelle est la conséquence d'une erreur? Cela devrait déterminer combien d'efforts vous devez consacrer au processus. Voulez-vous une précision de 90%, une précision de 99% ou une précision de 99,9999%?
Spacedman

Je prendrais toutes les heuristiques suggérées dans les réponses comme des fonctionnalités et formerais un classificateur binaire.
Emre

Voir stats.stackexchange.com/a/106400/17230 . Il n'y a pas vraiment de vérité fondamentale ici.
Scortchi

Réponses:


8

Je ne connais pas de façon infaillible de le faire. Voici une idée qui me vient à l'esprit:

  1. Traitez les valeurs comme catégoriques par défaut.
  2. Vérifiez les divers attributs des données qui impliqueraient qu'elles sont en fait continues. Pondérez ces attributs en fonction de leur probabilité de corrélation avec les données continues. Voici quelques exemples possibles:
    • Les valeurs sont des entiers: +.7
    • Les valeurs sont flottantes: +.8
    • Les valeurs sont normalement distribuées: +.3
    • Les valeurs contiennent un nombre relativement petit de valeurs uniques: +.3
    • Les valeurs ne sont pas toutes le même nombre de caractères: +.1
    • Les valeurs ne contiennent pas de zéros non significatifs: +.1
  3. Traitez toutes les colonnes dont la somme est supérieure à 1 comme étant numériques. Ajustez les facteurs et les pondérations en fonction des tests effectués avec différents ensembles de données pour répondre à vos besoins. Pour cela, vous pouvez même créer et former un algorithme d'apprentissage machine distinct.

Cette réponse est intéressante. Au lieu de donner une autre réponse, je voudrais suggérer une modification à celle-ci. Que diriez-vous de traiter ce problème comme un problème de classification régulier? Vous pouvez définir un ensemble de fonctionnalités pour chaque colonne, en fonction des attributs de cette réponse (entier, flottant, normalement distribué, nombre relatif de valeurs uniques, etc.) Après cela, il suffit d'utiliser un algorithme de classification.
Pablo Suau

@PabloSuau, j'aime cette idée. Les algorithmes de classification pourraient être une excellente méthode ici. Merci à jncraton pour certaines caractéristiques à regarder.
Poisson Fish

4

Si vous avez, par exemple, le nombre d'enfants d'une famille (qui peut varier, par exemple, entre 0 et 5), s'agit-il d'une variable catégorielle ou numérique? En fait, cela dépend de votre problème et de la façon dont vous comptez le résoudre. En ce sens, vous pouvez effectuer les opérations suivantes:

  • Calculez le nombre de valeurs uniques de cette colonne
  • Divisez ce nombre par le nombre total de lignes
  • Si ce ratio est inférieur à un certain seuil (par exemple, 20%), vous le considérez comme catégorique.

En cas de valeurs discrètes, un test supplémentaire pourrait être: utiliser un modèle de régression pour estimer certains des paramètres et vérifier si les valeurs estimées sont contenues dans l'ensemble de valeurs d'origine. Si ce n'est pas vrai, vous avez probablement affaire à des données catégorielles (comme c'est le cas de ZIP).

Cela a relativement bien fonctionné pour moi dans le passé ...


2

Étant donné que cette question a été transposée, les premiers commentaires de @nickcox sur Cross Validated sont très pertinents et vrais. Mes vues sont légèrement différentes. Par exemple, je reformulerais la question en la décomposant en deux parties: premièrement, il y a la question de savoir comment classer un flux d'informations inconnues par type de données et, deuxièmement, quel type de taux de mauvaise classification peut-on attendre. Les deux questions sont immédiatement répondables, si quelqu'un veut prendre le temps de le faire.

Le premier problème revient à développer un système expert basé sur des règles, dans le sens de ce qui a été proposé à titre préliminaire dans les commentaires et réponses sur ces fils de discussion à l'aide d'échantillons de données réelles qui sont facilement disponibles.

Deuxièmement, étant donné que ces données réelles contiennent des types de données connus, l'analyse comparative de l'erreur de classification.

Une troisième étape impliquerait une mise à jour itérative des règles afin de refléter plus précisément les informations transmises - dans la mesure du possible.

Dans mon esprit, bien que fastidieux, un tel projet n'impliquerait pas une quantité de travail prohibitive.

---- Commentaire additionnel ----

Une bonne discussion sur l'extraction de fonctionnalités en ce qui concerne le processus de génération de données apparaît sur CV ici:

/stats/191935/what-does-the-process-that-generates-the-data-mean-and-how-does-feature-selec

L'extraction, la sélection des fonctionnalités et le DGP constituent un excellent point de départ pour développer un système expert.


J'ai supprimé la question sur la validation croisée. Pour référence, @NickCox a déclaré: «C'est pire que vous ne le pensez, même si vous pensez que c'est pire que vous le pensez. Les points décimaux peuvent se cacher dans des variables catégorielles, dans le cadre de classifications codées, par exemple d'industries ou de maladies. que les catégories: 3, c'est-à-dire 3 voitures ou chats, n'est pas la même chose que 3, ce qui signifie "une personne possède une voiture" ou "une personne appartient à un chat". Les mesures peuvent simplement être des nombres entiers par convention, par exemple, la taille des personnes peut simplement être rapportés en cm ou pouces entiers, les pressions sanguines en mm entiers Hg. "
Poisson Fish

@NickCox deuxième commentaire: "Le nombre de valeurs distinctes (un meilleur terme que" unique ", qui a toujours la signification principale de n'apparaître qu'une seule fois) n'est pas non plus un bon guide. Le nombre de tailles différentes de personnes possible dans des échantillons modérés est probablement beaucoup moins que le nombre de différentes appartenances religieuses ou origines ethniques. "
Poisson Fish
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.