Si ejecuto un randomForest
modelo, puedo hacer predicciones basadas en el modelo. ¿Hay alguna manera de obtener un intervalo de predicción de cada una de las predicciones de modo que sepa cuán "seguro" es el modelo de su respuesta? Si esto es posible, ¿se basa simplemente en la variabilidad de la variable dependiente para todo el modelo o tendrá intervalos más amplios y más estrechos dependiendo del árbol de decisión particular que se siguió para una predicción particular?
r
confidence-interval
random-forest
Dean MacGregor
fuente
fuente
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?Respuestas:
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:
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:
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):
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:
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.
fuente
Me doy cuenta de que esta es una publicación antigua, pero he estado ejecutando algunas simulaciones sobre esto y pensé que compartiría mis hallazgos.
Al realizar este cambio en el código @GregSnow, obtenemos los siguientes resultados
Ahora, comparando estos con los intervalos generados al agregar la desviación normal a las predicciones con la desviación estándar como MSE como @GregSnow sugirió que obtuviéramos,
El intervalo entre ambos enfoques ahora se ve muy cercano. Trazar el intervalo de predicción para los tres enfoques contra la distribución de errores en este caso se ve a continuación
Ahora, volvamos a ejecutar la simulación, pero esta vez aumentando la varianza del término de error. Si nuestros cálculos de intervalos de predicción son buenos, deberíamos terminar con intervalos más amplios que los que obtuvimos arriba.
Ahora, esto deja en claro que calcular los intervalos de predicción mediante el segundo enfoque es mucho más preciso y está dando resultados bastante cercanos al intervalo de predicción a partir de la regresión lineal.
Estos coinciden muy bien con los intervalos del modelo lineal y también con el enfoque sugerido por @GregSnow. Pero tenga en cuenta que la suposición subyacente en todos los métodos que discutimos es que los errores siguen una distribución Normal.
fuente
Si usa R, puede producir fácilmente intervalos de predicción para las predicciones de una regresión aleatoria de bosques: simplemente use el paquete
quantregForest
(disponible en CRAN ) y lea el documento de N. Meinshausen sobre cómo se pueden inferir los cuantiles condicionales con los bosques de regresión cuantil y cómo se puede usar para construir intervalos de predicción. Muy informativo incluso si no trabajas con R!fuente
Esto es fácil de resolver con randomForest.
Primero déjenme ocuparme de la tarea de regresión (suponiendo que su bosque tenga 1000 árboles). En la
predict
función, tiene la opción de devolver resultados de árboles individuales. Esto significa que recibirá una salida de 1000 columnas. Podemos tomar el promedio de las 1000 columnas para cada fila; esta es la salida regular que RF habría producido de cualquier manera. Ahora para obtener el intervalo de predicción, digamos +/- 2 std. desviaciones todo lo que necesita hacer es, para cada fila, de los 1000 valores calcular +/- 2 std. desviaciones y hacer que estos sean sus límites superior e inferior en su predicción.En segundo lugar, en el caso de la clasificación, recuerde que cada árbol genera 1 o 0 (por defecto) y la suma sobre los 1000 árboles divididos por 1000 da la probabilidad de clase (en el caso de la clasificación binaria). Para poner un intervalo de predicción en la probabilidad, necesita modificar el mínimo. opción de tamaño de nodo (consulte la documentación aleatoria de Forest para obtener el nombre exacto de esa opción) una vez que establezca un valor >> 1, los árboles individuales generarán números entre 1 y 0. Ahora, a partir de ahora, puede repetir el mismo proceso descrito anteriormente para La tarea de regresión.
Espero que tenga sentido.
fuente
He probado algunas opciones (todo esto WIP):
De hecho, convertí la variable dependiente en un problema de clasificación con los resultados como rangos, en lugar de un solo valor. Los resultados que obtuve fueron pobres, en comparación con el uso de un valor simple. Renuncié a este enfoque.
Luego lo convertí en múltiples problemas de clasificación, cada uno de los cuales era un límite inferior para el rango (el resultado del modelo era si cruzaría el límite inferior o no) y luego ejecuté todos los modelos (~ 20), y luego combinó el resultado para obtener una respuesta final como un rango. Esto funciona mejor que 1 arriba pero no tan bueno como lo necesito. Todavía estoy trabajando para mejorar este enfoque.
Usé OOB y estimaciones de dejar uno afuera para decidir qué tan buenas / malas son mis modelos.
fuente
El problema de construir intervalos de predicción para predicciones forestales aleatorias se ha abordado en el siguiente documento:
Zhang, Haozhe, Joshua Zimmerman, Dan Nettleton y Daniel J. Nordman. "Intervalos de predicción de bosque aleatorio". El estadístico estadounidense, 2019.
El paquete R "rfinterval" es su implementación disponible en CRAN.
Instalación
Para instalar el paquete R rfinterval :
Uso
Inicio rápido:
Ejemplo de datos:
fuente