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:
set.seed(1)
x1 <- rep(0:1, each=500)
x2 <- rep(0:1, each=250, length=1000)
y <- 10 + 5*x1 + 10*x2 - 3*x1*x2 + rnorm(1000)
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:
fit1 <- lm(y ~ x1 * x2)
newdat <- expand.grid(x1=0:1, x2=0:1)
(pred.lm.ci <- predict(fit1, newdat, interval='confidence'))
# fit lwr upr
# 1 10.02217 9.893664 10.15067
# 2 14.90927 14.780765 15.03778
# 3 20.02312 19.894613 20.15162
# 4 21.99885 21.870343 22.12735
(pred.lm.pi <- predict(fit1, newdat, interval='prediction'))
# fit lwr upr
# 1 10.02217 7.98626 12.05808
# 2 14.90927 12.87336 16.94518
# 3 20.02312 17.98721 22.05903
# 4 21.99885 19.96294 24.03476
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):
library(randomForest)
fit2 <- randomForest(y ~ x1 + x2, ntree=1001)
pred.rf <- predict(fit2, newdat, predict.all=TRUE)
pred.rf.int <- apply(pred.rf$individual, 1, function(x) {
c(mean(x) + c(-1, 1) * sd(x),
quantile(x, c(0.025, 0.975)))
})
t(pred.rf.int)
# 2.5% 97.5%
# 1 9.785533 13.88629 9.920507 15.28662
# 2 13.017484 17.22297 12.330821 18.65796
# 3 16.764298 21.40525 14.749296 21.09071
# 4 19.494116 22.33632 18.245580 22.09904
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:
pred.rf.int2 <- sapply(1:4, function(i) {
tmp <- pred.rf$individual[i, ] + rnorm(1001, 0, sqrt(fit2$mse))
quantile(tmp, c(0.025, 0.975))
})
t(pred.rf.int2)
# 2.5% 97.5%
# [1,] 7.351609 17.31065
# [2,] 10.386273 20.23700
# [3,] 13.004428 23.55154
# [4,] 16.344504 24.35970
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.
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?