Comment prouver statistiquement si une colonne contient des données catégoriques ou non en utilisant Python

10

J'ai un bloc de données en python où j'ai besoin de trouver toutes les variables catégorielles. La vérification du type de la colonne ne fonctionne pas toujours car le inttype peut également être catégorique.

Je cherche donc de l'aide pour trouver la bonne méthode de test d'hypothèse pour identifier si une colonne est catégorique ou non.

J'essayais ci-dessous le test du chi carré mais je ne sais pas si c'est assez bon

import numpy as np
data = np.random.randint(0,5,100)
import scipy.stats as ss
ss.chisquare(data)

S'il vous plaît donnez votre avis.

Amit
la source
1
Pourriez-vous préciser si j'ai bien compris que vous voulez faire la distinction entre int utilisé comme variable ordinale et utilisé comme codage catégorique arbitraire? Je n'ai pas de réponse, mais cela pourrait aider d'autres lectures à préciser ce que vous voulez. Intuitivement, je ne pense pas que Chi2 puisse faire le travail de manière fiable.
ReneBt
Oui, tu as raison. Sauf que je ne me concentre pas sur le type de variable, mais plutôt sur les données qu'elle contient. Donc, dans l'exemple de code que j'ai partagé, le résultat devrait être qu'il s'agit d'une variable catégorielle car elle n'a que 5 valeurs uniques.
Amit
1
D'où vient la règle "le résultat devrait être qu'il s'agit d'une variable catégorielle car elle n'a que 5 valeurs uniques". viens de?
Dennis Soemers
Oh ce n'est pas une règle, intuitivement je sais que toutes mes données de colonne sont ces 5 valeurs seulement.
Amit
Même si d'autres ont correctement indiqué que cela ne pouvait pas être fait, cela poserait néanmoins un problème d'apprentissage automatique intéressant. Il existe sans aucun doute des domaines problématiques dans lesquels des prévisions raisonnablement précises peuvent être faites.
John Coleman

Réponses:

34

Réponse courte: vous ne pouvez pas.

Il n'y a pas de test statistique qui vous dira si un prédicteur contenant les nombres entiers compris entre 1 et 10 est un prédicteur numérique (par exemple, le nombre d'enfants) ou s'il code dix catégories différentes. (Si le prédicteur contient des nombres négatifs, ou si le plus petit nombre est supérieur à un, ou s'il saute des entiers, cela pourrait plaider contre le fait qu'il s'agit d'un encodage catégorique - ou cela peut simplement signifier que l'analyste a utilisé un encodage non standard.)

La seule façon d'être sûr est de tirer parti de l'expertise du domaine ou du livre de codes de l'ensemble de données (qui devrait toujours exister).

Stephan Kolassa
la source
14
"le livre de codes de l'ensemble de données (qui devrait toujours exister)" - Ha, bien.
Kodiologist
12

Quels que soient les critères - ou règles de base - qui fonctionnent pour votre jeu de données, vous êtes les bienvenus, mais nous ne pouvons pas voir vos données. Dans tous les cas, le problème est généralement mieux réglé et sans référence à un logiciel particulier.

C'est pire que vous ne le pensez, même si vous pensez que c'est pire que vous ne le pensez.

  1. La réponse de @Stephan Kolassa soulève déjà un point clé. Les petits nombres entiers pourraient signifier des nombres plutôt que des catégories: 3, signifiant 3 voitures ou chats, n'est pas identique à 3, signifiant "personne possède une voiture" ou "personne appartient à un chat".

  2. Des points décimaux pourraient se cacher dans des variables catégorielles, dans le cadre de classifications codées, par exemple d'industries ou de maladies.

  3. Les mesures au sens strict pourraient simplement être des nombres entiers par convention, par exemple la taille des personnes peut simplement être indiquée en cm ou en pouces entiers, les pressions sanguines en mm entiers Hg.

  4. 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 bien inférieur au nombre de différentes appartenances religieuses ou origines ethniques.

Nick Cox
la source
+1. Ceci est une bonne liste de choses à considérer. Vous devez combiner cela avec vos connaissances de domaine sur l'ensemble de données (et toute documentation) pour automatiser la détection des variables catégorielles.
Anna
@Anna, je dirais que la détection automatisée ne doit pas être effectuée et c'est exactement ce qui peut vous causer des problèmes, comme indiqué dans ce fil. La connaissance et la documentation du domaine doivent facilement identifier les variables polytomiques parmi les autres variables, afin que vous n'ayez pas à deviner.
prince_of_pears
7

Eh bien, je pense que c'est encore pire que les autres réponses suggèrent: les données ne sont pas des sous-espèces æternatis catégoriques ou numériques - le "niveau de mesure" est quelque chose stipulé par l'analyste pour répondre à une question particulière à une occasion particulière. Voir la réponse de Glen_b ici .

Il est d'une importance pratique de comprendre cela. Par exemple, avec un arbre de classification, la distinction entre les prédicteurs de rapport, d'intervalle et de niveau ordinal est sans conséquence: la seule distinction qui importe est celle entre les prédicteurs ordinaux et nominaux. Contraindre l'algorithme pour diviser le prédicteur en un point le long d'une ligne, en séparant les valeurs supérieures des valeurs inférieures, peut avoir un effet significatif sur ses performances prédictives - pour le meilleur ou pour le pire, selon la fluidité de la relation du prédicteur (ordinairement putatif) avec la réponse & la taille de l'ensemble de données. Il n'y a aucun moyen raisonnable de prendre une décision basée uniquement sur la réflexion sur la façon dont la variable prédictive représente la réalité, quelle que soit l'analyse que vous êtes sur le point d'entreprendre, et encore moins sur les valeurs que vous avez trouvées qu'elle prend dans un échantillon.

Scortchi - Réintégrer Monica
la source
0

Il s'agit d'une question de recherche ouverte. Voir par exemple le travail de Valera et al. ( papier ) ou des extensions (par exemple celle de Dhir et al. - papier ).

Éditer:

Une pratique courante en statistique et en apprentissage automatique consiste à supposer que les types de données statistiques (par exemple ordinaux, catégoriques ou à valeur réelle) des variables, et généralement, le modèle de vraisemblance sont également connus. Cependant, à mesure que la disponibilité des données réelles augmente, cette hypothèse devient trop restrictive. Les données sont souvent hétérogènes, complexes et documentées de manière incorrecte ou incomplète. Étonnamment, malgré leur importance pratique, il existe encore un manque d'outils pour découvrir automatiquement les types statistiques ainsi que les modèles de vraisemblance (bruit) appropriés pour les variables d'un ensemble de données.

(Tiré du journal Valera.)

Donc, quand nous disons qu'il s'agit d'une "question ouverte" (me citant assez curieusement), nous voulons dire qu'il n'existe actuellement aucune bonne méthode automatique pour déduire le type de données pour un échantillon fini. Si vous aviez un échantillon infini, ce serait facile, mais comme ce n'est pas possible, nous devons revenir à d'autres moyens.

Astrid
la source
Pourriez-vous nous dire à quoi vous faites référence par «question de recherche ouverte»? Veuillez également expliquer en quoi votre réponse ne contredit pas (ou ne contredit pas) les autres réponses de ce fil.
whuber
Bien sûr, permettez-moi de modifier ma réponse.
Astrid
Je vous remercie. Il m'a semblé, après avoir lu l'article de Valera, qu'il fait une affirmation beaucoup plus forte: à savoir, il prétend avoir une méthode pour deviner les types variables, et en particulier pour distinguer les données catégoriques et ordinales. Je n'ai pas étudié la méthode, mais je suppose qu'elle doit être basée (au moins en partie) sur les relations entre ces variables et d'autres variables auxquelles elles sont supposées être liées. Je n'arrive pas à comprendre comment un "échantillon infini" (quel qu'il soit) pourrait être d'une utilité supplémentaire: pourriez-vous expliquer en quoi cela rendrait le problème "facile"?
whuber
C'est en fait une méthode très robuste, et je l'ai moi-même étudiée en détail (ce qui me fait un peu biaisé à l'esprit); mais leur idée est très intelligente. Nous supposons que chaque type de colonne peut être décrit comme un mélange de types (un peu comme un modèle de mélange), puis nous cherchons à trouver le type avec le poids le plus élevé, puis appelons le `` type '' correspondant le type réel de la variable. En ce qui concerne l'inférence de type, c'est très intelligent et c'est la meilleure méthode automatique (que je connaisse). Si d'autres en connaissent d'autres, partagez-les!
Astrid