Decision tree

Los árboles de decisión son útiles para entender la estructura de un conjunto de datos. Sirven para resolver problemas tanto de clasificación (predecir una variable discreta, típicamente binaria) como de regresión (predecir una variable continua). Se trata de modelos excesivamente simples pero, y ahí reside fundamentalmente su interés, fácilmente interpretables.

Ejemplo

En este ejemplo lo que veremos es como poder predecir utilizando un árbol de decisión y como clasificar los datos de los sobrevivientes del titanic.

Librerías

library(tidyverse)
## -- Attaching packages --------------------------------------- tidyverse 1.3.1 --
## v ggplot2 3.3.5     v purrr   0.3.4
## v tibble  3.1.4     v dplyr   1.0.7
## v tidyr   1.1.4     v stringr 1.4.0
## v readr   2.0.1     v forcats 0.5.1
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
library(titanic)
## Warning: package 'titanic' was built under R version 4.1.3
library(rpart)
library(rattle)
## Warning: package 'rattle' was built under R version 4.1.3
## Loading required package: bitops
## Rattle: A free graphical interface for data science with R.
## Versión 5.5.1 Copyright (c) 2006-2021 Togaware Pty Ltd.
## Escriba 'rattle()' para agitar, sacudir y  rotar sus datos.
library(rpart.plot)
## Warning: package 'rpart.plot' was built under R version 4.1.3
library(pacman)
## Warning: package 'pacman' was built under R version 4.1.2
p_load("prettydoc", "DT", "xfun")

Leer y preparar datos

data <- data("titanic_train")

Creación del modelo

Se crea el modelo a partir de las variables Edad y Sexo para clasificar a los sobrevivientes

arbol <- rpart(
  formula = Survived ~ Sex + Age, data = titanic_train,
  method = 'clas'
)

Gráficando el modelo

fancyRpartPlot(arbol)

El 1 en los nodos significa que es el valor que más se repite, es decir en el primer noddo hubo menos sobrevivientes que muertos. En la primera condición se pregunta si el género es masculino, si no lo es se predice como sobreviviente, el 35% que se muestra en el nodo 3 significa que el 35% de los datos. Si el sexo es masculino se va al nodo 2 y ese se intrepreta como que el 81% de los hombres no sobreviven y a ese nodo le pertenecen el 65% de los datos. Después de decidor por el sexo, la decisión se tomará por la edad, en caso de ser mayor o igual a 6.5 años se tiene que el 83% no sobrevive, y si la edad es menor a 6.5 el 67% sobrevive.

Prediciendo con el árbol

pred_arbol <- predict(arbol,type = 'class')
titanic_pred <- cbind(titanic_train,pred_arbol)
datatable(titanic_pred)

Se puede observar en la ultima columna de la tabla que basado en la edad y el sexo de los pasajeros se puede predecir si una persona sobrevive o no, en la primera fila se observa que la persona no sobrevive puesto que es masculino y de edad de 22 años, pero en la segunda columna es femenimo y resulta sobreviviente.

Prediciendo si un pasajero femenino sobrevive

predict(object = arbol,newdata = data.frame(Age = 22,Sex='female'),type = 'class')
## 1 
## 1 
## Levels: 0 1

Conclusión

Utilizando este modelo de aprendizaje supervisado a través de la clasificación y regresión pudimos predecir y observar como fue la clasificación de sobrevivientes del accidente del titanic. Si bien el modelo no es 100% seguro, se pudo observar que el error que se tiene es bastante pequeño, por lo que, si se puede predecir utilizando este método de aprendizaje.