Análisis del mercado inmobiliario urbano

Problema

Una empresa inmobiliaria líder en una gran ciudad está buscando comprender en profundidad el mercado de viviendas urbanas para tomar decisiones estratégicas más informadas. La empresa posee una base de datos extensa que contiene información detallada sobre diversas propiedades residenciales disponibles en el mercado. Se requiere realizar un análisis holístico de estos datos para identificar patrones, relaciones y segmentaciones relevantes que permitan mejorar la toma de decisiones en cuanto a la compra, venta y valoración de propiedades.

Desarrollo

Instalar paquetes necesarios

Se configura primero el repositorio CRAN desde el cual se descargarán los paquetes, asegurando que se utilice el servidor oficial de R (cloud.r-project.org). Luego,se instalan varios paquetes útiles para análisis estadístico, visualización y manipulación de datos (factoextra, FactoMineR, leaflet, dplyr, ggplot2, devtools). Finalmente, utiliza devtools para instalar el paquete paqueteMODELOS directamente desde GitHub.

Cargar librerias y bases de datos

Se cargan los paquetes necesarios para análisis estadístico, visualización y manipulación de datos. Luego, a partir del conjunto de datos vivienda, se crea un nuevo data frame (vivienda_ca) que conserva únicamente las observaciones con valores no faltantes en las variables zona y tipo. Finalmente, se muestra una vista preliminar de los primeros registros del nuevo conjunto filtrado con head().

1. Cargar datos y limpieza inicial

Este conjunto de datos representa una muestra de información sobre viviendas en distintas zonas de una ciudad, con variables relevantes para análisis inmobiliario y geoespacial. Cada fila corresponde a una vivienda específica e incluye un identificador (id), la zona de ubicación (zona), características físicas como el número de pisos, estrato socioeconómico (estrato), precio mensual (preciom), área construida (areaconst), número de parqueaderos, baños y habitaciones. Además, se detalla el tipo de vivienda (tipo, por ejemplo, casa o apartamento) y el barrio específico donde se encuentra.

También se incluyen coordenadas geográficas (longitud y latitud), lo que permite representar espacialmente las viviendas en mapas interactivos. Esta base de datos es útil para análisis de mercado inmobiliario, visualización en mapas, estudios de accesibilidad urbana, análisis multivariado o modelación de precios según características estructurales y ubicación.

#>        id                 zona           piso           estrato     
#>  Min.   :   1   Zona Centro : 124   Min.   : 1.000   Min.   :3.000  
#>  1st Qu.:2080   Zona Norte  :1920   1st Qu.: 2.000   1st Qu.:4.000  
#>  Median :4160   Zona Oeste  :1198   Median : 3.000   Median :5.000  
#>  Mean   :4160   Zona Oriente: 351   Mean   : 3.771   Mean   :4.634  
#>  3rd Qu.:6240   Zona Sur    :4726   3rd Qu.: 5.000   3rd Qu.:5.000  
#>  Max.   :8319                       Max.   :12.000   Max.   :6.000  
#>                                     NA's   :2635                    
#>     preciom         areaconst       parqueaderos        banios      
#>  Min.   :  58.0   Min.   :  30.0   Min.   : 1.000   Min.   : 0.000  
#>  1st Qu.: 220.0   1st Qu.:  80.0   1st Qu.: 1.000   1st Qu.: 2.000  
#>  Median : 330.0   Median : 123.0   Median : 2.000   Median : 3.000  
#>  Mean   : 433.9   Mean   : 174.9   Mean   : 1.835   Mean   : 3.111  
#>  3rd Qu.: 540.0   3rd Qu.: 229.0   3rd Qu.: 2.000   3rd Qu.: 4.000  
#>  Max.   :1999.0   Max.   :1745.0   Max.   :10.000   Max.   :10.000  
#>                                    NA's   :1602                     
#>   habitaciones             tipo                 barrio        longitud     
#>  Min.   : 0.000   Apartamento:5100   valle del lili:1008   Min.   :-76.59  
#>  1st Qu.: 3.000   Casa       :3219   ciudad jardín : 516   1st Qu.:-76.54  
#>  Median : 3.000                      pance         : 409   Median :-76.53  
#>  Mean   : 3.605                      la flora      : 366   Mean   :-76.53  
#>  3rd Qu.: 4.000                      santa teresita: 262   3rd Qu.:-76.52  
#>  Max.   :10.000                      el caney      : 208   Max.   :-76.46  
#>                                      (Other)       :5550                   
#>     latitud     
#>  Min.   :3.333  
#>  1st Qu.:3.381  
#>  Median :3.416  
#>  Mean   :3.418  
#>  3rd Qu.:3.452  
#>  Max.   :3.498  
#> 

2. Análisis de Componentes Principales (PCA)

Primero, se seleccionan variables relevantes para describir las características estructurales y socioeconómicas de las viviendas: precio mensual (preciom), área construida (areaconst), número de parqueaderos, baños, habitaciones y estrato socioeconómico. Luego, se eliminan las filas con datos faltantes mediante na.omit() y se escalan las variables usando scale() para que todas tengan media cero y desviación estándar uno, lo cual es fundamental para que el PCA no se vea sesgado por las diferencias de escala entre variables.

Posteriormente, se aplica la función prcomp() para realizar el análisis de componentes principales. Este método transforma las variables originales en un nuevo conjunto de variables no correlacionadas llamadas componentes principales, que son combinaciones lineales de las variables originales y están ordenadas según la cantidad de varianza que explican en los datos. El primer componente principal captura la mayor parte de la variabilidad, el segundo la segunda mayor parte, y así sucesivamente.

#> Standard deviations (1, .., p=6):
#> [1] 1.8664857 1.1059274 0.7067478 0.5996120 0.4943519 0.4355974
#> 
#> Rotation (n x k) = (6 x 6):
#>                    PC1        PC2        PC3         PC4        PC5        PC6
#> preciom      0.4704788  0.2394751  0.1081038 -0.29100096  0.2659341  0.7444545
#> areaconst    0.4502724 -0.2044012  0.2594726 -0.65721148 -0.3038390 -0.4048503
#> parqueaderos 0.4278010  0.1513045  0.6161907  0.62045124 -0.1192404 -0.1233864
#> banios       0.4652553 -0.1598972 -0.3695544  0.14075513  0.6782753 -0.3762054
#> habitaciones 0.2986104 -0.6676068 -0.3313085  0.27132051 -0.4165440  0.3290044
#> estrato      0.2953982  0.6377404 -0.5431029  0.07074563 -0.4349440 -0.1299429

El análisis de componentes principales realizado sobre las variables cuantitativas de las viviendas arrojó seis componentes, correspondientes al número de variables incluidas.

  • El primer componente principal (PC1) presenta una desviación estándar de 1.87, lo que indica que captura la mayor parte de la variabilidad en los datos. Este componente está altamente influenciado por todas las variables, especialmente por el precio mensual, el área construida, el número de baños y parqueaderos, con cargas superiores a 0.42. Esto sugiere que PC1 representa un eje general de tamaño y valor de la vivienda: a mayor valor del componente, mayor precio, área, equipamiento y número de habitaciones.

  • El segundo componente (PC2), con una desviación estándar de 1.10, presenta una fuerte carga positiva en el estrato socioeconómico (0.64) y una negativa en habitaciones (-0.67), lo que indica un contraste: viviendas de mayor estrato tienden a tener menos habitaciones. Esto puede reflejar diferencias entre viviendas más exclusivas (menor densidad) frente a viviendas más amplias pero de menor estrato.

  • El tercer componente (PC3) está dominado por una alta carga en parqueaderos (0.62) y una carga negativa en estrato (-0.54), lo que podría estar capturando una dimensión donde ciertas viviendas cuentan con mayor capacidad de parqueo, independientemente de su nivel socioeconómico formal.

  • Los componentes PC4, PC5 y PC6 explican menos variabilidad y representan combinaciones más específicas. Por ejemplo, PC4 diferencia especialmente por el área construida (carga negativa alta) y parqueaderos (positiva), mientras que PC5 está fuertemente influido por el número de baños.

3. Análisis de Clustering (K-means)

Se realiza un análisis de agrupamiento (clustering) sobre las viviendas, utilizando el algoritmo k-means. El objetivo es identificar grupos de viviendas con características similares a partir de las variables numéricas estandarizadas utilizadas previamente en el análisis de componentes principales (precio mensual, área construida, parqueaderos, baños, habitaciones y estrato).

Primero, se identifican los registros con datos completos mediante complete.cases(), ya que el método de clustering no puede manejar valores faltantes. Luego, con fviz_nbclust() y el método del codo (WSS), se explora el número óptimo de clusters. Esta técnica visual ayuda a determinar cuántos grupos explican mejor la estructura de los datos, observando el punto donde la ganancia de varianza explicada se estabiliza.

Una vez definido el número de clusters (en este caso, 4), se aplica el algoritmo kmeans() con una semilla fija (set.seed(123)) para garantizar reproducibilidad. Se utiliza nstart = 25 para asegurar una mejor solución inicial, reduciendo el riesgo de caer en mínimos locales.

Los resultados del clustering se integran nuevamente al conjunto original vivienda mediante una nueva variable categórica llamada cluster, asignando el número de cluster solo a los registros con datos completos.

Finalmente, se visualizan los grupos obtenidos con fviz_cluster(), lo cual permite observar cómo se distribuyen los datos en función de los clusters identificados, evidenciando patrones de similitud interna y separación entre grupos.

  • Cluster 4:
    Tiene valores altos (rojo intenso) en casi todas las variables, sobre todo en preciom (precio medio), areaconst (área construida), y parqueaderos (parqueaderos). Esto indica que las viviendas de este grupo suelen ser las más grandes, con más parqueaderos y mayor precio. También tiene valores altos en habitaciones y estrato, lo que apunta a viviendas de mayor nivel socioeconómico y tamaño.
  • Cluster 3:
    Tiene valores bajos (color morado) en todas las variables, lo que indica que sus viviendas tienen generalmente precios más bajos, menos área, menos parqueaderos, menos baños, menos habitaciones y estrato bajo.
  • Cluster 2:
    Presenta una combinación: valores medios-altos en areaconst, banios y especialmente habitaciones (muy rojo), pero valores más bajos en estrato y parqueaderos. Esto puede indicar viviendas con más habitaciones y baños, pero en estratos más bajos y con menos parqueaderos.
  • Cluster 1:
    Está cerca de valores medios-bajos en general, con leves variaciones. Es un grupo más neutral o intermedio en las variables consideradas.

4. Análisis de Correspondencias (CA)

En esta sección se intentó aplicar un análisis de correspondencias simples (AC) con el fin de explorar gráficamente la relación entre las variables categóricas zona y tipo de vivienda. Para ello, primero se filtraron las observaciones con valores no faltantes en ambas variables, y luego se construyó una tabla de contingencia que resume la frecuencia de cada combinación zona-tipo.

Sin embargo el análisis de correspondencias requiere al menos dos categorías en cada dimensión (filas y columnas) y frecuencias distintas de cero para poder representar las relaciones, este procedimiento se omite en este caso por falta de información suficiente.

#> El resultado del análisis de correspondencias no tiene suficientes dimensiones para graficar.

5. Visualización geográfica de precios

En esta última sección se construye un mapa interactivo utilizando el paquete leaflet, con el objetivo de visualizar la ubicación geográfica de las viviendas contenidas en la base de datos. Cada observación se representa mediante un círculo cuya posición corresponde a las coordenadas longitud y latitud de la vivienda.