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 enpreciom
(precio medio),areaconst
(área construida), yparqueaderos
(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 enhabitaciones
yestrato
, 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 enareaconst
,banios
y especialmentehabitaciones
(muy rojo), pero valores más bajos enestrato
yparqueaderos
. 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.