Se eu executar um randomForest
modelo, posso fazer previsões com base no modelo. Existe uma maneira de obter um intervalo de previsão de cada uma das previsões, de modo que eu saiba o quão "seguro" o modelo é de sua resposta. Se isso é possível, é simplesmente baseado na variabilidade da variável dependente para todo o modelo ou terá intervalos mais amplos e mais estreitos, dependendo da árvore de decisão específica que foi seguida para uma previsão específica?
r
confidence-interval
random-forest
Dean MacGregor
fonte
fonte
score
função para avaliar o desempenho. Como a produção é baseada no voto majoritário das árvores na floresta, em caso de classificação, será dada uma probabilidade de que esse resultado seja verdadeiro, com base na distribuição de votos. Mas não tenho certeza da regressão .... Qual biblioteca você usa?Respostas:
Isso é parcialmente uma resposta ao @Sashikanth Dareddy (já que não caberá em um comentário) e parcialmente uma resposta à postagem original.
Lembre-se do que é um intervalo de previsão, é um intervalo ou conjunto de valores em que previmos que futuras observações ocorrerão. Geralmente, o intervalo de previsão possui 2 partes principais que determinam sua largura, uma parte que representa a incerteza sobre a média prevista (ou outro parâmetro), que é a parte do intervalo de confiança e uma parte que representa a variabilidade das observações individuais em torno dessa média. O intervalo de confiança é robusto devido ao Teorema do Limite Central e, no caso de uma floresta aleatória, o bootstrapping também ajuda. Mas o intervalo de previsão depende completamente das suposições sobre como os dados são distribuídos, dadas as variáveis preditoras, CLT e bootstrapping não afetam essa parte.
O intervalo de previsão deve ser maior, onde o intervalo de confiança correspondente também seria maior. Outras coisas que afetariam a largura do intervalo de previsão são suposições sobre variância igual ou não; isso tem que vir do conhecimento do pesquisador, não do modelo de floresta aleatória.
Um intervalo de previsão não faz sentido para um resultado categórico (você poderia fazer um conjunto de previsões em vez de um intervalo, mas na maioria das vezes provavelmente não seria muito informativo).
Podemos ver alguns dos problemas relacionados aos intervalos de previsão simulando dados em que sabemos a verdade exata. Considere os seguintes dados:
Esses dados específicos seguem as premissas para uma regressão linear e são razoavelmente diretos para um ajuste aleatório da floresta. Sabemos pelo modelo "verdadeiro" que, quando ambos os preditores são 0, a média é 10, também sabemos que os pontos individuais seguem uma distribuição normal com desvio padrão de 1. Isso significa que o intervalo de previsão de 95%, com base no conhecimento perfeito para esses pontos seriam de 8 a 12 (bem, na verdade, de 8,04 a 11,96, mas o arredondamento o torna mais simples). Qualquer intervalo de previsão estimado deve ser maior que isso (não ter informações perfeitas adiciona largura para compensar) e inclui esse intervalo.
Vejamos os intervalos da regressão:
Podemos ver que há alguma incerteza nos meios estimados (intervalo de confiança) e isso nos dá um intervalo de previsão que é mais amplo (mas inclui) o intervalo de 8 a 12.
Agora, vejamos o intervalo com base nas previsões individuais de árvores individuais (devemos esperar que sejam mais amplas, pois a floresta aleatória não se beneficia das suposições (que sabemos que são verdadeiras para esses dados) que a regressão linear):
Os intervalos são maiores que os intervalos de previsão de regressão, mas não cobrem todo o intervalo. Eles incluem os valores verdadeiros e, portanto, podem ser legítimos como intervalos de confiança, mas estão prevendo apenas onde está a média (valor previsto), não a peça adicional para a distribuição em torno dessa média. Para o primeiro caso em que x1 e x2 são 0, os intervalos não ficam abaixo de 9,7, isso é muito diferente do verdadeiro intervalo de previsão que desce para 8. Se gerarmos novos pontos de dados, haverá vários pontos (muito mais de 5%) que estão nos intervalos verdadeiro e de regressão, mas não se enquadram nos intervalos aleatórios da floresta.
Para gerar um intervalo de predição, você precisará fazer algumas suposições fortes sobre a distribuição dos pontos individuais em torno das médias previstas, em seguida, você poderá obter as previsões das árvores individuais (a parte do intervalo de confiança de inicialização) e gerar um valor aleatório a partir da suposição distribuição com esse centro. Os quantis dessas peças geradas podem formar o intervalo de previsão (mas eu ainda o testaria, talvez seja necessário repetir o processo várias vezes e combinar).
Aqui está um exemplo de como fazer isso adicionando desvios normais (já que sabemos que os dados originais usavam um normal) às previsões com o desvio padrão com base no MSE estimado dessa árvore:
Esses intervalos contêm aqueles baseados em conhecimento perfeito, portanto, pareça razoável. Porém, eles dependerão muito das suposições feitas (as suposições são válidas aqui porque usamos o conhecimento de como os dados foram simulados, elas podem não ser tão válidas em casos reais de dados). Eu ainda repetiria as simulações várias vezes para dados mais parecidos com os dados reais (mas simulados para que você saiba a verdade) várias vezes antes de confiar totalmente nesse método.
fonte
Percebo que este é um post antigo, mas tenho feito algumas simulações e pensei em compartilhar minhas descobertas.
O @GregSnow fez um post muito detalhado sobre isso, mas acredito que, ao calcular o intervalo usando previsões de árvores individuais, ele estava olhando que é apenas um intervalo de previsão de 70%. Precisamos examinar para obter o intervalo de previsão de 95%.[ μ + 1,96 ∗ σ , μ - 1,96 ∗ σ ][ μ + σ, μ - σ] [μ+1.96∗σ,μ−1.96∗σ]
Fazendo essa alteração no código @GregSnow, obtemos os seguintes resultados
Agora, comparando-os com os intervalos gerados pela adição de desvio normal às previsões com desvio padrão, conforme MSE como o @GregSnow sugeriu que obtivéssemos,
O intervalo de ambas as abordagens agora parece muito próximo. A plotagem do intervalo de previsão para as três abordagens contra a distribuição de erros neste caso é mostrada abaixo
Agora, vamos executar novamente a simulação, mas desta vez aumentando a variação do termo de erro. Se nossos cálculos de intervalo de previsão forem bons, devemos terminar com intervalos mais amplos do que os que obtivemos acima.
Agora, isso deixa claro que o cálculo dos intervalos de previsão pela segunda abordagem é muito mais preciso e está produzindo resultados bem próximos do intervalo de previsão da regressão linear.
Partindo da premissa de normalidade, existe outra maneira mais fácil de calcular os intervalos de previsão de floresta aleatória. De cada uma das árvores, temos o valor previsto ( ) e o erro quadrático médio ( ). Portanto, a previsão de cada árvore individual pode ser considerada como . Usando as propriedades normais de distribuição, nossa previsão da floresta aleatória teria a distribuição . Aplicando isso ao exemplo que discutimos acima, obtemos os resultados abaixo M S E i N ( μ i , R M S E i ) N ( ∑ μ i / n , ∑ R M S E i / n )μi MSEi N(μi,RMSEi) N(∑μi/n,∑RMSEi/n)
Eles são muito bons com os intervalos lineares do modelo e também com a abordagem sugerida pelo @GregSnow. Mas observe que a suposição subjacente em todos os métodos que discutimos é que os erros seguem uma distribuição Normal.
fonte
Se você usar R, poderá produzir facilmente intervalos de previsão para as previsões de uma regressão aleatória de florestas: Basta usar o pacote
quantregForest
(disponível no CRAN ) e ler o artigo de N. Meinshausen sobre como quantis condicionais podem ser inferidos com florestas de regressão quantil e como eles pode ser usado para criar intervalos de previsão. Muito informativo, mesmo se você não trabalha com o R!fonte
Isso é fácil de resolver com o randomForest.
Primeiro, deixe-me lidar com a tarefa de regressão (supondo que sua floresta tenha 1000 árvores). Na
predict
função, você tem a opção de retornar resultados de árvores individuais. Isso significa que você receberá 1000 colunas de saída. Podemos calcular a média das 1000 colunas para cada linha - essa é a saída regular que o RF teria produzido de qualquer maneira. Agora, para obter o intervalo de previsão, digamos +/- 2 std. desvios, tudo o que você precisa fazer é, para cada linha, dos 1000 valores calcular +/- 2 std. desvios e torne esses limites superiores e inferiores em sua previsão.Segundo, no caso de classificação, lembre-se de que cada árvore gera 1 ou 0 (por padrão) e a soma de todas as 1000 árvores divididas por 1000 fornece a probabilidade de classe (no caso de classificação binária). Para colocar um intervalo de previsão na probabilidade, você precisa modificar o valor mínimo. opção nodesize (consulte a documentação randomForest para obter o nome exato dessa opção) depois de definir um valor >> 1, as árvores individuais produzirão números entre 1 e 0. Agora, daqui em diante, você pode repetir o mesmo processo descrito acima para a tarefa de regressão.
Espero que faça sentido.
fonte
Eu tentei algumas opções (tudo isso WIP):
Na verdade, eu fiz da variável dependente um problema de classificação com os resultados como intervalos, em vez de um único valor. Os resultados obtidos foram ruins, em comparação com o uso de um valor simples. Eu desisti dessa abordagem.
Em seguida, converti-o em vários problemas de classificação, cada um dos quais com um limite inferior para o intervalo (o resultado era o modelo cruzando o limite inferior ou não) e, em seguida, executei todos os modelos (~ 20) e, em seguida, combinou o resultado para obter uma resposta final como um intervalo. Isso funciona melhor que 1 acima, mas não tão bom quanto eu preciso. Ainda estou trabalhando para melhorar essa abordagem.
Usei estimativas OOB e deixe de fora para decidir o quão bom / ruim meus modelos são.
fonte
O problema de construir intervalos de previsão para previsões aleatórias de florestas foi abordado no seguinte artigo:
Zhang, Haozhe, Joshua Zimmerman, Dan Nettleton e Daniel J. Nordman. "Intervalos aleatórios de previsão de florestas". Estatístico Americano, 2019.
O pacote R "rfinterval" é sua implementação disponível no CRAN.
Instalação
Para instalar o pacote R rfinterval :
Uso
Começo rápido:
Exemplo de dados:
fonte