Come posso visualizzare l'importanza di diversi input per la previsione per un modello non lineare a scatola nera?


9

Sto creando uno strumento di previsione interattivo (in Python) come ausilio alla previsione che viene eseguita nella mia organizzazione. Ad oggi il processo di previsione è stato in gran parte guidato dall'uomo, con i meteorologi che hanno assimilato i dati nelle loro reti neurali naturali e hanno usato il loro intuito per fare previsioni. Da una verifica della previsione a lungo termine e da uno studio di modellazione predittiva che ho fatto, ho trovato quello che potresti aspettarti; diversi meteorologi mostrano distorsioni diverse, gli effetti di alcuni predittori sembrano essere sopravvalutati e altri importanti sembrano essere ignorati e in generale le prestazioni previste sono mediocri rispetto a modelli empirici relativamente semplici.

Le previsioni continueranno a essere manuali, ma sto cercando di creare uno strumento utile per fornire ai meteorologi una migliore quantificazione degli effetti relativi dei predittori. Ci sono anche effetti importanti come influenze stagionali che sono spesso trascurati che vorrei che lo strumento mettesse in evidenza per l'utente. Mi aspetto un certo contraccolpo e scetticismo sul processo di modellizzazione da parte di alcuni dei previsori più "esperti" (molti dei quali hanno una scarsa conoscenza formale delle statistiche), quindi la comunicazione è almeno altrettanto importante e le prestazioni del modello stesso in termini di ottenere un miglioramento misurabile della precisione delle previsioni.

I modelli che sto sviluppando hanno una forte componente auto-regressiva che a volte viene modificata in modo significativo dagli eventi che si presentano come valori misurati in alcuni predittori che sono, durante i tempi non-evento, vicini allo zero. Ciò è in accordo con il modello mentale utilizzato dai meteorologi. La parte fondamentale è quella di poter dimostrare quali delle misurazioni dell '"evento" sono più influenti nel distogliere la previsione dal valore auto-regressivo per ogni data previsione. Immagino il processo in questo modo; il meteorologo indica il miglior valore di ipotesi, il modello ne suggerisce uno diverso e il meteorologo chiede perché. Il modello risponde a qualcosa del tipo "vedi qui, questo valore di questo predittore aumenta il valore di previsione in estate. Se fosse inverno, si sposterà dall'altra parte. So che ci sono altre misurazioni,

Ora, immagina che il modello fosse una semplice regressione lineare. Si potrebbe immaginare di mostrare il relativo 'effetto' dei predittori basati sugli eventi moltiplicando il valore per il modello coefficiente e mostrandolo come un semplice grafico a barre. Tutte le barre dei diversi predittori si sommano alla deviazione totale dal valore AR, e questo mostra in modo succinto e chiaro quelli che, in questo caso, stanno avendo una forte influenza.

Il problema è che il processo in previsione mostra un alto grado di non linearità nei predittori, o almeno, ho avuto molto più successo con algoritmi di machine learning non lineari black-box (foresta casuale e GBM) che con GLM per questo set di dati. Idealmente, vorrei essere in grado di cambiare perfettamente il modello funzionando "sotto il cofano" senza che l'esperienza dell'utente cambi, quindi ho bisogno di un modo generico per dimostrare in modo semplice l'importanza delle diverse misurazioni senza utilizzare un approccio specifico dell'algoritmo. Il mio approccio attuale sarà quello di quasi-linearizzare gli effetti impostando tutti i valori su zero tranne un predittore, registrare la deviazione prevista e quindi ripetere per tutti i predittori, visualizzando i risultati nel grafico a barre sopra menzionato. In presenza di una forte non linearità, potrebbe non funzionare così bene.


1
Con cosa sei finito - potresti mettere su una foto o due? Inoltre, "impostando tutti i valori su zero tranne un predittore" - non vuoi il gradiente attorno ai migliori valori attuali, non intorno a tutti 0?
denis,

Risposte:


4

Un modo per valutare l'influenza dei predittori sulle previsioni è stimare il gradiente dell'output rispetto ai predittori. Ciò può essere fatto stimando le derivate parziali della funzione di previsione non lineare rispetto a ciascuno dei predittori mediante differenze finite.

Idealmente, lo farai sugli input di test effettivamente osservati. Ad esempio, è possibile calcolare la media dei valori assoluti dei gradienti stimati in tutti gli input di test nei 2 giorni precedenti. L'entità di questo gradiente medio può essere utilizzata per ordinare l'importanza dei predittori. (Sarà necessario fare attenzione con la stima del gradiente per utilizzare le unità appropriate mediante il punteggio z o alcuni di questi metodi.) È possibile salvare questi gradienti stimati per stagione per analisi comparativa.

Vedi " Come spiegare le decisioni sulla classificazione individuale ", di David Baehrens et. al. in JMLR per ulteriori informazioni su questa idea. L'articolo tratta della classificazione, ma si generalizza facilmente anche alla regressione.


È fantastico! Un riferimento molto utile che sarà utile per questo problema che ho e altrove.
Bogdanovist,

2

Hai provato il modulo scikit-learn in Python.

Puoi "computer_importance" per le funzionalità di randomForestClassifier


1
In primo luogo ho anche pensato che il calcolo dell'importanza delle funzionalità potesse essere utile, ma alla fine si tratta di un approccio relativamente scarso quando si deve spiegare il valore previsto per un'istanza specifica. L'importanza delle funzionalità offre solo vaghi suggerimenti agli esperti umani.
Steffen,

A parte, il PO ha chiesto un approccio indipendente dal modello ...
steffen,

Il problema con misure di importanza variabile è che si applicano all'intero set di dati in media, piuttosto che dirti ciò che era effettivamente importante in un caso particolare.
Bogdanovist,

In realtà penso che questo sia un approccio indipendente dal modello, potresti davvero applicarlo ad altri classificatori oltre alle foreste casuali. Nel sito web di Breiman c'è un'osservazione sottile su come è possibile calcolare l'importanza variabile per un singolo caso. stat.berkeley.edu/~breiman/RandomForests/cc_home.htm#varimp (ultima frase) Penso che questo non sia stato ancora ampiamente studiato, o almeno ampiamente testato. L'importanza della variabile media non è sempre quella che desideri. Ad esempio, non è quando vuoi aiutare un professionista a prendere una decisione su un caso. Questo è un argomento veramente interessante.
Simone,

C'è un articolo interessante in cui Breiman discute un po 'di questo metodo anche sulla regressione logistica: "Statistical Modeling: The Two Cultures". Una bella lettura. La frase che mi piace di più è: "La mia definizione di importanza variabile si basa sulla previsione. Una variabile potrebbe essere considerata importante se eliminarla influisce seriamente sulla precisione della previsione." Questa affermazione si applica a qualsiasi classificatore che potresti utilizzare.
Simone,
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.