sábado, 21 de febrero de 2015

Curva ROC de un Arbol de Decision

Si se tiene un Árbol de Decisión y se quiere hacer una curva ROC para saber qué tan bien predice los casos negativos y  positivos a medida que se van agregando las reglas del arbol, puede usarse la función asRules (del package rattle) para mostrar las reglas del modelo y usarlas para crear la curva ROC, teniendo algo como:







Para la curva ROC, los datos finales quedan así:





Para esta curva se ordenan los nodos por el % de verdaderos positivos de forma descendente, de tal suerte que el nodo con mejor desempeño, sea el primer punto en la curva de izquierda a derecha. Luego se acumulan los valores para ambos ejes, donde:
el eje x = especificidad ó el % acumulado de verdaderos negativos que cada regla captura.
el eje y = sensibilidad ó el % acumulado de verdaderos positivos identificados en cada regla.

Al acumularlos se puede visualizarse el aporte que hace cada regla al modelo, permitiendo identificar si una regla mejora o empeora el modelo predictivo.

Esta curva es sobre los datos de Entrenamiento (Train). Para una curva sobre los datos de TEST ver nota sobre package ROCR publicada AQUI.



# Ejemplo para Curva ROC
 
#------------------------------------------------------------------------------
# PASO 1. Carga libreria y define datos de TRAIN y TEST
library(rpart)  # para arbol decision
library(rattle) # para data set, y grafico de arbol decision
 
datos         <- weather
datos         <- within(datos, rm("Date","Location","RISK_MM")) #borra columnas dummy
set.seed(42)  #  fija la secuencia de numeros aleatorios
sampleTrain   <- sample(nrow(datos),(nrow(datos)*.6)) 
Train         <- datos[sampleTrain,]
Test          <- datos[-sampleTrain,]
 
#------------------------------------------------------------------------------
# PASO 2. Crea el modelo predicitivo 
modelo.rpart  <- rpart(RainTomorrow ~ .,
                       data=Train,
                       method="class",
                       parms=list(split="information"))
 
#------------------------------------------------------------------------------
# PASO 3. crea Grafico Arbol Decisión y muestra las reglas
fancyRpartPlot(modelo.rpart)
asRules(modelo.rpart)


El excel con las notas puede descargarse AQUI

Referencia:
1.http://es.wikipedia.org/wiki/Curva_ROC
2. http://rstudio-pubs-static.s3.amazonaws.com/9572_0d220ef7b80f4f96b384e3a229b8451b.html
3.https://www.youtube.com/watch?v=gYIlKUP2hk0


2 comentarios:

  1. Te dejo una función de R que crea el gráfico en ggplot2 y te devuelve el área bajo la curva https://github.com/lucpogo/R/blob/master/ROC.r

    ResponderEliminar
  2. hola Lucas
    Se ve interesante la matriz final con el aporte de cada regla. Lo estaré probando y luego te comento.

    Gracias!!

    ResponderEliminar