Esto es en parte una respuesta a @Sashikanth Dareddy (ya que no cabe en un comentario) y en parte una respuesta a la publicación original.
Recuerde lo que es un intervalo de predicción, es un intervalo o un conjunto de valores en el que predecimos que se ubicarán las observaciones futuras. Generalmente, el intervalo de predicción tiene 2 piezas principales que determinan su ancho, una pieza que representa la incertidumbre sobre la media pronosticada (u otro parámetro), esta es la parte del intervalo de confianza, y una pieza que representa la variabilidad de las observaciones individuales en torno a esa media. El intervalo de confianza es robusto debido al Teorema del límite central y, en el caso de un bosque aleatorio, el arranque también ayuda. Pero el intervalo de predicción depende completamente de los supuestos sobre cómo se distribuyen los datos dadas las variables predictoras, CLT y bootstrapping no tienen efecto en esa parte.
El intervalo de predicción debe ser más amplio donde el intervalo de confianza correspondiente también sería más amplio. Otras cosas que afectarían el ancho del intervalo de predicción son suposiciones sobre igual varianza o no, esto tiene que venir del conocimiento del investigador, no del modelo de bosque aleatorio.
Un intervalo de predicción no tiene sentido para un resultado categórico (podría hacer un conjunto de predicción en lugar de un intervalo, pero la mayoría de las veces probablemente no sería muy informativo).
Podemos ver algunos de los problemas relacionados con los intervalos de predicción simulando datos donde sabemos la verdad exacta. Considere los siguientes datos:
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)
Estos datos particulares siguen los supuestos para una regresión lineal y son bastante sencillos para un ajuste aleatorio del bosque. Sabemos por el modelo "verdadero" que cuando ambos predictores son 0 que la media es 10, también sabemos que los puntos individuales siguen una distribución normal con una desviación estándar de 1. Esto significa que el intervalo de predicción del 95% basado en el conocimiento perfecto para estos puntos serían de 8 a 12 (bueno, en realidad 8.04 a 11.96, pero el redondeo lo hace más simple). Cualquier intervalo de predicción estimado debe ser más amplio que esto (no tener información perfecta agrega ancho para compensar) e incluir este rango.
Veamos los intervalos de regresión:
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 existe cierta incertidumbre en las medias estimadas (intervalo de confianza) y eso nos da un intervalo de predicción que es más amplio (pero incluye) el rango de 8 a 12.
Ahora veamos el intervalo basado en las predicciones individuales de árboles individuales (deberíamos esperar que estos sean más amplios ya que el bosque aleatorio no se beneficia de los supuestos (que sabemos que son ciertos para estos datos) que sí hace la regresión lineal):
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
Los intervalos son más amplios que los intervalos de predicción de regresión, pero no cubren todo el rango. Incluyen los valores verdaderos y, por lo tanto, pueden ser legítimos como intervalos de confianza, pero solo predicen dónde está la media (valor predicho), no la pieza agregada para la distribución alrededor de esa media. Para el primer caso donde x1 y x2 son ambos 0, los intervalos no van por debajo de 9.7, esto es muy diferente del verdadero intervalo de predicción que baja a 8. Si generamos nuevos puntos de datos, habrá varios puntos (mucho más del 5%) que se encuentran en los intervalos verdadero y de regresión, pero no se encuentran en los intervalos aleatorios del bosque.
Para generar un intervalo de predicción necesitará hacer algunas suposiciones fuertes sobre la distribución de los puntos individuales alrededor de los medios pronosticados, luego podría tomar las predicciones de los árboles individuales (la parte del intervalo de confianza bootstrapped) y luego generar un valor aleatorio a partir de lo supuesto distribución con ese centro. Los cuantiles para esas piezas generadas pueden formar el intervalo de predicción (pero aún así lo probaría, es posible que deba repetir el proceso varias veces más y combinarlo).
Aquí hay un ejemplo de cómo hacer esto agregando desviaciones normales (ya que sabemos que los datos originales usaron una normal) a las predicciones con la desviación estándar basada en el MSE estimado de ese árbol:
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
Estos intervalos contienen aquellos basados en un conocimiento perfecto, por lo que debe parecer razonable. Pero, dependerán en gran medida de las suposiciones hechas (las suposiciones son válidas aquí porque utilizamos el conocimiento de cómo se simularon los datos, pueden no ser tan válidos en casos de datos reales). Todavía repetiría las simulaciones varias veces para datos que se parecen más a sus datos reales (pero simulados para que sepa la verdad) varias veces antes de confiar completamente en este método.
score
función para evaluar el rendimiento. Dado que el resultado se basa en el voto mayoritario de los árboles en el bosque, en caso de clasificación, le dará una probabilidad de que este resultado sea verdadero, en función de la distribución del voto. Sin embargo, no estoy seguro de la regresión ... ¿Qué biblioteca utilizas?