##Desarrollo del ejercicio para el tipo de Vivienda 2: Tipo = Apartamento, área= 300, Parqueaderos = 3, Baños = 3, Habitaciones = 5, Estrato 5 o 6, Zona = Sur, Credito Preaprobado = 850 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: 5 × 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
## 4 5992 Zona S… 02 4 400 280 3 5 3
## 5 1212 Zona N… 01 5 260 90 1 2 3
## # ℹ 5 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>,
## # base <chr>
Se muestran algunos registros de la marca de la zona sur y de tipo “Apartamento”
## # A tibble: 3 × 14
## id zona piso estrato preciom areaconst parqueaderos banios habitaciones
## <dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 5098 Zona S… 05 4 290 96 1 2 3
## 2 698 Zona S… 02 3 78 40 1 1 2
## 3 8199 Zona S… <NA> 6 875 194 2 5 3
## # ℹ 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 Apartamento y de la Zona Sur
## id zona piso estrato
## Min. : 3 Length:2787 Length:2787 Min. :3.00
## 1st Qu.:2292 Class :character Class :character 1st Qu.:4.00
## Median :4004 Mode :character Mode :character Median :5.00
## Mean :4131 Mean :4.63
## 3rd Qu.:5876 3rd Qu.:5.00
## Max. :8302 Max. :6.00
##
## preciom areaconst parqueaderos banios
## Min. : 75.0 Min. : 40.00 Min. : 1.000 Min. :0.000
## 1st Qu.: 175.0 1st Qu.: 65.00 1st Qu.: 1.000 1st Qu.:2.000
## Median : 245.0 Median : 85.00 Median : 1.000 Median :2.000
## Mean : 297.3 Mean : 97.47 Mean : 1.415 Mean :2.488
## 3rd Qu.: 335.0 3rd Qu.:110.00 3rd Qu.: 2.000 3rd Qu.:3.000
## Max. :1750.0 Max. :932.00 Max. :10.000 Max. :8.000
## NA's :406
## habitaciones tipo barrio longitud
## Min. :0.000 Length:2787 Length:2787 Min. :-76.57
## 1st Qu.:3.000 Class :character Class :character 1st Qu.:-76.54
## Median :3.000 Mode :character Mode :character Median :-76.53
## Mean :2.966 Mean :-76.53
## 3rd Qu.:3.000 3rd Qu.:-76.52
## Max. :6.000 Max. :-76.46
##
## latitud base
## Min. :3.334 Length:2787
## 1st Qu.:3.370 Class :character
## Median :3.383 Mode :character
## Mean :3.390
## 3rd Qu.:3.406
## Max. :3.497
##
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
## 1860 1 1 1 1 1 1 1 1 1 1
## 521 1 1 1 1 1 1 1 1 1 1
## 305 1 1 1 1 1 1 1 1 1 1
## 101 1 1 1 1 1 1 1 1 1 1
## 0 0 0 0 0 0 0 0 0 0
## latitud base parqueaderos piso
## 1860 1 1 1 1 0
## 521 1 1 1 0 1
## 305 1 1 0 1 1
## 101 1 1 0 0 2
## 0 0 406 622 1028
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 2786 102222866 29293.22
## 2 + areaconst -1 58732885.4 2785 43489980 26913.38
## 3 + estrato -1 12599342.2 2784 30890638 25962.01
## 4 + parqueaderos -1 3375404.7 2783 27515234 25641.51
## 5 + banios -1 1919297.5 2782 25595936 25442.00
## 6 + habitaciones -1 405477.7 2781 25190458 25399.49
##
## Call:
## lm(formula = preciom ~ areaconst + estrato + habitaciones + parqueaderos +
## banios, data = viv_aptos_sur)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1252.31 -42.15 -2.06 36.32 934.06
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -221.04614 13.47771 -16.401 < 2e-16 ***
## areaconst 1.46061 0.04876 29.956 < 2e-16 ***
## estrato 57.00608 2.79648 20.385 < 2e-16 ***
## habitaciones -22.71789 3.39549 -6.691 2.68e-11 ***
## parqueaderos 48.36353 3.02343 15.996 < 2e-16 ***
## banios 48.60871 3.04050 15.987 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 95.17 on 2781 degrees of freedom
## Multiple R-squared: 0.7536, Adjusted R-squared: 0.7531
## F-statistic: 1701 on 5 and 2781 DF, p-value: < 2.2e-16
Este modelo explica el 75% de la variación de los precios de las viviendas. En cuanto a los coeficientes de las variables predictoras:
Ademas, se determina que basicamente todas las variables tienen una incidencia importante en el modelo.
##
## Call:
## lm(formula = preciom ~ areaconst + estrato + habitaciones + parqueaderos +
## banios, data = train_data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -813.79 -42.62 -0.03 37.59 836.17
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -192.71242 16.74950 -11.506 <2e-16 ***
## areaconst 2.14418 0.07374 29.077 <2e-16 ***
## estrato 54.10685 3.45563 15.658 <2e-16 ***
## habitaciones -35.62569 4.26107 -8.361 <2e-16 ***
## parqueaderos 39.48148 3.88106 10.173 <2e-16 ***
## banios 37.12983 3.87625 9.579 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 91 on 1666 degrees of freedom
## Multiple R-squared: 0.7939, Adjusted R-squared: 0.7933
## F-statistic: 1284 on 5 and 1666 DF, p-value: < 2.2e-16
Los resultados del entrenamiento no arrojan variaciones representativas en comparacion al modelo original creado: - todas las variables se mantienen como determinantes al buscar una relación entre el precio de la vivienda - se mantienen los valores inconsistentes en el estimado para las habitaciones - este modelo explicaria el 79.4% de las variaciones en el precio de la vivienda.
Considero que los resultados son logicos, excepto por el de las habitaciones. Creo que es necesario ajustar los valores aqui relacionados.
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
## -1143.30 -44.27 -3.59 36.01 944.91
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -213.36329 18.29723 -11.661 < 2e-16 ***
## areaconst 1.32723 0.06469 20.515 < 2e-16 ***
## estrato 58.13381 3.81683 15.231 < 2e-16 ***
## habitaciones -28.21479 4.51893 -6.244 5.41e-10 ***
## parqueaderos 51.51719 3.95470 13.027 < 2e-16 ***
## banios 53.71240 4.14191 12.968 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 100.5 on 1666 degrees of freedom
## Multiple R-squared: 0.7343, Adjusted R-squared: 0.7335
## F-statistic: 920.8 on 5 and 1666 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 se mantiene. Este ultimo modelo explicaria el 73.43% 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 al inicio y 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_aptos_sur, statistic = fun_coeficientes, R = 9999)
##
##
## Bootstrap Statistics :
## original bias std. error
## t1* -221.046145 2.76350948 17.5377848
## t2* 1.460612 0.06023138 0.3238293
## t3* 57.006076 -0.47797569 3.5252884
## t4* -22.717887 -0.69905626 5.7761046
## t5* 48.363531 -0.82720331 7.2144342
## t6* 48.608712 -1.30101427 7.5330439
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 los apartamentos de estrato 5: 679.495118573595 ; Precio de los apartamentos de estrato 6: 736.501195048086"
Se obtiene que entonces hay viviendas de estrato 5 con precio al rededor de 680 millones de pesos y de estrato 6 de 736 millones, lo cual estaría dentro del presupuesto de credito preaprobado.
## # A tibble: 5 × 14
## id zona piso estrato preciom areaconst parqueaderos banios habitaciones
## <dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 7182 Zona S… <NA> 5 730 573 3 8 5
## 2 7512 Zona S… <NA> 5 670 300 3 5 6
## 3 5248 Zona S… 08 6 1150 344 4 5 5
## 4 6023 Zona S… 08 6 1150 464 4 6 5
## 5 4 Zona S… <NA> 6 1280 346 4 6 5
## # ℹ 5 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>,
## # base <chr>
Hay 2 ofertas que tienen un precio menor o igual a 850 millones de pesos y que, además, tienen un area mayor o igual al requerido, sin embargo hay una unica oferta que se considera muy buena ya que tiene 573 m2, 8 baños, 5 habitaciones y es de estrato 5. Las demas ofertas sobrepasan el valor y el área aumenta. En el mapa, podemos visualizar con rojo las dos mejores opciones para el cliente: