Datos de Ofertas de Vivienda (Fuente Finca Raiz Cali)

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.

Mapa de Localización de Ofertas

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()

Filtrar Base de Datos

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.

Explorar la Relación entre el precio y otras variables

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.

Estimación del Modelo para el Precio del Apartamento

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

Prediciones con el Modelo Estimado

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.

Recomendaciones de inversión con el modelo

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.