Come posso distinguere dinamicamente tra dati categorici e dati numerici?


12

Conosco qualcuno che sta lavorando a un progetto che prevede l'inserimento di file di dati indipendentemente dalle colonne o dai tipi di dati. L'attività consiste nel prendere un file con un numero qualsiasi di colonne e vari tipi di dati e generare statistiche riassuntive sui dati numerici.

Tuttavia, non è sicuro di come assegnare in modo dinamico i tipi di dati per determinati dati basati su numeri. Per esempio:

    CITY
    Albuquerque
    Boston
    Chicago

Non si tratta ovviamente di dati numerici e verranno archiviati come testo. Tuttavia,

    ZIP
    80221
    60653
    25525

non sono chiaramente indicati come categorici. Il suo software assegnerebbe il codice postale come statistiche numeriche e di riepilogo di output, il che non ha senso per quel tipo di dati.


Un paio di idee che avevamo erano:

  1. Se una colonna è composta da numeri interi, etichettala come categoriale. Questo chiaramente non avrebbe funzionato, ma era un'idea.
  2. Se una colonna ha meno di n valori univoci ed è numerica, etichettala come categorica. Questo potrebbe essere più vicino, ma potrebbero esserci ancora problemi con la caduta di dati numerici.
  3. Mantenere un elenco di dati numerici comuni che dovrebbero effettivamente essere categorici e confrontare le intestazioni di colonna con questo elenco per le corrispondenze. Ad esempio, qualsiasi cosa con "ZIP" al suo interno sarebbe categorica.

Il mio istinto mi dice che non c'è modo di assegnare accuratamente i dati numerici come categorici o numerici, ma speravo in un suggerimento. Qualsiasi intuizione che hai è molto apprezzata.


Non è una prova completa ma se inizia con uno 0 in genere non è un numero
paparazzo

Probabilmente dovresti anche chiederti qual è la conseguenza di sbagliare? Ciò dovrebbe determinare la quantità di sforzi che è necessario mettere nel processo. Vuoi una precisione del 90%, o del 99% o del 99,9999%?
Spaziato

Vorrei prendere tutte le euristiche suggerite nelle risposte come caratteristiche e addestrare un classificatore binario.
Emre,

Vedi stats.stackexchange.com/a/106400/17230 . Non c'è davvero una verità fondamentale qui.
Scortchi - Ripristina Monica il

Risposte:


8

Non sono a conoscenza di un modo infallibile per farlo. Ecco un'idea dalla parte superiore della mia testa:

  1. Tratta i valori come categorici per impostazione predefinita.
  2. Verificare la presenza di vari attributi dei dati che implicherebbero che siano effettivamente continui. Valutare questi attributi in base alla probabilità che siano correlati con dati continui. Ecco alcuni possibili esempi:
    • I valori sono numeri interi: +.7
    • I valori sono float: +.8
    • I valori sono normalmente distribuiti: +.3
    • I valori contengono un numero relativamente piccolo di valori univoci: +.3
    • I valori non hanno tutti lo stesso numero di caratteri: +.1
    • I valori non contengono zeri iniziali: +.1
  3. Tratta tutte le colonne che sommano a maggiore di 1 come numeriche. Regola i fattori e i pesi in base al test su diversi set di dati in base alle tue esigenze. Potresti persino creare e addestrare un algoritmo di apprendimento automatico separato solo per fare questo.

Questa risposta è interessante Invece di dare un'altra risposta, vorrei suggerire una modifica a questa. Che ne dici di trattare questo problema come un normale problema di classificazione? È possibile definire un insieme di funzionalità per ogni colonna, in base agli attributi in questa risposta (intero, float, normalmente distribuito, numero relativo di valori univoci, ecc.) Successivamente, si tratta solo di utilizzare un algoritmo di classificazione.
Pablo Suau,

@PabloSuau, mi piace quell'idea. Gli algoritmi di classificazione potrebbero essere un ottimo metodo qui. Grazie a jncraton per alcune caratteristiche da guardare.
Pesce di Poisson,

4

Se hai, ad esempio, il numero di figli di una famiglia (che potrebbe variare, ad esempio, tra 0 e 5), è una variabile categoriale o numerica? In realtà dipende dal tuo problema e da come intendi risolverlo. In questo senso, puoi fare quanto segue:

  • Calcola il numero di valori univoci di quella colonna
  • Dividi questo numero per il numero totale di righe
  • Se questo rapporto è inferiore alla soglia (ad esempio, 20%), lo consideri categorico.

In caso di valori discreti, un test aggiuntivo potrebbe essere: utilizzare un modello di regressione per stimare alcuni dei parametri e verificare se i valori stimati sono contenuti nell'insieme di valori originale. Se ciò non è vero, probabilmente hai a che fare con dati categorici (come nel caso di ZIP).

Ha funzionato relativamente bene per me in passato ...


2

Dal momento che questa domanda è stata inviata in cross-post, i commenti iniziali di @nickcox su Cross Validated sono estremamente pertinenti e veritieri. Le mie opinioni sono leggermente diverse. Ad esempio, riformulerei la domanda, scomponendola in due parti: in primo luogo, vi è il problema di come si classificherebbe un flusso di informazioni sconosciute per tipo di dati e, in secondo luogo, che tipo di percentuale di classificazione errata si può prevedere. Entrambe le domande sono immediatamente rispondibili, se qualcuno vuole prendere il tempo per farlo.

La prima questione equivale allo sviluppo di un sistema di esperti basato sulle regole sulla falsariga di ciò che è stato preliminarmente proposto nei commenti e nelle risposte su questi thread usando campioni di dati del mondo reale che sono prontamente disponibili.

In secondo luogo, dato che questi dati del mondo reale contengono tipi di dati noti, confrontando l'errore di classificazione.

Un terzo passo implicherebbe l'aggiornamento iterativo delle regole per riflettere più accuratamente le informazioni che vengono passate - nella misura del possibile.

Nella mia mente, mentre noioso, un tale progetto non implicherebbe una quantità proibitiva di lavoro.

---- Commento aggiuntivo ----

Una buona discussione sull'estrazione delle funzionalità in relazione al processo di generazione dei dati spuntato qui sul CV:

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

L'estrazione delle funzioni, la selezione e il DGP sono un eccellente punto di partenza per lo sviluppo di un sistema esperto.


Ho eliminato la domanda su Convalida incrociata. Per riferimento, @NickCox ha dichiarato: "È peggio di quanto pensi, anche se pensi che sia peggio di quanto pensi. I punti decimali potrebbero nascondersi all'interno di variabili categoriali, come parte delle classificazioni codificate, ad esempio di industrie o malattie. Piccoli numeri interi potrebbero significare conteggi piuttosto delle categorie: 3, che significa 3 auto o gatti, non è uguale a 3, che significa "la persona possiede un'auto" o "la persona è di proprietà di un gatto". Le misure potrebbero essere solo numeri interi per convenzione, ad esempio l'altezza delle persone potrebbe essere riportato come numero intero cm o pollici, pressione sanguigna come numero intero mm Hg. "
Pesce di Poisson,

Secondo commento di @NickCox: "Il numero di valori distinti (un termine migliore di" unico ", che ha ancora il significato primario di ricorrere solo una volta) non è una buona guida. Il numero di diverse altezze di persone possibili in campioni moderati è probabilmente molto meno del numero di diverse affiliazioni religiose o origini etniche ".
Pesce di Poisson,
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.