Cargar librerias

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(knitr)
library(readr)
library(caret)
## Warning: package 'caret' was built under R version 4.0.3
## Loading required package: lattice
## Loading required package: ggplot2
library(ggplot2)
datos <- read.csv("https://raw.githubusercontent.com/rpizarrog/FundamentosMachineLearning/master/datos/datos%20precios%20de%20casas.csv", encoding = "UTF-8")
kable(head(datos))
precio estacionamientos recamaras ba.f1.os habitaciones agnio.construccion construccion terreno calle.domicilio colonia.fraccionamiento ciudad descripcion
1780000 2 3 2 5 2020 169 126 Privada San Fernanda San Fernando- Durango Durango Ubicadas en la salida Mazatln- stas casas de tres habitaciones- estn dentro del residencial privado San Fernanda- mismo que cuenta con caseta de vigilancia-…
650000 1 3 1 4 NA 90 90 Prolongacin Jos Mara Pino Surez Centro Durango Casa un piso 3 recamaras 2 baos boiler solar y de paso cochera patio cisterna todos los servicios ambiente familiar….todo cerca- mucho transporte.- buenos servicios.
590000 2 2 2 4 NA 63 90 Centro Centro Durango Casa un piso bonita 3 recamaras 2 baos ambiente familiar boiler solar y de paso cochera todos los servicios
1300000 2 3 2 5 NA 130 120 Centro Centro Durango Casa en venta nueva reas verdes casa en dos plantas diseo moderno acabados de primera- cuenta con 3 recamaras con closets- cocina equipada acero inoxidable-2 baos y medio- terraza- patio amplio jardn rea de servicio hidro gas estacionario cisterna cristales tintex de primera cochera dos autos bonita zona ambiente familiar aplican todos los creditos
1000000 2 2 1 3 NA 110 160 Centro Centro Durango Bonita casa en dos pisos diseo moderno 3 recamras 2 baos y medio cochera todos los servicios ambiente familiar se aceptan todos los creditos
465000 2 3 1 4 NA 53 89 Centro Centro Durango Bonita casa con 2 recamras un bao boiler solar patio jardin cochera diseo moderno

Explorar datos

summary(datos)
##      precio        estacionamientos   recamaras        ba.f1.os    
##  Min.   : 462000   Min.   :0.000    Min.   :1.000   Min.   :1.000  
##  1st Qu.: 655000   1st Qu.:0.000    1st Qu.:2.000   1st Qu.:1.000  
##  Median :1000000   Median :1.000    Median :3.000   Median :2.000  
##  Mean   :1514383   Mean   :1.125    Mean   :2.824   Mean   :1.706  
##  3rd Qu.:1938500   3rd Qu.:2.000    3rd Qu.:3.000   3rd Qu.:2.000  
##  Max.   :8200000   Max.   :3.000    Max.   :5.000   Max.   :4.000  
##                    NA's   :3                                       
##   habitaciones   agnio.construccion  construccion       terreno     
##  Min.   :2.000   Min.   :1995       Min.   : 47.00   Min.   : 47.0  
##  1st Qu.:4.000   1st Qu.:2020       1st Qu.: 75.75   1st Qu.: 90.0  
##  Median :4.500   Median :2020       Median :131.00   Median :126.0  
##  Mean   :4.569   Mean   :2017       Mean   :151.12   Mean   :148.7  
##  3rd Qu.:5.000   3rd Qu.:2020       3rd Qu.:169.75   3rd Qu.:166.0  
##  Max.   :8.000   Max.   :2020       Max.   :606.00   Max.   :512.0  
##                  NA's   :26         NA's   :1                       
##  calle.domicilio    colonia.fraccionamiento    ciudad         
##  Length:51          Length:51               Length:51         
##  Class :character   Class :character        Class :character  
##  Mode  :character   Mode  :character        Mode  :character  
##                                                               
##                                                               
##                                                               
##                                                               
##  descripcion       
##  Length:51         
##  Class :character  
##  Mode  :character  
##                    
##                    
##                    
## 
str(datos)
## 'data.frame':    51 obs. of  12 variables:
##  $ precio                 : int  1780000 650000 590000 1300000 1000000 465000 780000 464520 660000 580000 ...
##  $ estacionamientos       : int  2 1 2 2 2 2 2 0 0 NA ...
##  $ recamaras              : int  3 3 2 3 2 3 1 2 3 3 ...
##  $ ba.f1.os               : num  2 1 2 2 1 1 1 1 1 1 ...
##  $ habitaciones           : num  5 4 4 5 3 4 2 3 4 4 ...
##  $ agnio.construccion     : int  2020 NA NA NA NA NA 2020 2020 2020 2020 ...
##  $ construccion           : num  169 90 63 130 110 53 84 47 73 65 ...
##  $ terreno                : num  126 90 90 120 160 89 90 98 112 103 ...
##  $ calle.domicilio        : chr  "Privada San Fernanda" "Prolongaci<f3>n Jos<e9> Mar<ed>a Pino Su<e1>rez" "Centro" "Centro" ...
##  $ colonia.fraccionamiento: chr  "San Fernando- Durango" "Centro" "Centro" "Centro" ...
##  $ ciudad                 : chr  "Durango" "Durango" "Durango" "Durango" ...
##  $ descripcion            : chr  "Ubicadas en la salida Mazatl<e1>n- <e9>stas casas de tres habitaciones- est<e1>n dentro del residencial privado"| __truncated__ "Casa un piso 3 recamaras 2 ba<f1>os boiler solar y de paso cochera patio cisterna todos los servicios ambiente "| __truncated__ "Casa un piso bonita 3 recamaras 2 ba<f1>os ambiente familiar boiler solar y de paso cochera todos los servicios" "Casa en venta nueva <e1>reas verdes casa en dos plantas dise<f1>o moderno acabados de primera- cuenta con 3 rec"| __truncated__ ...

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 ))


head(datos)
##    precio estacionamientos recamaras banio construccion terreno
## 1 1780000                2         3     2          169     126
## 2  650000                1         3     1           90      90
## 3  590000                2         2     2           63      90
## 4 1300000                2         3     2          130     120
## 5 1000000                2         2     1          110     160
## 6  465000                2         3     1           53      89

Crear datos entrenamiento y validación

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

datos.entrenamiento <- datos[entrena, ] 

datos.validacion <- datos[-entrena, ]

kable(head(datos.entrenamiento, 10), caption =  "(primeros diez)", row.names = 1:nrow(datos.entrenamiento))
## Warning in if (is.na(row.names)) row.names = has_rownames(x): la condición tiene
## longitud > 1 y sólo el primer elemento será usado
## Warning in if (row.names) {: la condición tiene longitud > 1 y sólo el primer
## elemento será usado
(primeros diez)
precio estacionamientos recamaras banio construccion terreno
2 650000 1 3 1 90 90
3 590000 2 2 2 63 90
4 1300000 2 3 2 130 120
5 1000000 2 2 1 110 160
7 780000 2 1 1 84 90
8 464520 0 2 1 47 98
10 580000 0 3 1 65 103
11 1550000 2 3 2 155 126
12 640000 0 2 1 NA 90
14 480000 0 2 1 53 90
kable(head(datos.validacion, 10), caption = "Datos de validación  (primeros diez)", row.names = 1:nrow(datos.entrenamiento))
## Warning in if (is.na(row.names)) row.names = has_rownames(x): la condición tiene
## longitud > 1 y sólo el primer elemento será usado
## Warning in if (row.names) {: la condición tiene longitud > 1 y sólo el primer
## elemento será usado
Datos de validación (primeros diez)
precio estacionamientos recamaras banio construccion terreno
1 1780000 2 3 2.0 169.00 126
6 465000 2 3 1.0 53.00 89
9 660000 0 3 1.0 73.00 112
13 2350000 2 3 2.5 194.56 203
16 1000000 2 3 2.0 110.00 120
23 660000 0 3 1.0 73.00 112
25 1750000 1 3 2.0 154.00 130
32 2100000 0 4 2.0 151.00 151
34 640000 1 2 1.0 60.00 90
35 462000 1 2 1.0 47.00 90

Modelo de Regresion Multiple

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


summary(modelo)
## 
## Call:
## lm(formula = precio ~ ., data = datos.entrenamiento)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -943487 -164375   38426  201582 1255070 
## 
## Coefficients:
##                  Estimate Std. Error t value Pr(>|t|)    
## (Intercept)       -980740     287915  -3.406 0.001840 ** 
## estacionamientos   -75542      85311  -0.885 0.382714    
## recamaras          -73962     110674  -0.668 0.508896    
## banio              599112     145930   4.105 0.000272 ***
## construccion         1786       1663   1.074 0.291058    
## terreno              9738       1719   5.666 3.18e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 417700 on 31 degrees of freedom
##   (1 observation deleted due to missingness)
## Multiple R-squared:  0.9332, Adjusted R-squared:  0.9225 
## F-statistic: 86.68 on 5 and 31 DF,  p-value: < 2.2e-16

Prediccion del conjunto de datos de validacion

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

prediccion
##         1         6         9        13        16        23        25        32 
## 1373425.4  206790.9  617581.9 2468495.1 1209608.0  617581.9 1461127.3 1661854.7 
##        34        35        45        49        51 
##  378536.5  355315.7 1085880.3  916617.4 2928514.4
predicciones <- data.frame(datos.validacion, prediccion)

kable(predicciones)
precio estacionamientos recamaras banio construccion terreno prediccion
1 1780000 2 3 2.0 169.00 126 1373425.4
6 465000 2 3 1.0 53.00 89 206790.9
9 660000 0 3 1.0 73.00 112 617581.9
13 2350000 2 3 2.5 194.56 203 2468495.1
16 1000000 2 3 2.0 110.00 120 1209608.0
23 660000 0 3 1.0 73.00 112 617581.9
25 1750000 1 3 2.0 154.00 130 1461127.3
32 2100000 0 4 2.0 151.00 151 1661854.7
34 640000 1 2 1.0 60.00 90 378536.5
35 462000 1 2 1.0 47.00 90 355315.7
45 960000 1 3 2.0 162.00 90 1085880.3
49 1200000 1 3 1.5 115.00 112 916617.4
51 3450000 2 3 2.0 200.00 280 2928514.4

Prediccion con datos nuevos

estacionamientos banio recamaras construccion terreno

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))
## [1] "El valor del precio predicho es:  2248490.41"

Interpretacion del caso

El caso es muy importante y util en el sentido de que la compra-venta de casas es algo escencial y se mueve bastante.

Al ser datos reales de la ciudad de durango resulta demasiado util para alguna empresa que se dedique a las bienes raices para planificar, organizar y analizar los posibles costos de las casas por medio de las variables importantes.

Facilita el analizar distintas situaciones que ayudarian a encontrar mas rapido las ventas de casas, con una estadistica importante para sacar presupuestos.

Esto puede ser un crecimiento para las empresas duranguenses que trabajan con bienes raices para implementar nuevas tecnologias a su manera de vender y analizar presupuestos.

Facilita el trabajo de los empleados en cierto punto, con la capacidad de imprementarse en un software amigable para la empresa.