Algoritmi per la selezione automatica del modello


193

Vorrei implementare un algoritmo per la selezione automatica del modello. Sto pensando di fare una regressione graduale, ma tutto lo farà (deve essere basato su regressioni lineari).

Il mio problema è che non sono in grado di trovare una metodologia o un'implementazione open source (sto woking in java). La metodologia che ho in mente sarebbe qualcosa del tipo:

  1. calcola la matrice di correlazione di tutti i fattori
  2. scegli i fattori che hanno una bassa correlazione tra loro
  3. rimuovere i fattori che hanno una t-stat bassa
  4. aggiungere altri fattori (ancora basati sul fattore di correlazione basso trovato in 2.).
  5. ripetere più volte fino a quando alcuni criteri (ad es. AIC) superano una determinata soglia o non possono o non riusciamo a trovare un valore maggiore.

Mi rendo conto che esiste un'implementazione R per questo (stepAIC), ma trovo il codice abbastanza difficile da capire. Inoltre non sono stato in grado di trovare articoli che descrivono la regressione graduale.


72
Francamente, penso che questa sia un'idea disastrosa , quasi garantita per portare a molte false conclusioni.
gung

4
@gung: anche se concordo sul fatto che seguire ciecamente il risultato della selezione di un modello sia una cattiva idea, penso che possa essere utile come punto di partenza di un'analisi. Nel mio caso ho diverse centinaia di fattori disponibili e vorrei scegliere il 5-10 più pertinente. Non vedo come potrei farlo senza la selezione automatica del modello (che verrà successivamente modificata manualmente).
S4M,

12
Tutte le procedure di selezione dei modelli sono soggette ai problemi che discusso nella mia risposta di seguito. Inoltre, maggiore è il numero di possibili fattori su cui ricercare, più estremi diventano questi problemi e l'aumento non è lineare. Mentre ci sono alcuni approcci migliori (discussi da @Zach), che dovrebbero essere usati insieme alla validazione incrociata (discussi da @JackTanner), la selezione basata su t, r e AIC non sono tra questi. Inoltre, con centinaia di fattori, la quantità di dati necessari potrebbe facilmente essere in milioni. Sfortunatamente, hai un compito molto difficile davanti a te.
gung

7
Qual è lo scopo della selezione del modello? È per un modello predittivo / di previsione o stai cercando le variabili importanti? Inoltre, quanto è grande il set di dati che stai utilizzando: quante osservazioni e quante variabili?
Probislogic,

6
Viste interessanti qui, ma penso che la visione negativa verso le procedure algoritmiche di selezione del modello sia un po 'datata. Prendiamo ad esempio il recente lavoro di David Hendry nel campo dell'econometria, in particolare il suo lavoro sul software PcGive e sui metodi di saturazione. Una lezione che fornisce una panoramica del suo approccio può essere trovata qui . Come ha sottolineato @MichaelChernick (e anche Hendry lo farebbe!), La conoscenza della materia è (di gran lunga) importante. Questo è il motivo per cui c'è valore negli specialisti in materia: lasciare che gli algoritmi agiscano da soli è l'errore.
Graeme Walsh,

Risposte:


333

Penso che questo approccio sia sbagliato, ma forse sarà più utile se spiego il perché. Volere conoscere il modello migliore dati alcune informazioni su un gran numero di variabili è abbastanza comprensibile. Inoltre, è una situazione in cui le persone sembrano ritrovarsi regolarmente. Inoltre, molti libri di testo (e corsi) sulla regressione trattano metodi di selezione graduale, il che implica che devono essere legittimi. Sfortunatamente, tuttavia, non lo sono e l'associazione di questa situazione e obiettivo è abbastanza difficile da navigare con successo. Di seguito è riportato un elenco di problemi con le procedure automatiche di selezione del modello graduale (attribuite a Frank Harrell e copiate da qui ):

  1. Produce valori R-quadrati che sono fortemente distorti per essere alti.
  2. I test F e chi-quadrato citati accanto a ciascuna variabile sulla stampa non hanno la distribuzione richiesta.
  3. Il metodo fornisce intervalli di confidenza per effetti e valori previsti falsamente restrittivi; vedi Altman e Andersen (1989).
  4. Fornisce valori p che non hanno il significato corretto e la correzione corretta per loro è un problema difficile.
  5. Fornisce coefficienti di regressione distorti che necessitano di contrazione (i coefficienti per le variabili rimanenti sono troppo grandi; vedi Tibshirani [1996]).
  6. Ha gravi problemi in presenza di collinearità.
  7. Si basa su metodi (ad es. Test F per modelli nidificati) che erano destinati a testare ipotesi prespecificate.
  8. L'aumento della dimensione del campione non aiuta molto; vedi Derksen e Keselman (1992).
  9. Ci permette di non pensare al problema.
  10. Usa molta carta.

La domanda è: cosa c'è di male in queste procedure / perché si verificano questi problemi? La maggior parte delle persone che hanno seguito un corso di regressione di base hanno familiarità con il concetto di regressione alla media , quindi questo è ciò che uso per spiegare questi problemi. (Anche se all'inizio può sembrare fuori tema, abbiate pazienza, prometto che è pertinente.)

Immagina un allenatore di pista del liceo nel primo giorno di prove. Trenta bambini si presentano. Questi bambini hanno un livello sottostante di abilità intrinseca a cui né l'allenatore, né nessun altro, ha accesso diretto. Di conseguenza, l'allenatore fa l'unica cosa che può fare, ovvero far correre tutti un trattino di 100m. I tempi sono presumibilmente una misura della loro capacità intrinseca e sono presi come tali. Tuttavia, sono probabilistici; una parte di quanto bene qualcuno si basa sulla sua capacità effettiva e una parte è casuale. Immagina che la vera situazione sia la seguente:

set.seed(59)
intrinsic_ability = runif(30, min=9, max=10)
time = 31 - 2*intrinsic_ability + rnorm(30, mean=0, sd=.5)

I risultati della prima gara sono mostrati nella figura seguente insieme ai commenti dell'allenatore per i bambini.

prima gara

Nota che il partizionamento dei bambini per i loro tempi di gara lascia sovrapposizioni alla loro abilità intrinseca - questo fatto è cruciale. Dopo aver elogiato alcuni e aver urlato contro altri (come gli allenatori tendono a fare), li fa correre di nuovo. Ecco i risultati della seconda gara con le reazioni dell'allenatore (simulate dallo stesso modello sopra):

seconda gara

Notare che la loro abilità intrinseca è identica, ma i tempi sono rimbalzati rispetto alla prima razza. Dal punto di vista dell'allenatore, quelli a cui urlava tendevano a migliorare e quelli che lodava tendevano a fare di peggio (ho adattato questo esempio concreto dalla citazione di Kahneman elencata nella pagina wiki), anche se in realtà la regressione alla media è un semplice matematico conseguenza del fatto che l'allenatore sta selezionando gli atleti per la squadra sulla base di una misurazione che è in parte casuale.

Ora, cosa c'entra questo con le tecniche di selezione dei modelli automatizzate (ad esempio, a step)? Lo sviluppo e la conferma di un modello basato sullo stesso set di dati viene talvolta chiamato dragaggio dei dati. Sebbene vi sia una relazione di base tra le variabili e si prevede che relazioni più forti producano punteggi più forti (ad es. Statistiche T più alte), si tratta di variabili casuali e i valori realizzati contengono errori. Pertanto, quando si selezionano variabili basate su valori realizzati più alti (o più bassi), possono essere tali a causa del valore reale, dell'errore o di entrambi sottostanti. Se procedi in questo modo, rimarrai sorpreso come lo era l'allenatore dopo la seconda gara. Questo è vero sia che selezioni le variabili in base a statistiche t elevate o intercorrelazioni basse. È vero, usare l'AIC è meglio che usare i valori p, perché penalizza la complessità del modello, ma l'AIC è di per sé una variabile casuale (se si esegue uno studio più volte e si adatta allo stesso modello, l'AIC rimbalzerà esattamente come tutto il resto). Purtroppo,

Spero che questo sia utile.


43
Spiegazione fenomenale del dragaggio dei dati.
Frank Harrell,

17
2L+kpPr(χ12>k)

7
pk2logN2L

9
(2L1+2p0+2)(2L0+2p0)=2(L1L0)+2. Ora il primo termine è la statistica del rapporto di verosimiglianza su cui si basa il valore p. Quindi stiamo aggiungendo il parametro extra se la statistica del rapporto di verosimiglianza è maggiore di un valore soglia. Questo è lo stesso di quello che sta facendo l'approccio p-value. C'è solo una differenza concettuale qui
probabilityislogic

2
per un'illustrazione del perché AIC non risolve il problema, vedere: Mundry, R. (2011). Problemi nell'inferenza statistica basata sulla teoria dell'informazione - un commento dal punto di vista di un frequentatore. Behavioral Ecology and Sociobiology, 65 (1), 57-68.
Jank

70

Dai un'occhiata al pacchetto del punto di inserimento in R. Ti aiuterà a convalidare in modo incrociato i modelli di regressione per gradi (uso method='lmStepAIC'o method='glmStepAIC') e potrebbe aiutarti a capire come questi tipi di modelli tendano ad avere scarse prestazioni predittive. Inoltre, è possibile utilizzare la findCorrelationfunzione in caret per identificare ed eliminare le variabili collineari e la rfefunzione in caret per eliminare le variabili con una statistica t bassa (uso rfeControl=rfeControl(functions=lmFuncs)).

Tuttavia, come indicato nelle risposte precedenti, è probabile che questi metodi di selezione delle variabili ti mettano nei guai, in particolare se li esegui in modo iterativo. Assicurati assolutamente di valutare le tue prestazioni su un set di prova COMPLETAMENTE tenuto. Non guardare nemmeno il set di test finché non sei soddisfatto del tuo algoritmo!

Infine, potrebbe essere meglio (e più semplice) utilizzare il modello predittivo con la selezione di funzionalità "incorporata", come la regressione della cresta, il lazo o la rete elastica. In particolare, prova l' method=glmnetargomento per il punto di inserimento e confronta l'accuratezza con convalida incrociata di quel modello con l' method=lmStepAICargomento. La mia ipotesi è che la prima fornirà una precisione fuori campione molto più elevata e non dovrai preoccuparti di implementare e convalidare il tuo algoritmo di selezione delle variabili personalizzato.


1
log(λ2+β2)

2
@probabilityislogic Sei a conoscenza di buone implementazioni della penalità del doppio pareto, in una lingua come ro python? Mi piacerebbe provarlo.
Zach,

1
Da quello che ho capito, la selezione del modello da parte di AIC e la validazione incrociata lasciata una è essenzialmente la stessa cosa (equivalenza asintotica, vedi Stone, 1977) , quindi AIC e alcuni tipi di convalida incrociata probabilmente porteranno a risultati molto simili risultati. Tuttavia, non ho usato il pacchetto caret e dalle chiamate del metodo sembra che AIC sia effettivamente usato in alcuni casi.
fileunderwater,

38

Concordo pienamente con i problemi delineati da @gung. Detto questo, realisticamente parlando, la selezione del modello è un vero problema che necessita di una soluzione reale. Ecco qualcosa che vorrei usare in pratica.

  1. Dividi i tuoi dati in training, validazione e set di test.
  2. Allena i modelli sul tuo set di allenamento.
  3. Misurare le prestazioni del modello sul set di convalida utilizzando una metrica come la previsione RMSE e scegliere il modello con l'errore di previsione più basso.
  4. Elaborare nuovi modelli se necessario, ripetere i passaggi 2-3.
  5. Segnala il rendimento del modello sul set di test.

Per un esempio dell'uso di questo metodo nel mondo reale, credo che sia stato utilizzato nel concorso a premi Netflix.


15
n>20000

5
@Frank: Perché pensi che N debba essere così alto?
rolando2,

14
A causa della scarsa precisione. Se dividi di nuovo puoi ottenere risultati molto diversi. Ecco perché le persone eseguono 100 ripetizioni di 10 convalide incrociate o bootstrap.
Frank Harrell,

10
@FrankHarrell Da cosa dipende quella cifra n> 20000? Si basa sul commento del poster originale sull'avere " diverse centinaia di fattori "? O è indipendente da qualsiasi aspetto dei dati?
Darren Cook,

33
Il tipo di impostazione su cui ho testato la suddivisione dei dati era n = 17000 con una frazione di 0,3 con un evento e con circa 50 parametri esaminati o inseriti in un modello logistico binario. Ho usato una divisione casuale 1: 1. L'area ROC convalidata nel campione del test è cambiata sostanzialmente quando ho diviso nuovamente i dati e ricominciato. Guarda in Studi sui metodi usati nel testo in biostat.mc.vanderbilt.edu/rms per studi di simulazione e documenti correlati che forniscono ulteriori informazioni.
Frank Harrell,

15

Per rispondere alla domanda, ci sono diverse opzioni: 1) tutto-sottoinsieme di AIC / BIC 2) gradualmente per valore p 3) gradualmente per AIC / BIC 4) regolarizzazione come LASSO (può essere basata su AIC / BIC o CV 5) algoritmo genetico (GA) 6) altri? 7) utilizzo di una selezione non automatica, orientata alla teoria ("conoscenza della materia")

La prossima domanda sarebbe quale metodo è migliore. Questo documento (doi: 10.1016 / j.amc.2013.05.016) indica che "tutte le possibili regressioni" hanno dato gli stessi risultati al loro nuovo metodo proposto e progressivamente è peggio. Tra questi c'è un semplice GA. Questo documento (DOI: 10.1080 / 10618600.1998.10474784) confronta la regressione penalizzata (Bridge, Lasso ecc.) Con "salti e limiti" (sembra un algoritmo di ricerca esaustivo ma più veloce) e ha anche scoperto che "il modello bridge concorda con il modello migliore di la selezione del sottoinsieme mediante il metodo balzi e limiti ”. Questo documento (doi: 10.1186 / 1471-2105-15-88) mostra che GA è meglio di LASSO. Questo documento (DOI: 10.1198 / jcgs.2009.06164) ha proposto un metodo, essenzialmente un approccio tutto-sottoinsieme (basato sul BIC), ma riduce abilmente i tempi di calcolo. Dimostrano che questo metodo è migliore di LASSO. È interessante notare che questo documento (DOI: 10.1111 / j.1461-0248.2009.01361.

Quindi, nel complesso, i risultati sono contrastanti, ma ho avuto l'impressione che GA sembrasse molto buono, anche se gradatamente potrebbe non essere così male ed è veloce.

Per quanto riguarda 7), l'uso della selezione non automatica, orientata alla teoria ("conoscenza della materia"). Richiede tempo e non è necessariamente migliore del metodo automatico. In effetti nella letteratura delle serie storiche, è noto che il metodo automatizzato (in particolare il software commerciale) supera gli esperti umani "con un margine sostanziale" (doi: 10.1016 / S0169-2070 (01) 00119-4, pagina 561, ad esempio selezionando vari tipi di livellamento esponenziale e modelli ARIMA).


6
Tenere presente che è possibile ottenere prestazioni diverse negli studi di simulazione di diversi algoritmi di selezione modificando il processo di generazione dei dati per favorire (anche se non intenzionalmente) una particolare routine. Il problema di quale approccio sarà più veloce o più lento è distinto, ma potenzialmente ancora importante.
gung

2
In effetti gli esempi nell'articolo originale di Tibshirani su LASSO illustrano bene il punto di @ gung. Lo stesso vale per studi comparativi di metodi diversi su dati reali. A proposito, il tuo ultimo riferimento è giusto? Il documento di Clements & Hendry con il DOI che offri non sostiene che i metodi automatizzati superino gli esperti umani o utilizzino le parole "con un margine sostanziale". (Sarebbe bello se tu
fornissi

Trovato: Goodrich (2001), "Software commerciale nel concorso M3", int. J. Forecast., 17, pp 560-565. È sotto la stessa collezione "Commentaries on the M3-Competition" del documento Clements & Hendry, motivo per cui Googling the DOI mi ha inviato lì.
Scortchi

Ad ogni modo, non è affatto chiaro che il commento di Goodrich abbia qualcosa a che fare con la competenza in materia .
Scortchi

1
@Scortchi potrebbe essere più chiaro sull'articolo a partire da pagina 581 su quel numero di giornale. È più correlato al "Concorso M2" in cui, i metodi di previsione automatica sono stati confrontati con esperti umani invitati (inclusi alcuni grandi nomi nella letteratura delle serie storiche) che conoscevano il contesto economico / industriale e potevano persino chiedere informazioni aggiuntive alle aziende che fornivano i dati.
heran_xp,

6

Ecco una risposta dal campo sinistro: invece di usare la regressione lineare, usa un albero di regressione (pacchetto rpart). Questo è adatto per la selezione automatica del modello perché con un piccolo lavoro è possibile automatizzare la selezione di cp, il parametro utilizzato per evitare un eccesso di adattamento.


3

il modello lineare può essere ottimizzato implementando l'algoritmo genetico nel modo di scegliere le variabili indipendenti più preziose. Le variabili sono rappresentate come geni nell'algoritmo e il miglior cromosoma (insieme di geni) viene quindi selezionato dopo operatori di crossover, mutazione, ecc. Si basa sulla selezione naturale - quindi la migliore "generazione" potrebbe sopravvivere, in altre parole, l'algoritmo ottimizza la funzione di stima che dipende dal modello particolare.


2
Ciò selezionerebbe le variabili "migliori" nei dati , non necessariamente le migliori variabili nel processo / popolazione di generazione dei dati, poiché ha accesso solo ai dati. Non è poi così diverso dal metodo graduale voluto dall'OP.
gung

0

Abbiamo una funzione nel pacchetto di statistiche di base R, chiamato step (), che esegue, avanti, indietro o selezionare i modelli in base al più basso AIC. Questo funziona anche per le variabili fattoriali. Questo non serve allo scopo qui ?.


-51

Vedo che la mia domanda ha suscitato molto interesse e un interessante dibattito sulla validità dell'approccio di selezione automatica dei modelli. Anche se concordo sul fatto che dare per scontato il risultato di una selezione automatica sia rischioso, può essere utilizzato come punto di partenza. Quindi ecco come l'ho implementato per il mio problema particolare, che è quello di trovare i migliori n fattori per spiegare una determinata variabile

  1. fare tutte le regressioni variabili rispetto ai singoli fattori
  2. ordina la regressione in base a un determinato criterio (ad esempio AIC)
  3. elimina i fattori che hanno una t-stat bassa: sono inutili per spiegare la nostra variabile
  4. con l'ordine indicato in 2., prova ad aggiungere i fattori uno ad uno al modello e mantienili quando migliorano il nostro criterio. iterare per tutti i fattori.

Ancora una volta, questo è molto approssimativo, ci possono essere modi per migliorare la metodologia, ma questo è il mio punto di partenza. Sto postando questa risposta sperando che possa essere utile per qualcun altro. I commenti sono benvenuti!


47
(1) Non ho assistito ad alcun "dibattito" in questa discussione: tutte le risposte e i commenti presentano lo stesso messaggio di base. (2) L'implementazione sembra essere una versione ad hoc della regressione graduale . Sono d'accordo che può essere utile come punto di partenza a condizione che non venga automaticamente accettato come fine a se stesso.
whuber

28
hai effettivamente accettato la tua risposta che si muove contro ogni argomento avanzato dalla comunità. Non sorprende vedere i negativi qui ...
Jank

23
Credo sia la prima volta che vedo così tanti voti negativi. @SAM perché non accetti solo alcune delle altre risposte eccellenti ed elimini la tua "risposta"?
Marbel

Questa è la risposta più declassata di sempre?
mkt

2
Sembra che tu abbia risposto all'importante domanda di @probabilityislogic dicendo il tuo obiettivo "trovare i migliori n fattori per spiegare una determinata variabile". La costruzione di modelli per spiegare (per comprendere la causalità) deve essere fatta più intenzionalmente e di solito in modo molto più intenso rispetto alla costruzione di modelli per prevedere.
rolando2,
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.