Come dimostrare statisticamente se una colonna ha dati categorici o non usare Python


10

Ho un frame di dati in Python in cui devo trovare tutte le variabili categoriali. Il controllo del tipo di colonna non funziona sempre perché il inttipo può anche essere categorico.

Quindi cerco aiuto nel trovare il giusto metodo di test di ipotesi per identificare se una colonna è categorica o meno.

Stavo provando sotto il test chi-quadro ma non sono sicuro che questo sia abbastanza buono

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

Si prega di avvisare.


1
Potresti chiarire se ho capito bene che vuoi distinguere tra int usato come variabile ordinale e usato come arbitrario codice categorico? Non ho una risposta, ma potrebbe aiutare le altre letture a chiarire quello che vuoi. Intuitivamente, non credo che Chi2 possa fare il lavoro in modo affidabile.
Rinnovo il

Si hai ragione. Tranne il fatto che il mio focus non è sul tipo di variabile, piuttosto sui dati che trasporta. Quindi nel codice di esempio che ho condiviso il risultato dovrebbe essere che è una variabile categoriale perché ha solo 5 valori univoci.
Entro il

1
Da dove viene la regola "il risultato dovrebbe essere che si tratta di una variabile categoriale perché ha solo 5 valori univoci". vieni?
Dennis Soemers,

Oh, non è una regola, intuitivamente so che tutti i miei dati di colonna sono solo questi 5 valori.
Entro il

Anche se altri hanno correttamente sottolineato che non è possibile farlo, ciò costituirebbe comunque un interessante problema di apprendimento automatico. Senza dubbio ci sono domini problematici in cui è possibile fare previsioni ragionevolmente accurate.
John Coleman,

Risposte:


34

Risposta breve: non puoi.

Non esiste un test statistico che ti dirà se un predittore che contiene numeri interi compresi tra 1 e 10 è un predittore numerico (ad esempio, il numero di figli) o codifica dieci diverse categorie. (Se il predittore contiene numeri negativi, o il numero più piccolo è maggiore di uno o salta numeri interi, ciò potrebbe contestare il fatto che si tratta di una codifica categorica o potrebbe significare solo che l'analista ha utilizzato una codifica non standard.)

L'unico modo per essere sicuri è sfruttare l'esperienza del dominio o il libro di codici del set di dati (che dovrebbe sempre esistere).


14
"il codice del set di dati (che dovrebbe sempre esistere)" - Ah, buono.
Kodiologo il

12

Qualunque criterio, o regola empirica, funzioni per il tuo set di dati, sei il benvenuto, ma non possiamo vedere i tuoi dati. In ogni caso, il problema è meglio risolto in generale e senza riferimento a nessun software particolare.

È peggio di quanto pensi, anche se pensi che sia peggio di quanto pensi.

  1. La risposta di @Stephan Kolassa fa già un punto chiave. Piccoli numeri interi potrebbero significare conteggi piuttosto che categorie: 3, che significa 3 auto o gatti, non è uguale a 3, che significa "persona possiede un'auto" o "persona è di proprietà di un gatto".

  2. I punti decimali potrebbero nascondersi all'interno di variabili categoriali, come parte di classificazioni codificate, ad esempio di industrie o malattie.

  3. Le misure di senso stretto potrebbero essere solo numeri interi per convenzione, ad esempio le altezze delle persone possono essere riportate come numeri interi cm o pollici, pressioni del sangue come numero intero mm Hg.

  4. Anche il numero di valori distinti (un termine migliore di "unico", che ha ancora il significato primario di ricorrere una sola volta) non è una buona guida. Il numero di diverse altezze di persone possibili in campioni moderati è probabilmente molto inferiore al numero di diverse affiliazioni religiose o origini etniche.


+1. Questa è una buona lista di cose da considerare. Dovresti combinarlo con le tue conoscenze di dominio sul set di dati (e qualsiasi documentazione) per automatizzare il rilevamento categorico delle variabili.
Anna

@Anna Direi che il rilevamento automatico non dovrebbe essere eseguito ed è esattamente ciò che può metterti nei guai, come indicato in questo thread. La conoscenza e la documentazione del dominio dovrebbero identificare prontamente le variabili politomiche tra le altre variabili, in modo da non dover indovinare.
prince_of_pears,

7

Beh, penso che sia anche peggio di quanto suggeriscano le altre risposte: i dati non sono sotto-specie categorici o numerici æternatis - il "livello di misurazione" è qualcosa stipulato dall'analista per rispondere a una domanda particolare in una particolare occasione. Vedi la risposta di Glen_b qui .

È di importanza pratica capirlo. Ad esempio, con un albero di classificazione la distinzione tra predittori di rapporto, intervallo e livello ordinale non ha alcuna conseguenza: l'unica distinzione che conta è quella tra predittori ordinali e nominali. Vincolare l'algoritmo per dividere il predittore in un punto lungo una linea, separando valori più alti da più bassi, può avere un effetto significativo sulle sue prestazioni predittive — nel bene e nel male, a seconda della fluidità della relazione del predittore (putativamente ordinale) con la risposta e le dimensioni del set di dati. Non esiste un modo sensato di prendere una decisione basandosi esclusivamente sul riflettere su come la variabile predittore rappresenti la realtà indipendentemente dall'analisi che si sta per intraprendere, figuriamoci sui valori che si è riscontrato che prende in un campione.


0

Questa è una domanda di ricerca aperta. Vedi ad esempio il lavoro di Valera et al. ( carta ) o estensioni (ad esempio una di Dhir et al. - carta ).

Modificare:

Una pratica comune in statistica e apprendimento automatico è assumere che i tipi di dati statistici (ad es. Ordinali, categorici o con valori reali) delle variabili, e di solito anche il modello di verosimiglianza sia noto. Tuttavia, con l'aumentare della disponibilità dei dati del mondo reale, questa ipotesi diventa troppo restrittiva. I dati sono spesso eterogenei, complessi e documentati in modo errato o incompleto. Sorprendentemente, nonostante la loro importanza pratica, mancano ancora strumenti per scoprire automaticamente i tipi statistici, nonché i modelli di probabilità (rumore) appropriati per, le variabili in un set di dati.

(Dal documento Valera.)

Quindi quando diciamo che questa è una "domanda aperta" (stranamente citando me stesso), intendiamo dire che attualmente non ci sono buoni metodi automatici per inferire il tipo di dati dato un campione finito. Se avessi un campione infinito questo sarebbe facile, ma poiché ciò non è possibile, dobbiamo tornare ad altri mezzi.


Potresti dirci a cosa ti riferisci con "domanda di ricerca aperta"? Ti preghiamo di considerare anche di spiegare come la tua risposta non contraddica (o non fa!) Altre risposte in questo thread.
whuber

Certo, lasciami modificare la mia risposta.
Astrid,

Grazie. Mi è sembrato, dopo aver esaminato il documento Valera, che fa un'affermazione molto più forte: vale a dire, pretende di avere un metodo per indovinare i tipi variabili, e in particolare per distinguere tra dati categorici e ordinali. Non ho studiato il metodo, ma presumo che debba essere basato (almeno in parte) nel guardare le relazioni tra tali variabili e le altre variabili che si presume siano correlate. Non sono in grado di capire come un "campione infinito" (qualunque cosa possa essere) sarebbe di qualche utilità aggiuntiva: potresti spiegare come ciò renderebbe il problema "facile"?
whuber

In realtà è un metodo molto robusto, e io stesso l'ho studiato in dettaglio (il che mi rende piuttosto distorto, mente); ma pensano che sia molto intelligente. Supponiamo che ogni tipo di colonna possa essere descritto come una miscela di tipi (molto simile a un modello di miscela) e quindi cerchiamo di trovare il tipo con il peso più elevato e quindi chiamare il 'tipo' corrispondente il tipo reale della variabile. Per quanto riguarda l'inferenza del tipo, è molto intelligente e il miglior metodo automatico (che io conosca). Se altri conoscono gli altri, ti preghiamo di condividere!
Astrid,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.