En este documento se plantea realizar un análisis predictivo de las viviendas y residencias ubicadas en la ciudad de Cali, este análisis busca identificar cual es el valor en millones predicho por un modelo de Regresión Lineal Multiple para dos tipos de vivienda o caracteristicas de vivienda llamadas (oferta 1 y Oferta 2), posteriormente se evaluará y vizualizará mediante un mapa las viviendas que cumplan con los requisitos propuestos y su ubicación.
La sección de limpieza de datos permite hacer una purificación de la información con el fin de obtener los resultados más precisos y un análisis mucho más acertado. En total el dataset inicial cuenta con 8322 filas que estan constituidas por 13 columnas, a continuación se presenta un pequeño resumen de aquellas variables que constituyen el dataset.
| Nombre | Tipo de variable | Descripción |
|---|---|---|
| id | Numérica | Identificador de cada registro |
| zona | Caractér | Indica la zona en la que se ubica el predio en la ciudad de Cali |
| piso | Caractér | Representa el piso en que se ubica el apartamento |
| estrato | Caractér | Muestra el estrato socioeconónomico del predio |
| preciom | Numérica | Representa el precio en millones de pesos del inmueble |
| areaconst | Numérica | Representa el área del inmueble en metros cuadrados |
| parquea | Caractér | Indica el número de parqueaderos que tiene el predio |
| banios | Caractér | Expone el número de baños en el inmueble |
| habitac | Caractér | Indica el número de habitaciones del inmueble |
| tipo | Caractér | Indica el tipo de inmueble, ya sea Casa o Apartamento |
| barrio | Caractér | Muestra el barrio donde se ubica el predio |
| longitud | Numérica | Representa la longitud geográfica del predio |
| latitud | Numérica | Representa la latitud geográfica del predio |
En esta etapa se pretende que los datos de cada una de las columnas evaluadas tenga concordancia con el resto de valores, de esta manera,por ejemplo, aquellos datos que estan en mayúscula puedan convertirse en minúncula para tener una data estandarizada. En este caso se puede ver que ninguno de los atributos presenta datos mal escritos o repetidos además de los barrios que poseen una serie de nombres que pueden pertenecer al mismo barrio pero están mal escritos.
##
## Zona Centro Zona Norte Zona Oeste Zona Oriente Zona Sur
## 124 1920 1198 351 4726
##
## Apartamento Casa
## 5100 3219
##
## 3 4 5 6
## 1453 2129 2750 1987
##
## 01 02 03 04 05 06 07 08 09 10 11 12
## 860 1450 1097 607 567 245 204 211 146 130 84 83
##
## 0 1 2 3 4 5 6 7 8 9 10
## 66 59 926 4097 1729 679 318 173 138 83 51
Con base en lo anterior se realiza la normalización de algunos barrios donde se encontraron errores en su escritura.
Además durante el proceso se decidió cambiar el nombre de las variables con el fin de que estos sean mas descriptivos, además, a pesar de que algunas de las variables son numéricas como el estrato, baños, y habitaciones, para este estudio se tomaran como variables cualitativas con las que después se realizarán analisis categóricos.
Durante la depuración de la información, se debe realizar la identificación y posterior desarrollo de datos faltantes. Inicialmente se identificaron las siguientes cantidades de datos faltantes que se ven identificados en el diagrama a continucación:
## id Zona Piso Estrato Precio_Mill_COP
## 3 3 2638 3 2
## Area_m2 Parqueadero Banos Habitaciones Tipo
## 3 1605 3 3 3
## Barrio Longitud Latitud
## 96 3 3
Teniendo en cuenta la cantidad de datos faltantes existentes en el dataset, se puede apreciar que la mayoría de estos se encuentran en las variables “Piso” y “Parqueadero”. A pesar de que son variables que pueden ser importantes al momento de definir si un predio tiene mayor o menor valor, se decidió realizar una amputación de variables usando la moda en esta variables, esto teniendo en cuenta que son variables categóricas y la cantidad de datos faltantes representan caso el 20% de la data total.
Faltantes_Moda = function(x) {
moda = names(sort(table(x), decreasing = TRUE))[1]
dato_Reemplazado = ifelse(is.na(x), moda, x)
return(dato_Reemplazado)
}
data1 = as.data.frame(lapply(data1, Faltantes_Moda))
La base de datos ya no cuenta con datos faltantes y estos fueron reemplazados por la moda como se puede apreciar en la siguiente tabla.
Grafico_Faltantes = md.pattern(data1, rotate.names = TRUE)
## /\ /\
## { `---' }
## { O O }
## ==> V <== No need for mice. This data set is completely observed.
## \ \|/ /
## `-----'
Se cambia el tipo de datos de las columnas, en este caso se decidió cambiar los tipos de datos de diferentes columnas a numérico con el fin de poder evaluar sus caracteristicas de manera más fácil.
#Se cambiar el tipo de dato a las columnas
data1$id <- as.numeric(data1$id)
data1$Precio_Mill_COP <- as.numeric(data1$Precio_Mill_COP)
data1$Area_m2 <- as.numeric(data1$Area_m2)
data1$Longitud <- as.numeric(data1$Longitud)
data1$Latitud <- as.numeric(data1$Latitud)
data1$Banos <- as.numeric(data1$Banos)
data1$Habitaciones <- as.numeric(data1$Habitaciones)
data1$Parqueadero <- as.numeric(data1$Parqueadero)
Inicialmente se solicitó estudiar cual es el precio de una vivienda con ciertas carácteristicas que se expondrán acontinuación, y porteriormente de las casas disponibles, evaluar cuales cumplen este requisito, para esto se llevará a cabo un paso a paso expuesto a continuación.
Se realizan los filtros correspondientes a la primera solicitud, concretamente se filtra el Tipo de vivienda y la Zona donde se ubica:
| Caracteristicas | Vivienda 1 |
|---|---|
| Tipo | Casa |
| área | 200 |
| Parqueaderos | 1 |
| Baños | 2 |
| Habitaciones | 4 |
| Estrato | 4 o 5 |
| Zona | Norte |
| Credito Preaprobado | 350 millones |
# Filtrar las ofertas de casas en la zona norte
oferta_1 = subset(data1, Tipo == "Casa" & Zona == "Zona Norte")
# Mostrar 3 registros
head(oferta_1, 3)
## id Zona Piso Estrato Precio_Mill_COP Area_m2 Parqueadero Banos
## 9 1209 Zona Norte 02 5 320 150 2 4
## 10 1592 Zona Norte 02 5 780 380 2 3
## 11 4057 Zona Norte 02 6 750 445 1 7
## Habitaciones Tipo Barrio Longitud Latitud
## 9 6 Casa acopi -76.51341 3.47968
## 10 3 Casa acopi -76.51674 3.48721
## 11 6 Casa acopi -76.52950 3.38527
Para el análisis exploratorio se realiza una gráfica de dispersión entre el precio de las viviendas ubicadas en el norte y su área construida, se puede ver una correlación evidente que indica que entre mas grande o más area tenga el predio su valor aumenta.
Se realizó el mismo análisis de las variables numéricas con la variable objetivo, encontrando que claramente el mejor correlacionado es el área con un 0.73, seguido por el número de baños y el número de habitaciones con 0.52 y 0.323 respectivamente, lo cual indica correlaciones buenas de cada una de estas variables.
En cuanto a las variables categóricas, especificamente el estrato, se quiso explorar cual era el precio promedio en cada uno de los estratos presentes en las casa de la zona norte de la ciudad, encontrando qué la mayoría de casas son estrato 6 y tienen un valor promedio de 818 MCOP, esta seguido por el estrato 5 que tiene 549 MCOP y el estrato 4 con 438 MCOp, este análisis exploratorio solo incluye precios promedio, sin embargo se hace necesario conocer exactamente cual podria ser el precio del predio con las caracteristicas especificadas, por eso se realizaá un modelo que nos permita encontrar ese valor.
Se desarrolló el modelo de RLM, este modelo tiene en cuenta las variables de Área, Estrato, Habitaciones, Parqueadero y baños, adicionalmente, se puede apreciar que las variables más representativas son el área, el Estrato y los baños, Adicionalmente, se puede ver un R2 de 0.669, este valor indica que el modelo explica el 67% de la variabilidad que pueda tener la variable dependiente.
##
## Call:
## lm(formula = Precio_Mill_COP ~ Area_m2 + Estrato + Habitaciones +
## Parqueadero + Banos, data = Train_1)
##
## Residuals:
## Min 1Q Median 3Q Max
## -880.46 -70.88 -16.59 44.03 1098.30
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 34.66962 20.47431 1.693 0.091 .
## Area_m2 0.75851 0.05148 14.733 < 2e-16 ***
## Estrato4 84.90410 19.91933 4.262 2.42e-05 ***
## Estrato5 132.79856 19.10737 6.950 1.15e-11 ***
## Estrato6 342.98139 30.62964 11.198 < 2e-16 ***
## Habitaciones 0.91260 4.76056 0.192 0.848
## Parqueadero 6.34460 5.96307 1.064 0.288
## Banos 27.01508 6.06099 4.457 1.03e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 155.4 on 497 degrees of freedom
## Multiple R-squared: 0.6531, Adjusted R-squared: 0.6482
## F-statistic: 133.7 on 7 and 497 DF, p-value: < 2.2e-16
La multicolinealidad es un problema que se da cuando varia variables predictoras estan relacionadas entre sí, ene ste caso un valor de VIF mayor a 5 indica ya una multicolinealidad moderada y puede ser problematico para el modelo, en este caso ninguna variable presenta este problema.
## GVIF Df GVIF^(1/(2*Df))
## Area_m2 1.528353 1 1.236266
## Estrato 1.474326 3 1.066839
## Habitaciones 1.666529 1 1.290941
## Parqueadero 1.198373 1 1.094702
## Banos 1.888487 1 1.374222
La autocorrelación indica si los residuos y errores de un modelo estás o no distribuidos de manera idependientes, cuando el DW test es cercao a 0 indica autocorrelación, y si es cercano a 2 indica lo contrario, en este caso el valor es de 2.18 lo que implica que no hay autocorrelación.
##
## Durbin-Watson test
##
## data: Modelo_1
## DW = 2.0026, p-value = 0.511
## alternative hypothesis: true autocorrelation is greater than 0
En este caso se puede apreciar que el test de normalidad de Shapiro-Wilk presenta un P-Value muy bajo, lo que implica un rechazo a la hipotesis alternativa que implica que existe distribución normal en los residuos, por lo tanto se concluye que los residuos no conservan una distribución normal.
##
## Shapiro-Wilk normality test
##
## data: resid(Modelo_1)
## W = 0.81747, p-value < 2.2e-16
Una vez sea netrenaod el modelo, se realizó la predicción de precios de predios bajo 2 escenarios fundamentales, el primero con los supuesto sugeridos al inicio y en estrato 4, y el segundo con las mismas caracteristicas pero en estrato 5, esto permitió predecir valores de 321 MCOP y 380 MCOP respectivamente.teniendo en cuenta esto, para el rpesupuesto aprobado lo mejor sería una casa pero con esas caracteristicas pero en estrato 4.
## Predicción en millones para características estrato 4: 335.302
## Predicción en millones para características estrato 5: 383.196
con el animo de dar un análisis más completo, se sugiren algunos predios en la zona norte de la ciudad que cumplen con las caracteristicas especificadas e incluso mejoran estas en el numero de habitaciones, o área a un precio igual o menor al presupuestado.
## id Zona Piso Estrato Precio_Mill_COP Area_m2 Parqueadero Banos
## 155 7471 Zona Norte 02 4 330 240 1 4
## 2163 4210 Zona Norte 01 5 350 200 3 3
## 2165 4267 Zona Norte 01 5 335 202 1 4
## 2173 4800 Zona Norte 01 5 340 250 2 4
## 2183 4209 Zona Norte 02 5 350 300 3 5
## Habitaciones Tipo Barrio Longitud Latitud
## 155 4 Casa acopi -76.54980 3.39758
## 2163 4 Casa el bosque -76.53010 3.48503
## 2165 5 Casa el bosque -76.53044 3.48399
## 2173 4 Casa el bosque -76.53300 3.46500
## 2183 6 Casa el bosque -76.53010 3.48577
Al igual que en la oferta 1, se solicitó estudiar cual es el precio de una vivienda con ciertas carácteristicas que se expondrán acontinuación, y porteriormente de las casas disponibles, evaluar cuales cumplen este requisito, para esto se llevará a el mismo paso a paso evaluado para la oferta 1.
Se realizan los filtros correspondientes a la primera solicitud, concretamente se filtra el Tipo de vivienda y la Zona donde se ubica:
| Caracteristicas | Vivienda 2 |
|---|---|
| Tipo | Apartamento |
| área | 300 |
| Parqueaderos | 3 |
| Baños | 3 |
| Habitaciones | 5 |
| Estrato | 5 o 6 |
| Zona | Sur |
| Credito Preaprobado | 850 millones |
# Filtrar las ofertas de casas en la zona norte de la ciudad
oferta_2 = subset(data1, Tipo == "Apartamento" & Zona == "Zona Sur")
# Mostrar los primeros 3 registros de las bases
head(oferta_2, 3)
## id Zona Piso Estrato Precio_Mill_COP Area_m2 Parqueadero Banos
## 24 5098 Zona Sur 05 4 290 96 1 2
## 164 698 Zona Sur 02 3 78 40 1 1
## 264 8199 Zona Sur 02 6 875 194 2 5
## Habitaciones Tipo Barrio Longitud Latitud
## 24 3 Apartamento acopi -76.53464 3.44987
## 164 2 Apartamento aguablanca -76.50100 3.40000
## 264 3 Apartamento aguacatal -76.55700 3.45900
Para el análisis exploratorio se realiza una gráfica de dispersión entre el precio de las viviendas ubicadas en el norte y su área construida, se puede ver una correlación evidente que indica que entre mas grande o más area tenga el predio su valor aumenta, sin embargo, a diferencial de la oferta 1 los puntos se ven mucho mas agrupado a la parte inferior izquierda, lo que implica una menor dispersión de los datos.
Se realizó el mismo análisis de las variables numéricas con la variable objetivo, encontrando que claramente el mejor correlacionado es el área con un 0.76 mejorando la vista en la oferta 1, seguido por el número de baños y el número de habitaciones con 0.71 y 0.33 respectivamente, lo cual indica correlaciones buenas de cada una de estas variables y mejores que en el caso anterior. Acá se tienen en cuenta unicamente apartamento en la zona sur de la ciudad.
También es importante apreciar que las mayoría de apartamentos ene ste sector son estrato 6 con un precio promedio de 594 MCOP seguido por el estrato 5 con 293 MCOP. Se puede apreciar una distribución muy diferente precios en comparación con la oferta 1 donde los precios eran considerablemente mas grandes.
Se desarrolló el modelo de RLM, este modelo tiene en cuenta las variables de Área, Estrato, Habitaciones, Parqueadero y baños, adicionalmente, se puede apreciar que las variables más representativas son el área, el Estrato y los baños, y a diferencia de la oferta 1 también incluye los parqueaderos. Adicionalmente, se puede ver un R2 de 0.799, este valor indica que el modelo explica el 80% de la variabilidad que pueda tener la variable dependiente lo cual es mucho mejor que la anterior.
##
## Call:
## lm(formula = Precio_Mill_COP ~ Area_m2 + Estrato + Habitaciones +
## Parqueadero + Banos, data = Train_2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -964.48 -35.34 -3.03 34.01 920.78
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -46.95877 12.29630 -3.819 0.000138 ***
## Area_m2 1.17172 0.05157 22.722 < 2e-16 ***
## Estrato4 28.22145 8.61716 3.275 0.001075 **
## Estrato5 57.95688 8.87034 6.534 8.17e-11 ***
## Estrato6 216.46682 11.09657 19.508 < 2e-16 ***
## Habitaciones -7.14253 3.81562 -1.872 0.061368 .
## Parqueadero 59.31195 4.02186 14.747 < 2e-16 ***
## Banos 40.85068 3.50518 11.654 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 89.69 on 1945 degrees of freedom
## Multiple R-squared: 0.7797, Adjusted R-squared: 0.7789
## F-statistic: 983.6 on 7 and 1945 DF, p-value: < 2.2e-16
La multicolinealidad es un problema que se da cuando varia variables predictoras estan relacionadas entre sí, en este caso un valor de VIF mayor a 5 indica ya una multicolinealidad moderada y puede ser problematico para el modelo, en este caso ninguna variable presenta este problema.
## GVIF Df GVIF^(1/(2*Df))
## Area_m2 1.963705 1 1.401323
## Estrato 1.792097 3 1.102115
## Habitaciones 1.459880 1 1.208255
## Parqueadero 1.704728 1 1.305652
## Banos 2.580853 1 1.606503
La autocorrelación indica si los residuos y errores de un modelo estás o no distribuidos de manera idependientes, cuando el DW test es cercao a 0 indica autocorrelación, y si es cercano a 2 indica lo contrario, en este caso el valor es de 2.06 lo que implica que no hay autocorrelación.
##
## Durbin-Watson test
##
## data: Modelo_2
## DW = 2.0457, p-value = 0.8442
## alternative hypothesis: true autocorrelation is greater than 0
En este caso se puede apreciar que el test de normalidad de Shapiro-Wilk presenta un P-Value muy bajo, lo que implica un rechazo a la hipotesis alternativa que implica que existe distribución normal en los residuos, por lo tanto se concluye que los residuos no conservan una distribución normal.
##
## Shapiro-Wilk normality test
##
## data: resid(Modelo_2)
## W = 0.75709, p-value < 2.2e-16
Una vez sea entrenado el modelo, se realizó la predicción de precios de predios bajo 2 escenarios fundamentales, el primero con los supuesto sugeridos al inicio y en estrato 5, y el segundo con las mismas caracteristicas pero en estrato 6, esto permitió predecir valores de 656 MCOP y 801 MCOP respectivamente.teniendo en cuenta esto, para el presupuesto aprobado lo mejor sería un apartamento pero con esas caracteristicas pero en estrato 6 ya que cumple con el presupuesto preaprobado.
## Prediccion en millones para caracteristicas estrato 4: 627.29
## Prediccion en millones para caracteristicas estrato 5: 785.8
con el animo de dar un análisis más completo, se sugiren algunos predios en la zona sur de la ciudad que cumplen con las caracteristicas especificadas e incluso mejoran estas en el numero de habitaciones, o área a un precio igual o menor al presupuestado. En este caso solo se presentaron 2 predios con las caracteristicas evaluadas, estos tienen valores mucho menores a los rpesupuestados y mejoran en mucho las caracteristicas sugeridad, a continuación se muestran los rpedios y sus ubicación.
## id Zona Piso Estrato Precio_Mill_COP Area_m2 Parqueadero Banos
## 3251 7182 Zona Sur 02 5 730 573 3 8
## 6669 7512 Zona Sur 02 5 670 300 3 5
## Habitaciones Tipo Barrio Longitud Latitud
## 3251 5 Apartamento guadalupe -76.548 3.408
## 6669 6 Apartamento seminario -76.550 3.409