1 Resumen Ejecutivo

El presente informe analiza la oferta inmobiliaria urbana con el objetivo de apoyar decisiones estratégicas de compra, venta y valoración de inmuebles. Mediante técnicas de análisis multivariado —reducción de dimensionalidad (Análisis de Componentes Principales), segmentación (clustering) y análisis de correspondencia múltiple— se identificaron patrones estructurales que explican la organización del mercado.

Los resultados evidencian que la variabilidad del mercado está determinada principalmente por el nivel económico del inmueble, representado por variables como precio, área construida y características estructurales. A partir de esta estructura se identificaron cuatro segmentos claramente diferenciados, entre los cuales destaca un segmento premium caracterizado por altos precios, mayor área construida y mejores atributos funcionales (mayor número de parqueaderos y baños).

Aunque este segmento representa una menor proporción del total de la oferta, concentra un mayor valor unitario, lo que lo convierte en una oportunidad estratégica para enfoques orientados a rentabilidad. Adicionalmente, el análisis de correspondencia confirma que la localización geográfica y el estrato socioeconómico actúan como determinantes estructurales del valor de la oferta, reforzando la importancia de estrategias diferenciadas por zona.

En conjunto, el análisis demuestra que el mercado inmobiliario urbano no es homogéneo, sino que presenta una estructura segmentada y territorialmente organizada, lo que permite diseñar estrategias más precisas y basadas en evidencia.

2 Planteamiento del Problema

Una empresa inmobiliaria líder en una gran ciudad busca comprender en profundidad la oferta de vivienda urbana para tomar decisiones más informadas. La empresa cuenta con una base de datos de propiedades residenciales (variables numéricas y categóricas) y requiere un análisis integral que permita:

Metodología

Se aplicó un enfoque de análisis multivariado en cuatro etapas:

Este enfoque permite combinar reducción estructural, segmentación y análisis exploratorio categórico para una comprensión integral del mercado.

3 Exploracion y comprension de los datos

library(paqueteMODELOS)
data("vivienda")
str(vivienda)
## spc_tbl_ [8,322 × 13] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ id          : num [1:8322] 1147 1169 1350 5992 1212 ...
##  $ zona        : chr [1:8322] "Zona Oriente" "Zona Oriente" "Zona Oriente" "Zona Sur" ...
##  $ piso        : chr [1:8322] NA NA NA "02" ...
##  $ estrato     : num [1:8322] 3 3 3 4 5 5 4 5 5 5 ...
##  $ preciom     : num [1:8322] 250 320 350 400 260 240 220 310 320 780 ...
##  $ areaconst   : num [1:8322] 70 120 220 280 90 87 52 137 150 380 ...
##  $ parqueaderos: num [1:8322] 1 1 2 3 1 1 2 2 2 2 ...
##  $ banios      : num [1:8322] 3 2 2 5 2 3 2 3 4 3 ...
##  $ habitaciones: num [1:8322] 6 3 4 3 3 3 3 4 6 3 ...
##  $ tipo        : chr [1:8322] "Casa" "Casa" "Casa" "Casa" ...
##  $ barrio      : chr [1:8322] "20 de julio" "20 de julio" "20 de julio" "3 de julio" ...
##  $ longitud    : num [1:8322] -76.5 -76.5 -76.5 -76.5 -76.5 ...
##  $ latitud     : num [1:8322] 3.43 3.43 3.44 3.44 3.46 ...
##  - attr(*, "spec")=List of 3
##   ..$ cols   :List of 13
##   .. ..$ id          : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ zona        : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
##   .. ..$ piso        : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
##   .. ..$ estrato     : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ preciom     : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ areaconst   : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ parqueaderos: list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ banios      : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ habitaciones: list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ tipo        : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
##   .. ..$ barrio      : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
##   .. ..$ longitud    : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ latitud     : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   ..$ default: list()
##   .. ..- attr(*, "class")= chr [1:2] "collector_guess" "collector"
##   ..$ delim  : chr ";"
##   ..- attr(*, "class")= chr "col_spec"
##  - attr(*, "problems")=<externalptr>
summary(vivienda)
##        id           zona               piso              estrato     
##  Min.   :   1   Length:8322        Length:8322        Min.   :3.000  
##  1st Qu.:2080   Class :character   Class :character   1st Qu.:4.000  
##  Median :4160   Mode  :character   Mode  :character   Median :5.000  
##  Mean   :4160                                         Mean   :4.634  
##  3rd Qu.:6240                                         3rd Qu.:5.000  
##  Max.   :8319                                         Max.   :6.000  
##  NA's   :3                                            NA's   :3      
##     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   :2        NA's   :3        NA's   :1605     NA's   :3       
##   habitaciones        tipo              barrio             longitud     
##  Min.   : 0.000   Length:8322        Length:8322        Min.   :-76.59  
##  1st Qu.: 3.000   Class :character   Class :character   1st Qu.:-76.54  
##  Median : 3.000   Mode  :character   Mode  :character   Median :-76.53  
##  Mean   : 3.605                                         Mean   :-76.53  
##  3rd Qu.: 4.000                                         3rd Qu.:-76.52  
##  Max.   :10.000                                         Max.   :-76.46  
##  NA's   :3                                              NA's   :3       
##     latitud     
##  Min.   :3.333  
##  1st Qu.:3.381  
##  Median :3.416  
##  Mean   :3.418  
##  3rd Qu.:3.452  
##  Max.   :3.498  
##  NA's   :3

La base de datos contiene 8.322 registros de viviendas con variables estructurales y geográficas. Se observa alta dispersión en el precio (máximo cercano a 2.000 frente a un mínimo de 58), lo que sugiere una heterogeneidad significativa en la oferta. Asimismo, existen valores faltantes en algunas variables como parqueaderos, lo cual fue tratado antes del análisis multivariado.

Desde una perspectiva estratégica, esta heterogeneidad sugiere la coexistencia de múltiples perfiles de vivienda dentro del mercado urbano, lo cual justifica la aplicación de técnicas multivariadas para identificar estructuras subyacentes y posibles segmentos diferenciados.

4 Preparacion y estandarización de variables

vars_pca <- vivienda[, c("estrato",
                         "preciom",
                         "areaconst",
                         "parqueaderos",
                         "banios",
                         "habitaciones")]

# Eliminar NA
vars_pca <- na.omit(vars_pca)

# Escalar 
vars_pca_scaled <- scale(vars_pca)

summary(vars_pca_scaled)
##     estrato           preciom          areaconst        parqueaderos    
##  Min.   :-1.9279   Min.   :-1.2264   Min.   :-1.0488   Min.   :-0.7425  
##  1st Qu.:-0.8747   1st Qu.:-0.6593   1st Qu.:-0.6602   1st Qu.:-0.7425  
##  Median : 0.1786   Median :-0.3399   Median :-0.3549   Median : 0.1465  
##  Mean   : 0.0000   Mean   : 0.0000   Mean   : 0.0000   Mean   : 0.0000  
##  3rd Qu.: 1.2319   3rd Qu.: 0.3317   3rd Qu.: 0.3599   3rd Qu.: 0.1465  
##  Max.   : 1.2319   Max.   : 4.5669   Max.   :10.8526   Max.   : 7.2582  
##      banios         habitaciones    
##  Min.   :-2.3587   Min.   :-2.6466  
##  1st Qu.:-0.9096   1st Qu.:-0.4477  
##  Median :-0.1851   Median :-0.4477  
##  Mean   : 0.0000   Mean   : 0.0000  
##  3rd Qu.: 0.5394   3rd Qu.: 0.2852  
##  Max.   : 4.8866   Max.   : 4.6831

El escalamiento de las variables fue necesario debido a que las variables numéricas presentan diferentes escalas de medición (por ejemplo, precio se mide en cientos o miles, mientras que baños y parqueaderos son conteos). Sin esta estandarización, las variables con mayor magnitud dominarían la construcción de las componentes principales, sesgando la interpretación de los resultados.

Este proceso garantiza que el análisis refleje relaciones estructurales reales del mercado y no efectos artificiales derivados de diferencias en escala de medición.

5 Analisis de Componentes principales (PCA)

El Análisis de Componentes Principales (PCA) es una técnica de reducción de dimensionalidad que transforma un conjunto amplio de variables correlacionadas en un número menor de componentes sintéticos. Estas componentes concentran la mayor parte de la variabilidad del mercado y permiten identificar las dimensiones estructurales que explican las diferencias entre las propiedades.

# 3. Ejecutar PCA

pca_res <- prcomp(vars_pca_scaled, center = FALSE, scale. = FALSE)

# Calcular varianza explicada
var_exp <- (pca_res$sdev)^2
prop_var <- var_exp / sum(var_exp)
cum_var <- cumsum(prop_var)

# Crear tabla 
tabla_pca <- data.frame(
  Componente = paste0("PC", 1:length(prop_var)),
  Varianza = round(prop_var*100, 2),
  Acumulada = round(cum_var*100, 2)
)

tabla_pca
##   Componente Varianza Acumulada
## 1        PC1    58.06     58.06
## 2        PC2    20.38     78.45
## 3        PC3     8.32     86.77
## 4        PC4     5.99     92.76
## 5        PC5     4.07     96.84
## 6        PC6     3.16    100.00

5.1 Interpretación de las Componentes Principales

loadings <- round(pca_res$rotation, 3)
loadings
##                PC1    PC2    PC3    PC4    PC5    PC6
## estrato      0.295 -0.638  0.543  0.071  0.435 -0.130
## preciom      0.470 -0.239 -0.108 -0.291 -0.266  0.744
## areaconst    0.450  0.204 -0.259 -0.657  0.304 -0.405
## parqueaderos 0.428 -0.151 -0.616  0.620  0.119 -0.123
## banios       0.465  0.160  0.370  0.141 -0.678 -0.376
## habitaciones 0.299  0.668  0.331  0.271  0.417  0.329

La primera componente principal (PC1) presenta altas cargas positivas en precio, área construida, número de baños y parqueaderos, lo que indica que esta dimensión representa un eje asociado al nivel económico y tamaño del inmueble. En términos prácticos, valores altos en PC1 corresponden a propiedades de mayor precio, mayor área y mejor dotación estructural. Esta componente sintetiza el posicionamiento económico de la oferta y permite ordenar el mercado desde inmuebles de menor valor hacia propiedades de mayor categoría.

La segunda componente principal (PC2) muestra una alta carga positiva en número de habitaciones y una carga negativa relevante en estrato socioeconómico. Esto sugiere que esta dimensión captura diferencias en la configuración funcional interna de la vivienda y en su nivel socioeconómico relativo. En otras palabras, PC2 distingue propiedades según su estructura habitacional y su perfil social, complementando la dimensión puramente económica capturada por PC1.

En conjunto, las dos primeras componentes explican la mayor parte de la variabilidad del mercado y permiten identificar que la oferta inmobiliaria se organiza principalmente en torno a dos ejes estructurales:

  • el valor económico del inmueble, y

  • sus características funcionales y socioeconómicas.

Esto confirma que la variabilidad observada en el mercado no es aleatoria, sino que responde a patrones estructurales bien definidos que segmentan la oferta.

Estas dimensiones reducidas no solo facilitan la visualización del mercado, sino que constituyen la base analítica para la segmentación posterior. Al proyectar las propiedades sobre estos ejes estructurales, se generan agrupaciones naturales que permiten identificar segmentos homogéneos del mercado, lo cual justifica el uso del análisis de conglomerados como etapa siguiente del estudio.

6 Seleccion del numero de componentes

# Scree Plot 

plot(prop_var*100,
     type="b",
     xaxt="n",
     xlab="Componentes principales",
     ylab="Varianza explicada (%)",
     main="Scree Plot - Varianza explicada")

axis(1,
     at=1:length(prop_var),
     labels=paste0("PC",1:length(prop_var)))

abline(h=100/length(prop_var), lty=2, col="red")

# Varianza acumulada
plot(cum_var*100,
     type="b",
     xaxt="n",
     xlab="Componentes principales",
     ylab="Varianza acumulada (%)",
     main="Varianza explicada acumulada")

axis(1,
     at=1:length(cum_var),
     labels=paste0("PC",1:length(cum_var)))

abline(h=80, lty=2, col="blue")

El Scree Plot evidencia una caída pronunciada en las dos primeras componentes y una estabilización a partir de la tercera. La varianza acumulada supera el 80% al incluir las tres primeras componentes (86.77%), por lo que se decide utilizar tres componentes principales para los análisis posteriores.

Adicionalmente, el criterio de Kaiser (autovalores mayores a 1) respalda la retención de las tres primeras componentes, ya que concentran la mayor parte de la varianza estructural del conjunto de datos.

Esto implica que la mayor parte de la complejidad del mercado puede explicarse mediante tres dimensiones fundamentales, simplificando el análisis sin perder capacidad interpretativa.

7 Segmentacion del mercado (K-means)

El análisis de conglomerados (clustering) permite agrupar propiedades con características similares en segmentos homogéneos. En este caso se utiliza el algoritmo K-means sobre las componentes principales, con el fin de identificar perfiles diferenciados dentro de la oferta inmobiliaria.

# 5. Clustering sobre componentes principales

pc_scores <- as.data.frame(pca_res$x[, 1:3])  # PC1, PC2, PC3
head(pc_scores)
##          PC1        PC2        PC3
## 1 -1.1049560  2.4801716  0.1929478
## 2 -1.8441361  0.9171988 -0.9159451
## 3 -0.8903650  1.3924365 -1.4106187
## 4  0.8511689  0.4938065 -0.9501022
## 5 -1.3998646 -0.4258936  0.3015001
## 6 -1.1002302 -0.3000029  0.5811099
set.seed(123)

wss <- sapply(2:10, function(k){
  kmeans(pc_scores, centers = k, nstart = 20)$tot.withinss
})
plot(2:10, wss, type="b",
     xlab="Numero de clusters (k)",
     ylab="WSS",
     main="Metodo del codo (k-means sobre PCs)")

## Selección del número óptimo de clústeres (Método del codo)

Para determinar el número adecuado de segmentos, se utilizó el método del codo, el cual analiza la variabilidad interna de los grupos a través del indicador WSS (Within-Cluster Sum of Squares). Este indicador mide qué tan homogéneos son los clústeres: valores más bajos indican grupos más compactos.

El gráfico evidencia una reducción significativa del WSS hasta k = 4. A partir de este punto, la disminución es considerablemente más suave, lo que indica que agregar más clústeres no mejora sustancialmente la segmentación.

En términos prácticos, esto sugiere que el mercado inmobiliario urbano puede organizarse de manera natural en cuatro grandes perfiles diferenciados. Esta elección permite capturar la heterogeneidad del mercado sin generar una fragmentación excesiva que complique la interpretación estratégica.

set.seed(123)
k_final <- kmeans(pc_scores, centers = 4, nstart = 20)

pc_scores$cluster <- as.factor(k_final$cluster)

table(pc_scores$cluster)
## 
##    1    2    3    4 
##  772 3182 1988  775

8 Validación interna del clustering (silueta)

Para evaluar la calidad de la segmentación obtenida, se utiliza el coeficiente de silueta, una medida que cuantifica qué tan bien está clasificada cada observación dentro de su clúster en comparación con los demás grupos. Valores cercanos a 1 indican buena separación entre segmentos, mientras que valores cercanos a 0 sugieren solapamiento.

library(cluster)

sil <- silhouette(k_final$cluster, dist(pc_scores[,1:3]))
mean_sil <- mean(sil[, 3])
mean_sil
## [1] 0.3739477

Para evaluar la calidad del agrupamiento obtenido con K-means, se calculó el coeficiente promedio de silueta, el cual mide qué tan bien se encuentra cada observación dentro de su propio clúster en comparación con los demás grupos. Este indicador toma valores entre -1 y 1, donde valores cercanos a 1 indican una separación clara entre segmentos, mientras que valores cercanos a 0 sugieren superposición.

El coeficiente promedio de silueta obtenido fue de 0.37. En términos prácticos, valores entre 0.25 y 0.50 indican una estructura de segmentación razonable con cierto grado de superposición entre clústeres. Esto sugiere que la segmentación es consistente y útil para fines estratégicos, aunque el mercado presenta transiciones graduales entre segmentos, especialmente entre niveles socioeconómicos intermedios, lo cual es común en mercados reales.

En consecuencia, la validación confirma que la elección de cuatro clústeres es metodológicamente adecuada y ofrece una representación estructural coherente del mercado inmobiliario urbano.

9 Caracterización de los clústers

Con el fin de interpretar estratégicamente los segmentos identificados, se calcularon los valores promedio de las variables originales para cada clúster. Esto permite comprender las diferencias económicas y estructurales entre grupos, y facilita su traducción en perfiles de mercado con implicaciones estratégicas.

# Agregar cluster a variables originales
df_cluster <- vars_pca
df_cluster$cluster <- pc_scores$cluster

# Perfil promedio por cluster
perfil_cluster <- aggregate(. ~ cluster, data=df_cluster, mean)

# Redondear solo columnas numéricas
perfil_cluster[ , -1] <- round(perfil_cluster[ , -1], 2)

perfil_cluster
##   cluster estrato preciom areaconst parqueaderos banios habitaciones
## 1       1    4.11  457.51    295.50         1.81   4.45         6.10
## 2       2    4.31  247.65     95.14         1.18   2.24         2.94
## 3       3    5.59  563.77    177.72         2.05   3.64         3.39
## 4       4    5.73 1145.14    429.06         3.98   5.23         4.46

A partir de los promedios observados, se identifican cuatro perfiles claramente diferenciados dentro del mercado inmobiliario urbano:

9.1 Análisis estrategico del segmento premium

# Porcentaje por cluster
round(prop.table(table(pc_scores$cluster))*100, 2)
## 
##     1     2     3     4 
## 11.49 47.37 29.60 11.54
# Precio promedio general
round(mean(vars_pca$preciom), 2)
## [1] 468.88
# Precio promedio cluster 4
round(perfil_cluster[perfil_cluster$cluster == 4, "preciom"], 2)
## [1] 1145.14
  • Cluster 2: estrato 4.31, precio 247.65, área 95.14, parqueaderos 1.18, baños 2.24, hab 2.94

Segmento estándar/medio: apartamentos/casas de tamaño medio-bajo, precios accesibles. Es el “mercado principal”.

  • Cluster 1: estrato 4.11, precio 457.51, área 295.50, parqueaderos 1.81, baños 4.45, hab 6.10

Segmento familiar amplio: inmuebles grandes (área alta, muchas habitaciones/baños), precio medio-alto.

  • Cluster 3: estrato 5.59, precio 563.77, área 177.72, parqueaderos 2.05, baños 3.64, hab 3.39

Segmento alto / plus: estrato alto, precio alto, tamaño medio-alto, más parqueaderos y baños.

  • Cluster 4: estrato 5.73, precio 1145.14, área 429.06, parqueaderos 3.98, baños 5.23, hab 4.46

Segmento premium / lujo: precios muy altos, área muy grande, muchos parqueaderos y baños.

El precio promedio del segmento premium es aproximadamente 2.4 veces el promedio general del mercado, lo que evidencia su alto diferencial de valor.

Este hallazgo sugiere que, aunque el volumen del segmento premium es reducido, su contribución potencial a ingresos y rentabilidad puede ser desproporcionadamente alta frente a otros segmentos.

10 Validación visual de la segmentación

plot(pc_scores$PC1, pc_scores$PC2,
     col = pc_scores$cluster,
     pch = 19,
     xlab = "PC1",
     ylab = "PC2",
     main = "Clusters en el plano PCA (PC1 vs PC2)")

legend("topright",
       legend = levels(pc_scores$cluster),
       col = 1:length(levels(pc_scores$cluster)),
       pch = 19,
       title = "Cluster")

La representación gráfica de los clústeres en el plano formado por la primera y segunda componente principal permite visualizar la separación estructural entre los segmentos identificados.

Cada punto del gráfico representa una vivienda, mientras que los colores indican el clúster asignado por el algoritmo K-means. La disposición espacial muestra que los grupos no son arbitrarios, sino que responden a diferencias reales en las dimensiones económicas y estructurales capturadas por las componentes principales.

Se observa que el segmento premium se ubica predominantemente en la zona de valores altos de la primera componente principal, lo que confirma su asociación con mayores niveles de precio, área construida y dotación estructural. Por su parte, los demás clústeres ocupan regiones diferenciadas del plano, reflejando distintos perfiles dentro del mercado.

Esta visualización refuerza la coherencia del proceso de segmentación y confirma que los clústeres identificados representan estructuras diferenciadas dentro del mercado inmobiliario urbano.

11 Preparar variables categoricas para MCA

# 7. Preparación para Análisis de Correspondencia Múltiple

library(FactoMineR)
library(factoextra)

df_cat <- vivienda[, c("tipo", "zona", "estrato")]

# Convertir a factores
df_cat$tipo <- as.factor(df_cat$tipo)
df_cat$zona <- as.factor(df_cat$zona)
df_cat$estrato <- as.factor(df_cat$estrato)

df_cat <- na.omit(df_cat)

str(df_cat)
## spc_tbl_ [8,319 × 3] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ tipo   : Factor w/ 2 levels "Apartamento",..: 2 2 2 2 1 1 1 1 2 2 ...
##  $ zona   : Factor w/ 5 levels "Zona Centro",..: 4 4 4 5 2 2 2 2 2 2 ...
##  $ estrato: Factor w/ 4 levels "3","4","5","6": 1 1 1 2 3 3 2 3 3 3 ...
##  - attr(*, "spec")=List of 3
##   ..$ cols   :List of 13
##   .. ..$ id          : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ zona        : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
##   .. ..$ piso        : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
##   .. ..$ estrato     : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ preciom     : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ areaconst   : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ parqueaderos: list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ banios      : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ habitaciones: list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ tipo        : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
##   .. ..$ barrio      : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
##   .. ..$ longitud    : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ latitud     : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   ..$ default: list()
##   .. ..- attr(*, "class")= chr [1:2] "collector_guess" "collector"
##   ..$ delim  : chr ";"
##   ..- attr(*, "class")= chr "col_spec"
##  - attr(*, "problems")=<externalptr> 
##  - attr(*, "na.action")= 'omit' Named int [1:3] 8320 8321 8322
##   ..- attr(*, "names")= chr [1:3] "8320" "8321" "8322"

12 Análisis de correspondencia múltiple (MCA)

Con el propósito de analizar asociaciones entre variables categóricas del mercado (tipo de vivienda, zona y estrato socioeconómico), se aplicó un Análisis de Correspondencia Múltiple (MCA). Esta técnica permite representar gráficamente patrones de asociación entre categorías y entender cómo se estructuran territorial y socioeconómicamente los segmentos identificados.

# 8. Analisis de Correspondencia Multiple (MCA)

mca_res <- MCA(df_cat, graph = FALSE)

# Porcentaje de inercia explicada por dimension
eig <- mca_res$eig
eig
##       eigenvalue percentage of variance cumulative percentage of variance
## dim 1  0.5620882              21.078306                          21.07831
## dim 2  0.4531232              16.992119                          38.07043
## dim 3  0.3796450              14.236687                          52.30711
## dim 4  0.3334444              12.504164                          64.81128
## dim 5  0.3233137              12.124263                          76.93554
## dim 6  0.2717762              10.191608                          87.12715
## dim 7  0.2013563               7.550862                          94.67801
## dim 8  0.1419197               5.321990                         100.00000
# Mapa factorial (categorias)
fviz_mca_var(mca_res, repel = TRUE,
             title = "MCA: Tipo, Zona y Estrato")

El análisis de correspondencia múltiple revela asociaciones claras entre tipo de vivienda, zona y estrato socioeconómico. La primera dimensión diferencia principalmente las zonas centrales y orientales del resto de la ciudad, lo que sugiere una concentración estructural de ciertos perfiles inmobiliarios en estas áreas. Por su parte, la segunda dimensión refleja un gradiente socioeconómico que distingue niveles de estrato dentro del mercado urbano.

Se observan asociaciones relevantes entre Zona Oeste y estratos altos, así como entre Zona Sur y estratos medios, evidenciando que la distribución geográfica de la oferta no es aleatoria, sino que responde a patrones socioeconómicos definidos. Asimismo, el tipo de vivienda muestra comportamientos diferenciados según la localización, lo que indica segmentaciones espaciales consistentes.

Esto sugiere que la localización geográfica actúa como un determinante estructural del nivel socioeconómico de la oferta, reforzando la importancia de estrategias diferenciadas por zona dentro del mercado inmobiliario urbano.

La coherencia entre los resultados del PCA, la segmentación por clustering y las asociaciones observadas en el MCA refuerza la robustez del análisis y confirma que la segmentación identificada responde tanto a variables estructurales como territoriales.

13 Limitaciones del análisis

Aunque el presente estudio permite identificar patrones relevantes en la oferta inmobiliaria urbana, es importante reconocer algunas limitaciones metodológicas y de información:

En consecuencia, los resultados deben interpretarse como una segmentación estratégica y exploratoria que apoya la toma de decisiones, más que como una clasificación definitiva del mercado inmobiliario.

14 Conclusión

El análisis integral del mercado inmobiliario urbano permitió identificar patrones estructurales relevantes mediante técnicas multivariadas aplicadas de manera complementaria.

El análisis de Componentes Principales evidenció que la variabilidad del mercado está fuertemente explicada por variables relacionadas con tamaño, precio y nivel socioeconómico, confirmando que estas dimensiones son determinantes en la diferenciación de la oferta inmobiliaria.

El análisis de conglomerados permitió identificar cuatro segmentos claramente diferenciados. Entre ellos destaca un segmento premium caracterizado por:

Aunque este segmento representa una menor proporción del total de la oferta, su alto valor unitario lo convierte en un grupo estratégicamente atractivo dentro del mercado.

Por su parte, el análisis de correspondencia múltiple confirmó asociaciones entre tipo de vivienda, zona y estrato, evidenciando concentración de estratos altos en determinadas zonas específicas, lo que refuerza la viabilidad de una estrategia enfocada en mercados de alto poder adquisitivo.

En conjunto, los resultados muestran coherencia entre la reducción dimensional mediante Componentes Principales, la segmentación estructural a través de K-means y las asociaciones categóricas identificadas con el MCA, fortaleciendo la robustez metodológica del análisis realizado y respaldando la toma de decisiones estratégicas basada en evidencia estadística.

En consecuencia, este estudio no solo identifica patrones estadísticos relevantes, sino que transforma datos complejos del mercado en información estratégica accionable. La integración de reducción de dimensionalidad, segmentación y análisis de asociaciones permite apoyar decisiones de inversión, posicionamiento y diferenciación competitiva, proporcionando una base sólida para la planificación estratégica en el sector inmobiliario urbano.

15 Recomendaciones Estratégicas

Se recomienda a la empresa inmobiliaria: