Cómo demostrar estadísticamente si una columna tiene datos categóricos o no usa Python
10
Tengo un marco de datos en Python donde necesito encontrar todas las variables categóricas. Comprobar el tipo de columna no siempre funciona porque el inttipo también puede ser categórico.
Así que busco ayuda para encontrar el método de prueba de hipótesis correcto para identificar si una columna es categórica o no.
Intenté por debajo de la prueba de chi-cuadrado pero no estoy seguro de si esto es lo suficientemente bueno
import numpy as np
data = np.random.randint(0,5,100)import scipy.stats as ss
ss.chisquare(data)
¿Podría aclarar si he entendido correctamente que desea distinguir entre int usado como una variable ordinal y usado como codificación categórica arbitraria? No tengo una respuesta, pero podría ayudar a otras lecturas a tener claro lo que quieres. Intuitivamente, no creo que Chi2 pueda hacer el trabajo de manera confiable.
Sí, tiene usted razón. Excepto que mi enfoque no está en el tipo de variable sino en los datos que lleva. Entonces, en el código de ejemplo que he compartido, el resultado debería ser que es una variable categórica porque solo tiene 5 valores únicos.
Aunque otros han señalado correctamente que no se puede hacer, sin embargo, esto sería un problema interesante de aprendizaje automático. Sin duda, existen dominios problemáticos en los que se pueden hacer predicciones razonablemente precisas.
No existe una prueba estadística que le diga si un predictor que contiene los enteros entre 1 y 10 es un predictor numérico (por ejemplo, número de hijos) o codifica diez categorías diferentes. (Si el predictor contiene números negativos, o el número más pequeño es mayor que uno, o se salta números enteros, esto podría argumentar en contra de que sea una codificación categórica, o simplemente puede significar que el analista utilizó una codificación no estándar).
La única forma de estar seguro es aprovechar la experiencia en el dominio o el libro de códigos del conjunto de datos (que siempre debe existir).
Cualquier criterio, o regla general, que funcione para su conjunto de datos es bienvenido, pero no podemos ver sus datos. En cualquier caso, el problema se presenta mejor en general, y sin referencia a ningún software en particular tampoco.
Es peor de lo que piensas, incluso si crees que es peor de lo que piensas.
La respuesta de @Stephan Kolassa ya hace un punto clave. Los enteros pequeños pueden significar recuentos en lugar de categorías: 3, que significa 3 autos o gatos, no es lo mismo que 3, que significa "la persona posee un automóvil" o "la persona es propiedad de un gato".
Los puntos decimales podrían acechar dentro de variables categóricas, como parte de clasificaciones codificadas, por ejemplo, de industrias o enfermedades.
Las mediciones de sentido estricto podrían ser enteros por convención, por ejemplo, las alturas de las personas pueden ser reportadas como enteras cm o pulgadas, la presión sanguínea como enteros mm Hg.
El número de valores distintos (un término mejor que "único", que todavía tiene el significado principal de ocurrir una sola vez) tampoco es una buena guía. El número de diferentes alturas de personas posibles en muestras moderadas es probablemente mucho menor que el número de diferentes afiliaciones religiosas u orígenes étnicos.
+1. Esta es una buena lista de cosas a considerar. Debe combinar esto con su conocimiento de dominio sobre el conjunto de datos (y cualquier documentación) para automatizar la detección de variables categóricas.
@ Anna, diría que la detección automática no debe realizarse y es exactamente lo que puede meterte en problemas como se describe en este hilo. El conocimiento y la documentación del dominio deben identificar fácilmente las variables politómicas entre las otras variables, para que no tenga que adivinar.
Bueno, creo que es aún peor de lo que sugieren las otras respuestas: los datos no son subespecies categóricas o numéricas æternatis : el "nivel de medición" es algo estipulado por el analista para responder una pregunta en particular en una ocasión particular. Vea la respuesta de Glen_b aquí .
Es de importancia práctica entender eso. Por ejemplo, con un árbol de clasificación, la distinción entre predictores de razón, intervalo y nivel ordinal no tiene ninguna consecuencia: la única distinción que importa es la que existe entre predictores ordinales y nominales. Restringir el algoritmo para dividir el predictor en un punto a lo largo de una línea, separando los valores más altos de los más bajos, puede tener un efecto significativo en su rendimiento predictivo, para bien o para mal, dependiendo de la suavidad de la relación del predictor (supuestamente ordinal) con la respuesta & el tamaño del conjunto de datos. No hay una manera sensata de tomar una decisión basada únicamente en reflexionar sobre cómo la variable predictora representa la realidad, independientemente del análisis que esté a punto de realizar, y mucho menos sobre qué valores ha encontrado que toma en una muestra.
Esta es una pregunta de investigación abierta. Ver, por ejemplo, el trabajo de Valera et al. ( papel ) o extensiones (por ejemplo, una de Dhir et al. - papel ).
Editar:
Una práctica común en estadística y aprendizaje automático es asumir que los tipos de datos estadísticos (p. Ej., Ordinales, categóricos o de valor real) de las variables y, por lo general, también se conoce el modelo de probabilidad. Sin embargo, a medida que aumenta la disponibilidad de datos del mundo real, esta suposición se vuelve demasiado restrictiva. Los datos a menudo son heterogéneos, complejos y están documentados de manera inadecuada o incompleta. Sorprendentemente, a pesar de su importancia práctica, aún faltan herramientas para descubrir automáticamente los tipos estadísticos de, así como los modelos de probabilidad (ruido) apropiados para las variables en un conjunto de datos.
(Del artículo de Valera).
Entonces, cuando decimos que esta es una "pregunta abierta" (curiosamente citando a mí mismo), queremos decir que actualmente no hay buenos métodos automáticos para inferir el tipo de datos dada una muestra finita. Si tuviera una muestra infinita, esto sería fácil, pero como eso no es posible, tenemos que volver a otros medios.
¿Podría decirnos a qué se refiere con "pregunta de investigación abierta"? Considere también explicar cómo su respuesta no contradice (¡o sí lo hace!) Otras respuestas en este hilo.
Gracias. Me pareció, al leer detenidamente el artículo de Valera, que hace una afirmación mucho más fuerte: es decir, pretende tener un método para adivinar los tipos de variables y, en particular, para distinguir entre datos categóricos y ordinales. No estudié el método, pero supongo que debe basarse (al menos en parte) en analizar las relaciones entre tales variables y otras variables con las que se supone que están relacionadas. No puedo entender cómo una "muestra infinita" (lo que sea que sea) sería de alguna utilidad adicional: ¿podría explicar cómo eso haría que el problema fuera "fácil"?
En realidad, es un método muy robusto, y yo mismo lo he estudiado en detalle (lo que me hace ser un poco sesgado). Pero su idea es muy inteligente. Suponemos que cada tipo de columna se puede describir como una mezcla de tipos (muy parecido a un modelo de mezcla) y luego buscamos encontrar el tipo con el mayor peso y luego llamamos al 'tipo' correspondiente el tipo real de la variable. En cuanto a la inferencia de tipos, es muy inteligente y el mejor método automático (que yo sepa). Si otro conoce a otros, ¡por favor comparte!