Estou construindo uma ferramenta de previsão interativa (em python) como uma ajuda à previsão feita em minha organização. Até a presente data, o processo de previsão foi em grande parte orientado para o ser humano, com os meteorologistas assimilando os dados em suas redes neurais naturais e usando sua intuição aprendida para fazer previsões. De um estudo de verificação de previsão a longo prazo e de modelagem preditiva que fiz, descobri o que você poderia esperar; previsores diferentes exibem vieses diferentes, os efeitos de alguns preditores parecem ser exagerados e outros importantes parecem ser ignorados e, em geral, o desempenho da previsão é medíocre em comparação com modelos empíricos relativamente simples.
As previsões continuarão sendo manuais, mas estou tentando criar uma ferramenta útil para fornecer aos meteorologistas uma melhor quantificação dos efeitos relativos dos preditores. Também existem efeitos importantes, como influências sazonais que geralmente são negligenciadas, que eu gostaria que a ferramenta destacasse para o usuário. Estou esperando um certo grau de reação e ceticismo sobre o processo de modelagem de alguns dos analistas mais 'experientes' (muitos dos quais têm pouco conhecimento formal de estatística), para que a comunicação seja pelo menos tão importante quanto o desempenho do modelo em termos de alcançar uma melhoria mensurável na precisão da previsão.
Os modelos que estou desenvolvendo têm um forte componente auto-regressivo que às vezes é modificado significativamente por eventos que aparecem como valores medidos em alguns preditores que são, durante períodos sem eventos, próximos a zero. Isso está de acordo com o modelo mental que os analistas usam. A parte principal é ser capaz de demonstrar quais das medidas de 'evento' são mais influentes para afastar a previsão do valor de regressão automática para qualquer previsão. Estou imaginando o processo dessa maneira; o previsor adivinha seu melhor valor de estimativa, o modelo sugere um valor diferente e o previsor pergunta o porquê. O modelo responde algo como "veja aqui, esse valor desse preditor aumenta o valor previsto no verão. Se fosse inverno, ele se moveria para o outro lado. Sei que existem outras medidas,
Agora, imagine que o modelo fosse uma regressão linear simples. Pode-se imaginar exibindo o "efeito" relativo dos preditores baseados em eventos multiplicando o valor pelo modelo co-eficiente e exibindo como um gráfico de barras simples. Todas as barras dos diferentes preditores somam o desvio total do valor de RA, e isso mostra de maneira sucinta e clara as que, neste caso, estão tendo uma forte influência.
O problema é que o processo que está sendo projetado exibe um alto grau de não linearidade nos preditores, ou pelo menos, tive muito mais sucesso com algoritmos de aprendizado de máquina não lineares de caixa preta (floresta aleatória e GBM) do que com GLMs para esse conjunto de dados. Idealmente, eu gostaria de poder alterar perfeitamente o modelo funcionando 'sob o capô' sem que a experiência do usuário seja alterada, por isso preciso de uma maneira genérica de demonstrar de maneira simples a importância das diferentes medidas sem usar alguma abordagem específica do algoritmo. Minha abordagem atual será quase linearizar os efeitos, definindo todos os valores como zero, exceto um preditor, registre o desvio previsto e repita para todos os preditores, exibindo os resultados no gráfico de barras mencionado acima. Na presença de forte não linearidade, isso pode não funcionar tão bem.
fonte
Respostas:
Uma maneira de avaliar a influência do preditor nas previsões é estimar o gradiente da saída em relação aos preditores. Isso pode ser feito estimando-se as derivadas parciais da função de previsão não linear em relação a cada um dos preditores por diferenças finitas.
Idealmente, você fará isso nas entradas de teste realmente observadas. Por exemplo, você pode calcular a média dos valores absolutos dos gradientes estimados em todas as entradas de teste nos 2 dias anteriores. A magnitude desse gradiente médio pode ser usada para classificar a importância dos preditores. (Você precisará tomar cuidado com a estimativa do gradiente para usar unidades apropriadas por z-scoring ou outro método desse tipo.) Você pode salvar esses gradientes estimados por estação para análise comparativa.
Veja " Como explicar decisões de classificação individual ", de David Baehrens et. al. no JMLR para saber mais sobre essa idéia. O artigo trata da classificação, mas também facilmente generaliza a regressão.
fonte
Você já tentou o módulo scikit-learn em python.
Você pode "importar_importância" para os recursos de seu randomForestClassifier
fonte