El presente informe responde a la solicitud de asesoría realizada por una compañía internacional interesada en adquirir dos viviendas en la ciudad de Cali para alojar a sus empleados. Cada vivienda presenta condiciones específicas relacionadas con el área construida, parqueaderos, estrato socioeconómico, tipo de inmueble, número de habitaciones, localización geográfica y precio de la vivienda.
Para dar respuesta, se diseñó una estrategia metodológica basada en el análisis exploratorio de datos (EDA), la modelación econométrica mediante regresión lineal múltiple, la validación de los supuestos clásicos del modelo y la georreferenciación de las ofertas inmobiliarias.
El documento se divide en dos partes: i) un informe ejecutivo con los principales hallazgos y recomendaciones, y ii) anexos técnicos con el detalle de las estimaciones, gráficos y modelos utilizados.
Para dar respuesta a la solicitud, se llevó a cabo un proceso de filtrado y modelación de la base de datos inmobiliaria disponible. El análisis comenzó con la selección de las viviendas que cumplen las condiciones específicas planteadas por la compañía, seguido de un estudio exploratorio orientado a identificar patrones de comportamiento entre el precio y las principales características de los inmuebles.
# Realizamos el grafico
ggplot(vivi_clean_impu, aes(x = longitud, y = latitud, color = as.factor(cluster_kmeans))) +
geom_point(alpha = 0.6) +
geom_label(data = centroides,
aes(x = centroide_long, y = centroide_lat,
label = nombres_zonas[as.character(cluster_kmeans)]),
color = "black",
fill = "white",
alpha = 0.8,
size = 3,
fontface = "bold") +
labs(title = "Mapa de viviendas en Cali",
x = "Longitud",
y = "Latitud",
color = "Cluster") +
theme_minimal() +
scale_color_discrete(labels = nombres_zonas)El ráfico 1 permite identificar cinco zonas geográficas de concentración de viviendas en la ciudad, distribuidas en Norte, Sur, Oriente, Occidente y Centro. Cada color en el gráfico representa una zona distinta, lo que evidencia cómo las viviendas tienden a agruparse según su proximidad espacial.
Si bien podrían existir subdivisiones adicionales, como Nororiente o Suroriente, que reflejarían un nivel de agrupación más profundo, se observan con claridad las delimitaciones espaciales principales. No obstante, es posible que algunos barrios se ubiquen en zonas de transición, por ejemplo, más próximos al Norte que al Occidente, o más cercanos al Centro que al Sur.
Estos resultados permiten establecer divisiones espaciales relativamente homogéneas, lo cual facilita el estudio comparativo de precios y características de los inmuebles en cada sector, aportando así una base sólida para el análisis posterior del mercado de vivienda en la ciudad.
Teniendo en cuenta los requerimientos de la empresa internacional para el empleado que requiere una vivienda con las siguientes categorias:
1. Tipo: Casa
2. Área construida: 200 m2
3. parqueaderos: 1
4. baños: 2
5. habitaciones: 4
6. estrato: 4 o 5
7. zona: Norte
Y se cuenta con un crédito preaprobado de 350 millones
# CASA EN LA ZONA NORTE DE CALI
# Filtrar solo casas en zona norte
base1 <- subset(vivi_clean_impu, tipo == "Casa" & cluster_kmeans_reord == 4)
# Mapa iterectivo real
leaflet(base1) %>%
addTiles() %>%
addCircleMarkers(
lng = ~longitud,
lat = ~latitud,
popup = ~paste0(
"<b>Barrio:</b> ", barrio, "<br>",
"<b>Precio:</b> ", preciom, " millones<br>",
"<b>Área:</b> ", areaconst, " m²<br>",
"<b>Habitaciones:</b> ", habitaciones, "<br>",
"<b>Baños:</b> ", banios
),
radius = 5,
color = "blue",
fillOpacity = 0.7
)En este grafico iteractivo, observamos uno de los requisitos solicitados por la empresa internacional para uno de sus empleados, que requiere una casa en el norte de la ciudad y miraremos algunas particularidades de la zona y de las casa.
## promedio_precio promedio_banios promedio_habitaciones promedio_parqueaderos
## 1 403 3 4 2
## promedio_areaconst
## 1 244
Aqui podemos observar entonces que
En esta grafica observamos los 6 barrios con la mayor oferta de casa en la zona norte
En esta grafica podemos observar que la mayor cantidad de ofertas de casa en la zona norte, estan ubiccadas en el estrato 3 y 5
##
## Call:
## lm(formula = log_precio ~ areaconst + estrato_4 + estrato_5 +
## estrato_6 + habitaciones + parqueaderos + banios, data = train_data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.19460 -0.15131 -0.02323 0.16623 1.15404
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.8273010 0.0430235 112.201 < 2e-16 ***
## areaconst 0.0012051 0.0001008 11.960 < 2e-16 ***
## estrato_4 0.3233888 0.0403438 8.016 1.15e-14 ***
## estrato_5 0.4332099 0.0373917 11.586 < 2e-16 ***
## estrato_6 0.7137295 0.0756735 9.432 < 2e-16 ***
## habitaciones 0.0182696 0.0106663 1.713 0.0875 .
## parqueaderos 0.0560985 0.0124849 4.493 9.13e-06 ***
## banios 0.0773411 0.0144657 5.346 1.49e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2779 on 411 degrees of freedom
## Multiple R-squared: 0.752, Adjusted R-squared: 0.7477
## F-statistic: 178 on 7 and 411 DF, p-value: < 2.2e-16
Los resultados del modelo muestran que el área construida afecta positivamente al precio de la vivienda, interpretandose como por 1 m² adicional el precio de la vivienda aumentara en 0.12%, teniendo en cuenta que este efecto es acumulativo, en el caso que aumentara 10 m², el precio de la vivienda incrementaria en 1.2%. Ademas el numero de baños como parqueaderos afectan positivamente al precio, cada baño adicional aumentará el precio en 7.73% y el incremento de un parqueadero, tambien aumentará el precio de la vivienda en un 5.60% Por otra parte, la variable categorica, no muestra un efecto positivo que se incrementa a medida que se sube de estrato, concerniente a lo que establece la ley 412 de 1994 sobre la estratificacion en Colombia, entonces que la casa este ubicada en estrato 4 aumentará el precio en 32.33%, en el estrato 5 aumentará 43.32% y el estrato 6 aumentará 71.37%. En el caso de las habitaciones, tienen un efecto positivo por la adicion de una habitacion el precio aumentará en 1.82%, pero no existen una fuerte evidencia sobre esto.
## (Intercept)
## 124.8735
El caso mas particular es el intercepto,que me indica que cuando el área construida, el estrato 4, 5 y 6, habitaciones, parqueaderos y baños fuesen cero (0), cuanto seria el valor un terreno para construir una vivienda en estrato 3, que seria de 124 millones de pesos.
## areaconst parqueaderos banios habitaciones estrato estrato_4 estrato_5
## 1 200 1 2 4 4 1 0
## 2 200 1 2 4 5 0 1
## estrato_6 Precio_Predicho
## 1 0 292
## 2 0 326
Aqui podemos observar que con las indicaciones que la empresa internacional requirio para uno de sus empleados, manteniendo las caracteristricas de la casa, exceptuando el estrato, y como el modelo nos idnca, el pasar de un estrato a otro (4 a 5), incrementa el valor de la vivienda y en este caso una vivienda en estrato 4 tiene un valor de 298 millones su compra y con la misma condiciones pero en estrato 5 cuesta 333 millones. Se recomienda adquirir la vivienda en estrato 5, teniendo en cuenta que se cuenta con un credito pre aprobado de 350 millones y que en este estrato los barrios son mas tranquilos, comodos y con buena ubicacion en barrios como el bosque, la campiña, santa monica residencial o la merced.
Teniendo en cuenta los requerimientos de la empresa internacional para el empleado que requiere una vivienda con las siguientes categorias:
1. Tipo: Apartamento 2. Área
construida: 300 m2
3. parqueaderos: 3
4. baños: 3
5. habitaciones: 5
6. estrato: 4 o 5
7. zona: Sur
Y se cuenta con un crédito preaprobado de 850 millones
# Mapa iterectivo real
leaflet(base2) %>%
addTiles() %>%
addCircleMarkers(
lng = ~longitud,
lat = ~latitud,
popup = ~paste0(
"<b>Barrio:</b> ", barrio, "<br>",
"<b>Precio:</b> ", preciom, " millones<br>",
"<b>Área:</b> ", areaconst, " m²<br>",
"<b>Habitaciones:</b> ", habitaciones, "<br>",
"<b>Baños:</b> ", banios
),
radius = 5,
color = "blue",
fillOpacity = 0.7
)En este grafico iteractivo, observamos el otro requisito solicitados por la empresa internacional para uno de sus empleados, que requiere un apartamento al sur de la ciudad y miraremos algunas particularidades de la zona y de los aptos.
## promedio_precio promedio_banios promedio_habitaciones promedio_parqueaderos
## 1 329 3 3 1
## promedio_areaconst
## 1 100
Aqui podemos observar entonces que
Aqui se muestran los 6 barrios con mayor oferta de apartamentos en la zona sur.
En esta grafica podemos observar que la mayor cantidad de ofertas de apartamentos en la zona sur, estan ubicados en el estrato 4 y 5
# Modelo lineal multiple
modelo2 <- lm(log_precio ~ areaconst + estrato_4 + estrato_5 + estrato_6 + habitaciones + parqueaderos + banios, data = train_data2)
# Resumen del modelo
summary(modelo2)##
## Call:
## lm(formula = log_precio ~ areaconst + estrato_4 + estrato_5 +
## estrato_6 + habitaciones + parqueaderos + banios, data = train_data2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.8440 -0.1389 -0.0012 0.1456 1.0207
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.2583405 0.0435838 97.705 < 2e-16 ***
## areaconst 0.0022715 0.0001588 14.300 < 2e-16 ***
## estrato_4 0.2800372 0.0329017 8.511 < 2e-16 ***
## estrato_5 0.5043800 0.0335182 15.048 < 2e-16 ***
## estrato_6 0.7657347 0.0377648 20.276 < 2e-16 ***
## habitaciones 0.0401891 0.0122422 3.283 0.00106 **
## parqueaderos 0.1752398 0.0147395 11.889 < 2e-16 ***
## banios 0.1240916 0.0105791 11.730 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2184 on 1298 degrees of freedom
## Multiple R-squared: 0.8372, Adjusted R-squared: 0.8363
## F-statistic: 953.3 on 7 and 1298 DF, p-value: < 2.2e-16
Los resultados del segundo modelo muestran que el área construida afecta positivamente al precio de la vivienda, interpretandose como por 1 m² adicional el precio de la vivienda aumentará en 0.22%, teniendo en cuenta que este efecto es acumulativo, en el caso que aumentara 10 m², el precio de la vivienda incrementaria en 2.2%. Ademas el numero de baños como parqueaderos afectan positivamente al precio, cada baño adicional aumentará el precio en 12.40% y el incremento de un parqueadero, tambien aumentará el precio de la vivienda en un 17.52% Por otra parte, la variable categorica, no muestra un efecto positivo que se incrementa a medida que se sube de estrato, concerniente a lo que establece la ley 412 de 1994 sobre la estratificacion en Colombia, entonces que la casa este ubicada en estrato 4 aumentará el precio en 28%, en el estrato 5 aumentará 50.04% y el estrato 6 aumentará 76,57%. En el caso de las habitaciones, tienen un efecto positivo por la adicion de una habitacion el precio aumentará en 4.01%,.
## (Intercept)
## 70.69257
El caso mas particular es el intercepto,que me indica que cuando el área construida, el estrato 4, 5 y 6, habitaciones, parqueaderos y baños fuesen cero (0), cuanto seria el valor de un apartamento en planos en estrato 3, que seria de 70 millones de pesos.
## areaconst parqueaderos banios habitaciones estrato estrato_5 estrato_6
## 1 300 3 3 5 5 1 0
## 2 300 3 3 5 6 0 1
## estrato_4 Precio_Predicho
## 1 0 694
## 2 0 902
Aqui podemos observar que con las indicaciones que la empresa internacional requirio para uno de sus empleados, manteniendo las caracteristricas de la casa, exceptuando el estrato, y como el modelo nos idnca, el pasar de un estrato a otro (5 a 6), incrementa el valor de la vivienda y en este caso una vivienda en estrato 5 tiene un valor de 694 millones su compra y con la misma condiciones pero en estrato 6 cuesta 902 millones. Se recomienda adquirir la vivienda en estrato 5, teniendo en cuenta que se cuenta con un credito pre aprobado de 850 millones, ademas en este estrato los barrios son como en la zona norte mas tranquilos, comodos y con buena ubicacion en barrios como Valle del lili, pance, Ciudad jardin, el ingenio, entre otros.
## Real Predicho
## 1 320 392.4680
## 2 780 453.7192
## 9 780 453.7192
## 15 250 221.4915
## 17 243 238.5686
## 18 750 174.1700
## 19 240 175.4943
## 37 270 210.0530
## 38 210 231.3259
## 44 100 160.6808
Observamos que los valores predichos estan cercanos a los valores reales, teniendo en cuneta que los predichos se les aplico una transformacion logarítmica para el modelo.
## areaconst estrato_4 estrato_5 estrato_6 habitaciones parqueaderos
## 1.619014 1.440595 1.794914 1.412334 1.835876 1.366910
## banios
## 2.168887
El Factor de inflacion de la varianza (VIF), nos indica la intensidad de la multicolinealidad (cuando las variables predictoras estan correlacionadas), y en este caso podemos observar que presenta un correlacion moderada, ya que las variabls estan por debajo de 5, que es el punto maximo para una multicolinealidad moderada.
## # A tibble: 1 × 12
## r.squared adj.r.squared sigma statistic p.value df logLik AIC BIC
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 0.752 0.748 0.278 178. 3.40e-120 7 -54.0 126. 162.
## # ℹ 3 more variables: deviance <dbl>, df.residual <int>, nobs <int>
1. r cuadrado: el 75.2% de la variacion del precio es explicada por las variables areaconst, estrato_4, estrato_5, estrato_6, habitaciones, parqueaderos y banios.
2. r cuadrado ajustado: es parecido al anterior, y nos indica cuantas variables basuras tiene el modelo, si este es menor que el anterior.
3. sigma: nos muestra los error residuales, que nos indica que el modelo se equivoca en la predicion 27%± y entre mas bajo mucho mejor.
4. estadistico f: esto nos indica que el conjunto de variables explican significativamente la variable dependiente.
5. p.value: es practicamente cero, y nos indica que el modelo es significativamente alto en su conjunto.
6. AIC y BIC: son metricas de compracion, en el caso que se usara otro modelo, se tomaria en cuenta el menos numero en cada criterio.
## MAE: 87.78386
## RMSE: 131.4368
## R² en test: 0.6754685
ggplot(comparacion, aes(x = Real, y = Predicho)) +
geom_point(color = "blue", alpha = 0.6) +
geom_abline(slope = 1, intercept = 0, color = "red", linetype = "dashed") +
labs(
title = "Predicción vs Real (Datos de Test)",
x = "Precio Real",
y = "Precio Predicho"
)Aqui podemos observar que los datos van alineados con la linea roja, lo que indica que las prediciones se alinean con los datos reales, exceptuando algunos valores que son demasiados altos y que el modello tiende a subestimar o sobrestimar.
# 1. Predicciones en log(precio)
pred_log_test2 <- predict(modelo2, newdata = test_data2)
# 2. Convertir a pesos (aplicamos la inversa del logaritmo)
pred_precio_test2 <- exp(pred_log_test2)
# 3. Comparar con los valores reales
comparacion2 <- data.frame(
Real = test_data2$precio, # precio real
Predicho = pred_precio_test2 # precio predicho
)
head(comparacion, 10)## Real Predicho
## 1 320 392.4680
## 2 780 453.7192
## 9 780 453.7192
## 15 250 221.4915
## 17 243 238.5686
## 18 750 174.1700
## 19 240 175.4943
## 37 270 210.0530
## 38 210 231.3259
## 44 100 160.6808
Observamos que los valores predichos estan cercanos a los valores reales, teniendo en cuneta que los predichos se les aplico una transformacion logarítmica para el modelo.
## areaconst estrato_4 estrato_5 estrato_6 habitaciones parqueaderos
## 2.173586 6.972102 6.850247 7.315794 1.450039 2.393288
## banios
## 2.839321
El Factor de inflacion de la varianza (VIF), nos indica la intensidad de la multicolinealidad (cuando las variables predictoras estan correlacionadas), y en este caso podemos observar que presenta un correlacion moderada, en algunas variables, pero las variables dummies (solo toman dos valores 0 u 1), estan por encima de 5 pero por debajo de 10 lo que significa qwue presentan una correlacion fuerte, peroe sto es debido a que son variables que presentan un orden y al volverlas dummies independientes, se correlacionan.
## # A tibble: 1 × 12
## r.squared adj.r.squared sigma statistic p.value df logLik AIC BIC
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 0.837 0.836 0.218 953. 0 7 138. -258. -211.
## # ℹ 3 more variables: deviance <dbl>, df.residual <int>, nobs <int>
1. r cuadrado: el 83.7% de la variacion del precio es explicada por las variables areaconst, estrato_4, estrato_5, estrato_6, habitaciones, parqueaderos y banios.
2. r cuadrado ajustado: es parecido al anterior, y nos indica cuantas variables basuras tiene el modelo, si este es menor que el anterior.
3. sigma: nos muestra los error residuales, que nos indica que el modelo se equivoca en la predicion 21.8%± y entre mas bajo mucho mejor.
4. estadistico f: esto nos indica que el conjunto de variables explican significativamente la variable dependiente.
5. p.value: es practicamente cero, y nos indica que el modelo es significativamente alto en su conjunto.
6. AIC y BIC: son metricas de compracion, en el caso que se usara otro modelo, se tomaria en cuenta el menos numero en cada criterio.
## MAE: 60.05056
## RMSE: 105.0559
## R² en test: 0.8209615
ggplot(comparacion2, aes(x = Real, y = Predicho)) +
geom_point(color = "blue", alpha = 0.6) +
geom_abline(slope = 1, intercept = 0, color = "red", linetype = "dashed") +
labs(
title = "Predicción vs Real (Datos de Test)",
x = "Precio Real",
y = "Precio Predicho"
)Aqui podemos observar que los datos van alineados con la linea roja, lo que indica que las prediciones se alinean con los datos reales, exceptuando algunos valores que son demasiados altos y que el modello tiende a subestimar o sobrestimar.