Proceso
- Librerías
- Leer los datos
- Describir y explorar los datos
- Limpiar datos
- Conjunto de entrenamiento y conjunto de validación 70%, 30%
- Determinar el modelo
- Analizar el modelo
- Realiza predicciones con conjunto de datos de validación
- Realizar predicciones con datos nuevos
- Interpretar el caso
1. Las librerías
library(readr)
library(knitr)
library(dplyr)
library(caret) # Para particionar datos
2. Leer los datos
datos <- read.csv("https://raw.githubusercontent.com/rpizarrog/FundamentosMachineLearning/master/datos/datos%20precios%20de%20casas.csv", encoding = "UTF-8")
kable(head(datos))
| 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 |
3. Explorar los 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__ ...
Sólo interesan los datos:
- Como variable dependiente:
- precio.
- Como variables independientes;
- estacioamiento, Cuántos estacionamientos
- recamaras, Cuántas recámaras
- banios, Cuántos baños
- construccion. Cantidad de metros contruidos
- terreno: Cantidad de metros
4. Limpiar datos
- Quitar columnas que no se necesitan
- Poner banio al nombre de la variable
- Poner 0 los NA en todas las variables porque no tiene estacionamiento
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
# Exportar los datos limpios
# write.csv(datos, "../datos/precio.casas.limpio.csv")
5. 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))
## 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 entrenamiento (primeros diez)
| 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)
| 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 |
6. Determinar el modelo
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
7. Analizar el modelo
8. Realizar predicciones con conjunto de datos de validación
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
- Ver los datos en una tabla
predicciones <- data.frame(datos.validacion, prediccion)
kable(predicciones)
| 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 |
9. Realizar predicciones 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"
10. Interpretar el caso
en el siguiente analisis usamos una base de datos de los precios de las casas de nuestro estado de durango. a continuacion usaremos la regresion multiple para poder trabajar o modelar los datos. podemos ver el adjusted R-SQUARE que es de .92 y tambien vemos el valor de R-squares que es de .93. podemos ver que a como este arregalada la casa o que tenga mas cosas el valor de ella sera mas costosa sobre otras