##Desarrollo del ejercicio para el tipo de Vivienda 1: Tipo Casa, área= 200, Parqueaderos = 1, Baños = 2, Habitaciones = 4, Estrato 4 o 5, Zona = Norte, Credito Preaprobado = 350 millones
Se marca la base de datos para obtener un filtro mas sencillo de las bases que queremos comparar. Luego, se genera un mapa para identificar si las viviendas estan localizadas en la zona que les corresponde.
## Rows: 8,322
## Columns: 13
## $ id <dbl> 1147, 1169, 1350, 5992, 1212, 1724, 2326, 4386, 1209, 159…
## $ zona <chr> "Zona Oriente", "Zona Oriente", "Zona Oriente", "Zona Sur…
## $ piso <chr> NA, NA, NA, "02", "01", "01", "01", "01", "02", "02", "02…
## $ estrato <dbl> 3, 3, 3, 4, 5, 5, 4, 5, 5, 5, 6, 4, 5, 6, 4, 5, 5, 4, 5, …
## $ preciom <dbl> 250, 320, 350, 400, 260, 240, 220, 310, 320, 780, 750, 62…
## $ areaconst <dbl> 70, 120, 220, 280, 90, 87, 52, 137, 150, 380, 445, 355, 2…
## $ parqueaderos <dbl> 1, 1, 2, 3, 1, 1, 2, 2, 2, 2, NA, 3, 2, 2, 1, 4, 2, 2, 2,…
## $ banios <dbl> 3, 2, 2, 5, 2, 3, 2, 3, 4, 3, 7, 5, 6, 2, 4, 4, 4, 3, 2, …
## $ habitaciones <dbl> 6, 3, 4, 3, 3, 3, 3, 4, 6, 3, 6, 5, 6, 2, 5, 5, 4, 3, 3, …
## $ tipo <chr> "Casa", "Casa", "Casa", "Casa", "Apartamento", "Apartamen…
## $ barrio <chr> "20 de julio", "20 de julio", "20 de julio", "3 de julio"…
## $ longitud <dbl> -76.51168, -76.51237, -76.51537, -76.54000, -76.51350, -7…
## $ latitud <dbl> 3.43382, 3.43369, 3.43566, 3.43500, 3.45891, 3.36971, 3.4…
## # A tibble: 3 × 14
## id zona piso estrato preciom areaconst parqueaderos banios habitaciones
## <dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1147 Zona O… <NA> 3 250 70 1 3 6
## 2 1169 Zona O… <NA> 3 320 120 1 2 3
## 3 1350 Zona O… <NA> 3 350 220 2 2 4
## # ℹ 5 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>,
## # base <chr>
Se muestran algunos registros de la marca de la zona norte y de tipo “Casa”
## # A tibble: 3 × 14
## id zona piso estrato preciom areaconst parqueaderos banios habitaciones
## <dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1209 Zona N… 02 5 320 150 2 4 6
## 2 1592 Zona N… 02 5 780 380 2 3 3
## 3 4057 Zona N… 02 6 750 445 NA 7 6
## # ℹ 5 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>,
## # base <chr>
Aqui viene el mapa:
Se logra observar entonces que hay algunas discrepancias en los datos de latitud y longitud dentro de la base, algunos puntos no estan bien ubicados conforme a la zona geografica identificada dentro del mapa de Cali.
Veamos como estan compuestos los datos de las viviendas tipo Casa y de la Zona Norte
## id zona piso estrato
## Min. : 58.0 Length:722 Length:722 Min. :3.000
## 1st Qu.: 766.2 Class :character Class :character 1st Qu.:3.000
## Median :2257.0 Mode :character Mode :character Median :4.000
## Mean :2574.6 Mean :4.202
## 3rd Qu.:4225.0 3rd Qu.:5.000
## Max. :8319.0 Max. :6.000
##
## preciom areaconst parqueaderos banios
## Min. : 89.0 Min. : 30.0 Min. : 1.000 Min. : 0.000
## 1st Qu.: 261.2 1st Qu.: 140.0 1st Qu.: 1.000 1st Qu.: 2.000
## Median : 390.0 Median : 240.0 Median : 2.000 Median : 3.000
## Mean : 445.9 Mean : 264.9 Mean : 2.182 Mean : 3.555
## 3rd Qu.: 550.0 3rd Qu.: 336.8 3rd Qu.: 3.000 3rd Qu.: 4.000
## Max. :1940.0 Max. :1440.0 Max. :10.000 Max. :10.000
## NA's :287
## habitaciones tipo barrio longitud
## Min. : 0.000 Length:722 Length:722 Min. :-76.59
## 1st Qu.: 3.000 Class :character Class :character 1st Qu.:-76.53
## Median : 4.000 Mode :character Mode :character Median :-76.52
## Mean : 4.507 Mean :-76.52
## 3rd Qu.: 5.000 3rd Qu.:-76.50
## Max. :10.000 Max. :-76.47
##
## latitud base
## Min. :3.333 Length:722
## 1st Qu.:3.452 Class :character
## Median :3.468 Mode :character
## Mean :3.460
## 3rd Qu.:3.482
## Max. :3.496
##
A partir de los graficos obtenidos, se pueden inferir los siguientes puntos:
Hay algunos valores con nulos en los campos parqueaderos y piso, los cuales tendran que ser tenidos en cuenta a la hora de generar el modelo.
## id zona estrato preciom areaconst banios habitaciones tipo barrio longitud
## 254 1 1 1 1 1 1 1 1 1 1
## 181 1 1 1 1 1 1 1 1 1 1
## 96 1 1 1 1 1 1 1 1 1 1
## 191 1 1 1 1 1 1 1 1 1 1
## 0 0 0 0 0 0 0 0 0 0
## latitud base parqueaderos piso
## 254 1 1 1 1 0
## 181 1 1 1 0 1
## 96 1 1 0 1 1
## 191 1 1 0 0 2
## 0 0 287 372 659
Ahora, sera necesario revisar la correlación entre la variable precio en función del área contruida, estrato, numero de baño y numero de habitaciones.
## Warning in RColorBrewer::brewer.pal(N, "Set2"): minimal value for n is 3, returning requested palette with 3 different levels
## Warning in RColorBrewer::brewer.pal(N, "Set2"): minimal value for n is 3, returning requested palette with 3 different levels
## A marker object has been specified, but markers is not in the mode
## Adding markers to the mode...
## Warning in RColorBrewer::brewer.pal(N, "Set2"): minimal value for n is 3, returning requested palette with 3 different levels
## Warning in RColorBrewer::brewer.pal(N, "Set2"): minimal value for n is 3, returning requested palette with 3 different levels
## A marker object has been specified, but markers is not in the mode
## Adding markers to the mode...
## Warning in RColorBrewer::brewer.pal(N, "Set2"): minimal value for n is 3, returning requested palette with 3 different levels
## Warning in RColorBrewer::brewer.pal(N, "Set2"): minimal value for n is 3, returning requested palette with 3 different levels
## A marker object has been specified, but markers is not in the mode
## Adding markers to the mode...
## Warning in RColorBrewer::brewer.pal(N, "Set2"): minimal value for n is 3, returning requested palette with 3 different levels
## Warning in RColorBrewer::brewer.pal(N, "Set2"): minimal value for n is 3, returning requested palette with 3 different levels
## A marker object has been specified, but markers is not in the mode
## Adding markers to the mode...
## Warning: Can only have one: highlight
## Warning: Can only have one: highlight
## Warning: Can only have one: highlight
## Warning: Can only have one: highlight
Una vez observados estos graficos, podemos establecer que:
## Step Df Deviance Resid. Df Resid. Dev AIC
## 1 NA NA 721 51926104 8076.348
## 2 + areaconst -1 27773709.6 720 24152394 7525.701
## 3 + estrato -1 5069011.9 719 19083382 7357.623
## 4 + banios -1 944488.2 718 18138894 7322.975
##
## Call:
## lm(formula = preciom ~ areaconst + estrato + habitaciones + parqueaderos +
## banios, data = viv_casas_norte)
##
## Residuals:
## Min 1Q Median 3Q Max
## -964.04 -80.10 -17.08 50.06 1069.45
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -236.47551 30.36582 -7.788 2.40e-14 ***
## areaconst 0.82677 0.04368 18.926 < 2e-16 ***
## estrato 86.42579 7.39747 11.683 < 2e-16 ***
## habitaciones 1.44443 4.16411 0.347 0.729
## parqueaderos -1.67672 4.31505 -0.389 0.698
## banios 26.97978 5.34384 5.049 5.65e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 159.1 on 716 degrees of freedom
## Multiple R-squared: 0.6508, Adjusted R-squared: 0.6484
## F-statistic: 266.9 on 5 and 716 DF, p-value: < 2.2e-16
Este modelo explica el 65% de la variación de los precios de las viviendas. En cuanto a los coeficientes de las variables predictoras:
##
## Call:
## lm(formula = preciom ~ areaconst + estrato + habitaciones + parqueaderos +
## banios, data = train_data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -396.80 -81.72 -19.07 50.02 956.76
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -257.94671 39.55593 -6.521 1.98e-10 ***
## areaconst 1.04059 0.06126 16.987 < 2e-16 ***
## estrato 81.09851 9.60019 8.448 4.71e-16 ***
## habitaciones 9.32165 5.48172 1.700 0.0898 .
## parqueaderos -8.62167 5.45830 -1.580 0.1150
## banios 17.64544 6.89589 2.559 0.0108 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 158.8 on 427 degrees of freedom
## Multiple R-squared: 0.683, Adjusted R-squared: 0.6793
## F-statistic: 184 on 5 and 427 DF, p-value: < 2.2e-16
Los resultados del entrenamiento arrojan variaciones representativas en comparacion al modelo original creado: - el area construida y estrato se mantienen como determinantes al buscar una relación entre el precio de la vivienda - los baños podrian considerarse como una variable no tan significante. - este modelo explicaria el 68.3% de las variaciones en el precio de la vivienda.
Considero que los resultados son logicos, si bien en el modelo original el numero de baós constituye una variable representativa, en la vida real esta variable no es determinante para incidir en el precio de una vivienda.
Probando otra validacion tomando 100 iteraciones:
##
## Call:
## lm(formula = preciom ~ areaconst + estrato + habitaciones + parqueaderos +
## banios, data = train_data_subset)
##
## Residuals:
## Min 1Q Median 3Q Max
## -359.50 -80.95 -14.91 45.04 1029.63
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -239.68016 38.43396 -6.236 1.08e-09 ***
## areaconst 0.91745 0.05674 16.171 < 2e-16 ***
## estrato 84.68179 9.21771 9.187 < 2e-16 ***
## habitaciones 5.93870 5.06267 1.173 0.24143
## parqueaderos 3.59451 5.46299 0.658 0.51091
## banios 16.73154 6.43813 2.599 0.00968 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 152.4 on 427 degrees of freedom
## Multiple R-squared: 0.678, Adjusted R-squared: 0.6742
## F-statistic: 179.8 on 5 and 427 DF, p-value: < 2.2e-16
No hay variaciones mayores respecto a los dos modelos de validación. El rango de explicaciones de las variables predictoras si cambia respecto al modelo original de manera importante, pero la incidencia de las variables area, estrato y baños se mantiene. Este ultimo modelo explicaria el 67.8% de las variaciones de precio en las viviendas.
Al validar los valores residuales, en el primer grafico se debería mostrar una completa aleatoriedad porque se espera que los residuales no tengan ningún comportamiento, como se observa en este caso, lo que quiere decir que los residuales tienen una componente sistemática que podría incorporarse. En el grafico de normalidad, donde se debería distinguir una distribución normal, existe un pedazo muy pequeño al inicio y, sobre todo, al final que se salen de este comportamiento.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
##
## ORDINARY NONPARAMETRIC BOOTSTRAP
##
##
## Call:
## boot(data = viv_casas_norte, statistic = fun_coeficientes, R = 9999)
##
##
## Bootstrap Statistics :
## original bias std. error
## t1* -236.475512 2.48414327 31.7212000
## t2* 0.826774 0.00649065 0.1101651
## t3* 86.425791 -0.75739537 9.4138148
## t4* 1.444431 -0.05359858 5.2068291
## t5* -1.676721 -0.02158661 5.4454510
## t6* 26.979782 -0.25937400 7.4784679
En este caso, algunos coeficientes tienen un sesgo cercano a cero, lo que sugiere que las estimaciones son relativamente imparciales. Los errores estándar varían para cada coeficiente, lo que indica diferentes niveles de precisión en las estimaciones, sin embargo, en general los errores estándar son relativamente bajos.
Se generan los grupos de datasets necesario para ser operados por el modelo construido y se genera una salida:
## [1] "Precio de la casa de estrato 4: 331.928809541603 ; Precio de la casa de estrato 5: 417.197357631102"
Se obtiene que entonces hay vviendas de estrato 4 con precio al rededor de 332 millones de pesos, lo cual estaría dentro del presupuesto de credito preaprobado.
## # A tibble: 11 × 14
## id zona piso estrato preciom areaconst parqueaderos banios habitaciones
## <dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 3889 Zona … 01 4 520 350 1 2 4
## 2 1222 Zona … 02 4 360 216 2 2 4
## 3 1822 Zona … <NA> 4 340 295 2 2 4
## 4 403 Zona … 02 5 780 500 2 2 4
## 5 3121 Zona … 02 5 580 247 3 2 4
## 6 2847 Zona … <NA> 5 500 320 2 2 4
## 7 1163 Zona … <NA> 5 350 216 2 2 4
## 8 2557 Zona … <NA> 5 900 850 1 2 4
## 9 4555 Zona … <NA> 5 550 200 3 2 4
## 10 4548 Zona … 02 5 850 296 4 2 4
## 11 1943 Zona … <NA> 5 350 346 1 2 4
## # ℹ 5 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>,
## # base <chr>
Hay 3 ofertas que tienen un precio menor o igual a 350 millones de pesos y que, además, tienen al menos 1 parqueadero (hay dos ofertas que tienen 2 parqueaderos y un área mayor al requerido). Las demas ofertas sobrepasan el valor, pero aumentan considerablemente el área construida. En el mapa, podemos visualizar con rojo las tres mejores opciones para el cliente: