Objetivo

Construir un modelo basado en árboles de regresión y realizar predicciones

Descripción

Con los datos de precios de casas aplicar un modelo de árboles de regresión y realizar predicciones

Fundamento teórico

Los árboles de regresión/clasificación tienen como objetivo predecir la variable respuesta Y en función de covariables. (Hernández, 2020)

Los árboles de regresión permiten al igual que otros modelos de regresión predecir una variable dependiente Y en relación varias variables independentes Xs.

Proceso

  1. Cargar librerías
library(rpart)      # Arboles
library(rpart.plot) # Visualizar y represenar árboles
library(caret)      # Para llevar a cabo particiones de conjuntos de datos en caso de...
library(dplyr)      # Para select, filter, mutate, arange ....
library(readr)      # Para leer datos
library(ggplot2)    # Para grafica mas vistosas
library(reshape)    # Para renombrar columnas
library(knitr)

options(scipen = 999) # Notación normal para que no salga notación científica
  1. Cargar datos
datos <- read.csv("https://raw.githubusercontent.com/rpizarrog/FundamentosMachineLearning/master/datos/datos%20precios%20de%20casas.csv", encoding = "UTF-8")
  1. Limpiar datos
datos <- datos[,c(1,2,3,4,7,8)]
names(datos)[4] <- c("banio")

datos <- mutate(datos, estacionamientos = ifelse(is.na(estacionamientos) ,0,estacionamientos ))

datos <- mutate(datos, construccion = ifelse(is.na(construccion),mean(construccion, na.rm = TRUE),construccion ))

kable(head(datos), caption = "Los datos")
  1. Conjunto de entrenamiento y conjunto de validación 70%, 30%
set.seed(2020)
entrena <- createDataPartition(y = datos$precio, p = 0.7, list = FALSE, times = 1)

# Datos entrenamiento
datos.entrenamiento <- datos[entrena, ]  # [renglones, columna]

# Datos validación
datos.validacion <- datos[-entrena, ]

kable(head(datos.entrenamiento, 10), caption = "Datos de entrenamiento  (primeros diez)", row.names = 1:nrow(datos.entrenamiento))
kable(head(datos.validacion, 10), caption = "Datos de validación  (primeros diez)", row.names = 1:nrow(datos.entrenamiento))
  1. Generar el modelo de árbol de regresión
set.seed(2020) # Semilla

modelo <- rpart(formula = precio  ~ ., data = datos.entrenamiento)

modelo
  1. Visualizar el árbol de regresión Dibujar el árbol mediante la función prp()
prp(modelo, type = 2, nn = TRUE, 
    fallen.leaves = TRUE, faclen = 4,
    varlen = 8,  shadow.col = "gray")
  1. Predecir con datos de validación
prediccion <- predict(object = modelo, newdata =  datos.validacion)

prediccion
predicciones <- data.frame(datos.validacion, prediccion)

kable(predicciones)
  1. Predecir con nuevo registro y nuevos valores
estacionamientos <- 2
recamaras <- 3
banio <- 2
construccion <- 250
terreno = 201

nuevos.datos <- data.frame(estacionamientos=estacionamientos,recamaras=recamaras, banio=banio, construccion=construccion,terreno=terreno)

prediccion <- predict(object = modelo, 
                      newdata = nuevos.datos)
                      
                      

paste("El valor del precio predicho es: ", round(prediccion, 2))

Referencias bibliográficas Hernández, F. (2020). Modelos predictivos. https://fhernanb.github.io/libro_mod_pred/

Pizarro, R. (2020). Arboles de regresion para predecir el precio de casas en melbourne. https://rpubs.com/rpizarro/581253