¿Cómo puedo distinguir dinámicamente entre datos categóricos y datos numéricos?

12

Conozco a alguien que está trabajando en un proyecto que implica ingerir archivos de datos sin tener en cuenta las columnas o los tipos de datos. La tarea es tomar un archivo con cualquier número de columnas y varios tipos de datos y generar estadísticas de resumen de los datos numéricos.

Sin embargo, no está seguro de cómo asignar dinámicamente tipos de datos para ciertos datos basados ​​en números. Por ejemplo:

    CITY
    Albuquerque
    Boston
    Chicago

Obviamente, estos no son datos numéricos y se almacenarán como texto. Sin embargo,

    ZIP
    80221
    60653
    25525

no están claramente marcados como categóricos. Su software asignaría el código postal como estadísticas de resumen numérico y de salida, lo que no tiene sentido para ese tipo de datos.


Un par de ideas que tuvimos fueron:

  1. Si una columna es todos enteros, etiquétela como categórica. Esto claramente no funcionaría, pero fue una idea.
  2. Si una columna tiene menos de n valores únicos y es numérica, etiquétela categórica. Esto podría estar más cerca, pero aún podría haber problemas con la caída de los datos numéricos.
  3. Mantenga una lista de datos numéricos comunes que en realidad deberían ser categóricos y compare los encabezados de columna con esta lista para las coincidencias. Por ejemplo, cualquier cosa con "ZIP" sería categórico.

Mi instinto me dice que no hay forma de asignar con precisión los datos numéricos como categóricos o numéricos, pero esperaba una sugerencia. Cualquier idea que tenga es muy apreciada.

Pescado Poisson
fuente
No plena prueba, pero si se empieza con un 0 por lo general no es numérico
paparazzo
Probablemente también deberías preguntarte cuál es la consecuencia de equivocarte. Eso debería determinar cuánto esfuerzo necesitas poner en el proceso. ¿Desea un 90% de precisión, un 99% de precisión o un 99.9999% de precisión?
Spacedman
Tomaría todas las heurísticas sugeridas en las respuestas como características y entrenaría un clasificador binario.
Emre
Ver stats.stackexchange.com/a/106400/17230 . No hay realmente una verdad fundamental aquí.
Scortchi - Restablece a Monica el
Consulte también stats.stackexchange.com/q/336261/17230 .
Scortchi - Restablece a Monica

Respuestas:

8

No conozco una manera infalible de hacer esto. Aquí hay una idea fuera de mi cabeza:

  1. Tratar los valores como categóricos por defecto.
  2. Verifique varios atributos de los datos que implicarían que en realidad son continuos. Pondere estos atributos en función de la probabilidad de que se correlacionen con datos continuos. Aquí hay algunos ejemplos posibles:
    • Los valores son enteros: +.7
    • Los valores son flotantes: +.8
    • Los valores se distribuyen normalmente: +.3
    • Los valores contienen un número relativamente pequeño de valores únicos: +.3
    • Los valores no son todos el mismo número de caracteres: +.1
    • Los valores no contienen ceros a la izquierda: +.1
  3. Trate cualquier columna que sume mayor que 1 como numérica. Ajuste los factores y los pesos en función de las pruebas con diferentes conjuntos de datos para satisfacer sus necesidades. Incluso podría crear y entrenar un algoritmo de aprendizaje automático por separado solo para hacer esto.
jncraton
fuente
Esta respuesta es interesante. En lugar de dar otra respuesta, me gustaría sugerir una modificación a esta. ¿Qué hay de tratar este problema como un problema de clasificación regular? Puede definir un conjunto de características para cada columna, en función de los atributos en esta respuesta (entero, flotante, normalmente distribuido, número relativo de valores únicos, etc.) Después de eso, solo es cuestión de usar un algoritmo de clasificación.
Pablo Suau
@PabloSuau, me gusta esa idea. Los algoritmos de clasificación pueden ser un gran método aquí. Gracias a jncraton por algunas características a tener en cuenta.
Poisson Fish
4

Si tiene, por ejemplo, el número de hijos de una familia (que podría oscilar, por ejemplo, entre 0 y 5), ¿es una variable categórica o numérica? En realidad, depende de su problema y de cómo piensa resolverlo. En este sentido, puede hacer lo siguiente:

  • Calcule la cantidad de valores únicos de esa columna
  • Divida este número por el número total de filas.
  • Si esta proporción está por debajo de algún umbral (por ejemplo, 20%), lo considera categórico.

En caso de valores discretos, una prueba adicional podría ser: usar un modelo de regresión para estimar algunos de los parámetros y verificar si los valores estimados están contenidos en el conjunto original de valores. Si esto no es cierto, probablemente esté tratando con datos categóricos (como es el caso de ZIP).

Funcionó relativamente bien para mí en el pasado ...

Bernardo Aflalo
fuente
2

Dado que esta pregunta se ha publicado en forma cruzada, los comentarios iniciales de @nickcox en Cross Validated son muy relevantes y verdaderos. Mis puntos de vista son ligeramente diferentes. Por ejemplo, volvería a formular la pregunta, descomponiéndola en dos partes: primero, está la cuestión de cómo se clasificaría un flujo de información desconocida por tipo de datos y, segundo, qué tipo de tasa de clasificación errónea se puede esperar. Ambas preguntas son inmediatamente respondibles, si alguien quiere tomarse el tiempo para hacerlo.

La primera cuestión equivale a desarrollar un sistema experto basado en reglas en la línea de lo que se ha propuesto preliminarmente en los comentarios y respuestas en estos hilos utilizando muestras de datos del mundo real que están fácilmente disponibles.

Segundo, dado que estos datos del mundo real contienen tipos de datos conocidos, comparando el error de clasificación.

Un tercer paso implicaría actualizar iterativamente las reglas para reflejar con mayor precisión la información que se está pasando, en la medida en que esto sea posible.

En mi opinión, aunque tedioso, tal proyecto no implicaría una cantidad prohibitiva de trabajo.

---- Comentario adicional ----

Una buena discusión sobre la extracción de características en relación con el proceso de generación de datos apareció en CV aquí:

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

La extracción de características, la selección y el DGP son un excelente punto de partida para desarrollar un sistema experto.

DJohnson
fuente
He eliminado la pregunta sobre Cross Validated. Como referencia, @NickCox declaró: "Es peor de lo que piensas, incluso si crees que es peor de lo que piensas. Los puntos decimales podrían acechar dentro de variables categóricas, como parte de clasificaciones codificadas, por ejemplo, de industrias o enfermedades. Los enteros pequeños podrían significar conteos en lugar de que las 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". Las mediciones podrían ser enteros por convención, por ejemplo, las alturas de las personas pueden ser reportado como entero cm o pulgadas, la presión sanguínea como entero mm Hg ".
Poisson Fish
El segundo comentario de @NickCox: "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 menos que el número de diferentes afiliaciones religiosas u orígenes étnicos ".
Poisson Fish