Análisis de Datos Machine Learning Regresión Lineal Métodos Forward y Backward Árboles de decisión

Predicción del precio de una casa en base a sus características utilizando modelos de regresión lineal

Proyecto realizado por Mauricio Conde y Matías Zieleniec | Diciembre 2022


 
Este post se encuentra en construcción. Para información detallada por favor comunicarse a través de las vías de contacto.

Introducción


Nuestro objetivo es construir un modelo en R que nos permita predecir el precio final de una vivienda en la ciudad de Ames, en el estado de Iowa, Estados Unidos. Para ello, utilizaremos diferentes características de las viviendas como variables en nuestro modelo, (como por ejemplo tamaño del terreno, la cantidad de habitaciones, etc).


Para llevar a cabo este proyecto, hemos utilizado tres datasets de Kaggle (ver enlace). El primer dataset, train.csv, contiene información de 1459 viviendas y 80 características, incluyendo el precio final (puedes consultar este enlace para obtener más detalles sobre las variables). El segundo dataset, test.csv, incluye 1458 viviendas distintas a las del primer dataset pero con las mismas variables, a excepción el precio, pues este se que se encuentra en el dataset sample_submission.csv.


A continuación, importaremos train.csv, el dataset con el que entrenaremos nuestros modelos. Este archivo se encuentra en nuestro directorio de trabajo. Revisaremos las primeras filas y columnas para tener una mejor comprensión de los datos con los que estamos trabajando.


library(readr) 
train <- read_csv("train.csv")
train[1:5, 1:10]
## # A tibble: 5 × 10 ## Id MSSubClass MSZoning LotFr…¹ LotArea Street Alley LotSh…² LandC…³ Utili…⁴
## <dbl> <dbl> <chr> <dbl> <dbl> <chr> <chr> <chr> <chr> <chr>
## 1 1 60 RL 65 8450 Pave <NA> Reg Lvl AllPub
## 2 2 20 RL 80 9600 Pave <NA> Reg Lvl AllPub
## 3 3 60 RL 68 11250 Pave <NA> IR1 Lvl AllPub
## 4 4 70 RL 60 9550 Pave <NA> IR1 Lvl AllPub
## 5 5 60 RL 84 14260 Pave <NA> IR1 Lvl AllPub
## # … with abbreviated variable names ¹​LotFrontage, ²​LotShape, ³​LandContour,
## # ⁴​Utilities
 

Paquetes necesarios


Para poder llevar a cabo este informe utilizamos los siguientes paquetes:


library(tidyverse)
library(ggplot2)
library(dplyr)
library(cowplot) # Para calcular corplot.
library(corrplot) # Para graficar matriz de correlación.
library(leaps) # Para métodos Forward y Backward.
library(rpart) # Para árboles de decisión.
library(rpart.plot) # Para gráfico de árboles de decisión.

Análisis exploratorio


Una de las primeras preguntas que nos planteamos al abordar este problema es si existe una fuerte relación entre el año de construcción de una vivienda y su precio final. ¿Influirá el año de construcción en el precio de venta? Para responder a esta pregunta, vamos a analizar la relación entre la variable YearBuilt (año de construcción de la vivienda) y la variable SalePrice (precio de venta). Si existe una correlación, esperamos ver que a medida que la vivienda sea más nueva, su precio de venta sea mayor.


ggplot(data = train) +
    geom_point(mapping = aes(x = YearBuilt, y = SalePrice, color = SalePrice),
    show.legend = FALSE) +
    geom_smooth(mapping = aes(x = YearBuilt, y = SalePrice), color = "red") +
    ggtitle("Comparación entre año de construcción y precio de la vivienda") +
    xlab("Año de construcción") + ylab("Precio de la vivienda") +
    theme(plot.title = element_text(size=13, face="bold", hjust = 0.5))
 
ggplot(data = train) +
geom_point(mapping = aes(x = YearRemodAdd, y = SalePrice, color = SalePrice),
show.legend = FALSE) +
geom_smooth(mapping = aes(x = YearRemodAdd, y = SalePrice), color = "red") +
ggtitle("Comparación entre año de remodelación y precio de la vivienda") +
xlab("Año de remodelación") + ylab("Precio de la vivienda") +
theme(plot.title = element_text(size=13, face="bold", hjust = 0.5))
 

Al examinar de manera visual la relación entre el año de construcción de las viviendas y su precio final, podemos notar una leve tendencia. Parece que las viviendas más nuevas o recientemente remodeladas tienen un precio de venta más alto. Este no es el único factor que influye en el precio final, pero podemos ver que nuestra intuición inicial tenía algo de sentido. A continuación, vamos a profundizar en el análisis y compararemos el precio de las viviendas con el año de remodelación, dividiendo los datos por vecindario.


ggplot(data = train) +
    geom_point(mapping = aes(x = YearBuilt, y = SalePrice), color = "blue", alpha = 0.3) +
    facet_wrap(~Neighborhood) +
    geom_point(mapping = aes(x = YearRemodAdd, y = SalePrice), color = "red", alpha = 0.2) +
    facet_wrap(~Neighborhood) +
    ggtitle("Comparación por vecindarios entre precio, \n
    año de construcción (azul) y año de remodelación (rojo)") +
    xlab("Año") + ylab("Precio de la vivienda") +
    theme(plot.title = element_text(size=13, face="bold", hjust = 0.5))


 

Los vecindarios más recientes parecen tener una mayor cantidad de viviendas de alto valor. Para verificar esto, vamos a utilizar un boxplot. Además, podemos ver que las remodelaciones de las viviendas comenzaron a realizarse con mayor intensidad a partir de mediados de los a partir de mediados de los años 50.


ggplot(data = train, mapping = aes(x = fct_reorder(Neighborhood, SalePrice),
                                   y = SalePrice)) +
    geom_boxplot(color = "#145A32") +
    coord_flip() +
    ggtitle("Comparación entre vecindarios de los precios de las viviendas") +
    xlab("Vecindario") + ylab("Precio") +
    theme(plot.title = element_text(size=13, face="bold", hjust = 0.5))


 

A través del boxplot, podemos ver que la mediana del precio de venta de vecindarios relativamente nuevos, como NridgHt, es mayor que la de vecindarios con más años de actividad, como OldTown. Además, podemos ver que la mayoría de vecindarios con medianas de precios superiores a 2e+05 son vecindarios recién fundados. Sin embargo, hay excepciones a esta tendencia: MeadowV, por ejemplo, es uno de los vecindarios más nuevos pero tiene la mediana más baja de precios, mientras que Crawfor es el séptimo vecindario con la mediana más alta y no es de los más recientes en fundarse.