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 contiende 8219 registros que se muestran a continuación:
library(readxl)
library(ggplot2)
library(plotly)
library(leaflet)
Datos_Vivienda <- read_excel("D:/PUJ/2do Semestre/4. Analitica financiera/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 contiene un total de 12 variables que corresponde a características propias de la vivienda como el estrato, la zona,el área construida entre otras.
A continuación se presenta el mapa con las coordenadas de las viviendas de 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()
## Warning in validateCoords(lng, lat, funcName): Data contains 3 rows with either
## missing or invalid lat/lon values and will be ignored
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)
## `geom_smooth()` using formula 'y ~ x'
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 incremente su precio en promedio. También vemos que las lineas a medida que el estrato aumenta su interceepto es mayor indicando que el precio por estrato también 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 está 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 ¿Cuál es el precio estimado de mercado de acuerdo al modelo y financieramente recomendaria esta oferta a al 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 apartamente es de 272 millones, y al compararlo con el precio de venta (320 millones) podemos observar que se encuentre sobre valorado. Inicialmente la recomendación sería no invertir en este apartamente ya que la diferencia es importante (casi 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 990% presenta limitacciones en la predicción y por tanto no incorpora ciertas variables adicionales clave como las ya mencionadas (acabados, qué ofrece el sector…) que podrían ser de gran interes para el comprador y justificar el incremento adicional el precio.
Si la persona finalmente toma en cuenta la recomendación y continúa en la busqueda de vivienda. Podría usted recomendarle algunas en particular de acuerdo a sus intereses y las estimaciones del modelo. Area construida 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 mayoría presenta problemas en la definición de la zona (registraron sur en la aplicación de finca raiz y lo no son), sin embargo uno de ellos cumple con a condición y se encuentra en el barrio El Ingenio con las característics indicadas y un ahorro (potencial) de 116 millones por debajo del precio medio estimado (mercado)
Recomendaciones: Visitar este apartamento y evaluar estado, otros servicios que ofrece (piscina, acceso, parques…) y muy importante acabados.