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.

1 Análisis exploratorio y preprocesamiento de los datos

Se instaló “paqueteMODELOS” y se cargaron sus funciones. En este paquete, se encuentra el conjunto de datos que será utilizado en el desarrollo de este trabajo. Se creó un nuevo objeto denominado “propiedades” para almacenar el conjunto de datos “vivienda”, que contiene toda la información de estudio. Posteriormente, se generó un resumen estadístico descriptivo de estos datos con el objetivo de observar y analizar el estado inicial de la información.

library(paqueteMODELOS)
## Warning: package 'broom' was built under R version 4.3.3
## Warning: package 'GGally' was built under R version 4.3.3
## Warning: package 'ggplot2' was built under R version 4.3.3
## Warning: package 'knitr' was built under R version 4.3.3
propiedades = vivienda
summary(propiedades)
##        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
propiedades <- subset(propiedades, select = -c(id, barrio, longitud, latitud))

Se eliminan las variables id, latitud y longitud, ya que no se tendran en cuenta para este ejercicio, y se procede a analizar las otras variables, para determinar si es necesario eliminar alguna otra. Se analizan dos variables que son las que mas NA’s y generan alguna duda debido a su naturaleza, ya que el piso esta mas relacionado con los apartamentos, y en menor medida la variable parqueaderos tambien esta mas relacionada con los apartamentos, entonces vamos a analizar como se comportan estas variables

propiedades$piso <- as.numeric(propiedades$piso)#se cambia el tipo de variable de piso a numerica ya que estaba en chr
casas <- subset(propiedades, tipo == "Casa")
apartamentos <- subset(propiedades, tipo == "Apartamento")

conteo_piso_casas <- table(casas$piso, useNA = "ifany")
print(conteo_piso_casas)
## 
##    1    2    3    4    5    6    7   10 <NA> 
##  430  938  524   62    3    2    4    2 1254
conteo_piso_apartamentos <- table(apartamentos$piso, useNA = "ifany")
print(conteo_piso_apartamentos)
## 
##    1    2    3    4    5    6    7    8    9   10   11   12 <NA> 
##  430  512  573  545  564  243  200  211  146  128   84   83 1381

Según la documentación del dataset, la variable piso se define como “Piso en el que está ubicada la vivienda.” Se observa que en las casas hay muchos valores faltantes y que algunas están ubicadas en diferentes pisos, lo cual no tiene sentido. Por lo tanto, se optará por no utilizar la variable piso ya que puede introducir ruido o información errónea al análisis.

Ahora, se procederá a realizar el mismo análisis con la variable parqueaderos.

casaspar <- subset(propiedades, tipo == "Casa")
apartamentospar <- subset(propiedades, tipo == "Apartamento")

conteo_parq_casas <- table(casaspar$parqueaderos, useNA = "ifany")
print(conteo_parq_casas)
## 
##    1    2    3    4    5    6    7    8    9   10 <NA> 
##  857  891  268  296   64   66   17   17    4    6  733
conteo_parq_apartamentos <- table(apartamentospar$parqueaderos, useNA = "ifany")
print(conteo_parq_apartamentos)
## 
##    1    2    3    4    5    6    7   10 <NA> 
## 2298 1584  252   88    4    2    1    2  869

Se decidio no utilizar la variable parqueaderos en el análisis debido a la evidente inconsistencia en los datos. Como se observó, algunas propiedades muestran un número de parqueaderos que llega hasta 10, lo cual no tiene sentido lógico y sugiere errores en la información. Además, la presencia de estos valores extremos podría introducir ruido y sesgar los resultados, afectando negativamente la calidad del análisis. Por lo tanto, para asegurar un análisis más preciso y confiable, optaré por excluir esta variable.

propiedades <- subset(propiedades, select = -c(piso, parqueaderos))
summary(propiedades)
##      zona              estrato         preciom         areaconst     
##  Length:8322        Min.   :3.000   Min.   :  58.0   Min.   :  30.0  
##  Class :character   1st Qu.:4.000   1st Qu.: 220.0   1st Qu.:  80.0  
##  Mode  :character   Median :5.000   Median : 330.0   Median : 123.0  
##                     Mean   :4.634   Mean   : 433.9   Mean   : 174.9  
##                     3rd Qu.:5.000   3rd Qu.: 540.0   3rd Qu.: 229.0  
##                     Max.   :6.000   Max.   :1999.0   Max.   :1745.0  
##                     NA's   :3       NA's   :2        NA's   :3       
##      banios        habitaciones        tipo          
##  Min.   : 0.000   Min.   : 0.000   Length:8322       
##  1st Qu.: 2.000   1st Qu.: 3.000   Class :character  
##  Median : 3.000   Median : 3.000   Mode  :character  
##  Mean   : 3.111   Mean   : 3.605                     
##  3rd Qu.: 4.000   3rd Qu.: 4.000                     
##  Max.   :10.000   Max.   :10.000                     
##  NA's   :3        NA's   :3
sapply(propiedades[, c("tipo", "zona")], function(x) sum(is.na(x)))
## tipo zona 
##    3    3
propiedades <- na.omit(propiedades)

Se observa que en el resto de variables hay muy pocos valores faltantes, por lo que se procedena eliminar estos.

cat("Cantidad de propiedades con 0 habitaciones:", sum(propiedades$habitaciones == 0), "\n")
## Cantidad de propiedades con 0 habitaciones: 66
cat("Cantidad de propiedades con 0 baños:", sum(propiedades$banios == 0), "\n")
## Cantidad de propiedades con 0 baños: 45
propiedades <- propiedades[propiedades$banios > 0 & propiedades$habitaciones > 0,]
summary(propiedades)
##      zona              estrato         preciom         areaconst   
##  Length:8243        Min.   :3.000   Min.   :  58.0   Min.   :  30  
##  Class :character   1st Qu.:4.000   1st Qu.: 220.0   1st Qu.:  80  
##  Mode  :character   Median :5.000   Median : 330.0   Median : 122  
##                     Mean   :4.637   Mean   : 433.3   Mean   : 174  
##                     3rd Qu.:5.000   3rd Qu.: 540.0   3rd Qu.: 227  
##                     Max.   :6.000   Max.   :1999.0   Max.   :1745  
##      banios        habitaciones        tipo          
##  Min.   : 1.000   Min.   : 1.000   Length:8243       
##  1st Qu.: 2.000   1st Qu.: 3.000   Class :character  
##  Median : 3.000   Median : 3.000   Mode  :character  
##  Mean   : 3.128   Mean   : 3.634                     
##  3rd Qu.: 4.000   3rd Qu.: 4.000                     
##  Max.   :10.000   Max.   :10.000
library(e1071)
## Warning: package 'e1071' was built under R version 4.3.3
library(dplyr)
library(skimr)
## Warning: package 'skimr' was built under R version 4.3.3
skim(propiedades %>% select(preciom, areaconst, habitaciones, banios))
Data summary
Name propiedades %>% select(pr…
Number of rows 8243
Number of columns 4
_______________________
Column type frequency:
numeric 4
________________________
Group variables None

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
preciom 0 1 433.27 328.93 58 220 330 540 1999 ▇▂▁▁▁
areaconst 0 1 174.04 142.32 30 80 122 227 1745 ▇▁▁▁▁
habitaciones 0 1 3.63 1.43 1 3 3 4 10 ▂▇▂▁▁
banios 0 1 3.13 1.41 1 2 3 4 10 ▇▇▃▁▁
asimetria_preciom <- skewness(propiedades$preciom, na.rm = TRUE)
asimetria_areaconst <- skewness(propiedades$areaconst, na.rm = TRUE)
asimetria_habitaciones <- skewness(propiedades$habitaciones, na.rm = TRUE)
asimetria_banios <- skewness(propiedades$banios, na.rm = TRUE)


cat("Asimetría de preciom:", asimetria_preciom, "\n")
## Asimetría de preciom: 1.853343
cat("Asimetría de areaconst:", asimetria_areaconst, "\n")
## Asimetría de areaconst: 2.728374
cat("Asimetría de habitaciones:", asimetria_habitaciones, "\n")
## Asimetría de habitaciones: 1.822006
cat("Asimetría de banios:", asimetria_banios, "\n")
## Asimetría de banios: 0.9814506
grafico_barras = ggplot(propiedades, aes(x = estrato, fill = tipo)) +
  geom_bar(position = "dodge", color = "black", stat = "count") +
  labs(title = "Distribución de Tipos de Propiedades por Estrato",
       x = "Estrato",
       y = "Cantidad de Propiedades") +
  theme_minimal()


grafico_barras_con_etiquetas <- grafico_barras +
  geom_text(stat = "count",
            aes(label = after_stat(count)),
            position = position_dodge(width = 0.9),
            vjust = -0.5, size = 3)


print(grafico_barras_con_etiquetas)

grafico_barras = ggplot(propiedades, aes(x = zona, fill = tipo)) +
  geom_bar(position = "dodge", color = "black", stat = "count") +
  labs(title = "Distribución de Tipos de Propiedades por Zona",
       x = "Zona",
       y = "Cantidad de Propiedades") +
  theme_minimal()

grafico_barras_con_etiquetas <- grafico_barras +
  geom_text(stat = "count",
            aes(label = after_stat(count)),
            position = position_dodge(width = 0.9),
            vjust = -0.5, size = 3)

print(grafico_barras_con_etiquetas)

2 Análisis de Componentes Principales

Se seleccionan las variables cuantitativas(precio, areaconst, banios y habitaciones), para reducir su dimensionalidad a por lo menos dos variables(componentes principales), y que estos expliquen un porcentaje grande de los datos.

library(mice)
## Warning in check_dep_version(): ABI version mismatch: 
## lme4 was built with Matrix ABI version 1
## Current Matrix ABI version is 0
## Please re-install lme4 from source or restore original 'Matrix' package
library(factoextra)
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.3.3
library(psych)
## Warning: package 'psych' was built under R version 4.3.3
library(corrplot)
## Warning: package 'corrplot' was built under R version 4.3.3
subpropertiespca = propiedades[, c("preciom","areaconst","banios","habitaciones")]
summary(subpropertiespca)
##     preciom         areaconst        banios        habitaciones   
##  Min.   :  58.0   Min.   :  30   Min.   : 1.000   Min.   : 1.000  
##  1st Qu.: 220.0   1st Qu.:  80   1st Qu.: 2.000   1st Qu.: 3.000  
##  Median : 330.0   Median : 122   Median : 3.000   Median : 3.000  
##  Mean   : 433.3   Mean   : 174   Mean   : 3.128   Mean   : 3.634  
##  3rd Qu.: 540.0   3rd Qu.: 227   3rd Qu.: 4.000   3rd Qu.: 4.000  
##  Max.   :1999.0   Max.   :1745   Max.   :10.000   Max.   :10.000
correlaciones = cor(subpropertiespca)
correlaciones
##                preciom areaconst    banios habitaciones
## preciom      1.0000000 0.6885857 0.6851013    0.2745018
## areaconst    0.6885857 1.0000000 0.6722375    0.5465573
## banios       0.6851013 0.6722375 1.0000000    0.5936313
## habitaciones 0.2745018 0.5465573 0.5936313    1.0000000
subproperpcastan = scale(subpropertiespca)

head(subproperpcastan)
##         preciom  areaconst      banios habitaciones
## [1,] -0.5571698 -0.7309968 -0.09041565    1.6579542
## [2,] -0.3443558 -0.3796746 -0.79819935   -0.4438323
## [3,] -0.2531498  0.3229699 -0.79819935    0.2567632
## [4,] -0.1011398  0.7445566  1.32515174   -0.4438323
## [5,] -0.5267678 -0.5904679 -0.79819935   -0.4438323
## [6,] -0.5875718 -0.6115473 -0.09041565   -0.4438323
res.pca = prcomp(subproperpcastan)

summary(res.pca)
## Importance of components:
##                           PC1    PC2     PC3    PC4
## Standard deviation     1.6583 0.8569 0.57180 0.4345
## Proportion of Variance 0.6875 0.1836 0.08174 0.0472
## Cumulative Proportion  0.6875 0.8711 0.95280 1.0000
fviz_eig(res.pca, addlabels = TRUE)

Se puede observar como el componente principal 1 explica el 68.7% de la variación total, lo que indica que la mayor parte de la información del conjunto de datos se concentra en este componente. Y el componente principal 2 explica un 18.3% adicional de la variación. En total, los dos primeros componentes explican aproximadamente el 87% de la variación, lo que es bastante alto.

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

Las variables preciom, areaconst, y banios están alineadas en una dirección similar, lo que refuerza la idea de que estas tres variables están relacionadas y capturadas en gran medida por el PC1. habitaciones tiene una dirección diferente, destacando su variación independiente capturada por PC2.

fviz_pca_biplot(res.pca, 
                geom.ind = "point", 
                col.ind = propiedades$tipo,  # Agrupa por tipo
                palette = "jco",
                addEllipses = TRUE,         # Agrega elipses para los grupos
                repel = TRUE, 
                col.var = "#034A94")

Ademas el biplot muestra cómo los datos se distribuyen en los componentes principales. Los apartamentos y casas están visualmente separados en este espacio, lo que sugiere que los tipos de propiedades pueden estar diferenciados en términos de las variables consideradas (precio, área, baños, habitaciones).

fviz_contrib(res.pca, choice = "var", axes = 1)

fviz_contrib(res.pca, choice = "var", axes = 2)

# Gráfico de barras adicional para la contribución total de las variables a ambos componentes
contrib_total <- res.pca$rotation[,1]^2 + res.pca$rotation[,2]^2
barplot(contrib_total, main="Contribución Total de las Variables", col="#4682B4",
        xlab="Variables", ylab="Contribución", las=2)

3 Análisis de Conglomerados

Se seleccionan las mismas variables del PCA (precio, areaconst, banios y habitaciones), y se procede a realizar el proceso para hacer el agrupamiento en los cluster de acuerdo a sus caracteristicas.

clusterproperties = propiedades[, c("preciom","areaconst","banios","habitaciones")]

clusterpropertiesstandar = scale(clusterproperties)

clusterpropertiesstandar = as.data.frame(clusterpropertiesstandar)

dist_emp = dist(clusterpropertiesstandar, method = "euclidean")


hc_emp <- hclust(dist_emp, method = 'complete')

plot(hc_emp, cex = 0.6, main = "Dendograma de Propiedades", las=1,
     ylab = "Distancia euclidiana", xlab = "Grupos")
rect.hclust(hc_emp, k = 2, border = 2:5)

Se puede observar como el Dendograma es dificil interpretar dado la cantidad de registros del dataset que su peran los 8000, por lo cual se procede a realizar el analisis con el metodo Kmeans.

Se calcula el numero optimo de clusters a utilizar, mediante el metodo de Elbow y Silhouette

fviz_nbclust(clusterpropertiesstandar, kmeans, method = "wss") + 
    geom_vline(xintercept = 2, linetype = 2) +
    labs(subtitle = "Elbow Method")

fviz_nbclust(clusterpropertiesstandar, kmeans, method = "silhouette") +
    labs(subtitle = "Silhouette Method")

se observa que ambos metodos apuntan a que con 2 clusters se puede realizar el analisis.

k2 = kmeans(clusterpropertiesstandar, centers = 2, nstart=25)

optimal_k <- 2  # Supongamos que has determinado que k=2 es óptimo
k_optimal <- kmeans(clusterpropertiesstandar, centers = optimal_k, nstart = 25)

fviz_cluster(k_optimal, data = clusterpropertiesstandar) +
    theme_minimal() +
    labs(title = "Cluster Analysis of Properties")

cluster_data <- clusterpropertiesstandar %>% 
                mutate(cluster = factor(k_optimal$cluster))
conglomeradosdf = propiedades
conglomeradosdf$cluster <- as.factor(k2$cluster)
summary(conglomeradosdf$cluster)
##    1    2 
## 5708 2535
ggplot(conglomeradosdf, aes(x = cluster, y = preciom, fill = cluster)) +
  geom_boxplot() +
  labs(title = "Distribución del Precio por Clúster",
       x = "Clúster",
       y = "Precio (preciom)") +
  theme_minimal()

ggplot(conglomeradosdf, aes(x = cluster, y = areaconst, fill = cluster)) +
  geom_boxplot() +
  labs(title = "Distribución del Área Construida por Clúster",
       x = "Clúster",
       y = "Área Construida (areaconst)") +
  theme_minimal()

El Clúster 1 agrupa propiedades más homogéneas, con precios más bajos y áreas construidas más pequeñas, reflejando poca variabilidad. En cambio, el Clúster 2 contiene propiedades más diversas, con precios más altos y una mayor variabilidad en las áreas construidas, lo que indica una mezcla de propiedades de diferentes tamaños y valores. Esta segmentación puede ser útil para identificar patrones en el mercado inmobiliario.

4 Análisis de Correspondencia

En este analisis de correspondencia vamos a usar las variables categoricas (zona, estrato y tipo)

4.1 Análisis de Correspondencia Zona y Estrato

Primero se hace un analisis entre zona y estrato, y posteriormente entre las tres variables.

library(FactoMineR)
## Warning: package 'FactoMineR' was built under R version 4.3.3
propcorrespon = propiedades[, c("zona","estrato")]

propcorrespon$estrato <- as.factor(propcorrespon$estrato)

tabla <- table(propcorrespon$zona, propcorrespon$estrato)
colnames(tabla) <- c("Estrato3", "Estrato4", "Estrato5", "Estrato6" )
tabla
##               
##                Estrato3 Estrato4 Estrato5 Estrato6
##   Zona Centro       102       14        4        1
##   Zona Norte        566      394      758      170
##   Zona Oeste         52       83      286      767
##   Zona Oriente      334        8        2        1
##   Zona Sur          378     1607     1678     1038
chisq.test(tabla)
## 
##  Pearson's Chi-squared test
## 
## data:  tabla
## X-squared = 3801.8, df = 12, p-value < 2.2e-16
library(factoextra)
library(gridExtra)
resultados_ac <- CA(tabla)

La Zona Centro muestra una asociación más fuerte con el estrato 3, indicando que esta combinación es más común en esa área. En contraste, las Zonas Oriente y Norte se diferencian en su perfil de estrato, con la Zona Oriente mostrando características más distintivas en comparación con otras zonas. Las Zonas Sur y Norte, por su proximidad en el gráfico, comparten una distribución de estratos más similar, lo que sugiere que no hay una gran diferenciación en términos de estrato entre estas dos áreas.

valores_prop <-resultados_ac$eig ; valores_prop
##       eigenvalue percentage of variance cumulative percentage of variance
## dim 1 0.32216299              69.851179                          69.85118
## dim 2 0.12791612              27.734694                          97.58587
## dim 3 0.01113428               2.414127                         100.00000
fviz_screeplot(resultados_ac, addlabels = TRUE, ylim = c(0, 80))+ggtitle("")+
ylab("Porcentaje de varianza explicado") + xlab("Ejes")

Se puede apreciar que los dos primeros componentes principales capturan la gran mayoría de la variabilidad en los datos. El primer componente principal explica el 69.9% de la varianza, lo que sugiere que la mayor parte de la información sobre la relación entre “zona” y “estrato” se concentra en este componente. El segundo componente añade un 27.7% de la varianza, alcanzando un 97.6% de la varianza total explicada por los dos primeros componentes. Esto indica que casi toda la variabilidad puede ser representada en un espacio bidimensional.

4.2 Análisis de Correspondencia Zona, Estrato y Tipo

# Crear un subconjunto de datos con las tres variables categóricas
datos_acm2 <- propiedades[, c("zona", "estrato", "tipo")]
datos_acm2$estrato <- as.factor(datos_acm2$estrato)
# Realizar el Análisis de Correspondencia Múltiple (ACM)
resultado_acm2 <- MCA(datos_acm2, graph = FALSE)


fviz_screeplot(resultado_acm2, addlabels = TRUE, ylim = c(0, 50))

Se observa que los dos primeros componentes principales (Dim1 y Dim2) explican el 21.1% y el 17% de la varianza, respectivamente. Juntos, estos dos componentes capturan el 38.1% de la información contenida en los datos. Esto indica que gran parte de la variabilidad de las variables categóricas puede representarse en un espacio bidimensional, pero también sugiere que otros componentes (3 en adelante) tienen una contribución considerable.

fviz_mca_var(resultado_acm2,
             col.var = "contrib", 
             gradient.cols = c("#FF0000", "#00FF00", "#0000FF", "#FFFF00", "#FF00FF"),
             repel = TRUE) 

Se puede apreciar que la zona Centro y estrato 3 están bastante cercanas, lo que podría sugerir que en la Zona Centro, el estrato 3 es más común. El tipo Casa se asocia más con la Zona Norte, lo que podría indicar que en la Zona Norte es más común encontrar casas en lugar de apartamentos. Apartamento está asociado con la Zona Sur, indicando una tendencia hacia este tipo de propiedad en esa zona. Y la Zona Oriente y Zona Centro se diferencian más del resto en términos de su perfil categórico.

5 Conclusiones y Recomendaciones

CONCLUSIONES

Este trabajo proporcionó una visión detallada del mercado inmobiliario, destacando aspectos clave en la relación entre las variables de interés de la empresa. Se identificó que la variabilidad de las propiedades se concentra en gran medida en las variables de precio, área construida, y baños, que juntas capturan el 68.7% de la información relevante en el mercado. Esto sugiere que estos factores son determinantes en la diferenciación de las propiedades en el mercado actual. Además, la variable habitaciones mostró una variabilidad independiente, lo que podría indicar una segmentación adicional en las preferencias de los compradores.

De igual manera, el análisis de conglomerados reveló dos segmentos claramente diferenciados en el mercado, un segmento de propiedades más accesibles y homogéneas, y otro segmento de propiedades más diversas y de mayor valor. Este hallazgo sugiere que existe una clara división en el mercado.

En cuanto a la relación entre zona y estrato, se observó que la Zona Centro está fuertemente asociada con el Estrato 3, lo que indica un enfoque predominante hacia un mercado de clase media en esta área. Por otro lado, las Zonas Sur y Norte comparten una distribución de estratos más similar, mientras que la Zona Oriente se distingue por su perfil único, lo que podría requerir un enfoque de mercado más especializado.

Finalmente, el análisis de correspondencia múltiple mostró que los apartamentos son más comunes en la Zona Sur, mientras que las casas predominan en la Zona Norte. Este patrón sugiere que las preferencias de los compradores están fuertemente influenciadas por la ubicación, lo que podría guiar la empresa en la optimización de su portafolio de propiedades.

RECOMENDACIONES

Teniendo en cuenta que la la Zona Centro está asociada principalmente con propiedades de Estrato 3, se recomienda enfocar las estrategias de marketing en esta zona hacia clientes de clase media. Por otro lado, las Zonas Sur y Norte, que muestran una distribución más homogénea de estratos, pueden beneficiarse de una estrategia de marketing más diversificada. En la Zona Oriente, debido a su perfil más exclusivo, se sugiere un enfoque premium, destacando las propiedades de mayor valor para atraer a clientes de alto poder adquisitivo.

Se puede Para aprovechar la segmentación realizada por los conglomerados presentados. La empresa debería desarrollar ofertas diferenciadas para cada segmento, con productos y servicios específicos que se adapten a las necesidades de cada grupo. Esto permitirá maximizar la captación de clientes en ambos segmentos y mejorar la eficiencia en la asignación de recursos.

Dada la fuerte diferenciación entre las zonas y los estratos, se recomienda explorar oportunidades de expansión en zonas donde la empresa aún no tiene una presencia significativa, pero que muestran un perfil demográfico atractivo. Esto podría incluir el desarrollo de nuevos proyectos en zonas de rápido crecimiento o la diversificación en áreas donde la demanda de ciertos tipos de propiedades está en aumento.

Implementar estas recomendaciones estratégicas permitirá a la empresa optimizar su oferta y enfoque de mercado, asegurando una ventaja competitiva en el dinámico sector inmobiliario.