Como provar estatisticamente se uma coluna possui dados categóricos ou não está usando Python


10

Eu tenho um quadro de dados em python, onde eu preciso encontrar todas as variáveis ​​categóricas. A verificação do tipo da coluna nem sempre funciona porque o inttipo também pode ser categórico.

Portanto, busco ajuda para encontrar o método de teste de hipótese correto para identificar se uma coluna é categórica ou não.

Eu estava tentando abaixo do teste do qui-quadrado, mas não tenho certeza se isso é bom o suficiente

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

Por favor informar.


11
Você poderia esclarecer se entendi corretamente que você deseja distinguir entre int usado como uma variável ordinal e usado como codificação categórica arbitrária? Não tenho uma resposta, mas pode ajudar outras leituras a deixarem claro o que você deseja. Intuitivamente, não acho que o Chi2 possa fazer o trabalho de maneira confiável.
ReneBt

Sim você está certo. Exceto que meu foco não está no tipo da variável, e sim nos dados que ela carrega. Portanto, no código de exemplo que compartilhei, o resultado deve ser uma variável categórica, pois possui apenas 5 valores exclusivos.
Amit

11
Onde está a regra "o resultado deve ser o de que é uma variável categórica porque possui apenas 5 valores únicos". vem de onde?
Dennis Soemers 23/03

Oh, não é uma regra. Intuitivamente, eu sei que todos os meus dados de coluna são apenas esses 5 valores.
Amit

Mesmo que outros tenham apontado corretamente que isso não pode ser feito, isso traria um problema interessante de aprendizado de máquina. Sem dúvida, existem domínios problemáticos nos quais previsões razoavelmente precisas podem ser feitas.
John Coleman

Respostas:


34

Resposta curta: você não pode.

Não existe um teste estatístico que indique se um preditor que contém os números inteiros entre 1 e 10 é um preditor numérico (por exemplo, número de filhos) ou codifica dez categorias diferentes. (Se o preditor contiver números negativos, ou o menor número for maior que um, ou pular números inteiros, isso poderá ser contrário à codificação categórica - ou pode significar apenas que o analista usou codificação fora do padrão.)

A única maneira de ter certeza é aproveitar o conhecimento do domínio ou o livro de códigos do conjunto de dados (que sempre deve existir).


14
"o livro de códigos do conjunto de dados (que sempre deveria existir)" - Ah, bom.
Kodiologist 23/03

12

Quaisquer que sejam os critérios - ou regras práticas - que funcionam para o seu conjunto de dados são bem-vindos, mas não podemos ver seus dados. De qualquer forma, o problema é melhor resolvido em geral e também sem referência a nenhum software específico.

É pior do que você pensa, mesmo que você pense que é pior do que você pensa.

  1. A resposta de @Stephan Kolassa já faz um ponto-chave. Pequenos números inteiros podem significar contagens em vez de categorias: 3, significando 3 carros ou gatos, não é o mesmo que 3, significando "a pessoa possui um carro" ou "a pessoa pertence a um gato".

  2. Pontos decimais podem estar escondidos em variáveis ​​categóricas, como parte de classificações codificadas, por exemplo, de indústrias ou doenças.

  3. As medições em sentido estrito podem ser apenas números inteiros por convenção, por exemplo, alturas de pessoas podem ser relatadas como cm inteiro ou polegadas, pressão sanguínea como mm inteiro Hg.

  4. O número de valores distintos (um termo melhor que "único", que ainda tem o significado principal de ocorrer apenas uma vez) também não é um bom guia. O número de diferentes alturas de pessoas possíveis em amostras moderadas é provavelmente muito menor que o número de diferentes afiliações religiosas ou origens étnicas.


+1. Esta é uma boa lista de coisas a considerar. Você deve combinar isso com o conhecimento do domínio sobre o conjunto de dados (e qualquer documentação) para automatizar a detecção de variáveis ​​categóricas.
23418 Anna Anna

@ Anna Eu diria que a detecção automatizada não deve ser realizada e é exatamente o que pode causar problemas, conforme descrito neste tópico. O conhecimento e a documentação do domínio devem identificar prontamente variáveis ​​politômicas dentre as outras variáveis, para que você não precise adivinhar.
Prince_of_pears # 24/18

7

Bem, acho que é ainda pior do que as outras respostas sugerem: os dados não são subespécies categóricas ou numéricas - "nível de medida" é algo estipulado pelo analista para responder a uma pergunta específica em uma ocasião específica. Veja a resposta de Glen_b aqui .

É de importância prática entender isso. Por exemplo, com uma árvore de classificação, a distinção entre preditores de razão, intervalo e nível ordinal não tem importância: a única distinção que importa é aquela entre preditores ordinais e nominais. Restringir o algoritmo a dividir o preditor em um ponto ao longo de uma linha, separando valores mais altos e mais baixos, pode ter um efeito significativo em seu desempenho preditivo - para o bem ou para o mal, dependendo da suavidade da relação do preditor (putativamente ordinal) com a resposta e o tamanho do conjunto de dados. Não há uma maneira sensata de tomar a decisão baseada apenas em refletir sobre como a variável preditora representa a realidade, independentemente da análise que você está prestes a realizar, sem falar nos valores que você encontrou em uma amostra.


0

Esta é uma questão de pesquisa aberta. Veja, por exemplo, o trabalho de Valera et al. ( papel ) ou extensões (por exemplo, uma de Dhir et al. - papel ).

Editar:

Uma prática comum em estatística e aprendizado de máquina é assumir que os tipos de dados estatísticos (por exemplo, ordinais, categóricos ou com valor real) de variáveis ​​e, geralmente, também o modelo de probabilidade são conhecidos. No entanto, à medida que a disponibilidade de dados do mundo real aumenta, essa suposição se torna muito restritiva. Os dados são geralmente heterogêneos, complexos e inadequadamente ou incompletamente documentados. Surpreendentemente, apesar de sua importância prática, ainda há uma falta de ferramentas para descobrir automaticamente os tipos estatísticos e os modelos de probabilidade (ruído) apropriados para as variáveis ​​em um conjunto de dados.

(Do artigo de Valera.)

Portanto, quando dizemos que essa é uma "questão em aberto" (por incrível que pareça me citar), queremos dizer que atualmente não há bons métodos automáticos para inferir o tipo de dados, dada uma amostra finita. Se você tivesse uma amostra infinita, isso seria fácil, mas como isso não é possível, precisamos reverter para outros meios.


Você poderia nos dizer a que se refere por "questão de pesquisa aberta"? Por favor, considere também explicar como sua resposta não (ou não!) Contradiz outras respostas neste tópico.
whuber

Claro, deixe-me editar minha resposta.
Astrid

Obrigado. Pareceu-me, ao ler o artigo de Valera, que ele faz uma afirmação muito mais forte: ou seja, pretende ter um método para adivinhar tipos de variáveis ​​e, em particular, para distinguir entre dados categóricos e ordinais. Não estudei o método, mas presumo que ele deva basear-se (pelo menos em parte) na observação de relações entre essas variáveis ​​e outras variáveis ​​com as quais se supõe que estejam relacionadas. Não consigo entender como uma "amostra infinita" (qualquer que seja) seria de alguma utilidade adicional: você poderia explicar como isso tornaria o problema "fácil"?
whuber

Na verdade, é um método muito robusto, e eu próprio o estudei em detalhes (o que me deixa um pouco tendenciosa); mas eles ideia é muito inteligente. Presumimos que cada tipo de coluna possa ser descrito como uma mistura de tipos (bem como um modelo de mistura) e, em seguida, procuramos encontrar o tipo com o peso mais alto e, em seguida, chamamos o tipo de correspondente como o tipo real da variável. No que diz respeito à inferência de tipos, é muito inteligente e o melhor método automático (que eu conheço). Se outro conhecer outros, por favor, compartilhe!
Astrid
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.