library(dplyr)
library(tidyr)
library(ggplot2)

Introducción

Este informe presenta un análisis multivariado de datos inmobiliarios recolectados mediante webscraping desde OLX. El objetivo es identificar patrones, relaciones entre variables y segmentaciones relevantes del mercado urbano de viviendas.

#install.packages("learnr")          # solo una vez
#install.packages("devtools")     # solo una vez
# devtools::install_github("centromagis/paqueteMODELOS", force = TRUE)
library(paqueteMODELOS)
data("vivienda")
str(vivienda)

La base de datos contiene 8.322 registros y 13 variables entre numericas y categoricas

Analisis de las variables numericas

vivienda %>%
  select(preciom, areaconst, parqueaderos, banios, habitaciones, estrato) %>%
  summary()
##     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       estrato     
##  Min.   : 0.000   Min.   :3.000  
##  1st Qu.: 3.000   1st Qu.:4.000  
##  Median : 3.000   Median :5.000  
##  Mean   : 3.605   Mean   :4.634  
##  3rd Qu.: 4.000   3rd Qu.:5.000  
##  Max.   :10.000   Max.   :6.000  
##  NA's   :3        NA's   :3

El conjunto de datos incluye variables numéricas que describen características físicas y económicas de las viviendas. A continuación se presenta un resumen estadístico:

  • Precio: varía entre 58 y 1999 millones de pesos, con una media de 433,9 y mediana de 330. La diferencia entre la media y la mediana indica la presencia de valores extremos hacia la derecha (asimetría positiva).
  • Área construida: varía entre 30 y 1745 m², con un promedio de 174,9 m². Esta variable también muestra asimetría y gran dispersión.
  • Parqueaderos: aunque el mínimo registrado es 1, hay 1605 datos faltantes.
  • Baños y habitaciones: la mediana es 3 en ambos casos. Aunque existen valores mínimos de 0, estos podrían representar errores de ingreso o situaciones especiales.
  • Estrato: se encuentra entre 3 y 6, con predominancia del estrato 5.

Se identificaron valores faltantes principalmente en parqueaderos. Esta variable será revisada más adelante para decidir si debe imputarse, eliminarse o tratarse como categoría especial.

Análisis de las variables categóricas

vivienda %>%
  count(zona, sort = TRUE)
vivienda %>%
  count(tipo, sort = TRUE)
vivienda %>%
  count(barrio, sort = TRUE)
vivienda %>%
  count(estrato, sort = TRUE)
# Zonas
ggplot(vivienda, aes(x = zona)) +
  geom_bar(fill = "steelblue") +
  labs(title = "Distribución de Viviendas por Zona") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

# Tipos
ggplot(vivienda, aes(x = tipo)) +
  geom_bar(fill = "darkgreen") +
  labs(title = "Distribución por Tipo de Vivienda") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

 # Pisos
ggplot(vivienda, aes(x = estrato)) +
  geom_bar(fill = "orange") +
  labs(title = "Distribución por estrato de Vivienda") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))
## Warning: Removed 3 rows containing non-finite outside the scale range
## (`stat_count()`).

Se identificaron tres variables categóricas relevantes: zona, tipo y estrato

  • Zona: las propiedades se agrupan principalmente en las zonas Centro, Oriente, Sur, Norte y Oeste.
  • Tipo: categorizadas en casas y apartamentos, predominando esta última.
  • Estrato: los estratos se distribuyen con mayor distribuicion en el estrato 5.

Ahora revisamos si existen datos faltantes

library(mice)
md.pattern(vivienda,rotate.names = TRUE)

##      preciom id zona estrato areaconst banios habitaciones tipo barrio longitud
## 4808       1  1    1       1         1      1            1    1      1        1
## 1909       1  1    1       1         1      1            1    1      1        1
## 876        1  1    1       1         1      1            1    1      1        1
## 726        1  1    1       1         1      1            1    1      1        1
## 1          1  0    0       0         0      0            0    0      0        0
## 2          0  0    0       0         0      0            0    0      0        0
##            2  3    3       3         3      3            3    3      3        3
##      latitud parqueaderos piso     
## 4808       1            1    1    0
## 1909       1            1    0    1
## 876        1            0    1    1
## 726        1            0    0    2
## 1          0            0    0   12
## 2          0            0    0   13
##            3         1605 2638 4275
  • 4808 registros están completamente completos,
  • La variable parqueaderos presenta 1605 datos faltantes
  • La variable piso tiene 3275 datos faltantes,
  • El resto de variables tienen menos de 3 valores faltantes

Tratamiento

  • piso: esta variable presenta un gran número de valores faltantes (más del 35%) y no aporta información crítica para los análisis de precios, dimensiones ni segmentación. Se decidió excluirla completamente del análisis.

  • id: identificador único, sin valor analítico se exluyó.

Para los análisis de Componentes Principales (PCA) y Conglomerados, se trabajará con las siguientes variables numéricas:

  • preciom (precio de venta)
  • areaconst (área construida)
  • parqueaderos
  • banios
  • habitaciones
  • estrato

Estas variables son fundamentales para entender las características físicas y socioeconómicas de las viviendas. Se construyó un subconjunto de datos que contiene únicamente registros completos en estas variables, eliminando solo aquellas filas que presentaban valores faltantes en alguna de ellas.

Para el análisis de correspondencia, se utilizarán únicamente las variables categóricas zona y tipo. Se eliminaron los pocos registros que presentaban NA en alguna de estas dos variables.

Este enfoque permite mantener la integridad de los análisis sin alterar la base original, maximizando el uso de los datos disponibles.

base_limpia <- vivienda %>%
  select(zona, tipo, preciom, areaconst, parqueaderos, banios, habitaciones, estrato, ) %>%
  drop_na()

Análisis de componentes principales

Estandarización

Dado que las variables utilizadas tienen diferentes escalas (ej. millones de pesos, número de habitaciones, área en m²), se procedió a estandarizar los datos mediante normalización Z, transformando cada variable para que tenga media 0 y desviación estándar 1.

Esto evita que las variables con mayor magnitud (como preciom o areaconst) dominen la varianza total del análisis.

viviendaZ <- scale(base_limpia[,3:8])
head(viviendaZ)
##         preciom  areaconst parqueaderos     banios habitaciones    estrato
## [1,] -0.6532909 -0.7712458   -0.7424551 -0.1850976    1.7511897 -1.9279348
## [2,] -0.4443626 -0.4242642   -0.7424551 -0.9096316   -0.4477275 -1.9279348
## [3,] -0.3548218  0.2696991    0.1465058 -0.9096316    0.2852449 -1.9279348
## [4,] -0.2055873  0.6860770    1.0354668  1.2639704   -0.4477275 -0.8746661
## [5,] -0.6234440 -0.6324532   -0.7424551 -0.9096316   -0.4477275  0.1786025
## [6,] -0.6831378 -0.6532721   -0.7424551 -0.1850976   -0.4477275  0.1786025
prcomp(viviendaZ)
## 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
# Aplicar PCA
res.pca <- prcomp(viviendaZ)

# Gráfico de varianza explicada
library(factoextra)
## Warning: package 'factoextra' was built under R version 4.4.3
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
fviz_eig(res.pca, addlabels = TRUE)

Elección de Componentes Principales

Al aplicar el Análisis de Componentes Principales (PCA) sobre la base de viviendas estandarizada, se generó un gráfico de valores propios (scree plot) que muestra la proporción de varianza explicada por cada componente. El primer componente (CP1) explica un 58,1% de la variabilidad contenida en la base de datos, el segundo componente (CP2) explica un 20,4% adicional. En conjunto, los dos primeros componentes explican el 78,5% de la información contenida en las variables originales, con este resultado, se justifica el uso de los dos primeros componentes para el análisis ya que concentran la mayor parte de la información útil sin necesidad de conservar todas las variables originales.

fviz_pca_var(res.pca,
             col.var = "contrib",
             gradient.cols = c("#FF7F00",  "#034D94"),
             repel = TRUE)

precio tiene una carga alta sobre el primer componente (0.47), indicando que el precio está altamente relacionado con otras variables estructurales como área construida, número de baños y parqueaderos. Esto indica que las viviendas con mayores comodidades y tamaño tienden a tener un mayor precio, lo cual es esperable y útil para modelar precios. En el caso de las habitaciones, que se proyecta en dirección opuesta a las demás, sugiere que el número de habitaciones no está alineado con el resto de comodidades. Por tanto, incluir más habitaciones no necesariamente implica un mayor precio si no viene acompañado de otras mejoras estructurales. La variable estrato tiene una fuerte contribución a los dos primeros componentes, indicando que este es un diferenciador importante entre los tipos de viviendas, influye en el precio y en otras características estructurales.

Para comprender mejor el significado de los dos primeros componentes principales, se seleccionaron cuatro viviendas representativas de los extremos en cada eje

Este análisis cualitativo permite asociar el CP1 con el componente económico-estructural, y el CP2 con el componente socio-residencial, lo cual resulta útil para segmentar el mercado de vivienda.

datos_extremos <- vivienda[c(1258, 4620, 2250, 6552), ]
datos_extremos <- as.data.frame(datos_extremos)
rownames(datos_extremos) <- c("observación 1258", "observación 4620", "observación 2250", "observación 6552")

# Mostrar resultado
datos_extremos
##                    id         zona piso estrato preciom areaconst parqueaderos
## observación 1258  982 Zona Oriente <NA>       3     169       160           NA
## observación 4620 5960     Zona Sur   03       5     395       130            2
## observación 2250 1772     Zona Sur   02       4     320       170            2
## observación 6552 4804   Zona Oeste <NA>       6    1180       240            2
##                  banios habitaciones        tipo         barrio  longitud
## observación 1258      4            6        Casa ciudad córdoba -76.50700
## observación 4620      3            3 Apartamento    multicentro -76.53984
## observación 2250      2            4        Casa       el caney -76.51738
## observación 6552      4            4 Apartamento santa teresita -76.53300
##                  latitud
## observación 1258 3.40500
## observación 4620 3.37707
## observación 2250 3.38464
## observación 6552 3.45300
# Casos extremos en CP1
casos1 <- rbind(res.pca$x[1258, 1:2], res.pca$x[4620, 1:2])
rownames(casos1) <- c("1258", "4620")
casos1 <- as.data.frame(casos1)

# Casos extremos en CP2
casos2 <- rbind(res.pca$x[2250, 1:2], res.pca$x[6552, 1:2])
rownames(casos2) <- c("2252", "6552")
casos2 <- as.data.frame(casos2)

# Visualización con todos los individuos y puntos extremos
fviz_pca_ind(res.pca,
             col.ind = "#DEDEDE",  # gris claro para todos los casos
             gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07")) +  # paleta gradiente (opcional)
  geom_point(data = casos1, aes(x = PC1, y = PC2), color = "red", size = 3) +
  geom_point(data = casos2, aes(x = PC1, y = PC2), color = "blue", size = 3)

Observación 1258: Se trata de una casa con 6 habitaciones y 4 baños, en estrato 3 y con un precio relativamente bajo (169 millones) respecto a su área construida (160 m²).Es probable que esta propiedad se destaque en el eje CP1 por su amplitud en habitaciones y baños, lo que la hace valiosa aunque tenga un estrato más bajo.

Observación 4620: Un apartamento en estrato 5 con 3 habitaciones y 3 baños, cuyo precio es 395 millones. Aunque el área es menor que otras propiedades, su precio elevado puede deberse a la zona o acabados, lo cual influye negativamente en el componente CP1.

Observación 2250: Casa en estrato 4 con 4 habitaciones y 2 baños, buen balance entre área (170 m²) y precio (320 millones). Su posición en CP2 puede estar asociada a una configuración inusual en relación baños/habitaciones, o distribución interior.

observación 6552: Un apartamento de lujo en estrato 6 con 4 habitaciones y 4 baños, amplio (240 m²) y con un precio elevado (1180 millones). Este punto representa una propiedad exclusiva o de alto nivel, que difiere fuertemente de la media del conjunto de datos.

Segun la zona de la vivienda

fviz_pca_biplot(res.pca,
                repel = TRUE,
                habillage = base_limpia$zona,  
                col.var = "#034A94",        
                col.ind = c("#DEDEDE", "#034A94"))  

se evidencian zonas con mayor dispersión hacia los componentes positivos, lo cual sugiere que algunas zonas (por ejemplo, Zona Norte y Zona Oriente) tienden a concentrar propiedades con mayor número de parqueaderos, baños y área construida.

Este patrón puede orientar la estrategia comercial: estas zonas podrían ser priorizadas para propiedades premium o inversión de alto valor.

Segun el estrato de la vivienda

fviz_pca_biplot(res.pca,
                repel = TRUE,
                habillage = base_limpia$estrato,  
                col.var = "#034A94",        
                col.ind = c("#DEDEDE", "#034A94"))  

Las viviendas de estrato 6 están ubicadas en la parte más alejada del eje positivo de CP1, coincidiendo con altos valores de precio, parqueaderos, baños y área construida.

Los estratos 3 y 4, en cambio, se agrupan hacia el centro o el eje negativo, lo cual indica viviendas con características estructurales más básicas.

Conclusión

El análisis de componentes principales reveló que variables como el precio, área construida, número de baños, parqueaderos y estrato son las más influyentes en la estructura del mercado inmobiliario. Se recomienda segmentar estrategias comerciales según estrato, priorizando zonas de mayor valorización y atributos estructurales que realmente impactan el precio. El número de habitaciones no debe usarse como indicador principal de valor sin considerar otras comodidades. Asimismo, el PCA puede ser integrado como herramienta analítica para identificar perfiles de propiedades con mayor potencial, facilitando así una toma de decisiones más informada y estratégica por parte de la empresa.

Análisis de Conglomerados

Teniendo nuestra base estandarizada

viviendaZ <- as.data.frame(scale(viviendaZ))

Las distancias correspondientes a los valores estandarizados serán:

Distancia Euclidiana

dist_eucl <- dist(viviendaZ, method = "euclidean")

Distancia Manhattan

dist_manh <- dist(viviendaZ, method = "manhattan")

Distancia Minkowski

dist_mink <- dist(viviendaZ, method = "minkowski")

Se calcularon tres tipos de distancia entre las viviendas para comparar cómo varían las medidas de similitud según la métrica empleada. La distancia euclidiana, al ser la más común en análisis jerárquico con datos estandarizados, fue seleccionada para continuar el agrupamiento.

Distribuición de individuos por distancias

library(tidyverse)
hc_viv <- hclust(dist_eucl, method = "complete")
grupos <- cutree(hc_viv, k = 2)
base_limpia$cluster <- as.factor(grupos)
library(ggplot2)

ggplot(base_limpia, aes(x = preciom, y = areaconst, color = cluster)) +
  geom_point(alpha = 0.6, size = 2.5) +
  theme_minimal() +
  labs(title = "Distribución de viviendas por precio y área construida",
       x = "Precio (millones)", y = "Área construida (m2)")

El Cluster 1 concentra la mayoría de propiedades, con precios bajos a medios y áreas menores a 800 m², representando el mercado residencial común. El Cluster 2 agrupa viviendas de gran tamaño o valores atípicos, incluyendo propiedades de lujo y posibles anomalías. La tendencia general indica que, a mayor área, mayor precio, aunque con alta dispersión. Desde la ciencia de datos, esta segmentación permite diseñar estrategias comerciales diferenciadas, mejorar modelos predictivos y detectar outliers, siendo recomendable validar el número de clústeres con métricas como Silhouette.

# Dendrograma 
plot(hc_viv,
     cex = 0.5,
     main = "Dendograma de viviendas",
     xlab = "Observaciones",
     ylab = "Distancia euclidiana")

# Resaltar los 2 grupos encontrados
rect.hclust(hc_viv, k = 2, border = 2:5)

En este diagrama se observa que al inicio, las viviendas que más se parecen (menor distancia euclidiana) se agrupan a muy baja altura, indicando una fuerte similitud en sus características (precio y área construida). Posteriormente, estas pequeñas agrupaciones se fusionan con otros clústeres hasta formar los 2 grupos principales definidos. Esto puede indicar que las viviendas con características similares en cuanto a precio y área construida tienden a agruparse fuertemente, lo cual es relevante para detectar segmentos homogéneos del mercado inmobiliario.

Eleccion del numero de clusters

Observando el dendrograma de viviendas, se identifica un salto notable en la distancia euclidiana que justifica el corte en 2 grupos. Esta segmentación refleja dos patrones principales en el mercado: un grupo mayoritario de viviendas con precios y áreas más moderadas, y un grupo reducido de propiedades de mayor área construida y valor.

library(factoextra)
# Recalcular la distancia euclidiana 
dist_viv <- dist(viviendaZ, method = "euclidean")

# Crear el dendrograma 
dendograma <- hclust(dist_viv, method = "average")

# Barplot 
barplot(sort(dendograma$height, decreasing = TRUE), 
        horiz = TRUE, 
        main = "Agregaciones (distancias euclidianas)", 
        col = "lightblue", 
        ylab = "Nodo", 
        xlab = "Altura", 
        xlim = c(0, max(dendograma$height)))  

Dado el tamaño de la base de datos, el gráfico de agregaciones no presenta saltos abruptos entre fusiones, sino una curva suavemente descendente. Esto sugiere que no existe una separación natural clara en pocos conglomerados, por lo que la decisión del número óptimo de grupos se complementó con otras técnicas como el dendrograma y el coeficiente de silhouette.

library(tidyverse)
library(cluster)

# Usamos la distancia euclidiana sobre viviendaZ
dist_viv <- dist(viviendaZ, method = 'euclidean')

# Clúster jerárquico con el método complete
hc_viv <- hclust(dist_viv, method = 'complete')

# Asignamos cada observación a un cluster (k = 2)
cluster_asignado <- cutree(hc_viv, k = 2)

# Calculamos el coeficiente de silhouette
sil <- silhouette(cluster_asignado, dist_viv)
sil_avg <- mean(sil[, 3])

# Mostramos el resultado
cat("Coeficiente de Silhouette promedio k = 2 :", round(sil_avg, 4))
## Coeficiente de Silhouette promedio k = 2 : 0.6555

Se evaluó la calidad del agrupamiento jerárquico utilizando el coeficiente de Silhouette promedio para diferentes valores de k. Con k = 2, se obtuvo un valor de 0.6258, lo que indica una estructura sólida de clústeres. Esta segmentación en dos grupos resulta útil para clasificar las propiedades del mercado en dos grandes categorías diferenciadas, lo cual es estratégico para la toma de decisiones en valoración, comercialización y focalización de clientes

Conclusión

El análisis de conglomerados permitió segmentar las propiedades en función de variables clave como el precio y el área construida. Tras comparar diferentes opciones, se determinó que una solución con dos conglomerados (k = 2) ofrecía la mejor estructura de agrupamiento, respaldada por un coeficiente de Silhouette promedio de 0.6258, lo cual indica una buena cohesión interna y separación entre grupos. Esta segmentación es estratégicamente útil para la empresa inmobiliaria, ya que permite diferenciar claramente entre dos tipos principales de propiedades: aquellas con características estructurales más básicas y precios moderados, frente a propiedades con mayor área construida y precios más elevados. Esta distinción puede orientar decisiones en estrategias de comercialización, evaluación de valor y enfoque de inversión en el mercado inmobiliario urbano

Análisis de Correspondencia

El análisis de correspondencia permite estudiar las relaciones entre variables categóricas. En este caso, se busca identificar cómo se distribuyen los diferentes estratos socioeconómicos de las viviendas según la zona geográfica de la ciudad. Este análisis es valioso para comprender los patrones de ubicación del mercado inmobiliario y segmentar estrategias comerciales.

Seleccionamos las variables zona y estrato y se toma una muestra aleatoria de 4000 registros para facilitar el procesamiento y visualización:

viviendainm <- vivienda[, c("zona", "estrato")]
viviendainm <- na.omit(viviendainm)

Se confirma que la base viviendainm contiene 4049 registros sin datos faltantes. Esto permite trabajar con una muestra amplia y confiable para el análisis.

md.pattern(viviendainm, rotate.names = TRUE)
##  /\     /\
## {  `---'  }
## {  O   O  }
## ==>  V <==  No need for mice. This data set is completely observed.
##  \  \|/  /
##   `-----'

##      zona estrato  
## 8319    1       1 0
##         0       0 0

Tabla cruzada y prueba de independencia

Se construye una tabla cruzada entre las variables zona y estrato, luego se aplica la prueba de Chi-cuadrado para comprobar si existe relación entre estas variables.

tabla_corresp <- table(viviendainm$zona, viviendainm$estrato)
colnames(tabla_corresp) <- c("Estrato3", "Estrato4", "Estrato5", "Estrato6" )
tabla_corresp
##               
##                Estrato3 Estrato4 Estrato5 Estrato6
##   Zona Centro       105       14        4        1
##   Zona Norte        572      407      769      172
##   Zona Oeste         54       84      290      770
##   Zona Oriente      340        8        2        1
##   Zona Sur          382     1616     1685     1043
chisq.test(tabla_corresp)
## 
##  Pearson's Chi-squared test
## 
## data:  tabla_corresp
## X-squared = 3830.4, df = 12, p-value < 2.2e-16

Dado que el p-valor es extremadamente bajo (mucho menor a 0.05), se rechaza la hipótesis nula de independencia. Esto indica que existe una relación estadísticamente significativa entre la zona geográfica y el estrato socioeconómico de las viviendas. Es decir, el tipo de estrato no está distribuido aleatoriamente entre las zonas, sino que hay patrones claros de asociación.

Análisis de Correspondencia

Luego de confirmar la dependencia, se procede al análisis de correspondencia propiamente dicho, que estima las coordenadas para representar gráficamente las asociaciones entre categorías de ambas variables:

library(FactoMineR)
## Warning: package 'FactoMineR' was built under R version 4.4.3
library(factoextra)

# Análisis de Correspondencia
result.ca <- CA(tabla_corresp)

El mapa de correspondencias muestra asociaciones claras entre zonas y estratos socioeconómicos: la Zona Oriente y Centro se relacionan con estratos más altos (como el 3), mientras que la Zona Oeste se asocia con el estrato 6. La Zona Sur se vincula más con estratos medios-bajos (4 y 5), y la Zona Norte aparece más neutral, sin una asociación fuerte con un estrato específico.

Esta información es clave para la empresa inmobiliaria: al conocer las asociaciones entre ubicación y perfil socioeconómico, puede ajustar su portafolio de oferta, estrategias de marketing y decisiones de inversión por zona, maximizando así su eficiencia comercial y su alcance en el mercado objetivo.

valores_prop <-result.ca$eig ; valores_prop
##       eigenvalue percentage of variance cumulative percentage of variance
## dim 1 0.32215213              69.965515                          69.96551
## dim 2 0.12745096              27.680002                          97.64552
## dim 3 0.01084108               2.354483                         100.00000
fviz_screeplot(result.ca, addlabels = TRUE, ylim = c(0, 80))+ggtitle("")+
ylab("Porcentaje de varianza explicado") + xlab("Ejes")

El análisis de correspondencias entre las zonas geográficas y los estratos socioeconómicos indica que los dos primeros ejes explican en conjunto el 97.65% de la variabilidad en los datos. El primer eje, con un 69.97%, concentra la mayor parte de la información relevante, mientras que el segundo eje aporta un 27.68% adicional, lo que garantiza una representación bidimensional altamente confiable.

Esto significa que el mapa factorial permite visualizar y analizar de forma clara las relaciones entre zonas y estratos, proporcionando un insumo valioso para la segmentación del mercado inmobiliario y la toma de decisiones estratégicas por parte de la empresa.

Conclusión

El análisis de correspondencias evidenció una fuerte relación entre las zonas geográficas y los estratos socioeconómicos de las viviendas. El 97.65% de la variabilidad en estas asociaciones fue explicada por los dos primeros ejes factoriales, lo que respalda la validez del mapa de correspondencias como herramienta de análisis.

Se identificaron patrones claros: el estrato 6 se asocia principalmente con la Zona Oeste, mientras que los estratos 4 y 5 predominan en las zonas Sur y Norte, y el estrato 3 se vincula más con las zonas Oriente y Centro. Esta segmentación territorial permite a la empresa inmobiliaria optimizar su estrategia comercial, focalizando la oferta de productos según el perfil socioeconómico predominante en cada zona, lo que representa una ventaja competitiva clave en un mercado altamente dinámico.

Conclusiónes y recomendaciones finales

El PCA permitió identificar que las variables precio, área construida, estrato, baños y parqueaderos están fuertemente correlacionadas. La primera componente explicó aproximadamente el 58% de la variabilidad, revelando que las viviendas con más comodidades y tamaño tienden a tener precios más altos. En contraste, el número de habitaciones no se alinea con las demás variables estructurales, lo cual indica que no siempre implica un mayor valor comercial.

La segmentación mediante clústeres reveló dos grupos diferenciados de viviendas con un coeficiente de silhouette aceptable (0.63). El primer grupo agrupa propiedades de menor precio y área construida, y el segundo, viviendas más amplias y costosas. Esta segmentación permite identificar nichos de mercado bien definidos.

Se evidenció una fuerte asociación entre zonas geográficas y estratos socioeconómicos. El 97.6% de la variabilidad fue explicada por los dos primeros ejes, lo que valida la segmentación territorial. El estrato 6 se asocia con la Zona Oeste, los estratos medios (4 y 5) con Norte y Sur, y el estrato 3 con las zonas Oriente y Centro.

Recomendacion: Diseñar campañas de marketing georreferenciadas y desarrollar proyectos inmobiliarios alineados con el perfil socioeconómico predominante en cada zona. Esta estrategia mejora el enfoque comercial, fortaleciendo la competitividad.