Modo di principio di collasso delle variabili categoriali con molti livelli?


58

Quali tecniche sono disponibili per il collasso (o il raggruppamento) di molte categorie a poche, allo scopo di usarle come input (predittore) in un modello statistico?


Considera una variabile come quella di uno studente universitario (disciplina scelta da uno studente universitario). Non è ordinato e categorico, ma può potenzialmente avere dozzine di livelli distinti. Diciamo che voglio usare major come predittore in un modello di regressione.

L'uso di questi livelli così com'è per la modellazione porta a tutti i tipi di problemi perché ce ne sono così tanti. Molta precisione statistica sarebbe eliminata per usarli, e i risultati sono difficili da interpretare. Raramente siamo interessati a major specifici - è molto più probabile che siano interessati a grandi categorie (sottogruppi) di major. Ma non è sempre chiaro come dividere i livelli in tali categorie di livello superiore o anche quante categorie di livello superiore utilizzare.

Per i dati tipici sarei felice di usare l'analisi dei fattori, la fattorizzazione a matrice o una tecnica di modellazione latente discreta. Ma le major sono categorie reciprocamente esclusive, quindi sono restio a sfruttare la loro covarianza per qualsiasi cosa.

Inoltre, non mi interessano le categorie principali da sole. Mi interessa produrre categorie di livello superiore coerenti rispetto al mio risultato di regressione . Nel caso del risultato binario, ciò mi suggerisce qualcosa come l'analisi discriminante lineare (LDA) per generare categorie di livello superiore che massimizzano le prestazioni discriminatorie. Ma la LDA è una tecnica limitata e mi sembra di trascinare dati sporchi. Inoltre, qualsiasi soluzione continua sarà difficile da interpretare.

Nel frattempo qualcosa basato sulle covarianze, come l'analisi della corrispondenza multipla (MCA), mi sembra sospetto in questo caso a causa della dipendenza intrinseca tra variabili fittizie reciprocamente esclusive: sono più adatte per studiare più variabili categoriche, piuttosto che più categorie della stessa variabile.

modifica : per essere chiari, si tratta di comprimere le categorie (non selezionarle) e le categorie sono predittori o variabili indipendenti. Con il senno di poi, questo problema sembra un momento opportuno per "regolarizzarli tutti e lasciare che Dio li risolva". Sono contento di vedere questa domanda è interessante per così tante persone!


2
Nel mio commento su stats.stackexchange.com/questions/230636/… ho una lunga lista di domande simili qui! Dai un'occhiata ... Inoltre, cerca in questo sito con parole chiave "molti livelli" trovi molte domande simili, poche buone risposte.
kjetil b halvorsen,


2
Non penso di avere la domanda, il mio naturale impulso sarebbe in realtà quello di aggiungere più variabili fittizie per codificare le gerarchie (probabilmente quante più gerarchie diverse puoi pensare) e quindi utilizzare la regolarizzazione L1 / L2 per garantire che le categorie di livello superiore sono selezionate anziché le categorie di livello più fini. il problema con le major ecc. è che non c'è ovviamente alcuna somiglianza (quando rappresentata come variabile fittizia), quindi per ottenere un buon modello (che consente la generalizzazione) è necessario fornire tale somiglianza
seanv507,

1
@ssdecontrol, sì, il mio esempio prototipico sono i numeri di telefono (o altri ID). Fondamentalmente la risposta corretta quando viene chiesto come modellare usando questi è - non farlo!
seanv507,

2
Se si desidera inferire le gerarchie, è possibile esaminare gli schemi di incorporamento della rete neurale. Sostanzialmente usano un insieme ridotto di neuroni tra le categorie e il resto del modello, quindi quel modello deve trovare proiezioni lineari di categorie simili nella risoluzione. È essenzialmente una versione non linearizzata delle macchine di fattorizzazione. tensorflow.org/guide/embedding
seanv507 il

Risposte:


41

Se ho capito bene, immagini un modello lineare in cui uno dei predittori è categorico (ad esempio, il college maggiore); e ti aspetti che per alcuni sottogruppi dei suoi livelli (sottogruppi di categorie) i coefficienti potrebbero essere esattamente gli stessi. Quindi forse i coefficienti di regressione per la matematica e la fisica sono gli stessi, ma diversi da quelli per la chimica e la biologia.

In un caso più semplice, si avrebbe un "one way ANOVA" modello lineare con un singolo predittore categorica: dove codifica il livello della variabile categoriale (la categoria). Ma potresti preferire una soluzione che comprime alcuni livelli (categorie) insieme, ad es.i { α 1 = α 2 , α 3 = α 4 = α 5 .

yioj=μ+αio+εioj,
io
{α1=α2,α3=α4=α5.

L=ωΣio<j|αio-αj|.
αio-αjω

Non ho mai avuto a che fare con modelli del genere e quanto sopra è la prima cosa che mi è venuta in mente. Poi ho deciso di vedere se c'è qualcosa di simile implementato. Ho fatto alcune ricerche su google e presto ho capito che questo si chiama fusione di categorie; la ricerca lasso fusion categoricalti darà molti riferimenti da leggere. Eccone alcuni che ho brevemente guardato:

Gertheiss e Tutz 2010, pubblicato negli Annals of Applied Statistics, sembra un documento recente e molto leggibile che contiene altri riferimenti. Ecco il suo abstract:

L1

Mi piacciono i loro percorsi di soluzioni simili a Lasso che mostrano come i livelli di due variabili categoriali si fondono quando aumenta la forza della regolarizzazione:

Gertheiss e Tutz 2010


1
E solo dopo aver scritto tutto ciò che ho notato che @Kjetil ha dato un link a uno dei giornali di Tutz già una settimana fa ...
ameba dice Reinstate Monica,

1
Grazie per scavare nella letteratura su questo! Questo è sicuramente un buon punto di partenza, soprattutto avendo un nome per questa tecnica ("fusione") che posso cercare
shadowtalker,

10

Ho lottato con questo su un progetto a cui stavo lavorando, e a questo punto ho deciso che non c'è davvero un buon modo per fondere le categorie e quindi sto provando un modello gerarchico / a effetti misti in cui il mio l'equivalente del tuo maggiore è un effetto casuale.

Inoltre, in situazioni come queste sembrano esserci effettivamente due decisioni di fusione da prendere: 1) come fondere le categorie che hai quando ti adatti al modello, e 2) quale categoria fusa diventa "altra" dove di default includerai ogni nuovo maggiori che qualcuno sogna dopo aver adattato il tuo modello. (Un effetto casuale può gestire automaticamente questo secondo caso.)

Quando alla fusione è implicato un giudizio (al contrario di procedure totalmente automatizzate), sono scettico sull'altra categoria, che è spesso una presa delle categorie con poche cose in esse piuttosto che qualsiasi tipo di raggruppamento di principi.

Un effetto casuale gestisce molti livelli, raggruppa dinamicamente ("trae forza da") livelli diversi, può prevedere livelli mai visti prima, ecc. Un aspetto negativo potrebbe essere che la distribuzione dei livelli è quasi sempre considerata normale.


1
Hai mai usato una matrice di prossimità come matrice di distanza su cui raggrupparti? stats.stackexchange.com/questions/270201/… ?
Keith,

7

Zz1,...,zKYZImpact(Z)

urto(zK)=E(Y | Z=zK)-E(Y)

YYlogitEE

Esiste un'implementazione di Python nella libreria category_encoders [2].

Una variante chiamata "codifica dell'impatto" è stata implementata nel pacchetto R Vtreat [3] [4]. Il pacchetto (e la stessa codifica di impatto) è descritto in un articolo di quegli autori del 2016 [5] e in diversi post di blog [6]. Si noti che l'attuale implementazione R non gestisce risposte multinomiali (categoriche con più di 2 categorie) o multivariate (con valori vettoriali).

  1. Daniele Micci-Barreca (2001). Uno schema di preelaborazione per attributi categorici ad alta cardinalità in problemi di classificazione e previsione. Newsletter di esplorazioni ACM SIGKDD , volume 3, numero 1, luglio 2001, pagine 27-32. https://doi.org/10.1145/507533.507538
  2. Encoder di categoria. http://contrib.scikit-learn.org/categorical-encoding/index.html
  3. John Mount e Nina Zumel (2017). vtreat: Processore / condizionatore statisticamente valido 'data.frame'. Versione pacchetto R 0.5.32. https://CRAN.R-project.org/package=vtreat
  4. Win-Vector (2017). vtreat. Repository GitHub su https://github.com/WinVector/vtreat
  5. Zumel, Nina and Mount, John (2016). vtreat: un processore data.frame per la modellazione predittiva. 1611.09477v3, stampe elettroniche ArXiv . Disponibile su https://arxiv.org/abs/1611.09477v3 .
  6. http://www.win-vector.com/blog/tag/vtreat/

Che cos'è logit E? La prego di condividere la formula stessa?
Optimus Prime,

@OptimusPrime logit E è il logit dell'attesa
shadowtalker

Va bene. In tal caso, Impact (zk) = log (E (Y | Z = zk) −E (Y)) OR Impact (zk) = log (E (Y | Z = zk)) - log (E (Y) )?
Optimus Prime,

2
Si tratta di un apprendimento supervisionato e richiederà adeguamenti complessi per riconoscere il numero di gradi di libertà che vengono "rubati" da Y.
Frank Harrell,

3
Di sicuro - qualsiasi metodo che utilizza Y per guidare il modo in cui le categorie vengono gestite per il predittore categorico sarà soggetto a un eccesso di adattamento e sarà difficile ottenere intervalli di incertezza sufficientemente ampi da essere precisi. Mi stavo concentrando sull'apprendimento senza supervisione, quindi questi problemi non si verificano.
Frank Harrell,

6

Se si dispone di una variabile indipendente ausiliaria che è logica da utilizzare come ancoraggio per il predittore categorico, prendere in considerazione l'uso dell'algoritmo di punteggio ottimale di Fisher, correlato alla sua analisi lineare discriminante. Supponiamo che tu abbia voluto mappare il maggiore del college in un'unica metrica continua e supponiamo che un ancoraggio adeguato sia un punteggio di prova quantitativo SAT pre-ricovero. Calcola il punteggio quantitativo medio per ciascun maggiore e sostituisci il maggiore con quella media. Puoi prontamente estenderlo a più ancore, creando più di un grado di libertà con cui riassumere i principali.

Si noti che a differenza di alcuni dei precedenti suggerimenti, il punteggio ottimale rappresenta un approccio di apprendimento non supervisionato, quindi i gradi di libertà (numero di parametri stimati rispetto a Y) sono pochi e ben definiti, ha portato a una corretta inferenza statistica (se frequentista, errori standard accurati, sicurezza (compatibilità) intervalli e valori p).

Mi piace molto il suggerimento di penalizzazione di https://stats.stackexchange.com/users/28666/amoeba @amoeba.


Saresti così gentile da dare un'occhiata alla mia domanda stats.stackexchange.com/q/383887/44368 ? Grazie.
Hans,

Il punteggio ottimale è il metodo descritto nella diapositiva 15 di questa lezione ? È un po 'difficile cercare quei termini, essendo tutti comuni in altri contesti.
Shadowtalker

1
Sono sicuro che lo è 0,85
Frank Harrell il

Sembra una versione (migliore) dell'idea della codifica target dall'apprendimento automatico, ad esempio stats.stackexchange.com/questions/398903/…
kjetil b halvorsen

2

L'articolo " Uno schema di preelaborazione per attributi categorici di alta cardinalità in problemi di classificazione e previsione " sfrutta la struttura gerarchica negli attributi di categoria in uno schema annidato di "Bayes empirici" ad ogni pool / livello per mappare la variabile categoriale in una probabilità di classe posteriore, che può essere utilizzato direttamente o come input in altri modelli.


Questo è fondamentalmente ciò che @Wayne ha suggerito (modelli di effetti misti ~ versione frequentista di modelli gerarchici bayesiani), e ciò che ho suggerito nel commento alla domanda. Tuttavia, OP vuole inferire gerarchie.
seanv507,

1

Ci sono più domande qui e ad alcune di esse viene chiesto e risposto in precedenza. Se il problema è il calcolo che richiede molto tempo: esistono diversi metodi per affrontarlo, vedere la regressione su larga scala con la matrice di caratteristiche sparse e il documento di Maechler e Bates .

Ma potrebbe anche essere che il problema sia con la modellazione, non sono così sicuro che i soliti metodi di trattamento delle variabili predittive categoriali forniscano davvero una guida sufficiente quando si hanno variabili categoriali con molti livelli, vedere questo sito per il tag [many-categories]. Ci sono certamente molti modi in cui uno potrebbe provare, uno potrebbe essere (se questa è una buona idea per il tuo esempio che non posso sapere, non ci hai detto la tua specifica applicazione) una specie di variabile gerarchica categorica, cioè ispirata dal sistema utilizzato nella classificazione biologica, vedere https://en.wikipedia.org/wiki/Taxonomy_(biology). Lì un individuo (pianta o animale) è classificato prima in Dominio, poi in Regno, Phylum, Classe, Ordine, Famiglia, Genere e infine Specie. Quindi per ogni livello nella classificazione è possibile creare una variabile fattore. Se i tuoi livelli, per esempio, sono prodotti venduti in un supermercato, potresti creare una classificazione gerarchica a partire da [prodotti alimentari, stoviglie, altro], quindi i prodotti alimentari potrebbero essere classificati come [carne, pesce, verdure, cereali, ...] e presto. Solo una possibilità, che dà una gerarchia precedente, non specificamente correlata al risultato.

Ma hai detto:

Mi interessa produrre categorie di livello superiore coerenti rispetto al mio risultato di regressione.

Quindi potresti provare il lazo fuso , vedere altre risposte in questo thread, che potrebbe essere visto come un modo per far collassare i livelli in gruppi più grandi, interamente basato sui dati, non una precedente organizzazione dei livelli come implica la mia proposta di un gerarchico organizzazione dei livelli.

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.