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)
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.
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.
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.
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).
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.
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".
Pontos decimais podem estar escondidos em variáveis categóricas, como parte de classificações codificadas, por exemplo, de indústrias ou doenças.
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.
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.
@ 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.
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.
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.
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"?
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!