Árboles [rpart]

Paso 1: Entendimiento del negocio

1.1. Determinar el objetivo del negocio.

El objetivo de la minería de datos que se aplica para este proyecto es el clasificar si los pacientes cuentan con un cáncer benigno o maligno del, con el fin de poder predecir evaluando esta diagnosis general. Basándose en mediciones ya adquiridas en el conjunto de los datos.

1.2. Evaluar la situación actual.

Se consiguió el conjunto de datos de kaggle, en el cual fue descargado y publicado en github, para mayor facilidad de acceso, para poder evaluar lo que se necesita. Por lo que a priori se puede afirmar que se dispone de una cantidad de datos más que suficiente para poder resolver el problema. Esta información incluye: mediciones generales del cáncer, que vendrían a ser los tumores generados, el radio, el área, etc, las cuales serán útiles a la hora de aplicar la minería de datos.

1.3. Determinar el objetivo de la minería de datos.

Los objetivos en términos de minería de datos son:

  • Hacer uso de las herramientas de clasificación que binda la minería de datos.

  • Predecir a partir de un diagnostico general si un paciente cuenta con un cáncer benigno o maligno.

  • Comprobar con técnicas de predicción operaciones relacionadas con los pacientes del hospital.

1.4. Realizar un plan de proyecto.

El proyecto estará dividido mediante las siguientes etapas, con la finalidad de facilitar la organización de este mismo:

  • Etapa 1: Análisis de la estructura de los datos y la información de la base de datos.

  • Etapa 2: Ejecución de consultas para tener muestras representativas de los datos.

  • Etapa 3: Preparación de los datos (selección, limpieza, conversión y formateo, si fuera necesario).

  • Etapa 4: Elección de las técnicas de modelado y ejecución de las mismas sobre los datos.

  • Etapa 5: Análisis de los resultados obtenidos en la etapa anterior, si fuera necesario repetir la etapa 4.

  • Etapa 6: Producción de informes con los resultados obtenidos en función de los objetivos de negocio y los criterios de éxito establecidos.

  • Etapa 7: Presentación de los resultados finales.

Paso 2: Entendimiento de la data

2.1. Información inicial de la data

  • Carga de datos formato csv.
data <- read.csv("https://raw.githubusercontent.com/cnahuina/data-mineria/master/dataCancerFinal2.csv")
data <- data[,2:8]
  • Verificamos la carga, visualizando la estructura inical de las variables de manera general.

De acuerdo a ello se visualiza lo siguiente:

str(data)
## 'data.frame':    569 obs. of  7 variables:
##  $ PC1      : num  -9.29 -2.84 -6.79 -5.49 -4.93 ...
##  $ PC2      : num  -1.97 4.31 1.3 -7.33 2.08 ...
##  $ PC3      : num  1.355 0.628 0.266 1.655 -1.465 ...
##  $ PC4      : num  -3.546 -1.179 -1.153 0.371 -3.635 ...
##  $ PC5      : num  -1.5285 0.0643 -0.6834 0.1112 0.1196 ...
##  $ PC6      : num  -1.5151 0.0216 -0.6836 -1.2302 1.563 ...
##  $ Diagnosis: chr  "M" "M" "M" "M" ...
  • Cambio de la variable data.diagnosis como factor
data$Diagnosis <- as.factor(data$Diagnosis)

2.2. Información inicial de la data

Variables:

Variables Descripción de variables
Id Identificador del paciente
diagnosis El diagnóstico de los pacientes “B” [Benigno] y “M” [Maligno]
PC1 Componente 1
PC2 Componente 2
PC3 Componente 3
PC4 Componente 4
PC5 Componente 5
PC6 Componente 6

Este análisis tiene como objetivo observar qué características son más útiles para predecir el cáncer maligno o benigno y ver las tendencias generales que pueden ayudarnos en la selección del modelo y la selección de hiperparámetros en el análisis futuro.

3.3. Construir data

  • Detallamos las librerías que haremos uso
# install.packages("caret")
library(caret)
# install.packages("rpart")
library(rpart)
# install.packages("partykit")
library(partykit)
# install.packages("ROCR")
library(ROCR)
  • Establecemos una semilla
set.seed(2018)
  • Hacemos las particiones respectivas para hacer uso de la función.
training.ids <- createDataPartition(data$Diagnosis, p = 0.7, list = F)
test <- data[-training.ids,]

dim(test)
## [1] 170   7

Paso 4: Modelamiento

  1. Se establecen los valores por defecto de minsplit y cp, a modo inicial. Luego se realizaran variaciones.
mod <- rpart(Diagnosis ~ . , 
             data = data[training.ids,],
             method = "class", 
             control = rpart.control(minsplit = 20, cp = 0.01))
mod
## n= 399 
## 
## node), split, n, loss, yval, (yprob)
##       * denotes terminal node
## 
##  1) root 399 149 B (0.62656642 0.37343358)  
##    2) PC1>=-0.8810513 264  22 B (0.91666667 0.08333333)  
##      4) PC1>=0.9136768 210   4 B (0.98095238 0.01904762) *
##      5) PC1< 0.9136768 54  18 B (0.66666667 0.33333333)  
##       10) PC2< 1.201075 39   7 B (0.82051282 0.17948718) *
##       11) PC2>=1.201075 15   4 M (0.26666667 0.73333333) *
##    3) PC1< -0.8810513 135   8 M (0.05925926 0.94074074) *
  • Se realiza la gráfica para poder visualizar el modelo de mejor manera
plot(as.party(mod))

Paso 5: Evaluación

  • Predecimos la data haciendo comparación con la data test.
mod.pred <- predict(mod, test, type="class")
mod.pred.ba <- predict(mod, test, type="prob")
  • Hacemos de la función table para poder visualizar de mejor manera los valores Actuales y predichos.
table <- table(test$Diagnosis,mod.pred, dnn = c("Actual", "Predicho"))
table
##       Predicho
## Actual  B  M
##      B 99  8
##      M  4 59

Para el diagrama ROC del modelo básico

Curva ROC <- proporciona la fiabilidad en la clasificación dada.

  1. 1ro objeto pred, se tiene la funcion prediction, de la segunda columna en la cual visualizamos los éxitos. En referencia al código anterior.

  2. 2do evaluamos la performance para evaluar la eficiencia.

pred1 <- prediction(mod.pred.ba[,2], data[-training.ids, "Diagnosis"])
perf1 <- performance(pred1, "tpr", "fpr")
  • Realizamos la gráfica.
plot(perf1,  main="Curva ROC del modelo Rpart-árbol")
lines(par()$usr[1:2],par()$usr[3:4])

  • Hacemos uso de la función “confusionMatrix”, la cual es una herramienta que permite la visualización del desempeño del modelo que se ha empleado con anterioridad.
medida <- confusionMatrix(mod.pred, test$Diagnosis)
medida
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction  B  M
##          B 99  4
##          M  8 59
##                                          
##                Accuracy : 0.9294         
##                  95% CI : (0.8799, 0.963)
##     No Information Rate : 0.6294         
##     P-Value [Acc > NIR] : <2e-16         
##                                          
##                   Kappa : 0.8506         
##                                          
##  Mcnemar's Test P-Value : 0.3865         
##                                          
##             Sensitivity : 0.9252         
##             Specificity : 0.9365         
##          Pos Pred Value : 0.9612         
##          Neg Pred Value : 0.8806         
##              Prevalence : 0.6294         
##          Detection Rate : 0.5824         
##    Detection Prevalence : 0.6059         
##       Balanced Accuracy : 0.9309         
##                                          
##        'Positive' Class : B              
## 
  1. Hallamos el accuracy.
acc <- (99+59)/170
acc
## [1] 0.9294118
  1. Hallamos el error del modelo.
error_rate <- 1 - acc
error_rate
## [1] 0.07058824