Resumen ejecutivo

Estimados señores Inmobiliaria

Con el presente informe se realiza un análisis multidimensional de una base de datos de oferta de viviendas en la ciudad de Cali. Para realizar este análisis se hace inicialmente un análisis descriptivo de los datos y se aplican los métodos de Análisis de componentes principales (PCA), Análisis de conglomerados y Análisis de correspondencia sobre la base de datos que tiene 8322 observaciones y 13 atributos. Entre los atributos hay datos que son numêricos y categóricos es por eso que se utilizan las distintas técnicas mencionadas para poder realizar el análisis,

Con los resultados de este análisis se plantea ofrecer a la inmobiliaria una visión más clara y amplia sobre el comportamiento del mercado de inmuebles en la ciudad para que puedan identificar oportunidades de inversión, desarrollar estrategias de comercialización efectivas y ofrecer a sus clientes servicios inmobiliarios de alta calidad que se ajusten a las necesidades y expectativas del mercado.

Análisis descriptivo

Haciendo una revisión de los datos en la base de datos inicial se encuentran datos en NA dentro de parqueaderos y pisos y 3 registros sin ID que pueden ser errores pues coincide con la cantidad de NA en los otros atributos.

Podemos ver la siguiente información:

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
vivienda_mod <- subset(vivienda, !is.na(vivienda$id))
vivienda_mod2 <- subset(vivienda_mod, !is.na(vivienda_mod$parqueaderos))
vivienda_modificada <- subset(vivienda_mod2, select = -c(piso))
vivienda_modificada$estrato <- as.factor(vivienda_modificada$estrato)

Para trabajar con la base de datos limpia, se retiran todos los registros que tienen datos en NA, además la variable piso no será tenida en cuenta pues esta variable corresponde a 2 valores y debería estar separada, un valor puede ser el piso en el que se ubica el inmueble, que aplica para los apartamentos, y otro valor es el número de pisos que tiene la vivienda, que aplica para las casas. Como es un dato ambiguo no se utilizará en este análisis.

ggplot(vivienda_modificada, aes(x = estrato)) +                      
  geom_bar(width=0.5, colour="black", fill="skyblue") +        
  labs(x="Estrato",y= "Cantidad")  +              
  ylim(c(0, 2700)) +
  theme_bw(base_size = 12) +                
  geom_text(aes(label=after_stat(count)), stat='count', 
            position=position_dodge(0.9), 
            vjust=-0.5, 
            size=5.0
            ) + 
  facet_wrap(~"Viviendas por Estrato")    

Se observa que la mayoría de ofertas inmobiliarias disponibles son para inmuebles de tipo apartamentos, la mayor parte de los inmuebles se encuentra en la zona sur de la ciudad y pertenecen a los estratos 4 y 5.

tabla_zona_estrato <- table(vivienda_modificada$zona, vivienda_modificada$estrato)
detail2 <- prop.table(tabla_zona_estrato,2) * 100
knitr::kable(detail2, caption = "Proporción de viviendas por zona y estrato", align = "c")
Proporción de viviendas por zona y estrato
3 4 5 6
Zona Centro 7.748538 0.4875076 0.1189532 0.0000000
Zona Norte 34.649123 16.3315052 26.5265662 6.0427807
Zona Oeste 3.508772 3.7781840 10.5075337 39.9465241
Zona Oriente 23.245614 0.1218769 0.0396511 0.0534759
Zona Sur 30.847953 79.2809263 62.8072958 53.9572193
histograma <- ggplot(vivienda_modificada, aes(x=areaconst)) +
  ggtitle("Histograma de área construida en viviendas") +
  theme_fivethirtyeight() +
  geom_histogram(color="#28324a", fill="#C06BF7", bins=30)
histograma

En el anterior histograma, vemos que la gran mayoría de la oferta se encuentra en viviendas de menos de 250 metros cuadrados, con un segundo lugar para las areas entre 250 y 500, y ya muy pocos datos en viviendas grandes de mas de 500 metros cuadrados

histograma2 <- ggplot(vivienda_modificada, aes(x=preciom)) +
  ggtitle("Histograma de precio de las viviendas") +
  theme_fivethirtyeight() +
  geom_histogram(color="#28324a", fill="#3c78d8", bins=30)
histograma2

El precio de las viviendas se observa que la gran mayoría se encuentra en precios de menos de 500 millones y en segundo lugar entre 500 y 1000 millones, y ya en muy pocos datos hay precios mas altos de 1000.

Análisis multidimensional

Para realizar este análisis se crea un nuevo dataset donde se especifican unicamente las columnas numéricas y se retiran el id, latitud y longitud que son variables que no vamos usar en nuestro análisis.

columnas_numericas <- sapply(vivienda_modificada, is.numeric)
datos_numer <- vivienda_modificada[, columnas_numericas]
datos_numericos <- subset(datos_numer, select = -c(latitud, longitud, id))
summary(datos_numericos)
##     preciom         areaconst       parqueaderos        banios      
##  Min.   :  58.0   Min.   :  30.0   Min.   : 1.000   Min.   : 0.000  
##  1st Qu.: 248.0   1st Qu.:  86.0   1st Qu.: 1.000   1st Qu.: 2.000  
##  Median : 355.0   Median : 130.0   Median : 2.000   Median : 3.000  
##  Mean   : 468.9   Mean   : 181.1   Mean   : 1.835   Mean   : 3.255  
##  3rd Qu.: 580.0   3rd Qu.: 233.0   3rd Qu.: 2.000   3rd Qu.: 4.000  
##  Max.   :1999.0   Max.   :1745.0   Max.   :10.000   Max.   :10.000  
##   habitaciones   
##  Min.   : 0.000  
##  1st Qu.: 3.000  
##  Median : 3.000  
##  Mean   : 3.611  
##  3rd Qu.: 4.000  
##  Max.   :10.000

Análisis de componentes principales

Para el analisis de componentes principales comenzamos por estandarizar las variables a la misma escala:

datos_estandarizados <- scale(datos_numericos)
datos_estandarizados <- as.data.frame(datos_estandarizados)
summary(datos_estandarizados)
##     preciom          areaconst        parqueaderos         banios       
##  Min.   :-1.2264   Min.   :-1.0488   Min.   :-0.7425   Min.   :-2.3587  
##  1st Qu.:-0.6593   1st Qu.:-0.6602   1st Qu.:-0.7425   1st Qu.:-0.9096  
##  Median :-0.3399   Median :-0.3549   Median : 0.1465   Median :-0.1851  
##  Mean   : 0.0000   Mean   : 0.0000   Mean   : 0.0000   Mean   : 0.0000  
##  3rd Qu.: 0.3317   3rd Qu.: 0.3599   3rd Qu.: 0.1465   3rd Qu.: 0.5394  
##  Max.   : 4.5669   Max.   :10.8526   Max.   : 7.2582   Max.   : 4.8866  
##   habitaciones    
##  Min.   :-2.6466  
##  1st Qu.:-0.4477  
##  Median :-0.4477  
##  Mean   : 0.0000  
##  3rd Qu.: 0.2852  
##  Max.   : 4.6831

Se aplica PCA para los datos con la escala aplicada:

pca <- prcomp(datos_estandarizados, center = TRUE, scale. = TRUE)
summary(pca)
## Importance of components:
##                           PC1    PC2     PC3     PC4     PC5
## Standard deviation     1.8035 0.9280 0.60371 0.57319 0.43938
## Proportion of Variance 0.6505 0.1722 0.07289 0.06571 0.03861
## Cumulative Proportion  0.6505 0.8228 0.89568 0.96139 1.00000
fviz_eig(pca, addlabels=TRUE)

fviz_pca_biplot(pca, repel = TRUE, col.var = "#AA99FF")

fviz_pca_var(pca, col.var = "contrib", gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"), repel = TRUE)

Al revisar la gráfica vemos que:

  • Las variables precio, parqueaderos están en la parte superior derecha.
  • Las variables baños, área construida y habitaciones están en la parte inferior derecha.

Esto sugiere que:

Precio y parqueaderos están más relacionados entre sí y podrían estar asociadas a un patrón similar en los datos. Es decir, estas variables tienden a variar juntas. Por ejemplo, un aumento en el precio podría estar relacionado con un aumento en la cantidad de parqueaderos.

Baños, área construida, y habitaciones también están relacionadas entre sí, lo que indica que estos atributos suelen variar juntos. Por ejemplo, una mayor área construida podría estar asociada con un mayor número de baños y habitaciones.

En cuanto a la contribución de las variables tenemos que:

  • Precio y habitaciones son las variables con la contribución más alta, lo que indica que tienen una fuerte influencia en los primeros componentes principales. Esto significa que precio y habitaciones son variables clave para explicar la variabilidad en los datos de viviendas. En otras palabras, gran parte de la variación entre las viviendas en la base de datos puede estar explicada principalmente por el precio de las viviendas y el número de habitaciones.

  • Aunque todas las variables están en el lado derecho del biplot, su separación en la parte superior e inferior sugiere que las variables precio y parqueaderos podrían estar menos relacionadas o incluso inversamente relacionadas con baños, área construida, y habitaciones en términos de su contribución a los componentes principales.

En conclusión:

  • Las variables que están agrupadas (precio y parqueaderos por un lado, y baños, área construida, habitaciones por otro) indican dos grupos de características que tienden a variar juntas. Esto podría implicar diferentes tipos de viviendas o segmentos de mercado dentro de la base de datos, por ejemplo, viviendas de mayor precio tienden a tener más parqueaderos pero no necesariamente más baños o habitaciones.

  • Precio y habitaciones son variables dominantes en la explicación de las diferencias entre las viviendas, lo que sugiere que al modelar o predecir valores en este conjunto de datos, estas variables serían de mayor importancia.

En resumen, el gráfico sugiere una diferenciación en los atributos de las viviendas y destaca la importancia de las variables precio y habitaciones en la descripción de las características de las propiedades en la base de datos de viviendas.

Análisis de conglomerados

Para realizar este análisis vamos a utilizar la base de datos de valores numéricos que ya tenemos del proceso anterior.

Vamos a aplicar las distancias a esta base de datos estandarizada, comenzando por la euclidiana, por facilidad de visualización solo se muestran los 40 primeros datos:

dist_euclidiana <- dist(datos_estandarizados, method = "euclidean")
dist_manhattan <- dist(datos_estandarizados, method = "manhattan")
dist_minkowski <- dist(datos_estandarizados, method = "minkowski")
head(dist_euclidiana, 40)
##  [1] 2.350369 2.153334 3.524240 2.319556 2.202282 2.484765 1.785357 1.291149
##  [9] 3.571538 3.310962 3.014131 3.255512 1.594854 3.040689 2.021948 2.395554
## [17] 2.522942 2.327039 3.179177 1.829761 2.325295 2.897262 2.088605 3.280583
## [25] 3.317026 3.458836 2.329904 3.031368 2.444164 3.038673 3.931805 4.094256
## [33] 2.662781 6.153859 2.991606 6.710959 3.585811 3.025759 3.034012 3.407395

Aplicamos las distancias de manhattan

head(dist_manhattan, 40)
##  [1]  3.479361  4.418854  7.330934  3.092091  2.346738  4.026866  2.998943
##  [8]  2.377594  6.821050  7.057017  5.713827  5.545561  3.126715  5.533939
## [15]  4.128868  3.560513  4.444353  3.216699  6.022220  3.180852  3.223269
## [22]  4.858977  3.910317  4.716888  5.102513  7.289607  3.239607  3.972579
## [29]  3.912410  4.054136  7.527013  8.486820  4.105391 11.975834  6.061178
## [36] 13.678921  7.966068  3.848414  4.002426  7.291626

Y por último aplicamos las distancias de minkowski

head(dist_minkowski, 40)
##  [1] 2.350369 2.153334 3.524240 2.319556 2.202282 2.484765 1.785357 1.291149
##  [9] 3.571538 3.310962 3.014131 3.255512 1.594854 3.040689 2.021948 2.395554
## [17] 2.522942 2.327039 3.179177 1.829761 2.325295 2.897262 2.088605 3.280583
## [25] 3.317026 3.458836 2.329904 3.031368 2.444164 3.038673 3.931805 4.094256
## [33] 2.662781 6.153859 2.991606 6.710959 3.585811 3.025759 3.034012 3.407395

La gráfica de puntos, trabajando con las variables de precio y área construida es:

# Cluster jerarquico con el método complete
hc_viv <- hclust(dist_euclidiana, method = 'complete')

# Determinamos a dónde pertenece cada observación
cluster_assigments <- cutree(hc_viv, k = 2)

# asignamos los clusters
assigned_cluster <- datos_estandarizados %>% mutate(cluster = as.factor(cluster_assigments))


# gráfico de puntos
ggplot(assigned_cluster, aes(x = preciom, y = areaconst, color = cluster)) +
geom_point(size = 2) +
geom_text(aes(label = cluster), vjust = -.8)

Si hacemos el dendograma vemos lo siguiente:

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

Debido a la cantidad de datos no es posible visualizar correctamente la cantidad de clusteres que se deben seleccionar.

Y se aplica el coeficiente de silhouette para identificar el número de clusteres que se deben crear, probando con diferentes valores encontramos que el mejor valor es 2:

# Calcular el coeficiente de Silhouette
sil <- silhouette(cluster_assigments, dist(datos_estandarizados))
sil_avg <- mean(sil[,3])

# Imprimir el coeficiente de Silhouette promedio
cat("Coeficiente de Silhouette promedio k=2 : ", sil_avg)
## Coeficiente de Silhouette promedio k=2 :  0.7440361

Vamos a realizar el clustering de 2 utilizando el algoritmo de k-means, sobre la base de datos sin estandarizar para poder ver las características aproximadas de cada cluster:

kmeans_result <- kmeans(datos_estandarizados, centers = 2)
datos_numericos$cluster <- kmeans_result$cluster
table(datos_numericos$cluster)
## 
##    1    2 
## 1862 4855
datos_numericos %>%
  group_by(cluster) %>%
  summarize(across(everything(), mean))
## # A tibble: 2 × 6
##   cluster preciom areaconst parqueaderos banios habitaciones
##     <int>   <dbl>     <dbl>        <dbl>  <dbl>        <dbl>
## 1       1    854.      344.         2.94   4.87         4.80
## 2       2    321.      119.         1.41   2.64         3.16

Al verificar la información que aparece en cada cluster vemos lo siguiente

data_cluster_1 <- datos_numericos[datos_numericos$cluster == 1, ]
data_cluster_2 <- datos_numericos[datos_numericos$cluster == 2, ]

summary(data_cluster_1)
##     preciom         areaconst       parqueaderos        banios      
##  Min.   : 150.0   Min.   :  50.0   Min.   : 1.000   Min.   : 0.000  
##  1st Qu.: 560.0   1st Qu.: 230.0   1st Qu.: 2.000   1st Qu.: 4.000  
##  Median : 780.0   Median : 300.0   Median : 3.000   Median : 5.000  
##  Mean   : 853.8   Mean   : 343.6   Mean   : 2.943   Mean   : 4.872  
##  3rd Qu.:1100.0   3rd Qu.: 400.0   3rd Qu.: 4.000   3rd Qu.: 5.000  
##  Max.   :1999.0   Max.   :1745.0   Max.   :10.000   Max.   :10.000  
##   habitaciones       cluster 
##  Min.   : 0.000   Min.   :1  
##  1st Qu.: 4.000   1st Qu.:1  
##  Median : 4.000   Median :1  
##  Mean   : 4.799   Mean   :1  
##  3rd Qu.: 5.000   3rd Qu.:1  
##  Max.   :10.000   Max.   :1
summary(data_cluster_2)
##     preciom         areaconst      parqueaderos      banios     
##  Min.   :  58.0   Min.   : 30.0   Min.   :1.00   Min.   :0.000  
##  1st Qu.: 220.0   1st Qu.: 77.0   1st Qu.:1.00   1st Qu.:2.000  
##  Median : 298.0   Median :101.0   Median :1.00   Median :2.000  
##  Mean   : 321.3   Mean   :118.8   Mean   :1.41   Mean   :2.636  
##  3rd Qu.: 395.0   3rd Qu.:143.0   3rd Qu.:2.00   3rd Qu.:3.000  
##  Max.   :1100.0   Max.   :605.0   Max.   :4.00   Max.   :5.000  
##   habitaciones      cluster 
##  Min.   :0.000   Min.   :2  
##  1st Qu.:3.000   1st Qu.:2  
##  Median :3.000   Median :2  
##  Mean   :3.155   Mean   :2  
##  3rd Qu.:3.000   3rd Qu.:2  
##  Max.   :9.000   Max.   :2

La base de datos tiene una estructura relativamente simple con dos grupos bien definidos. Esto sugiere que las viviendas dentro de cada cluster son bastante similares entre sí en las características analizadas.Los dos clusters representan dos categorías de viviendas que son bastante distintas en las variables consideradas. Un cluster agrupa viviendas más caras y espaciosas, mientras que el otro incluye viviendas más económicas y pequeñas.

El cluster 1 es significativamente más grande que el otro, esto puede sugerir una dominancia de viviendas mas grandes y costosas en el mercado, lo cual puede tener implicaciones en políticas de desarrollo urbano o en decisiones de inversión.

Analisis de correspondencia

Para realizar este análisis se trabajará con las variables categóricas tipo de vivienda, estrato, zona y barrio. Se trabaja con dos variables por grafico, primero tipo y zona

tabla_contingencia_tz <- table(vivienda_modificada$tipo, vivienda_modificada$zona)
chisq.test(tabla_contingencia_tz)
## 
##  Pearson's Chi-squared test
## 
## data:  tabla_contingencia_tz
## X-squared = 576.44, df = 4, p-value < 2.2e-16
# Realizar el análisis de correspondencia con FactoMineR
resultado_ca_tz <- CA(tabla_contingencia_tz, graph=TRUE)

valores_prop_tz <-resultado_ca_tz$eig
valores_prop_tz
##       eigenvalue percentage of variance cumulative percentage of variance
## dim 1   0.085818                    100                               100
fviz_screeplot(resultado_ca_tz, addlabels = TRUE, ylim = c(0, 80))+ggtitle("")+
ylab("Porcentaje de varianza explicado") + xlab("Ejes")
## `geom_line()`: Each group consists of only one observation.
## ℹ Do you need to adjust the group aesthetic?

Dado que el valor de p es muy pequeño, podemos decir que se rechaza la hipótesis nula lo que nos dice que si hay una relación entre las dos variables , por lo tanto podemos concluir que el tipo de vivienda está significativamente asociado con la zona, es decir, el tipo de vivienda que se construye en una zona específica no es independiente de la zona en sí.

Podemos ver además que el resultado es una dimensión 1 es la única relevante, esto podría indicar que existe una fuerte correlación entre, por ejemplo, ciertos tipos de vivienda y su ubicación en ciertas zonas o barrios. La variabilidad en el tipo de vivienda podría estar siendo explicada mayoritariamente por la ubicación geográfica.

Luego realizamos el mismo análisis para las variables de zona y barrio:

tabla_contingencia_zb <- table(vivienda_modificada$zona, vivienda_modificada$barrio)
chisq.test(tabla_contingencia_zb)
## Warning in chisq.test(tabla_contingencia_zb): Chi-squared approximation may be
## incorrect
## 
##  Pearson's Chi-squared test
## 
## data:  tabla_contingencia_zb
## X-squared = 23899, df = 1464, p-value < 2.2e-16
# Realizar el análisis de correspondencia con FactoMineR
resultado_ca_zb <- CA(tabla_contingencia_zb, graph=TRUE)

valores_prop_zb <-resultado_ca_zb$eig
valores_prop_zb
##       eigenvalue percentage of variance cumulative percentage of variance
## dim 1  0.9727423               27.34006                          27.34006
## dim 2  0.9415389               26.46305                          53.80311
## dim 3  0.9097852               25.57057                          79.37368
## dim 4  0.7338716               20.62632                         100.00000
fviz_screeplot(resultado_ca_zb, addlabels = TRUE, ylim = c(0, 80))+ggtitle("")+
ylab("Porcentaje de varianza explicado") + xlab("Ejes")

En este caso el valor de p también es muy pequeño, por lo tanto aplica la misma explicación de las variables de zona y tipo.

Vemos que además se generan 4 dimensiones todas con un porcentaje muy similar, lo cual nos indica que es probable que no haya un solo patrón o relación dominante entre las zonas y los barrios. En lugar de eso, hay múltiples factores o características que están influyendo en cómo las zonas y los barrios se asocian entre sí. Las diferencias entre las zonas y los barrios no pueden ser explicadas por un solo factor dominante; en cambio, hay múltiples factores o características que son igualmente importantes.

Y por último, al realizar el análisis para las variables de zona y estrato, podemos ver lo siguiente:

tabla_contingencia_ze <- table(vivienda_modificada$zona, vivienda_modificada$estrato)
chisq.test(tabla_contingencia_ze)
## 
##  Pearson's Chi-squared test
## 
## data:  tabla_contingencia_ze
## X-squared = 3188.9, df = 12, p-value < 2.2e-16
# Realizar el análisis de correspondencia con FactoMineR
resultado_ca_ze <- CA(tabla_contingencia_ze, graph=TRUE)

valores_prop_ze <-resultado_ca_ze$eig
valores_prop_ze
##       eigenvalue percentage of variance cumulative percentage of variance
## dim 1 0.31503422              66.358860                          66.35886
## dim 2 0.14320084              30.163848                          96.52271
## dim 3 0.01650821               3.477292                         100.00000
fviz_screeplot(resultado_ca_ze, addlabels = TRUE, ylim = c(0, 80))+ggtitle("")+
ylab("Porcentaje de varianza explicado") + xlab("Ejes")

estrato = levels(vivienda_modificada$estrato)
fviz_ca_biplot(resultado_ca_ze)

Como hemos visto en los otros análisis, el valor de p también es muy pequeño lo cual nos indica que si hay una correlación muy alta entre las dos variables.

Con los dos primeros componentes se esta resumiendo el 96.6% de los datos se puede inferir que casi toda la información sobre la relación entre estrato y zona se puede entender a través de las dos primeras dimensiones, y que el análisis se puede simplificar considerablemente centrándose en estas dimensiones principales. Esto nos muestra que ciertos estratos están asociados predominantemente con ciertas zonas geográficas de la ciudad, reflejando quizás una segmentación socioeconómica. Lo cual es algo que podemos ver en la ciudad pues por ejemplo la zona oeste es donde se encuentran los estratos más altos, en el oriente y en el centro se encuentran más viviendas de estrato 3 y en el norte y sur predominan los estratos 4 y 5, esto lo podemos ver gráficamente en la gráfica anterior.

Conclusiones:

  1. Segmentación de Mercados : Al realizar el análisis de correspondencia entre variables como estrato y zona, se observó que las dos primeras dimensiones capturan el 96% de la varianza. Esto sugiere una fuerte relación entre ciertas zonas geográficas y los estratos socioeconómicos, indicando que la distribución de las viviendas no es aleatoria sino que está segmentada. La inmobiliaria pueden aprovechar esta segmentación para orientar mejor sus estrategias de marketing y ventas, enfocándose en zonas donde hay una mayor concentración de un determinado estrato.

  2. Caracterización de Clusters: El análisis de conglomerados reveló la existencia de dos clusters principales en los datos. Cada cluster agrupa viviendas con características similares, lo que puede ser útil para definir perfiles de clientes y ajustar la oferta de productos inmobiliarios según las preferencias y necesidades específicas de cada grupo. Por ejemplo, un cluster podría estar compuesto por viviendas de mayor estrato y tamaño, ubicadas en zonas exclusivas, mientras que el otro podría representar viviendas más modestas en zonas con menor estrato.

  3. Identificación de Variables Clave: En el análisis de PCA, se identificó que variables como precio, habitaciones, y estrato tienen una alta contribución en las dos primeras componentes principales. Esto indica que estas variables son las más relevantes al explicar la variabilidad en los datos. Las inmobiliarias pueden enfocarse en estas variables para realizar análisis más detallados o para diseñar productos inmobiliarios que satisfagan las expectativas de los clientes.

  4. Relación entre Variables Categóricas: El análisis de correspondencia entre variables categóricas como tipo de vivienda, zona, y barrio muestra que no existe una relación dominante entre estas variables, dado que el análisis arrojó varias dimensiones con porcentajes de varianza similares. Esto podría indicar una diversidad en los tipos de viviendas ofrecidos en diferentes zonas y barrios, lo que refleja la variedad en la oferta inmobiliaria y la diversidad en las preferencias de los clientes.