El presente informe tiene como propósito analizar la oferta inmobiliaria disponible en Cali, mediante el uso de técnicas estadísticas y de modelación que permitan:
Identificar la relación entre las principales características de las viviendas y su precio de mercado.
Construir y validar un modelo predictivo de precios de vivienda.
Proponer opciones de compra que se ajusten a las necesidades y restricciones de la compañía solicitante.
De esta manera, se busca ofrecer un análisis integral que combine la visión estratégica del negocio inmobiliario con herramientas cuantitativas, proporcionando a la empresa bases sólidas para la toma de decisiones.
El documento se estructura de la siguiente manera:
En la primera parte se realiza una exploración inicial de los datos disponibles junto con la preparacion y limpieza (este proceso no fue estipulado propiamente en la rubrica de trabajo, pero se desarrollara atendiendo a las recomendaciones realizadas por la docente en la actividad 1), filtrando la información de acuerdo con los requerimientos de cada solicitud. En la segunda parte se desarrollan análisis exploratorios y modelos de regresión múltiple para explicar el precio de la vivienda en función de sus características principales. En la tercera parte se presentan las validaciones de los modelos y las predicciones específicas para cada caso solicitado. Finalmente, se identifican y proponen las ofertas más adecuadas, acompañadas de representaciones gráficas y mapas que faciliten la toma de decisiones.
De esta manera, el informe combina la experiencia del sector inmobiliario con herramientas de análisis de datos para ofrecer recomendaciones objetivas y ajustadas a las necesidades del cliente.
Iniciamos el analisis identificando el numero de registros duplicados como se muestra a continuacion:
## El número de registros duplicados es 1
Ahora continuamos con las variables cuantitativas. Para ello, generamos la figura 1, tabla con el resumen de los principales estadisticos.
| preciom | areaconst | banios | habitaciones | parqueaderos | |
|---|---|---|---|---|---|
| Min. : 58.0 | Min. : 30.0 | Min. : 0.000 | Min. : 0.000 | Min. : 1.000 | |
| 1st Qu.: 220.0 | 1st Qu.: 80.0 | 1st Qu.: 2.000 | 1st Qu.: 3.000 | 1st Qu.: 1.000 | |
| Median : 330.0 | Median : 123.0 | Median : 3.000 | Median : 3.000 | Median : 2.000 | |
| Mean : 433.9 | Mean : 174.9 | Mean : 3.111 | Mean : 3.605 | Mean : 1.835 | |
| 3rd Qu.: 540.0 | 3rd Qu.: 229.0 | 3rd Qu.: 4.000 | 3rd Qu.: 4.000 | 3rd Qu.: 2.000 | |
| Max. :1999.0 | Max. :1745.0 | Max. :10.000 | Max. :10.000 | Max. :10.000 | |
| NA’s :2 | NA’s :3 | NA’s :3 | NA’s :3 | NA’s :1605 |
De lo anterior podemos extraer varias conclusiones. La primera es que la media y la mediana de la variable precio se encuentran alejadas una de la otra, con la media siendo superior lo que indicaria una asimetria positiva o la presencia de outliyers de gran valor o casas de lujo. Caso similar al de la variable del area construida, donde la media es mayor a la mediana lo que indica la presencia de inmuebles de gran tamano en el dataset.
Para el caso de la baraible del numero de banios, se teienen valores muy cercanos en la media y la mediana, lo que indica una aparente consistencia, pero el valor minimo es 0, lo que no tiene mucho sentido en este caso, ya que como minimo una vivienda tiene un banio, indicando la posible presencia de outliyers. Este comportamiento es muy similar al de la variable del numero de habitaciones, ya que una vivienda con 0 habitaciones no tiene sentido en este contexto.
por ultimo, la variable parqueaderos que presenta valores de media y mediana similares entre 1 y 2 pero un valor maximo de 10, lo que podria corresponder de igual forma a datos atipicos. Ademas, e esta variable destacan el numero elevados de datos faltantes, que si no se les da un manejo adecuado pueden llegar a ser un problema.
Ahora continuamos con las variables cualitativas:
| Variable | Valores_Unicos | Valores_Nulos |
|---|---|---|
| zona | 6 | 3 |
| piso | 13 | 2638 |
| estrato | 5 | 3 |
| tipo | 3 | 3 |
| barrio | 437 | 3 |
De lo anterior podemos concluir que la variable barrio posee un elevado numero de categorias, lo que puede llegar a ser contraproducente al momento de aplicar algun modelo. Se podria intentar agrupar de alguna forma los barrios pero esto no tendria ningun aporte real al dataset ya que ya existe una columna de zona en este. Por otro lado, la variable piso cuenta con un numero elevado de valores nulos, por eso es necesario realizar un analis un poco mas profundo para poder imputar dichos datos.Por ultimo, para el caso de las variables zona, estrato y tipo tenemos pocas categorias con pocos valores nulos, por lo cual usaremos el metodo de Listwise deletion para estos casos especificos.
Ahora procedemos a eliminar el registro duplicado y a utilizar Listwise deletion (eliminar los registro que contengan Na en alguna columna) con lo que concluiriamos la parte de limpieza y preparacion preeliminar.
Ahora procemos con el filtado del dataset, dejando en primer lugar unicamente las Casa pertenecientes a la zona norte de la ciudad como se puede evidenciar en la figura 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 4460 Zona N… 02 4 625 355 3 5 5
## # ℹ 4 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>
Figura 3: Comprobacion filtrado del dataset
Figura 4: Mapa de casas en la zona Norte
Como es de esperarse, la mayor cantidad de los registros se agrupan en el norte geografico del mapa de la ciudad, pero existen casos que visualmente no parecen pertenecer a la zona norte que se filtro en el dataset. Esto puede deberse a diferentes motivos, entre ellos las fallas en la adquisicion de las coordenadas, ubicacion cercana a los limites entre zonas, diferentes nomenclaturas o cambios en el POT de la ciudad durante el proceso de adquisicion de los datos.
Figura 5: Matriz de correlacion
En la matriz de correlacion de la figura 5 podemos observar
que existe una buena correlacion lineal entre la variable a pdecir
“precio” con la variable areaconst. Ademas se puede observar que existe
una relacion moderadamente alta entre las variables banios y
habitaciones, caracteristica que no es deseada ya que ambas variables
aportarian muy poco al modelo.
Es clave destacar que en el enunciado del paso dos, se deja explicito que se debe analizar la correlacion de todas las variables incluyendo la zona, con respecto a la varible a predecir. Pero en este caso no tiene sentido analizar la zona, ya que en el dataset actual se encuentra filtrada unicamente la zona Centro. Por otra parte, podemos observar que existe una relacion positiva entre el precio y el area construida, ya que en la gracfica vemos que existe una tendencia creciente entre el precio y el area contruida. Para el caso del Estarto y el precio, tambien se puede evidenciar una clara relacion postiva, donde a medida que aumenta el estrato, tambien aumenta el precio promedio del inmueble aunque en todos los estratos podemos ver outliyers.
Con respecto al numero de banios, podemos evidenciar una relacion positiva de igul forma, porque al aumentar el numero de banios aumenta el precio, pero se hace evidente un posible error en la adquisicion de los datos, ya que existen algunos inmuebles con cero banios y los precios de dichos inmubles son muy diversos. Se podria llegar a pensar que se tratan de apartaestudios con banios compartiddos, pero en relacion con el precio esta deducion no parece ser muy acertada. El mismo caso sucede para el numero de habitacions, se puede apreciar una relacion positiva con respecto al precio (no tan clara como en otras variables), pero existen casos donde el numero de habitaciones es cero, lo que indica un error en adquisicion.
De lo anterior podemos concluir que el area construida y el estrato son variables que influyen significativamente en el precio de las viviendas y a priori deberian ser las variables que tengan un mayor inpacto en el precio de las viviendas. Esto se podra comprobar al momento de realizar la estimacion de los parametros del modelo de regresion multiple en el paso siguiente.
Iniciamos realizando la estimacion de los coeficientes, para ello analizaremos los P-valores, T-valores y el error estandar de cada variable como se muestra a continuacion:
##
## Call:
## lm(formula = preciom ~ areaconst + estrato + habitaciones + parqueaderos +
## banios, data = datos_mod)
##
## Residuals:
## Min 1Q Median 3Q Max
## -784.29 -77.56 -16.03 47.67 978.61
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -238.17090 44.40551 -5.364 1.34e-07 ***
## areaconst 0.67673 0.05281 12.814 < 2e-16 ***
## estrato 80.63495 9.82632 8.206 2.70e-15 ***
## habitaciones 7.64511 5.65873 1.351 0.177
## parqueaderos 24.00598 5.86889 4.090 5.14e-05 ***
## banios 18.89938 7.48800 2.524 0.012 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 155.1 on 429 degrees of freedom
## Multiple R-squared: 0.6041, Adjusted R-squared: 0.5995
## F-statistic: 130.9 on 5 and 429 DF, p-value: < 2.2e-16
De los coeficientes obtenidos podemos analizar que para el area construida, por cada metro cuadrado construido el precio en promedio aumenta 0.68 millones manteniendo constantes las otras variables. Ademas tenemos un P-valor bastante menor que 0.05, lo que indica un alto nivel de significancia, junto con un T-valor absoluto bastante mayor a 2, lo que nos idicaria que el area construida si tiene un efecto real en el precio del inmueble. Esto tiene mucho sentido y se ajusta a la realidad, ya que a mayor espacio en una vivienda, el precio deberia tender a ser mayor.
Ahora pasamos al caso de la variable estrato, donde tenemos que al pasar a un estrato superior, el precio de la vivienda aumenta en promedio 80.6 millones manteniendo las otras variables constantes. Al igual que con la variable anterior, el P-valor bastante menor que 0.05, lo que indica un alto nivel de significancia, junto con un T-valor absoluto bastante mayor a 2. Lo que demuestra que el estrato es un avariable bastante significativa en la variacion del precio de la vivienda, situacion qe se ajusta la realidad, ya que el estrato es una forma de medir las condiciones de una vivienda y de un sector en general, teniendo que a mayor estrato se tienen mejores condiciones fisicas de la vivienda y el sector es mas exclusivo. Por ende, tiene logica que a mayor estrato, mayor sea el precio del inmueble.
Para el caso de la variable parqueaderos tenemos que por cada parqueadero adicionl que tenga la propiedad, se tiee un cambio de 24 millones en el precio de la propiedad. para estecaso tenemos un T-valor mayor a dos y el P-valor menor que 0.05 lo que sigue indicando que es una variable significativa en el modelo, pero en menor medida que las dos anteriores. Caso similar al de la variable banios, donde por cada banio de mas qe tenga la propiedad, en promedio aumenta en 18 millones el valor de la misma. Esto resultados se ajustan a la realidad, ya que el acceso a parqueaderos privados en las casas es un factor clave en la comodidad y el estatus de los habitantes de la misma, ademas cuantos mas banios tenga una vivienda, mayor sera el confort y por ende mayor el precio.
Por ultimo tenemos la variable habitaciones donde cada habitacion de mas representaria un aumento de 7 millones en el valor del inmueble. Pero esto no se puede afirmar con certeza, ya que el P-valor es superior a 0.05, lo que implia que esta ariable no tiene un efecto real en el precio, no se puede rechazar Ho. Ademas el T-valor es menor a 2 lo que indica que el efecto no es estadisticamente significativo. Este caso particular puede deberse en gran medida a que el efecto de esta variable ya esta explicado por area construida y banios.
Para el caso del R^2, tenemos un valor de 0.604, esto quiere decir que el 60% de la variacion del precio se explican con las variables incluidas en el modelo. El otro 40% depende de otras variables no consideradas o que quedaron fuera de este analisis. por su parte el R^2 ajustado dio un valor de 0.55 lo que indica que las variables usadas son relevantes.
Apesar de que el ajuste del modelo no es muy malo, una de las alternativas que se podrian considerar parra mejorarlo seria agregar mas variables que aporten de forma significativa, como puede ser las cordenadas o el barrio, lo que permitiria describir mas variabilidad del precio en funcion de estas nuevas variables.
## areaconst estrato habitaciones parqueaderos banios
## 1.460998 1.307757 1.721015 1.226334 1.967421
Figura 10: Analisis de supuestos
##
## Shapiro-Wilk normality test
##
## data: residuals(mod_lm)[1:min(5000, nrow(datos_mod))]
## W = 0.85246, p-value < 2.2e-16
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
##
## studentized Breusch-Pagan test
##
## data: mod_lm
## BP = 80.281, df = 5, p-value = 7.33e-16
## [1] 25
Del análisis de los supuestos del modelo de regresión se observa que los residuos no siguen un patrón completamente aleatorio, lo que sugiere cierta falta de linealidad en la relación entre las variables, posiblemente asociada a las variables omitidas. El gráfico Q-Q indica que los residuos se ajustan razonablemente a la normalidad en la parte central, aunque presentan desviaciones en las colas, reflejando la presencia de valores extremos. Adicionalmente, en el gráfico Scale-Location se identifica heterocedasticidad, ya que la dispersión de los residuos aumenta con los valores ajustados, lo cual afecta la validez de los errores estándar.
Finalmente, en el gráfico de influencia se evidencian observaciones puntuales (como las 239, 309 y 393) que podrían estar influyendo de manera desproporcionada en el modelo. En conjunto, los resultados sugieren que el modelo cumple parcialmente los supuestos, pero sería recomendable aplicar transformaciones a la variable dependiente (como logaritmos modelo log-lin) o analizar el impacto de los outliers para mejorar la validez y ajuste del modelo.
A continuacion se realiza la prediccion del precio de una vivienda con las caracteristicas solicitadas por el ciente:
vivienda1 <- data.frame(
areaconst = 200,
estrato = 4,
habitaciones = 4,
parqueaderos = 1,
banios = 2
)
predict(mod_lm, newdata = vivienda1, interval = "prediction")
## fit lwr upr
## 1 312.101 6.205196 617.9968
El modelo nos arrojo como resultado que con las caracteristicas suministradas el precio posible para una vivienda seria de 312.1 millones.
Ahora procedemos a aplicar el modelo para dar las conclusiones sobre las ofertas que mas se ajustan a lo solicitado. Las5 ofertas mas acertadas segun el modelo se muestra a continuacion:
| id | zona | piso | estrato | preciom | areaconst | parqueaderos | banios | habitaciones | tipo | barrio | longitud | latitud | precio_pred | distancia |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1222 | Zona Norte | 02 | 4 | 360 | 216 | 2 | 2 | 4 | Casa | la merced | -76.51390 | 3.48386 | 346.9347 | 16.03122 |
| 1175 | Zona Norte | 02 | 4 | 370 | 216 | 2 | 2 | 0 | Casa | la merced | -76.51273 | 3.48214 | 316.3543 | 16.52271 |
| 3586 | Zona Norte | 01 | 4 | 330 | 240 | 1 | 2 | 3 | Casa | la merced | -76.52720 | 3.48433 | 331.5253 | 40.01250 |
| 1924 | Zona Norte | 01 | 4 | 320 | 264 | 1 | 2 | 3 | Casa | vipasa | -76.51840 | 3.48459 | 347.7669 | 64.00781 |
| 4705 | Zona Norte | 02 | 4 | 415 | 297 | 1 | 2 | 0 | Casa | granada | -76.53248 | 3.45619 | 347.1638 | 97.08244 |
Figura 12: Mapa potenciales ofertas
De las 5 alternativas presentadas podemos notar que 3 de ellas pertenecen al barrio la merced, esto indica que este seria un buen punto de partida si se desea hacer un busqueda mas exhaustiva. Por otra parte, teniendo en cuenta las condiciones solicitadas por el cliente, de las 5 alternativas resultantes, solo 2 estan en el rango del monto preaprbado para el credito y por su relacion area construida vs precio, la casa con id 1924 del barrio vipasa seria l opcion que se le reomendaria adquirir al cliente.
Repetimos el procedimiento realizado para el caso 1. Iniciamos dividiendo el dataset.
## # 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>
Figura 13: Comprobacion filtrado del dataset caso 2
Una vez realizado el filtrado, graficamos las
viviendas en el mapa de la ciudad para verificar la consitencia de los
datos.
Al graficar solo los datos de la zona sur era evidente que exitia una incosnsistencia, asi que se decidio ggraficar en color rojo los datos pertenecientes a la zona norte y en azul los pertenecientes a la zona sur.
Figura 14: Mapa de casas en la zona Norte y zona Sur
como se puede evidenciar en la figura 14 exite una
grancantida de datos clasificados en la zona sur que aparentemente
deberian pertenecer a otra zona. Esto puede ser resultado de un problema
en la adquisicion de los datos.
Ahora continuamos con el analisis de correlacion:
Figura 15: Matriz de correlacion caso 2
Para este caso el analisis cambia un poco y que segun se
puede observar en la figura 15 sigue existiendo una fuerte correlacion
entre la variable precio y el area construida, pero ahora se hace
evidente una correlacion indeseada entre la variable banios y area
construida, misma que no fue evidente en el caso 1. Ademas se puede
notar una baja correlacion entre la variable habitaciones con el
precio.
En este caso se siguen evidenciando las mismas relaciones mencionadas para el caso 1, con la diferencia que se puede vr mayor cantidad de outliyers envarias de las variables. Para el caso puntual del numero de banios vs el precio, se puede ver que entre 2 y 5 banios existen un numero elevado de outliyers, caso similar a numero de habitaciones, esto se traduciria en la vida real en que por ejemplo existen apartamentos de 3 habitaciones que tienen precios muy elevados, incluso por encima de otros que tienen mayor numero de habitaciones. Lo que tiene mucho sentido si consideramos que existen apartamentos pequenos en zonas bastante exclusivas de la ciudad y que a esto puede deberse su elevado precio.
Ahora continuamos con la estimacion de los coeficiente:
##
## Call:
## lm(formula = preciom ~ areaconst + estrato + habitaciones + parqueaderos +
## banios, data = datos_mod)
##
## Residuals:
## Min 1Q Median 3Q Max
## -784.29 -77.56 -16.03 47.67 978.61
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -238.17090 44.40551 -5.364 1.34e-07 ***
## areaconst 0.67673 0.05281 12.814 < 2e-16 ***
## estrato 80.63495 9.82632 8.206 2.70e-15 ***
## habitaciones 7.64511 5.65873 1.351 0.177
## parqueaderos 24.00598 5.86889 4.090 5.14e-05 ***
## banios 18.89938 7.48800 2.524 0.012 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 155.1 on 429 degrees of freedom
## Multiple R-squared: 0.6041, Adjusted R-squared: 0.5995
## F-statistic: 130.9 on 5 and 429 DF, p-value: < 2.2e-16
Para este caso en particular tenemos todas las variables se ajustan correctamente exepto habitaciones, que para este caso tiene un oeficiente negativo, esto puede indicar que como esta correlacionada fuertemente con el precio, puede capturar el efecto residual. Otra interpretacion que se le puede dar este hecho es que si se deja el area constante, un mayor numero de habitaciones puede significar un menor tamanio por habitacion, lo que puede implicar una desventaja y como consecuencia un menor precio.
## areaconst estrato habitaciones parqueaderos banios
## 1.460998 1.307757 1.721015 1.226334 1.967421
Figura 20: Analisis de supuestos
##
## Shapiro-Wilk normality test
##
## data: residuals(mod_lm2)[1:min(5000, nrow(datos_mod2))]
## W = 0.85246, p-value < 2.2e-16
##
## studentized Breusch-Pagan test
##
## data: mod_lm2
## BP = 80.281, df = 5, p-value = 7.33e-16
## [1] 25
Los gráficos de diagnóstico del modelo muestran algunos problemas en los supuestos clásicos de la regresión lineal. En el gráfico Residuals vs Fitted se observa una ligera curvatura y dispersión desigual, lo que indica cierta falta de linealidad y posible heterocedasticidad. El Q-Q plot refleja que los residuos no siguen completamente una distribución normal, sobre todo en las colas, lo que sugiere la presencia de valores atípicos e influencias extremas.
El gráfico Scale-Location confirma la heterocedasticidad, ya que los residuos estandarizados se dispersan más a medida que aumentan los valores ajustados. Finalmente, en Residuals vs Leverage aparecen observaciones con alta influencia (como la 2042), que podrían distorsionar el ajuste del modelo. En conjunto, estos hallazgos sugieren que sería conveniente explorar transformaciones de variables, modelos robustos o segmentar la muestra para mejorar la validez del modelo.
A continuacion se realiza la prediccion del precio de una vivienda con las caracteristicas solicitadas por el ciente en el caso 2:
vivienda2 <- data.frame(
areaconst = 300,
estrato = 5,
habitaciones = 5,
parqueaderos = 3,
banios = 3
)
predict(mod_lm2, newdata = vivienda2, interval = "prediction")
## fit lwr upr
## 1 534.9658 228.973 840.9587
El modelo arrojo que con los datos del caso 2, el precio de un predio con esas caracteristicas seria de 675 millones.
Ahora procedemos a aplicar el modelo para dar las conclusiones sobre las ofertas que mas se ajustan a lo solicitado. Las 5 ofertas mas acertadas segun el modelo se muestra a continuacion:
| id | zona | piso | estrato | preciom | areaconst | parqueaderos | banios | habitaciones | tipo | barrio | longitud | latitud | precio_pred | distancia |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 7512 | Zona Sur | NA | 5 | 670 | 300 | 3 | 5 | 6 | Apartamento | seminario | -76.55000 | 3.40900 | 580.4097 | 2.236068 |
| 3809 | Zona Sur | NA | 6 | 980 | 306 | 4 | 4 | 3 | Apartamento | pance | -76.52870 | 3.33761 | 647.2763 | 6.557438 |
| 4870 | Zona Sur | NA | 6 | 980 | 306 | 4 | 4 | 3 | Apartamento | pance | -76.53351 | 3.34858 | 647.2763 | 6.557438 |
| 4706 | Zona Sur | NA | 6 | 980 | 306 | 4 | 5 | 3 | Apartamento | ciudad jardin | -76.53248 | 3.34138 | 666.1757 | 6.782330 |
| 5472 | Zona Sur | NA | 6 | 1590 | 310 | 3 | 4 | 3 | Apartamento | pance | -76.53694 | 3.36829 | 625.9773 | 10.295630 |
Figura 22: Mapa potenciales ofertas caso 2
Al igual que en el caso anterior, se presentan 3 viviendas en el barrio pance, por esto este podria ser un sector a tomar e cuenta para analisis futuros o para una busqueda mas profunda. Ademas dentro de las 5 opciones que se presentaron como resultados, la unica que esta en el rango de precio solicitado por el cliente es la de id 7512del barrio seminario. Por esta razon seria la que se le sugeriria al cinte.