Los siguientes datos corresponden a ofertas de vivienda (casas y apartamentos) de la ciudad de Cali 2019-2 que se ofrecen por medio de la plataforma finca raiz. La base contiene 8322 registros que se muestran a continuación:
library(readxl)
library(ggplot2)
library(plotly)
library(leaflet)
Datos_Vivienda <- read_excel("C:/Users/Isabella/Downloads/Datos_Vivienda.xlsx")
View(Datos_Vivienda)
head(Datos_Vivienda,3)
## # A tibble: 3 x 12
## Zona piso Estrato precio_millon Area_contruida parqueaderos Banos
## <chr> <chr> <dbl> <dbl> <dbl> <chr> <dbl>
## 1 Zona~ 2 6 880 237 2 5
## 2 Zona~ 2 4 1200 800 3 6
## 3 Zona~ 3 5 250 86 NA 2
## # ... with 5 more variables: Habitaciones <dbl>, Tipo <chr>, Barrio <chr>,
## # cordenada_longitud <dbl>, Cordenada_latitud <dbl>
La base de datos contienen un total de 12 variables que corresponde a caracteristicas propias de la vivienda como el estrato, la zona, el area construida entre otras.
A continuación se presenta el mapa con las coordenadas de las viviendas en Cali:
leaflet() %>% addCircleMarkers(lng=Datos_Vivienda$cordenada_longitud,lat=Datos_Vivienda$Cordenada_latitud,radius=0.1, color = "black", label = Datos_Vivienda$precio_millon, opacity = 0.9)%>% addTiles()
A continuación nos vamos a enfocar en un segmento de la base de datos: Ofertas en el sur de la ciudad menores a 200 MM COP y solo apartamentos.
criterios=Datos_Vivienda$Zona=="Zona Sur"&Datos_Vivienda$precio_millon<500&Datos_Vivienda$Tipo=="Apartamento"&Datos_Vivienda$Area_contruida<200
Datos_filtro=Datos_Vivienda[criterios,]
table(Datos_filtro$Zona)
##
## Zona Sur
## 2432
table(Datos_filtro$Tipo)
##
## Apartamento
## 2432
summary(Datos_filtro$precio_millon)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 75 165 230 239 295 498 3
Finalmente al aplicar los filtros tenemos un total de 2432 registros
Vamos a explorar la relación entre precio y area construida:
Datos_filtro=na.omit(Datos_filtro)
Datos_filtro$Estrato=as.character(Datos_filtro$Estrato)
g1=ggplot(Datos_filtro,aes(x=Area_contruida, y=precio_millon,color=Estrato))+geom_point()+theme_bw()+geom_smooth(method = "lm")
ggplotly(g1)
Se observa en la figura que existe una relación directa entre el precio de la vivienda y el area construida, indicando lo que se espera que a mayor area la vivienda incrementa su precio en promedio. Tambien vemos que la lineas a medida que el Estrato aumenta tienen mayor intercepto indicando que el precio base por estrato tambien se incrementa.
Datos_filtro$tiene_parqueadero=Datos_filtro$parqueaderos!="NA"
mod1=lm(precio_millon~Area_contruida+Estrato+tiene_parqueadero, data=Datos_filtro)
summary(mod1)
##
## Call:
## lm(formula = precio_millon ~ Area_contruida + Estrato + tiene_parqueadero,
## data = Datos_filtro)
##
## Residuals:
## Min 1Q Median 3Q Max
## -206.442 -26.562 -1.558 27.400 228.036
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.20887 4.34818 0.278 0.781
## Area_contruida 1.87621 0.04233 44.324 <2e-16 ***
## Estrato4 42.19359 3.62736 11.632 <2e-16 ***
## Estrato5 79.27753 3.90382 20.308 <2e-16 ***
## Estrato6 148.44500 5.13587 28.904 <2e-16 ***
## tiene_parqueaderoTRUE 22.84547 2.74163 8.333 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 45.92 on 2426 degrees of freedom
## Multiple R-squared: 0.7193, Adjusted R-squared: 0.7187
## F-statistic: 1243 on 5 and 2426 DF, p-value: < 2.2e-16
Una persona esta interesada en un apartamento en la zona sur y recibe una oferta de un apartamento en estrato 4 con un area de 110 mt2 y con parqueadero propio. La propietaria vende este apartamento en 320 millones de pesos, ¿Cual es el precio estimado de mercado de acuerdo al modelo y financieramente recomendaria esta oferta a la compra ? ¿ Que limitaciones presenta esta recomendación?
preciomedio_estimadodemercado=predict(mod1,list(Area_contruida=110,Estrato="4",tiene_parqueadero=TRUE))
preciomedio_estimadodemercado
## 1
## 272.6314
Si la persona finalmente toma en cuenta la recomendación y continua en la busqueda de vivienda. Podría ud recomendarle alguna en particular de acuerdo a sus intereses y las estimaciones del modelo? Aarea Construida de al menos 100 mt2 con parqueadero propio, Estrato 4 y dispone entre 200 y 350 MM COP (crédito preaprobado).
Identificar el top 5 y mapearlos.
precio_modelo=mod1$fitted.values
precio_real=Datos_filtro$precio_millon
area=Datos_filtro$Area_contruida
tiene_p=Datos_filtro$tiene_parqueadero
estrato=Datos_filtro$Estrato
potencial=precio_modelo-precio_real
target=potencial>70&precio_real>=200&precio_real<=350&area>=100&estrato=="4"&tiene_p==TRUE
table(target)
## target
## FALSE TRUE
## 2426 6
Datos_filtro$potencial=round(potencial,1)
Datos_recomendados=Datos_filtro[target,]
Datos_recomendados
## # A tibble: 6 x 14
## Zona piso Estrato precio_millon Area_contruida parqueaderos Banos
## <chr> <chr> <chr> <dbl> <dbl> <chr> <dbl>
## 1 Zona~ 4 4 200 110 1 3
## 2 Zona~ 5 4 250 160 1 2
## 3 Zona~ 3 4 250 143 1 2
## 4 Zona~ 2 4 230 175 1 2
## 5 Zona~ 3 4 222 145 1 4
## 6 Zona~ 2 4 270 150 2 3
## # ... with 7 more variables: Habitaciones <dbl>, Tipo <chr>, Barrio <chr>,
## # cordenada_longitud <dbl>, Cordenada_latitud <dbl>, tiene_parqueadero <lgl>,
## # potencial <dbl>
leaflet() %>% addCircleMarkers(lng = Datos_recomendados$cordenada_longitud,lat = Datos_recomendados$Cordenada_latitud,radius = 0.05,color = "black",label = paste("Potencial=",Datos_recomendados$potencial,";","Precio venta=",Datos_recomendados$precio_millon),opacity = 0.9)%>% addTiles()
Se observa en el grupo de potenciales de apartmanetos que en primer lugar la mayoria presenta problemas en la definición de la zona (Registraron zona sur en finca raiz y no lo son). Sin embargo uno de ellos cumple con las condidiciones y se encuentra en el barrio el ingenio con las caracteristicas indicadas y un ahorro (potencial) de 116 MM COP por debajo del precio medio estimado del mercado.
Recomendaciones: Visitar este apartamento y evaluar el estado, otros servicios que ofrece (piscina, acceso a parques, transporte) y muy importante los acabados.