Punto 1.

Los siguientes datos corresponden a ofertas de vivienda (casas y apartamentos) de la ciudad de Cali del periodo 2019-2 que se ofrecen por medio de la plataforma finca raiz Cali. La base total contiene 8219, y para efectos del presente informe se presentan solo los inmuebles de la zona norte que poseen un valor inferior a $500 millones y que poseen un área inferior a 300 mt2. Los inmuebles que responden a estas características son 1077.

library(readxl)
library(ggplot2)
library(plotly)
library(leaflet)
Datos_Vivienda <- read_excel("D:/PUJ/2do Semestre/4. Analitica financiera/Datos_Vivienda.xlsx")
criterios=Datos_Vivienda$Zona=="Zona Norte"&Datos_Vivienda$precio_millon<500&Datos_Vivienda$Tipo=="Apartamento"&Datos_Vivienda$Area_contruida<300
Datos_norte=Datos_Vivienda[criterios,]
table(Datos_norte$Zona)
## 
## Zona Norte 
##       1077
table(Datos_norte$Tipo)
## 
## Apartamento 
##        1077
summary(Datos_norte$precio_millon)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##    65.0   132.0   220.0   233.8   320.0   495.0       3
View(Datos_norte)
head(Datos_norte,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           3           135             56 1                1
## 2 Zona~ NA          3            78             54 2                1
## 3 Zona~ NA          5           340            106 2                2
## # ... with 5 more variables: Habitaciones <dbl>, Tipo <chr>, Barrio <chr>,
## #   cordenada_longitud <dbl>, Cordenada_latitud <dbl>
leaflet()%>% addCircleMarkers(lng = Datos_norte$cordenada_longitud,lat = Datos_norte$Cordenada_latitud,radius = 0.1,color = "black", label = Datos_norte$precio_millon,opacity = 0.9)%>% addTiles()

En el mapa se puede observar que los apartamentos aunque se encuentren filtrados muestran apartamentos ubicados a lo largo de la ciudad y no solo los ubicados norte. Esto pudo ocurrir porque quiénes reportaron el bien inmueble colocaron mal la zona o la dirección.

Punto 2.

Relación precio, área, estrato:

Datos_norte=na.omit(Datos_norte)
Datos_norte$Estrato=as.character(Datos_norte$Estrato)
g1=ggplot(Datos_norte,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 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.

Relación precio, área, tiene parqueadero

Datos_norte$tiene_parqueadero=Datos_norte$parqueaderos!="NA"
g2=ggplot(Datos_norte,aes(x=Area_contruida,y=precio_millon,color=tiene_parqueadero))+geom_point()+theme_bw()+geom_smooth(method="lm")
ggplotly(g2)

Se observa que hay una relación directa enre el precio y el hecho de que el apartamento tenga parqueadero pues el precio en promedio de los apartamentos con parqueadero es más elevado que el de los apartamentos que no lo tienen.

Punto 3.

Datos_norte$tiene_parqueadero=Datos_norte$parqueaderos!="NA"
mod1=lm(precio_millon~Area_contruida+Estrato+tiene_parqueadero,data=Datos_norte)
summary(mod1)
## 
## Call:
## lm(formula = precio_millon ~ Area_contruida + Estrato + tiene_parqueadero, 
##     data = Datos_norte)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -242.442  -31.795   -0.944   27.529  223.738 
## 
## Coefficients:
##                        Estimate Std. Error t value Pr(>|t|)    
## (Intercept)            49.03852    5.03387   9.742  < 2e-16 ***
## Area_contruida          1.04332    0.06037  17.281  < 2e-16 ***
## Estrato4               61.87913    4.84558  12.770  < 2e-16 ***
## Estrato5              146.16586    4.98649  29.312  < 2e-16 ***
## Estrato6              204.47149    9.27649  22.042  < 2e-16 ***
## tiene_parqueaderoTRUE  15.54122    3.98543   3.900 0.000102 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 54.8 on 1071 degrees of freedom
## Multiple R-squared:  0.7541, Adjusted R-squared:  0.7529 
## F-statistic: 656.9 on 5 and 1071 DF,  p-value: < 2.2e-16

Se esta analizando la relación entre las variables de precio de los apartamentos con las variables categoricas de estrato y el hecho de que el apartamento tenga parqueadero o no.

Los coeficientes son estadísticamente significativos y explican el incremento del precio del valor de la vivienda por estrato y parqueadero. Basándose en el estrato 3, vivir en estrato 4 incrementa el valor de la vivienda en 61,87 millones, vivir en estrato 5 con el estrato 3 como base, incrementa el valor de la vivienda en 146,16 millones, y con la misma base, vivir en estrato 6, incrementa el valor de la vivienda en 204.47 millones. Además, el hecho de que el apartamento tenga parqueadero propio, incrementa el precio en 15.54 millones de pesos.

El modelo presenta un R2 ajustado de 0.7529, lo que indica que el modelo logra explicar en un 75.29% el precio de los apartamentos. Para mejorar este indicador se sugiere adicionar otras variables categoricas como la seguridad del sector, si tiene parques infantiles cerca, centros comerciales, vías de acceso, entre otras.

Punto 4.

par(mfrow=c(2,2))
plot(mod1)

El grafico QQ = hay normalidad y el grafico Residual Vs Fitted value = hay linealidad.

Punto 5.

preciomedio_estimadodemercado=predict(mod1,list(Area_contruida=100,Estrato="4",tiene_parqueadero=TRUE))
preciomedio_estimadodemercado
##        1 
## 230.7909

Es un apartamento muy costoso lo que le están ofreciendo, por lo que no sería buena idea adquirirlo por 450millones cuando el primedio con estas caracteristicas es de 230millones.

Punto 6.

precio_modelo=mod1$fitted.values
precio_real=Datos_norte$precio_millon
area=Datos_norte$Area_contruida
tiene_p=Datos_norte$tiene_parqueadero
estrato=Datos_norte$Estrato

potencial=precio_modelo-precio_real
target=potencial>0&precio_real>=100&precio_real<=400&area>=100&estrato=="4"&tiene_p==TRUE

table(target)
## target
## FALSE  TRUE 
##  1072     5
Datos_norte$potencial=round(potencial,1)

Datos_sugeridos=Datos_norte[target,]
Datos_sugeridos
## # A tibble: 5 x 14
##   Zona  piso  Estrato precio_millon Area_contruida parqueaderos Banos
##   <chr> <chr> <chr>           <dbl>          <dbl> <chr>        <dbl>
## 1 Zona~ 4     4                 185           104  1                3
## 2 Zona~ 6     4                 270           152  1                3
## 3 Zona~ 3     4                 300           287  1                3
## 4 Zona~ 4     4                 190           104. 1                3
## 5 Zona~ NA    4                 280           173  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_sugeridos$cordenada_longitud,lat = Datos_sugeridos$Cordenada_latitud,radius = 0.05,color = "blue",label  = paste("Potencial=",Datos_sugeridos$potencial,";","Precio venta=",Datos_sugeridos$precio_millon),opacity = 0.9)%>% addTiles()