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 cali. La base contiene 8219 registros que se muestran a continuación:
library(readxl)
library(ggplot2)
library(plotly)
library(leaflet)
Datos_Vivienda = read_excel("~/Desktop/Datos_Vivienda.xlsx")
head(Datos_Vivienda)
## # A tibble: 6 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
## 4 Zona… NA 6 1280 346 4 6
## 5 Zona… 2 6 1300 600 4 7
## 6 Zona… 3 6 513 160 2 4
## # … with 5 more variables: Habitaciones <dbl>, Tipo <chr>, Barrio <chr>,
## # cordenada_longitud <dbl>, Cordenada_latitud <dbl>
La base de datos contien un total de 12 variables que corresponde a caraceteristicas 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.05,color = "black",label = Datos_Vivienda$precio_millon,opacity = 0.9)%>% addTiles()
A continuación nos vamos a enfocar en segmento de la base de datos: Ofertas en el sur de la ciudad, menores a 500 millones de pesos 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 obtenemos 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 contruida, indicado lo que se espera que a mayor area la vivienda incrementa su precio en promedio. Tambien vemos que las lineas a medida que el estrato aumenta su intercepto es mayor indicando que el precio 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 uno en estrato 4 con una area contruida de 110 mt2 y parqueadero propio. La propietaria vende este apartamento en 320 millones de pesos. Cual es el precio estimado de mercado de acuerdo al modelo. Financieramente recomendaria esta oferta a la compradora?? Que limitaciones presenta esta recomendación??
precio_medio_estimado=predict(mod1,list(Area_contruida=110,Estrato="4",tiene_parqueadero=TRUE))
precio_medio_estimado
## 1
## 272.6314
El precio medio estimado del apartamento es de 272 millones, y al compararlo con el precio de venta (320 millones) podemos observar que se encuentra sobre valorado. Inicialmente la recomendación seria no invertir en este apartamento ya que la diferencia es importante (caso 50 millones). Adicionalmente el incremento de 50 millones es dificil de justificar por temas como acabados de lujo en el apartamento y otras externalidades como servicios adicionales de la Unidad (piscina, gym, canchas… parques … acceso). Sin embargo el modelo al presentar un ajuste mayor al 90% presenta limitacioniones en la predición y por tanto no incorpora ciertas variables adicionales clave como las ya mencionadas (acabados, que ofrece el sector…) que podrian ser de gran interes para el comprador y justificar el incremento adicional el precio.
Si la persona finalemente toma en cuenta la recomendación y continua en la busqueda de vivienda. Podria usted recomendarle algunas en particular de acuerdo a sus intereses y las estimaciones del modelo. Area Contruida de al menos 100 mt2,Con Parqueadero Propio, Estrato 4 y dispone de entre 200 y 350 millones (credito preaprobado).
Identificar el top 5 y mapearlos.
precio_modelo=mod1$fitted.values
precio_real=Datos_filtro$precio_millon
area=Datos_filtro$Area_contruida
estrato=Datos_filtro$Estrato
tiene_p=Datos_filtro$tiene_parqueadero
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 apartamentos que en primer lugar la mayoria presenta problemas en la definición de la zona (registraron sur en la aplicación de finca raiz y no lo son), sin embargo uno de ellos cumple con la condición y se encuentra en el barrio el ingenio con las caracteristicas indicadas y un ahorro (potencial) de 116 millones por debajo del precio medio estimado (mercado).
Recomendaciones: Visitar este apartamento y evaluar el estado, otros serivios que ofrece (piscina, acceso..parques) y muy importante acabados.