Hace dos días, Maria recibió una carta solicitando asesoría para la compra de dos viviendas por parte de una compañía internacional que desea ubicar a dos de sus empleados con sus familias en la ciudad. Ayude a Maria a responder la solicitud, mediante técnicas moderación que usted conoce. Ella requiere le envíe un informe ejecutivo donde analice los dos casos y sus recomendaciones.
Cargue de los datos:
En principio se inicia cargado los datos y librerías necesarias para el desarrollo del proyecto:
devtools::install_github("dgonxalex80/paqueteMOD", force =TRUE)
library(paqueteMOD)
library(tidyverse)
library(patchwork)
library(ggplot2)
library(ggpubr)
library(Hmisc)
library(GGally)
library(plotly)
library(car)
library(lmtest)
library(leaflet)
library(raster)
library(sf)
library(tmap)
data("vivienda")
names(vivienda)
## [1] "id" "zona" "piso" "estrato" "preciom"
## [6] "areaconst" "parqueaderos" "banios" "habitaciones" "tipo"
## [11] "barrio" "longitud" "latitud"
Realice un filtro a la base de datos e incluya solo las ofertas de : base1: casas, de la zona norte de la ciudad. Presente los primeros 3 registros de las bases y algunas tablas que comprueben la consulta. (Adicional un mapa con los puntos de las bases. Discutir si todos los puntos se ubican en la zona correspondiente o se presentan valores en otras zonas, por que?).
En inicio se hace una breve exploración para revisar la frecuencia de los datos categóricos contenidos en cada columna de este tipo.
table(vivienda$tipo)
##
## Apartamento Casa
## 5100 3219
table(vivienda$estrato)
##
## 3 4 5 6
## 1453 2129 2750 1987
table(vivienda$zona)
##
## Zona Centro Zona Norte Zona Oeste Zona Oriente Zona Sur
## 124 1920 1198 351 4726
Una ves revisados los datos que se consideran necesarios para resolver la primera petición, se procede a crear el filtro solicitado
base1=subset(vivienda, tipo=="Casa" & zona=="Zona Norte")
base1[1:3,]
## # A tibble: 3 × 13
## id zona piso estrato preciom areaconst parqueaderos banios habitaciones
## <dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1209 Zona N… 02 5 320 150 2 4 6
## 2 1592 Zona N… 02 5 780 380 2 3 3
## 3 4057 Zona N… 02 6 750 445 NA 7 6
## # ℹ 4 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>
Para verificar los filtros realizados se puede ver la frecuencia de los valores solicitados en la columna tipo y en la columna zona.
ttipo=data.frame(table(base1$tipo))
colnames(ttipo) <- c("Tipo","Cantidad")
ttipo
## Tipo Cantidad
## 1 Casa 722
tzona=data.frame(table(base1$zona))
colnames(tzona) <- c("Zona","Cantidad")
tzona
## Zona Cantidad
## 1 Zona Norte 722
g1=ggplot(ttipo,aes(x=Tipo,y = Cantidad, fill = Tipo))+geom_col(fill = "lightblue",col = 1)+xlab("Tipo de construccion")+theme_bw()
g2=ggplot(tzona,aes(x=Zona,y = Cantidad, fill = Tipo))+geom_col(fill = "ivory",col = 1)+xlab("Zona donde se ubica")+theme_bw()
(g1+g2)
Ahora se procede a realizar el mapa solicitado, con dos procedimientos para validar la ubicación de cada una de las ofertas:
leaflet() %>% addTiles() %>%
addCircleMarkers(lng = base1$longitud,
lat = base1$latitud)
cali=shapefile("C:/Users/yeffe/OneDrive/Documentos/Maestria Ciencia de Datos/Intento/mc_barrios.shp")
cali.tmap=tm_shape(cali)+tm_polygons()
oferta_sf=st_as_sf(base1,coords=c("longitud","latitud"))
cali2 = tm_shape(cali) + tm_polygons() + tm_shape(oferta_sf) + tm_dots(size=0.3, col="red")
cali2
## Warning: Currect projection of shape oferta_sf unknown. Long-lat (WGS84) is
## assumed.
Análisis. Aunque se verifica que el filtro únicamente haya quedado con las ofertas que se ubican en la zona norte y con el tipo de vivienda como Casa, se puede observar en el mapa que la ubicación de muchas de las edificaciones se encuentran fuera de lo que se consideraría “Zona Norte” este caso puede deberse a un fallo de la aplicación de georeferenciacion integrada a la pagina web de donde se extrajo la base datos, o también puede deberse a problemas al momento de ingresar los datos por los vendedores en el proceso de de crear el anuncio.
Realice un análisis exploratorio de datos enfocado en la correlación entre la variable respuesta (precio del apartamento) en función del área construida, estrato, numero de baños, numero de habitaciones y zona donde se ubica la vivienda. Use gráficos interactivos con el paquete plotly e interprete los resultados
En principio se revisa la cantidad de valores N/A presentes en la tabla filtrada
apply(X = is.na(base1), MARGIN = 2, FUN = sum)
## id zona piso estrato preciom areaconst
## 0 0 372 0 0 0
## parqueaderos banios habitaciones tipo barrio longitud
## 287 0 0 0 0 0
## latitud
## 0
dim(base1)
## [1] 722 13
baseSNA=base1
Análisis. En la variable piso se registra un total de 372 datos de tipo N/A, sin embargo teniendo en cuenta el contexto con el cual se esta trabajando con edificaciones tipo “Casa” se supone que estas normalmente se ubican directamente terreno ya que no se trata de construcciones de tipo horizontal como si lo son los apartamentos; por esta razón esta variable se desprecia para la creación del modelo para el caso en que se busca casas.
Sin embargo, para la variable parqueaderos si se requiere hacer un ajuste, cambiando los valores que se tienen como N/A por un valor 0, que permita hacer el análisis con los 722 datos filtrados. Para esto se crea una segunda tabla “baseSNA” dejando la primera como respaldo.
Por otro lado, revisando las variables se detecta que se encuentra una de tipo categórico que representa el estrado de la vivienda, por tal razón en la base de datos “baseSNA” también se hace el ajuste para el trabajo con esta variable.
baseSNA$piso <- as.numeric(baseSNA$piso)
baseSNA$estrato <- as.factor(baseSNA$estrato)
baseSNA[is.na(baseSNA)] <- 0
Una vez realizada la limpieza de los datos, se procede a realizar el análisis exploratorio de datos enfocado en la correlación entre la variable respuesta y las demás variables.
describe(baseSNA)
## baseSNA
##
## 13 Variables 722 Observations
## --------------------------------------------------------------------------------
## id
## n missing distinct Info Mean Gmd .05 .10
## 722 0 722 1 2575 2232 206.2 343.3
## .25 .50 .75 .90 .95
## 766.2 2257.0 4225.0 5242.3 6135.1
##
## lowest : 58 88 94 98 103, highest: 7885 7987 8088 8318 8319
## --------------------------------------------------------------------------------
## zona
## n missing distinct value
## 722 0 1 Zona Norte
##
## Value Zona Norte
## Frequency 722
## Proportion 1
## --------------------------------------------------------------------------------
## piso
## n missing distinct Info Mean Gmd
## 722 0 6 0.842 0.9668 1.174
##
## lowest : 0 1 2 3 4, highest: 1 2 3 4 7
##
## Value 0 1 2 3 4 7
## Frequency 372 84 194 65 6 1
## Proportion 0.515 0.116 0.269 0.090 0.008 0.001
## --------------------------------------------------------------------------------
## estrato
## n missing distinct
## 722 0 4
##
## Value 3 4 5 6
## Frequency 235 161 271 55
## Proportion 0.325 0.223 0.375 0.076
## --------------------------------------------------------------------------------
## preciom
## n missing distinct Info Mean Gmd .05 .10
## 722 0 167 1 445.9 275.4 145.0 167.1
## .25 .50 .75 .90 .95
## 261.2 390.0 550.0 780.0 928.5
##
## lowest : 89 110 115 117 118, highest: 1530 1600 1650 1800 1940
## --------------------------------------------------------------------------------
## areaconst
## n missing distinct Info Mean Gmd .05 .10
## 722 0 251 1 264.9 172.1 75.0 93.1
## .25 .50 .75 .90 .95
## 140.0 240.0 336.8 454.9 535.4
##
## lowest : 30 45 55 60 61, highest: 942 950 960 1188 1440
## --------------------------------------------------------------------------------
## parqueaderos
## n missing distinct Info Mean Gmd .05 .10
## 722 0 11 0.915 1.314 1.544 0 0
## .25 .50 .75 .90 .95
## 0 1 2 3 4
##
## lowest : 0 1 2 3 4, highest: 6 7 8 9 10
##
## Value 0 1 2 3 4 5 6 7 8 9 10
## Frequency 287 161 158 49 40 11 8 5 1 1 1
## Proportion 0.398 0.223 0.219 0.068 0.055 0.015 0.011 0.007 0.001 0.001 0.001
## --------------------------------------------------------------------------------
## banios
## n missing distinct Info Mean Gmd .05 .10
## 722 0 11 0.954 3.555 1.65 2 2
## .25 .50 .75 .90 .95
## 2 3 4 5 6
##
## lowest : 0 1 2 3 4, highest: 6 7 8 9 10
##
## Value 0 1 2 3 4 5 6 7 8 9 10
## Frequency 10 17 165 187 171 101 46 11 11 1 2
## Proportion 0.014 0.024 0.229 0.259 0.237 0.140 0.064 0.015 0.015 0.001 0.003
## --------------------------------------------------------------------------------
## habitaciones
## n missing distinct Info Mean Gmd .05 .10
## 722 0 11 0.95 4.507 1.922 3 3
## .25 .50 .75 .90 .95
## 3 4 5 7 8
##
## lowest : 0 1 2 3 4, highest: 6 7 8 9 10
##
## Value 0 1 2 3 4 5 6 7 8 9 10
## Frequency 20 2 12 171 222 137 60 42 29 14 13
## Proportion 0.028 0.003 0.017 0.237 0.307 0.190 0.083 0.058 0.040 0.019 0.018
## --------------------------------------------------------------------------------
## tipo
## n missing distinct value
## 722 0 1 Casa
##
## Value Casa
## Frequency 722
## Proportion 1
## --------------------------------------------------------------------------------
## barrio
## n missing distinct
## 722 0 103
##
## lowest : acopi alameda del río alamos atanasio girardot barranquilla
## highest: villas de veracruz Villas De Veracruz vipasa zona norte zona oriente
## --------------------------------------------------------------------------------
## longitud
## n missing distinct Info Mean Gmd .05 .10
## 722 0 464 1 -76.52 0.01892 -76.54 -76.54
## .25 .50 .75 .90 .95
## -76.53 -76.52 -76.50 -76.49 -76.49
##
## lowest : -76.58915 -76.58876 -76.55500 -76.55363 -76.55290
## highest: -76.48302 -76.48271 -76.48238 -76.48200 -76.47300
## --------------------------------------------------------------------------------
## latitud
## n missing distinct Info Mean Gmd .05 .10
## 722 0 462 1 3.46 0.03112 3.386 3.413
## .25 .50 .75 .90 .95
## 3.452 3.468 3.482 3.487 3.489
##
## lowest : 3.33308 3.33656 3.34102 3.34994 3.35133
## highest: 3.49341 3.49374 3.49453 3.49461 3.49584
## --------------------------------------------------------------------------------
ggpairs(baseSNA[,4:9], title=" ")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
fig <- plot_ly(alpha = 0.6)
fig <- fig %>% add_histogram(x = baseSNA$banios, name = "Baños")
fig <- fig %>% add_histogram(x = baseSNA$estrato, name = "Estrato")
fig <- fig %>% layout(barmode = "overlay", title = "Histograma de Baños y Estrato")
fig
## Warning: Can't display both discrete & non-discrete data on same axis
fig2 <- plot_ly(baseSNA,x=baseSNA$areaconst,y=baseSNA$preciom,type="scatter",mode = "markers+text")
fig2 <- fig2 %>% layout(title = "Relación entre área construida y precio", xaxis = list(title.text="Área construida (m2)"), yaxis=list(title.text="Precio (millones de pesos)"))
fig2
Análisis. A partir del gráfico de asociación entre las variables cuantitativas con la matriz de dispersión y correlación se puede observar que las variables que mas tiene correlación con el precio de la casa son:
Esto también se refleja en los diagramas de histograma y distribución de las variables.
Estime un modelo de regresión lineal múltiple con las variables del punto anterior (precio = f(área construida, estrato, numero de cuartos, numero de parqueaderos, numero de baños ) ) e interprete los coeficientes si son estadísticamente significativos. Las interpretaciones deber están contextualizadas y discutir si los resultados son lógicos. Adicionalmente interprete el coeficiente R2 y discuta el ajuste del modelo e implicaciones (que podrían hacer para mejorarlo)
En inicio se hace la estimación del modelo mediante el método MCO como se muestra a continuación:
modelo1=lm(preciom ~ areaconst + parqueaderos + banios + habitaciones + estrato, data=baseSNA)
summary(modelo1)
##
## Call:
## lm(formula = preciom ~ areaconst + parqueaderos + banios + habitaciones +
## estrato, data = baseSNA)
##
## Residuals:
## Min 1Q Median 3Q Max
## -968.46 -73.69 -16.08 45.60 1069.39
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 31.2881 17.7126 1.766 0.0777 .
## areaconst 0.8244 0.0431 19.129 < 2e-16 ***
## parqueaderos 2.3523 4.3557 0.540 0.5893
## banios 25.6403 5.3555 4.788 2.05e-06 ***
## habitaciones 1.5129 4.1422 0.365 0.7150
## estrato4 84.2528 17.5448 4.802 1.91e-06 ***
## estrato5 136.7761 16.9079 8.089 2.57e-15 ***
## estrato6 329.2170 26.5567 12.397 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 157 on 714 degrees of freedom
## Multiple R-squared: 0.6613, Adjusted R-squared: 0.6579
## F-statistic: 199.1 on 7 and 714 DF, p-value: < 2.2e-16
Una vez realizado el modelo de linealidad múltiple mediante el método MCO, se procede a evaluar problemas de multicolinealidad.
vif(modelo1)
## GVIF Df GVIF^(1/(2*Df))
## areaconst 1.518998 1 1.232476
## parqueaderos 1.293590 1 1.137361
## banios 1.949365 1 1.396196
## habitaciones 1.677473 1 1.295173
## estrato 1.634724 3 1.085361
Análisis. Los coeficientes de cada variable se presentan a continuación:
areaconst: Esta variable presenta un alto nivel de significancia según los resultados del modelo “***“, por otro lado, el modelo arroja un coeficiente β1 de aproximadamente 0.83, lo que se traduce que por cada metro cuadrado en que aumenta la construcción, el valor de la misma también incrementa en 0.83 millones aproximadamente.
parqueaderos: Esta variable presenta el nivel de significancia mas bajo según los resultados del modelo ““, también arroja un coeficiente β2 de aproximadamente 2.35, lo cual es un valor atípico teniendo en cuenta que no se ajusta a la realidad, el valor de una propiedad aumenta por el incremento en el numero de parqueaderos que esta tenga; lo que quiere decir que entre mas parqueaderos tiene una construcción mas valor tiene.
banios: Esta variable presenta un alto nivel de significancia según los resultados del modelo “***“, ademad este arroja un coeficiente β3 de aproximadamente 26, lo que se traduce que por cada baño que tenga la propiedad, esta aumenta el valor de la misma en 26 millones aproximadamente.
habitaciones: Esta variable presenta el nivel de significancia mas bajo según los resultados del modelo ““, sin embargo, arroja un coeficiente β4 positivo de aproximadamente 1.51, lo que se traduce que por cada habitación que hay de mas en la construcción, el valor de la misma también incrementa en 1.51 millones aproximadamente.
estrato: Esta variable presenta un alto nivel de significancia según los resultados del modelo “***“, por otro lado, el modelo arroja un coeficiente β5 variado para cada estrato de aproximadamente: Estrato 4: con un un coeficiente β5 de 84 Estrato 5: con un un coeficiente β5 de 137 Estrato 6: con un un coeficiente β5 de 329 Lo que se traduce que por el aumento de cada estrato en donde se encuentre la construcción, el valor de la misma también incrementa en 84, 137 y 329 millones respectivamente para los estratos 4, 5 y 6.
En general gracias al valor de R2 se sabe que el modelo permite explicar en un 66% la relación de las variables y a su vez rechaza con contundencia que los valores de β1, β3 y β5 sean iguales a 0.
Recomendaciones para la mejora del modelo: En principio se podría cambiar la escala de las variables numéricas, por ejemplo aplicando un logaritmo a alguna de las columnas en las que se presente poca correlación con la variable precio. Por otro lado, se puede mejorar la estimación del modelo mediante el uso de metodológica de estimación de manera gradual, con procesos de paso a paso o Steppwise.
Ejemplo de ajuste Un posible ajuste como se comentaba, se trata de ajustar el modelo con metodología de estimación de manera gradual con procesos de paso a paso como el que se realiza a continuación:
mod_final1=step(modelo1,direction = "backward")
## Start: AIC=7308.74
## preciom ~ areaconst + parqueaderos + banios + habitaciones +
## estrato
##
## Df Sum of Sq RSS AIC
## - habitaciones 1 3286 17592193 7306.9
## - parqueaderos 1 7184 17596091 7307.0
## <none> 17588907 7308.7
## - banios 1 564653 18153559 7329.6
## - estrato 3 4000691 21589597 7450.7
## - areaconst 1 9014613 26603519 7605.5
##
## Step: AIC=7306.88
## preciom ~ areaconst + parqueaderos + banios + estrato
##
## Df Sum of Sq RSS AIC
## - parqueaderos 1 8738 17600931 7305.2
## <none> 17592193 7306.9
## - banios 1 838093 18430286 7338.5
## - estrato 3 4190913 21783106 7455.2
## - areaconst 1 9497716 27089909 7616.6
##
## Step: AIC=7305.24
## preciom ~ areaconst + banios + estrato
##
## Df Sum of Sq RSS AIC
## <none> 17600931 7305.2
## - banios 1 889690 18490620 7338.8
## - estrato 3 4293364 21894295 7456.8
## - areaconst 1 9724346 27325277 7620.8
mod_final1
##
## Call:
## lm(formula = preciom ~ areaconst + banios + estrato, data = baseSNA)
##
## Coefficients:
## (Intercept) areaconst banios estrato4 estrato5 estrato6
## 33.9656 0.8308 27.1024 84.2893 137.9211 327.8007
Análisis. A partir del anterior ajuste se toman las variables finales para generar un segundo modelo que permita mejorar la medida de predicción, este proceso se presenta a continuación:
modelo2=lm(preciom ~ areaconst + banios + estrato, data=baseSNA)
summary(modelo2)
##
## Call:
## lm(formula = preciom ~ areaconst + banios + estrato, data = baseSNA)
##
## Residuals:
## Min 1Q Median 3Q Max
## -968.77 -73.13 -16.35 45.27 1069.02
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 33.96564 15.51078 2.190 0.0289 *
## areaconst 0.83083 0.04177 19.889 < 2e-16 ***
## banios 27.10245 4.50506 6.016 2.85e-09 ***
## estrato4 84.28927 16.89775 4.988 7.66e-07 ***
## estrato5 137.92112 15.73297 8.766 < 2e-16 ***
## estrato6 327.80065 25.82630 12.693 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 156.8 on 716 degrees of freedom
## Multiple R-squared: 0.661, Adjusted R-squared: 0.6587
## F-statistic: 279.3 on 5 and 716 DF, p-value: < 2.2e-16
Análisis. Aunque este ajuste no modifica los valores de los coeficientes β ni del coeficiente R2, si mejora los valores obtenidos en la validación de supuestos del modelo, como por ejemplo el supuesto de independencia de los errores y supuesto de varianza de los errores.
Realice la validación de supuestos del modelo e interprete los resultados (no es necesario corregir en caso de presentar problemas solo realizar sugerencias de que se podría hacer)
Inicialmente se realiza la validación de manera gráfica, como se muestra a continuación:
par(mfrow=c(2,2))
plot(modelo2)
Luego se valida mediante el manejo de las diferentes pruebas de hipótesis.
e = modelo2$residuals
shapiro.test(e)
##
## Shapiro-Wilk normality test
##
## data: e
## W = 0.83045, p-value < 2.2e-16
dwtest(modelo2)
##
## Durbin-Watson test
##
## data: modelo2
## DW = 1.69, p-value = 1.163e-05
## alternative hypothesis: true autocorrelation is greater than 0
gqtest(modelo2)
##
## Goldfeld-Quandt test
##
## data: modelo2
## GQ = 1.1989, df1 = 355, df2 = 355, p-value = 0.04392
## alternative hypothesis: variance increases from segment 1 to 2
g3=ggplot(baseSNA, aes(preciom, areaconst)) + geom_point() + geom_smooth(method = "lm", level = 0.95, formula = y ~ x)
g4=ggplot(baseSNA, aes(preciom, banios)) + geom_point() + geom_smooth(method = "lm", level = 0.95, formula = y ~ x)
(g3+g4)
vif(modelo2)
## GVIF Df GVIF^(1/(2*Df))
## areaconst 1.430202 1 1.195910
## banios 1.382317 1 1.175720
## estrato 1.376739 3 1.054732
Análisis final cuarto punto: Como se puede evidenciar por los resultados obtenidos, el supuesto de varianza de los errores y el supuesto de linealidad del modelo cumplen tanto en la gráfica inicial, como en los test de prueba realizados, en donde el valor supera es igual al 5% aceptando la hipótesis de varianza. El supuesto de multicolinealidad nos indica que no hay problemas en el modelo ya que con la medida de de factores de inflación de varianza se obtiene un valor por debajo de 5.
Aunque varios de los supuestos no se cumplen, se recomienda hacer procesos de ajuste con validación cruzada revisando con las métricas de validación para variables numéricas de MAE y MAPE o transformaciones en las variables numéricas (por ejemplo de tipo log) con el fin de mejorar los indicadores y cumplimiento de los supuestos. Es necesario revisar los criterios de AIC, BIC, estadístico F del ANOVA y el valor RMSE.
Con el modelo identificado debe predecir el precio de la vivienda con las características de la primera solicitud.
predict(modelo2,list(areaconst=200,banios=2,estrato="4"))
## 1
## 338.6254
Análisis. El precio final según las características indicadas por el cliente usando el modelo 2, seria el siguiente:
Características caso 1: Tipo ~ Casa Área construida ~ 200 Parqueaderos ~ 1 Baños ~ 2 Habitaciones ~ 4 Estrato ~ 4 Zona ~ Norte La primera configuración cambia con respecto a la segunda únicamente por el valor del estrato de la edificación, el costo que el modelo arroja es de 339 millones de pesos.
Características caso 2: Tipo ~ Casa Área construida ~ 200 Parqueaderos ~ 1 Baños ~ 2 Habitaciones ~ 4 Estrato ~ 5 Zona ~ Norte La segunda configuración cambia con respecto a la primera únicamente por el valor del estrato de la edificación, el costo que el modelo arroja es de 392 millones de pesos.
Conclusión. A partir de los dos casos en que se predice el precio de la vivienda, se concluye que el que mejor se ajusta al crédito aprobado de 350 millones para la vivienda 1 es el caso con la características 1 que difiere únicamente en que su estrato es 4 con una predicción de precio de precio de 339 millones.
Con las predicciones del modelo sugiera potenciales ofertas que responda a la solicitud de la vivienda 1. Tenga encuentra que la empresa tiene crédito pre aprobado de máximo 350 millones de pesos. Realice un análisis y presente en un mapa al menos 5 ofertas potenciales que debe discutir.
Inicialmente se hace el filtro para conocer , como se muestra a continuación:
baseVivienda1=subset(baseSNA, areaconst>200 & preciom<339 & habitaciones>=4 & estrato==4 & parqueaderos>=1)
baseVivienda1[is.na(baseVivienda1)] <- 0
baseVivienda1[]
## # A tibble: 6 × 13
## id zona piso estrato preciom areaconst parqueaderos banios habitaciones
## <dbl> <chr> <dbl> <fct> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 4458 Zona N… 2 4 315 270 2 4 4
## 2 3352 Zona N… 0 4 335 300 3 4 4
## 3 952 Zona N… 2 4 330 275 2 3 5
## 4 1020 Zona N… 2 4 230 250 2 3 5
## 5 1108 Zona N… 2 4 330 260 1 3 4
## 6 7432 Zona N… 1 4 260 280 2 4 6
## # ℹ 4 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>
Ahora se procede a realizar el mapa solicitado con las 5 ofertas potenciales, con dos procedimientos para validar la ubicación de cada una de las ofertas:
leaflet() %>% addTiles() %>%
addCircleMarkers(lng = baseVivienda1$longitud,
lat = baseVivienda1$latitud)
baseVivienda1$id = as.character(baseVivienda1$id)
oferta5Casas=st_as_sf(baseVivienda1,coords=c("longitud","latitud"))
cali3= tm_shape(cali) + tm_polygons() + tm_shape(oferta5Casas) + tm_dots(size=0.3, col="blue")
cali3
## Warning: Currect projection of shape oferta5Casas unknown. Long-lat (WGS84) is
## assumed.
Análisis: Se presentan varias ofertas potenciales (6) para la solicitud de la vivienda 1, de las cuales 4 edificaciones se ubican en el mapa en la zona norte, por otro lado, todas son tipo “Casa” estrato 4 y tienen la siguientes características:
ID 4458: Precio = 315 millones, Área construida = 270m2 Parqueaderos = 2, Baños = 4 y Habitaciones = 4 ID 952: Precio = 330 millones, Área construida = 275m2 Parqueaderos = 2, Baños = 3 y Habitaciones = 5 ID 1020: Precio = 230 millones, Área construida = 250m2 Parqueaderos = 2, Baños = 3 y Habitaciones = 5 ID 1108: Precio = 330 millones, Área construida = 260m2 Parqueaderos = 2, Baños = 4 y Habitaciones = 6
A partir de lo anterior, se recomendaría a Maria que si lo que busca es ahorrar dinero del crédito adquiera la casa ID 1020 la cual supera todas las especificaciones solicitas con 50 metros cuadrados sobre lo solicitado, 1 parqueadero adicional, 1 baño y 1 habitación de mas, por otro lado, con esta adquisición lograría ahorrar un total de 120 millones del crédito aprobado.
Realice los pasos del 1 al 6. Para la segunda solicitud se tiene un crédito preaprobado por valor de $850 millones.
Realice un filtro a la base de datos e incluya solo las ofertas de : base1: apartamento, de la zona sur de la ciudad. Presente los primeros 3 registros de las bases y algunas tablas que comprueben la consulta. (Adicional un mapa con los puntos de las bases. Discutir si todos los puntos se ubican en la zona correspondiente o se presentan valores en otras zonas, por que?).
Se trabajan con los datos ya revisados de la primera fase y se consideran los necesarios para resolver la segunda petición creando el filtro solicitado:
base2=subset(vivienda, tipo=="Apartamento" & zona=="Zona Sur")
base2[1:3,]
## # A tibble: 3 × 13
## id zona piso estrato preciom areaconst parqueaderos banios habitaciones
## <dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 5098 Zona S… 05 4 290 96 1 2 3
## 2 698 Zona S… 02 3 78 40 1 1 2
## 3 8199 Zona S… <NA> 6 875 194 2 5 3
## # ℹ 4 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>
Para verificar los filtros realizados se puede ver la frecuencia de los valores solicitados en la columna tipo y en la columna zona.
ttipo2=data.frame(table(base2$tipo))
colnames(ttipo2) <- c("Tipo","Cantidad")
ttipo2
## Tipo Cantidad
## 1 Apartamento 2787
tzona2=data.frame(table(base2$zona))
colnames(tzona2) <- c("Zona","Cantidad")
tzona2
## Zona Cantidad
## 1 Zona Sur 2787
g5=ggplot(ttipo2,aes(x=Tipo,y = Cantidad, fill = Tipo))+geom_col(fill = "olivedrab1",col = 1)+xlab("Tipo de construccion")+theme_bw()
g6=ggplot(tzona2,aes(x=Zona,y = Cantidad, fill = Tipo))+geom_col(fill = "lightgoldenrod",col = 1)+xlab("Zona donde se ubica")+theme_bw()
(g5+g6)
Ahora se procede a realizar el mapa solicitado, con dos procedimientos para validar la ubicación de cada una de las ofertas:
leaflet() %>% addTiles() %>%
addCircleMarkers(lng = base2$longitud,
lat = base2$latitud)
oferta_sf=st_as_sf(base2,coords=c("longitud","latitud"))
cali4 = tm_shape(cali) + tm_polygons() + tm_shape(oferta_sf) + tm_dots(size=0.3, col="olivedrab1")
cali4
## Warning: Currect projection of shape oferta_sf unknown. Long-lat (WGS84) is
## assumed.
Análisis. Aunque se verifica que el filtro únicamente haya quedado con las ofertas que se ubican en la Zona Sur y con el tipo de vivienda como Apartamento, se puede observar en el mapa que la ubicación de muchas de las edificaciones se encuentran fuera de lo que se consideraría “Zona Sur” este caso puede deberse a un fallo de la aplicación de georeferenciacion integrada a la pagina web de donde se extrajo la base datos, o también puede deberse a problemas al momento de ingresar los datos por los vendedores en el proceso de crear el anuncio.
Realice un análisis exploratorio de datos enfocado en la correlación entre la variable respuesta (precio del apartamento) en función del área construida, estrato, numero de baños, numero de habitaciones y zona donde se ubica la vivienda. Use gráficos interactivos con el paquete plotly e interprete los resultados
En principio se revisa la cantidad de valores N/A presentes en la tabla filtrada
apply(X = is.na(base2), MARGIN = 2, FUN = sum)
## id zona piso estrato preciom areaconst
## 0 0 622 0 0 0
## parqueaderos banios habitaciones tipo barrio longitud
## 406 0 0 0 0 0
## latitud
## 0
dim(base2)
## [1] 2787 13
baseSNA2=base2
Análisis. En la variable piso se registra un total de 622 datos de tipo N/A, esta variable es influyente al momento de evaluar este tipo de edificaciones, por tal razón, se procede a eliminar las filas que contienen datos N/A en esa variable.
Sin embargo, para la variable parqueaderos si se requiere hacer un ajuste, asumiendo que los valores que se tienen como N/A son un dato de “No Aplica” por tal razón un valor de 0, que permita hacer el análisis con los 406 datos filtrados para esta variable. De esta manera se crea una segunda tabla “baseSNA2” dejando la primera “base2” como respaldo.
Por otro lado, revisando las variables se detecta que se encuentra una de tipo categórico que representa el estrado de la vivienda, por tal razón en la base de datos “baseSNA2” también se hace el ajuste para el trabajo con esta variable.
baseSNA2$piso <- as.numeric(baseSNA2$piso)
baseSNA2$estrato <- as.factor(baseSNA2$estrato)
baseSNA2$parqueaderos[is.na(baseSNA2$parqueaderos)] <- 0
baseSNA2 <- na.omit(baseSNA2)
Una vez realizada la limpieza de los datos, se procede a realizar el análisis exploratorio de datos enfocado en la correlación entre la variable respuesta y las demás variables.
describe(baseSNA2)
## baseSNA2
##
## 13 Variables 2165 Observations
## --------------------------------------------------------------------------------
## id
## n missing distinct Info Mean Gmd .05 .10
## 2165 0 2165 1 4124 2435 935.6 1517.6
## .25 .50 .75 .90 .95
## 2229.0 4062.0 5865.0 7052.6 7668.0
##
## lowest : 3 8 9 10 14, highest: 8288 8293 8294 8299 8302
## --------------------------------------------------------------------------------
## zona
## n missing distinct value
## 2165 0 1 Zona Sur
##
## Value Zona Sur
## Frequency 2165
## Proportion 1
## --------------------------------------------------------------------------------
## piso
## n missing distinct Info Mean Gmd .05 .10
## 2165 0 12 0.983 4.469 2.942 1 1
## .25 .50 .75 .90 .95
## 2 4 6 8 10
##
## lowest : 1 2 3 4 5, highest: 8 9 10 11 12
##
## Value 1 2 3 4 5 6 7 8 9 10 11
## Frequency 255 319 329 327 353 131 113 129 73 73 29
## Proportion 0.118 0.147 0.152 0.151 0.163 0.061 0.052 0.060 0.034 0.034 0.013
##
## Value 12
## Frequency 34
## Proportion 0.016
## --------------------------------------------------------------------------------
## estrato
## n missing distinct
## 2165 0 4
##
## Value 3 4 5 6
## Frequency 149 859 809 348
## Proportion 0.069 0.397 0.374 0.161
## --------------------------------------------------------------------------------
## preciom
## n missing distinct Info Mean Gmd .05 .10
## 2165 0 310 1 292.3 171.1 125.2 140.0
## .25 .50 .75 .90 .95
## 175.0 245.0 330.0 520.0 650.0
##
## lowest : 75 78 85 90 93, highest: 1500 1561 1600 1700 1750
## --------------------------------------------------------------------------------
## areaconst
## n missing distinct Info Mean Gmd .05 .10
## 2165 0 239 0.999 96.16 43.59 55 59
## .25 .50 .75 .90 .95
## 65 85 109 145 180
##
## lowest : 40 43 44 45 47, highest: 464 486 520 605 932
## --------------------------------------------------------------------------------
## parqueaderos
## n missing distinct Info Mean Gmd
## 2165 0 5 0.804 1.201 0.7443
##
## lowest : 0 1 2 3 4, highest: 0 1 2 3 4
##
## Value 0 1 2 3 4
## Frequency 305 1210 578 53 19
## Proportion 0.141 0.559 0.267 0.024 0.009
## --------------------------------------------------------------------------------
## banios
## n missing distinct Info Mean Gmd
## 2165 0 8 0.801 2.485 0.8975
##
## lowest : 0 1 2 3 4, highest: 3 4 5 6 7
##
## Value 0 1 2 3 4 5 6 7
## Frequency 2 129 1231 529 176 91 6 1
## Proportion 0.001 0.060 0.569 0.244 0.081 0.042 0.003 0.000
## --------------------------------------------------------------------------------
## habitaciones
## n missing distinct Info Mean Gmd
## 2165 0 7 0.68 2.969 0.5775
##
## lowest : 0 1 2 3 4, highest: 2 3 4 5 6
##
## Value 0 1 2 3 4 5 6
## Frequency 4 15 361 1469 300 13 3
## Proportion 0.002 0.007 0.167 0.679 0.139 0.006 0.001
## --------------------------------------------------------------------------------
## tipo
## n missing distinct value
## 2165 0 1 Apartamento
##
## Value Apartamento
## Frequency 2165
## Proportion 1
## --------------------------------------------------------------------------------
## barrio
## n missing distinct
## 2165 0 117
##
## lowest : acopi aguablanca alf√©rez real alto jordán altos de guadalupe
## highest: Valle Del Lili versalles villa del sur vipasa zona sur
## --------------------------------------------------------------------------------
## longitud
## n missing distinct Info Mean Gmd .05 .10
## 2165 0 1042 1 -76.53 0.01571 -76.55 -76.55
## .25 .50 .75 .90 .95
## -76.54 -76.53 -76.52 -76.52 -76.51
##
## lowest : -76.56525 -76.56500 -76.56493 -76.56475 -76.56400
## highest: -76.46516 -76.46500 -76.46478 -76.46438 -76.46400
## --------------------------------------------------------------------------------
## latitud
## n missing distinct Info Mean Gmd .05 .10
## 2165 0 1193 1 3.39 0.03143 3.348 3.361
## .25 .50 .75 .90 .95
## 3.371 3.383 3.406 3.429 3.449
##
## lowest : 3.33367 3.33418 3.33448 3.33500 3.33600
## highest: 3.48346 3.48383 3.48540 3.48941 3.49684
## --------------------------------------------------------------------------------
ggpairs(baseSNA2[,3:9], title=" ")
fig3 <- plot_ly(alpha = 0.6)
fig3 <- fig3 %>% add_histogram(x = baseSNA2$banios, name = "Baños")
fig3 <- fig3 %>% add_histogram(x = baseSNA2$estrato, name = "Estrato")
fig3 <- fig3 %>% add_histogram(x = baseSNA2$piso, name = "Piso")
fig3 <- fig3 %>% layout(barmode = "overlay", title = "Histograma de Baños, Pisos y Estrato")
fig3
## Warning: Can't display both discrete & non-discrete data on same axis
fig4 <- plot_ly(baseSNA2,x=baseSNA2$areaconst,y=baseSNA2$preciom,type="scatter",mode = "markers+text")
fig4 <- fig4 %>% layout(title = "Relación entre área construida y precio", xaxis = list(title.text="Área construida (m2)"), yaxis=list(title.text="Precio (millones de pesos)"))
fig4
Análisis. A partir del gráfico de asociación entre las variables cuantitativas con la matriz de dispersión y correlación se puede observar que las variables que mas tiene correlación con el precio de la casa son:
Esto también se refleja en los diagramas de histograma y distribución de las variables.
Estime un modelo de regresión lineal múltiple con las variables del punto anterior (precio = f(área construida, estrato, numero de cuartos, numero de parqueaderos, numero de baños, piso) ) e interprete los coeficientes si son estadísticamente significativos. Las interpretaciones deber están contextualizadas y discutir si los resultados son lógicos. Adicionalmente interprete el coeficiente R2 y discuta el ajuste del modelo e implicaciones (que podrían hacer para mejorarlo)
En inicio se hace la estimación del modelo mediante el método MCO como se muestra a continuación:
modelo3=lm(preciom ~ areaconst + piso + parqueaderos + banios + habitaciones + estrato, data=baseSNA2)
summary(modelo3)
##
## Call:
## lm(formula = preciom ~ areaconst + piso + parqueaderos + banios +
## habitaciones + estrato, data = baseSNA2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1089.61 -35.04 0.50 32.07 919.89
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -22.33549 11.43584 -1.953 0.05094 .
## areaconst 1.31091 0.05145 25.478 < 2e-16 ***
## piso 2.56681 0.69962 3.669 0.00025 ***
## parqueaderos 48.22452 3.46008 13.937 < 2e-16 ***
## banios 38.74944 3.23097 11.993 < 2e-16 ***
## habitaciones -8.94912 3.55208 -2.519 0.01183 *
## estrato4 15.25683 7.85531 1.942 0.05224 .
## estrato5 33.58321 8.26588 4.063 5.02e-05 ***
## estrato6 191.75821 10.35340 18.521 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 86.23 on 2156 degrees of freedom
## Multiple R-squared: 0.7788, Adjusted R-squared: 0.778
## F-statistic: 949 on 8 and 2156 DF, p-value: < 2.2e-16
Una vez realizado el modelo de linealidad múltiple mediante el método MCO, se procede a evaluar problemas de multicolinealidad.
vif(modelo3)
## GVIF Df GVIF^(1/(2*Df))
## areaconst 1.920548 1 1.385838
## piso 1.015860 1 1.007899
## parqueaderos 1.897119 1 1.377360
## banios 2.528282 1 1.590057
## habitaciones 1.415024 1 1.189548
## estrato 1.894041 3 1.112325
Análisis. Los coeficientes de cada variable se presentan a continuación:
areaconst: Esta variable presenta un alto nivel de significancia según los resultados del modelo “***“, por otro lado, el modelo arroja un coeficiente β1 de aproximadamente 1.31, lo que se traduce que por cada metro cuadrado en que aumenta la construcción, el valor de la misma también incrementa en 1.31 millones aproximadamente.
piso: Esta variable presenta un alto nivel de significancia según los resultados del modelo “***“, ademas este arroja un coeficiente β2 de aproximadamente 2.56, lo que se traduce que por cada nivel en que se encuentra el apartamento, esta aumenta el valor del mismo en 2.56 millones aproximadamente.
parqueaderos: Esta variable presenta un alto nivel de significancia según los resultados del modelo “***“, por otro lado, tiene un coeficiente β3 de aproximadamente 48.22, lo que se traduce que por cada parqueadero que tenga el apartamento, esta aumenta el valor del mismo en 48.22 millones aproximadamente..
banios: Esta variable presenta un alto nivel de significancia según los resultados del modelo “***“, ademas este arroja un coeficiente β4 de aproximadamente 38.75, lo que se traduce que por cada baño que tenga la propiedad, esta aumenta el valor de la misma en 38.75 millones aproximadamente.
habitaciones: Esta variable presenta el nivel de significancia medio según los resultados del modelo “*“, sin embargo, arroja un coeficiente β5 negativo de aproximadamente -8.94, lo que no es coherente ya que normalmente en las propiedades por el aumento en las habitaciones, el precio tiende a crecer.
estrato: Esta variable presenta un nivel medio (4) y alto (5, 6) de significancia según los resultados del modelo “***“, por otro lado, el modelo arroja un coeficiente β6 variado para cada estrato: Estrato 4: con un un coeficiente β6 de 15 Estrato 5: con un un coeficiente β6 de 33 Estrato 6: con un un coeficiente β6 de 192 Lo que se traduce que por el aumento de cada estrato en donde se encuentre la construcción, el valor de la misma también incrementa en 15, 33 y 192 millones respectivamente para los estratos 4, 5 y 6.
En general gracias al valor de R2 se sabe que el modelo permite explicar en un 78% la relación de las variables con la respuesta y a su vez rechaza con contundencia que los valores de β1, β2, β3, β4 y β6 sean iguales a 0.
Recomendaciones para la mejora del modelo: En principio se podría cambiar la escala de las variables numéricas, por ejemplo aplicando un logaritmo a alguna de las columnas en las que se presente poca correlación con la variable precio. Por otro lado, se puede mejorar la estimación del modelo mediante el uso de metodológica de estimación de manera gradual, con procesos de paso a paso o Steppwise.
Ejemplo de ajuste Un posible ajuste como se comentaba, se trata de ajustar el modelo con metodología de estimación de manera gradual con procesos de paso a paso como el que se realiza a continuación:
mod_final2=step(modelo3,direction = "backward")
## Start: AIC=19307.77
## preciom ~ areaconst + piso + parqueaderos + banios + habitaciones +
## estrato
##
## Df Sum of Sq RSS AIC
## <none> 16030420 19308
## - habitaciones 1 47195 16077615 19312
## - piso 1 100082 16130502 19319
## - banios 1 1069453 17099873 19446
## - parqueaderos 1 1444304 17474724 19493
## - areaconst 1 4826442 20856862 19876
## - estrato 3 5210751 21241171 19911
mod_final2
##
## Call:
## lm(formula = preciom ~ areaconst + piso + parqueaderos + banios +
## habitaciones + estrato, data = baseSNA2)
##
## Coefficients:
## (Intercept) areaconst piso parqueaderos banios
## -22.335 1.311 2.567 48.225 38.749
## habitaciones estrato4 estrato5 estrato6
## -8.949 15.257 33.583 191.758
Análisis. Aunque el ajuste no elimino ninguna de las variables, se opta por quitar la variable de habitaciones teniendo en cuenta que su significancia no afecta en valores como el coeficiente de determinación, por lo cual se crea un segundo modelo que sera el utilizado para los demás pasos, este proceso se presenta a continuación:
modelo4=lm(preciom ~ areaconst + piso + parqueaderos + banios + estrato, data=baseSNA2)
summary(modelo4)
##
## Call:
## lm(formula = preciom ~ areaconst + piso + parqueaderos + banios +
## estrato, data = baseSNA2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1070.15 -35.45 0.47 31.59 926.36
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -41.6585 8.4931 -4.905 1.00e-06 ***
## areaconst 1.2894 0.0508 25.381 < 2e-16 ***
## piso 2.6256 0.7001 3.750 0.000181 ***
## parqueaderos 48.1758 3.4643 13.906 < 2e-16 ***
## banios 35.9444 3.0368 11.836 < 2e-16 ***
## estrato4 16.8235 7.8404 2.146 0.032004 *
## estrato5 34.7039 8.2641 4.199 2.79e-05 ***
## estrato6 195.1910 10.2761 18.995 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 86.33 on 2157 degrees of freedom
## Multiple R-squared: 0.7782, Adjusted R-squared: 0.7775
## F-statistic: 1081 on 7 and 2157 DF, p-value: < 2.2e-16
Análisis. Aunque este ajuste no modifica los valores de los coeficientes β ni del coeficiente R2, si mejora los valores obtenidos en la validación de supuestos del modelo, como por ejemplo el supuesto de independencia de los errores y supuesto de varianza de los errores.
Realice la validación de supuestos del modelo e interprete los resultados (no es necesario corregir en caso de presentar problemas solo realizar sugerencias de que se podría hacer)
Inicialmente se realiza la validación de manera gráfica, como se muestra a continuación:
par(mfrow=c(2,2))
plot(modelo4)
Luego se valida mediante el manejo de las diferentes pruebas de hipótesis.
e = modelo4$residuals
shapiro.test(e)
##
## Shapiro-Wilk normality test
##
## data: e
## W = 0.75084, p-value < 2.2e-16
dwtest(modelo4)
##
## Durbin-Watson test
##
## data: modelo4
## DW = 1.7039, p-value = 1.783e-12
## alternative hypothesis: true autocorrelation is greater than 0
gqtest(modelo4)
##
## Goldfeld-Quandt test
##
## data: modelo4
## GQ = 0.76192, df1 = 1075, df2 = 1074, p-value = 1
## alternative hypothesis: variance increases from segment 1 to 2
g7=ggplot(baseSNA2, aes(preciom, areaconst)) + geom_point() + geom_smooth(method = "lm", level = 0.95, formula = y ~ x)
g8=ggplot(baseSNA2, aes(preciom, banios)) + geom_point() + geom_smooth(method = "lm", level = 0.95, formula = y ~ x)
g9=ggplot(baseSNA2, aes(preciom, piso)) + geom_point() + geom_smooth(method = "lm", level = 0.95, formula = y ~ x)
g10=ggplot(baseSNA2, aes(preciom, parqueaderos)) + geom_point() + geom_smooth(method = "lm", level = 0.95, formula = y ~ x)
(g7+g8)/(g9+g10)
vif(modelo4)
## GVIF Df GVIF^(1/(2*Df))
## areaconst 1.867636 1 1.366615
## piso 1.014730 1 1.007338
## parqueaderos 1.897060 1 1.377338
## banios 2.228057 1 1.492668
## estrato 1.845687 3 1.107541
Análisis final cuarto punto: Como se puede evidenciar por los resultados obtenidos, unicamente se cumple el supuesto de no multicolinealidad el cual indica que no hay problemas en el modelo ya que con la medida de de factores de inflación de varianza se obtiene un valor por debajo de 5. Sin embargo los demás supuestos no se ajustan.
Ya que la gran mayoría de supuestos no se cumplen, se recomienda hacer procesos de ajuste con validación cruzada revisando con las métricas de validación para variables numéricas de MAE y MAPE o transformaciones en las variables numéricas (por ejemplo de tipo log) con el fin de mejorar los indicadores y cumplimiento de los supuestos. Es necesario revisar los criterios de AIC, BIC, estadístico F del ANOVA y el valor RMSE.
Con el modelo identificado debe predecir el precio de la vivienda con las características de la primera solicitud.
predict(modelo4,list(areaconst=300,piso=12,parqueaderos=3,banios=3,estrato="6"))
## 1
## 824.2187
Análisis. El precio final según las características indicadas por el cliente usando el modelo 4, seria el siguiente:
Características caso 1: Tipo ~ Apartamento Área construida ~ 300 Parqueaderos ~ 3 Baños ~ 3 Habitaciones ~ 5 Estrato ~ 5 Zona ~ Sur La primera configuración cambia con respecto a la segunda únicamente por el valor del estrato de la edificación, el costo que el modelo arroja con las características del caso 1 para un apartamento en el primer piso (1) es de 634.85 millones de pesos y en el ultimo piso (12) es de 663.73 millones de pesos.
Características caso 2: Tipo ~ Apartamento Área construida ~ 300 Parqueaderos ~ 3 Baños ~ 3 Habitaciones ~ 5 Estrato ~ 6 Zona ~ Sur La segunda configuración cambia con respecto a la primera únicamente por el valor del estrato de la edificación, el costo que el modelo arroja con las características del caso 2 para un apartamento en el primer piso (1) es de 795.33 millones de pesos y en el ultimo piso (12) es de 824.21 millones de pesos.
Conclusión. A partir de los dos casos en que se predice el precio de la vivienda, se concluye que ambos estarían dentro del rango de precio que se aprobó para el crédito de 850 millones para la vivienda 2 por tal razón en el siguiente punto se evaluan los dos casos.
Con las predicciones del modelo sugiera potenciales ofertas que responda a la solicitud de la vivienda 2. Tenga encuentra que la empresa tiene crédito pre aprobado de máximo 850 millones de pesos. Realice un análisis y presente en un mapa al menos 5 ofertas potenciales que debe discutir.
Inicialmente se hace el filtro para el caso donde la vivienda se ubica en una zona estrato 5, como se muestra a continuación:
baseVivienda2=subset(baseSNA2, areaconst>300 & preciom<664 & estrato==5)
baseVivienda2[is.na(baseVivienda2)] <- 0
baseVivienda2[]
## # A tibble: 3 × 13
## id zona piso estrato preciom areaconst parqueaderos banios habitaciones
## <dbl> <chr> <dbl> <fct> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 7658 Zona S… 6 5 520 320 2 4 4
## 2 6472 Zona S… 3 5 170 605 1 2 2
## 3 6121 Zona S… 7 5 299 932 1 3 3
## # ℹ 4 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>
Dentro de las propiedades filtradas para las características 1 de la Vivienda 2, no hay ningún apartamento que se ajuste en la totalidad de requerimientos solicitados. Se realiza el segundo filtro con el estrato 6:
baseVivienda2E6=subset(baseSNA2, areaconst>300 & preciom<824 & estrato==6)
baseVivienda2E6[is.na(baseVivienda2E6)] <- 0
baseVivienda2E6[]
## # A tibble: 0 × 13
## # ℹ 13 variables: id <dbl>, zona <chr>, piso <dbl>, estrato <fct>,
## # preciom <dbl>, areaconst <dbl>, parqueaderos <dbl>, banios <dbl>,
## # habitaciones <dbl>, tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>
Para el caso de estrato 6 no hay viviendas en esta zona que cumplan con las características que el cliente esta solicitando, los apartamentos que se encuentran sobre los 300 metros cuadrados con estrato 6 se encuentran sobre los 950 millones de peso (valor por encima de los 850 millones pre aprobados del crédito para la Vivienda 2)
X=subset(baseSNA2, areaconst>300 & estrato==6)
X
## # A tibble: 10 × 13
## id zona piso estrato preciom areaconst parqueaderos banios habitaciones
## <dbl> <chr> <dbl> <fct> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 4958 Zona … 2 6 950 329 4 3 3
## 2 5952 Zona … 2 6 1750 342 3 5 4
## 3 6475 Zona … 2 6 1561 399 3 4 3
## 4 5211 Zona … 8 6 1350 439 4 6 4
## 5 5248 Zona … 8 6 1150 344 4 5 5
## 6 5460 Zona … 8 6 1150 346 2 6 5
## 7 6023 Zona … 8 6 1150 464 4 6 5
## 8 5190 Zona … 10 6 1600 345 3 6 3
## 9 4526 Zona … 2 6 1000 520 0 0 5
## 10 5596 Zona … 3 6 980 348 4 5 3
## # ℹ 4 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>
De igual manera se realiza el mapa solicitado con las ofertas filtradas para el caso del estrato 5, con dos procedimientos para validar la ubicación de cada una de las ofertas:
leaflet() %>% addTiles() %>%
addCircleMarkers(lng = baseVivienda2$longitud,
lat = baseVivienda2$latitud)
baseVivienda2$id = as.character(baseVivienda2$id)
oferta3Casas=st_as_sf(baseVivienda2,coords=c("longitud","latitud"))
cali5= tm_shape(cali) + tm_polygons() + tm_shape(oferta3Casas) + tm_dots(size=0.3, col="forestgreen")
cali5
## Warning: Currect projection of shape oferta3Casas unknown. Long-lat (WGS84) is
## assumed.
Análisis: Para este caso únicamente se presentaría 1 oferta potencial para la solicitud de la vivienda 2, sin embargo, cabe aclarar que que esta oferta no cumple con todos los requerimientos solicitados por el cliente, por lo cual se presenta algunas recomendaciones al final:
ID 4458: Precio = 520 millones, Área construida = 320 m2 Parqueaderos = 2, Baños = 4 y Habitaciones = 4
A partir de lo anterior, se recomendaría a Maria la posibilidad de hablar con el cliente para ver la flexibilidad en los requerimientos para la Vivienda 2 ya que en la zona sur solo esa propiedad se asemejaría a las características solicitadas, sin embargo, tiene una habitación y un parqueadero de menos. Por otro lado, una solución mas viable si se quiere se quiere conservar las características solicitadas de la propiedad seria poder cambiar de zona, por ejemplo en la “Zona Norte” se realizo un breve exploración y se encontró que algunas propiedades de esa zona si cumplen con todo lo solicitado por el cliente y ademas los precios se encuentran por debajo del rango máximo del crédito aprobado y de las proyecciones realizadas por el modelo 4.