Actividad 2


Evaluación de la oferta inmobiliaria urbana

Modelos Estadísticos para la toma de decisiones

Presentada por: Luis Alberto Echeverry Henao





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:

  1. Identificar la relación entre las principales características de las viviendas y su precio de mercado.

  2. Construir y validar un modelo predictivo de precios de vivienda.

  3. 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.



Analisis exploratorio



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.

Figura 1: Resumen estadístico de las variables cuantitativas
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:

Figura 2: Resumen de 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.


Paso 1: Filtrado del dataset



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 3: Comprobacion filtrado del dataset





Una vez realizado el filtrado, graficamos las viviendas en el mapa de la ciudad para verificar la consitencia de los datos.



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.


Paso 2: Analisis de correlaciones



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.


Paso 3: Estimacion del modeo de regresion lineal multiple



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.


Paso 4: Validacion de supuestos



##    areaconst      estrato habitaciones parqueaderos       banios 
##     1.460998     1.307757     1.721015     1.226334     1.967421
Figura 10: Analisis de supuestos

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.


Paso 5: Prediccion del precio



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.


Paso 6: Sugerencia de ofertas



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:

Figura 11: 5 potenciles ofertas
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.


Paso 7: Repetir el proceso para el caso 2



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

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

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:

Figura 21: 5 potenciles ofertas caso 2
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.