INTRODUCCIÓN

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.

Problema.

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.

El reto principal consisten en realizar un análisis integral y multidimensional de la base de datos para obtener una comprensión del mercado inmobiliario urbano. Se requiere aplicar diversas técnicas de análisis de datos, incluyendo:

  1. Análisis de Componentes Principales: Reducir la dimensionalidad del conjunto de datos y visualizar la estructura de las variables en componentes principales para identificar características clave que influyen en la variación de precios y oferta del mercado.

  2. Análisis de Conglomerados: Agrupar las propiedades residenciales en segmentos homogéneos con características similares para entender las dinámicas de las ofertas específicas en diferentes partes de la ciudad y en diferentes estratos socioeconómicos.

  3. Análisis de Correspondencia : Examinar la relación entre las variables categóricas (tipo de vivienda, zona y barrio), para identificar patrones de comportamiento de la oferta en mercado inmobiliario.

  4. Visualización de resultados: Presentar gráficos, mapas y otros recursos visuales para comunicar los hallazgos de manera clara y efectiva a la dirección de la empresa.

El informe final debe incluir análisis detallados de los resultados obtenidos, las conclusiones clave y las recomendaciones específicas para guiar las decisiones estratégicas de la empresa inmobiliaria. Se espera que este análisis de datos proporcione ventajas competitivas en el mercado, optimizando la inversión y maximizando los beneficios en un entorno altamente competitivo y en constante cambio.

Solución

Base de datos

La siguiente es la base de datos suministrada por la inmobiliaria:

data(vivienda)
vivienda

Conocimiento de la base de datos

cant_reg <- nrow(vivienda)
cant_atr <- ncol(vivienda)
dimVivienda = dim(vivienda)
cat("La dimensión de la base de datos es ", dimVivienda, "Con un número total de ",cant_reg, "registros ","y de",cant_atr ," atributos  " )
## La dimensión de la base de datos es  8322 13 Con un número total de  8322 registros  y de 13  atributos

Estructura de los datos

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>

Preparación de la base de datos

Para comenzar con la preparación del dataset, se eliminan los atributos Id, longitud, latitud y barrio los cuales no se concideran relevantes para el problema.

datos<- vivienda[, -c(1, 11, 12, 13)]
head(datos)

Revisión de datos faltantes

faltantes <- colSums(is.na(datos)) %>%
                 as.data.frame() 

faltantes

Descripción de los datos

A continuación se presenta el resumen de los principales datos estadísticos del dataset

resumen <- summary(datos)
print(resumen)
##      zona               piso              estrato         preciom      
##  Length:8322        Length:8322        Min.   :3.000   Min.   :  58.0  
##  Class :character   Class :character   1st Qu.:4.000   1st Qu.: 220.0  
##  Mode  :character   Mode  :character   Median :5.000   Median : 330.0  
##                                        Mean   :4.634   Mean   : 433.9  
##                                        3rd Qu.:5.000   3rd Qu.: 540.0  
##                                        Max.   :6.000   Max.   :1999.0  
##                                        NA's   :3       NA's   :2       
##    areaconst       parqueaderos        banios        habitaciones   
##  Min.   :  30.0   Min.   : 1.000   Min.   : 0.000   Min.   : 0.000  
##  1st Qu.:  80.0   1st Qu.: 1.000   1st Qu.: 2.000   1st Qu.: 3.000  
##  Median : 123.0   Median : 2.000   Median : 3.000   Median : 3.000  
##  Mean   : 174.9   Mean   : 1.835   Mean   : 3.111   Mean   : 3.605  
##  3rd Qu.: 229.0   3rd Qu.: 2.000   3rd Qu.: 4.000   3rd Qu.: 4.000  
##  Max.   :1745.0   Max.   :10.000   Max.   :10.000   Max.   :10.000  
##  NA's   :3        NA's   :1605     NA's   :3        NA's   :3       
##      tipo          
##  Length:8322       
##  Class :character  
##  Mode  :character  
##                    
##                    
##                    
## 
columnas_numericas <- datos[sapply(datos, is.numeric)]

par(cex.axis = 0.7)

boxplot(
  columnas_numericas, 
  main = "Boxplot Atributos Numéricos", 
  las = 2
)

Imputación de los datos

Dado que el atributo parqueadero es numérico, se reemplazarán sus valores faltantes por la mediana.

me_parqueaderos <- median(datos$parqueaderos, na.rm = TRUE)

datos$parqueaderos <- ifelse(
  is.na(datos$parqueaderos), 
  me_parqueaderos, datos$parqueaderos
)

Conversión de la variable piso a numérica e imputación de los datos faltantes con la mediana.

datos$piso <- as.numeric(datos$piso)

me_pisos <- median(datos$piso, na.rm = TRUE)

datos$piso <- ifelse(
  is.na(datos$piso), 
  me_pisos, datos$piso
)
md.pattern(datos)

##      piso parqueaderos preciom zona estrato areaconst banios habitaciones tipo
## 8319    1            1       1    1       1         1      1            1    1
## 1       1            1       1    0       0         0      0            0    0
## 2       1            1       0    0       0         0      0            0    0
##         0            0       2    3       3         3      3            3    3
##        
## 8319  0
## 1     6
## 2     7
##      20

Se observa que los datos faltantes corresponden a 3 inmuebles que carecen de información suficiente para su análisis. Por lo tanto, su eliminación de la base de datos no tendrá impacto en nuestros resultados

datos = na.omit(datos)
datos$tipo = tolower(datos$tipo)

datos = datos%>% mutate(tipo = ifelse(tipo == "apto","apartamento", tipo))
md.pattern(datos)
##  /\     /\
## {  `---'  }
## {  O   O  }
## ==>  V <==  No need for mice. This data set is completely observed.
##  \  \|/  /
##   `-----'

##      zona piso estrato preciom areaconst parqueaderos banios habitaciones tipo
## 8319    1    1       1       1         1            1      1            1    1
##         0    0       0       0         0            0      0            0    0
##       
## 8319 0
##      0

Listo el dataset .

Analisis de componentes principales

Dataset con atributos numéricos

datos1 = datos[,c(2, 4, 5, 6, 7, 8)]
head(datos1)
summary(datos1)
##       piso           preciom         areaconst       parqueaderos   
##  Min.   : 1.000   Min.   :  58.0   Min.   :  30.0   Min.   : 1.000  
##  1st Qu.: 2.000   1st Qu.: 220.0   1st Qu.:  80.0   1st Qu.: 1.000  
##  Median : 3.000   Median : 330.0   Median : 123.0   Median : 2.000  
##  Mean   : 3.527   Mean   : 433.9   Mean   : 174.9   Mean   : 1.867  
##  3rd Qu.: 4.000   3rd Qu.: 540.0   3rd Qu.: 229.0   3rd Qu.: 2.000  
##  Max.   :12.000   Max.   :1999.0   Max.   :1745.0   Max.   :10.000  
##      banios        habitaciones   
##  Min.   : 0.000   Min.   : 0.000  
##  1st Qu.: 2.000   1st Qu.: 3.000  
##  Median : 3.000   Median : 3.000  
##  Mean   : 3.111   Mean   : 3.605  
##  3rd Qu.: 4.000   3rd Qu.: 4.000  
##  Max.   :10.000   Max.   :10.000

Estandarización de los datos

datos_estand <- scale(datos1)

Elección del número de componentes principales

Para esta elección utilizaremos el criterio de la varianza explicada.

datos_PCA = prcomp(datos_estand)
summary(datos_PCA)
## Importance of components:
##                          PC1    PC2    PC3     PC4     PC5     PC6
## Standard deviation     1.777 1.0288 0.9043 0.66341 0.57898 0.43863
## Proportion of Variance 0.526 0.1764 0.1363 0.07335 0.05587 0.03207
## Cumulative Proportion  0.526 0.7024 0.8387 0.91206 0.96793 1.00000

El primer componente principal (PC1) tiene una desviación estándar de 1.777, lo que significa que captura la mayor variabilidad entre todos los componentes. Además, el primer componente principal (PC1) captura el 52.6% de la varianza total, el segundo componente (PC2) captura el 17.64%, y así sucesivamente.

fviz_eig(datos_PCA, addlabels = TRUE)

En este caso, el primer componente principal (PC1) explica el 52.6% de la variabilidad contenida en la base de datos, y los dos primeros componentes principales (PC1 y PC2) juntos capturan el 70.24% de la varianza total. Esto indica que con solo una variable (PC1), que se obtiene mediante una combinación lineal de las variables originales, se puede resumir una gran parte de la variabilidad presente en la base de datos. Si se consideran los tres primeros componentes principales (PC1, PC2 y PC3), se logra capturar el 83.87% de la varianza total.

Este análisis sugiere que los primeros componentes principales (especialmente los primeros tres) son suficientes para capturar la mayor parte de la variabilidad en los datos. Esto implica que es posible reducir la dimensionalidad de los datos a estos componentes sin perder una cantidad significativa de información relevante. En consecuencia, se puede simplificar el análisis y la interpretación de los datos al trabajar con un número reducido de variables, preservando al mismo tiempo la esencia de la variabilidad contenida en la base de datos original.

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

A partir del gráfico se puede concluir que las variables Precio y Parqueadero están correlacionadas y tienen una contribución similar a los componentes principales. Además, se observa que la variable Piso tiene un mayor impacto en el primer componente, mientras que las variables Precio, Baños y Área construida influyen más significativamente en el segundo componente.

fviz_contrib(datos_PCA, choice = "var", axes = 1:2)

El gráfico refleja el impacto de cada variable en la variabilidad de las dos primeras componentes principales. Las variables “preciom”, “piso”, “areaconst”, y “baños” sobresalen por sus altas contribuciones, mostrando que son las que más influyen en la configuración de los componentes principales.

Análisis de Conglomerados

Para este análisis utilizamos la misma base de datos estandarizada.

Método del codo

El metodo del codo se utiliza para determinar el número óptimo de clústeres que explica la mayor varianza en los datos.

calcular_wcss = function(datos_estand, k_max) {
  wcss = vector("numeric", length = k_max)
  for (k in 1:k_max) {
    model = kmeans(datos_estand, centers = k, nstart = 10)
    wcss[k] = model$tot.withinss
  }
  return(wcss)
}


k_max = 9
wcss_valores = calcular_wcss(datos_estand, k_max)


plot(1:k_max, wcss_valores, type = "b", pch = 19, frame = FALSE, xlab = "Número de clústeres", ylab = "Suma de cuadrados internos",col = "#5586B3")

Al analizar la gráfica del método del codo, se observa que el punto de inflexión más pronunciado se encuentra en el número 4 de clusters, lo que sugiere que este es el número óptimo de clusters para el análisis.

älgoritmo Kmeans

El algoritmo K-means es una técnica de clustering que se utiliza para agrupar un conjunto de datos en clusters. El objetivo del algoritmo es minimizar la variabilidad dentro de cada cluster y maximizar la diferencia entre los clusters.

num_clusters = 4
modelo_kmeans = kmeans(datos_estand, centers = num_clusters, nstart = 10)

datos1$cluster = as.factor(modelo_kmeans$cluster)
table(datos1$cluster)
## 
##    1    2    3    4 
## 4240  864 2240  975
colores = c("#367C6D", "#1A7332", "#1C5A99", "#2466C1") 


ggplot(datos1, aes(x = factor(cluster))) +
  geom_bar(fill = colores) +  
  labs(title = "Viviendas por cluster",
       x = "Clúster",
       y = "Número de viviendas") +
  theme_minimal() +
  geom_text(stat='count', aes(label=..count..), vjust=-0.5)
## Warning: The dot-dot notation (`..count..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(count)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

resumen <- datos1 %>%
  group_by(cluster) %>%
  summarise(mean_piso = mean(piso),
            mean_preciom = mean(preciom),
            mean_areaconst = mean(areaconst),
            mean_parqueaderos = mean(parquea),
            mean_baños = mean(banios),
            mean_habitaciones = mean(habitac))

# Embellecer la tabla
resumen %>%
  kbl(col.names = c("Cluster", "Piso Medio", "Precio Medio (M)", "Área Const. Media", 
                    "Parqueaderos Medios", "Baños Medios", "Habitaciones Medias"),
      align = "c",  # Centrar el texto
      caption = "Resumen de Clusters") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = F,
                position = "center",
                font_size = 14) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#4CAF50") %>%
  column_spec(1, bold = TRUE, color = "#1A7332") %>%
  column_spec(2:7, background = "#F2F2F2")
Resumen de Clusters
Cluster Piso Medio Precio Medio (M) Área Const. Media Parqueaderos Medios Baños Medios Habitaciones Medias
1 2.958962 255.0526 98.40267 1.835961 2.212736 3.60514
2 3.041667 1136.1528 429.71323 1.835961 5.195602 3.60514
3 2.671875 521.0509 248.42217 1.835961 4.162500 3.60514
4 8.389744 389.1672 113.14720 1.835961 2.756923 3.60514

Al analizar los cuatro clusters presentados, se puede observar una clara segmentación del mercado inmobiliario. El Cluster 1 agrupa propiedades de alto valor y gran tamaño, con una Área Construida Media de 429.71 m² y un Precio Medio de 1,136.15 millones. Estas propiedades, que también presentan el mayor número de Baños Medios (5.20), son probablemente viviendas de lujo situadas en zonas exclusivas. La media de Piso de 3.04 sugiere que se trata de edificios bajos o casas grandes, posiblemente con más privacidad y espacio.

El Cluster 2, en cambio, agrupa propiedades situadas en pisos más altos, con una media de Piso de 8.39, pero con un Área Construida Media significativamente menor, de 113.15 m². Estas características indican que este cluster podría estar compuesto por apartamentos en edificios altos y densos, ubicados en zonas urbanas. El Precio Medio es de 389.17 millones, lo que sugiere que estas propiedades están dirigidas a un mercado de clase media, ofreciendo una opción más asequible en comparación con el Cluster 1.

Por otro lado, el Cluster 3 incluye propiedades que también se encuentran en pisos bajos, con una Área Construida Media aún menor, de 98.40 m², y el Precio Medio más bajo de todos los clusters, 255.05 millones. Este cluster podría representar viviendas más antiguas o ubicadas en áreas menos céntricas, dirigidas a un público que busca opciones económicas o de entrada al mercado inmobiliario.

Finalmente, el Cluster 4 representa un grupo intermedio, con propiedades que tienen un Área Construida Media de 248.42 m² y un Precio Medio de 521.05 millones. Aunque el tamaño y el precio son menores que en el Cluster 1, estas propiedades cuentan con un número significativo de Baños Medios (4.16), lo que indica que son espaciosas y posiblemente ubicadas en zonas semi-exclusivas. La media de Piso es baja, lo que sugiere que se encuentran en edificios pequeños o en áreas suburbanas.

En resumen, los clusters muestran una segmentación clara del mercado inmobiliario, desde propiedades de lujo en el Cluster 1 hasta opciones más accesibles en el Cluster 3, con los Clusters 2 y 4 ocupando posiciones intermedias. El análisis también destaca que el Precio Medio está fuertemente relacionado con el tamaño de la propiedad y el número de baños, mientras que el número de parqueaderos es constante en todos los clusters, sugiriendo que este factor no varía significativamente en función del precio o el tamaño en los datos analizados.

Diagramas

ggplot(datos1, aes(x = habitaciones, y =  preciom, color = factor(cluster))) +
  geom_point() +
  labs(title = "Número de habitaciones y precio por clúster",
       x = "Número de habitaciones",
       y = "Precio",
       color = "Clúster") +
  theme_minimal() +
  theme(legend.position = "bottom")

ggplot(datos1, aes(x = areaconst, y =  preciom, color = factor(cluster))) +
  geom_point() +
  labs(title = "Área construida y precio por clúster",
       x = "Área construida",
       y = "Precio",
       color = "Clúster") +
  theme_minimal() +
  theme(legend.position = "bottom")

ggplot(datos1, aes(x = banios, y =  preciom, color = factor(cluster))) +
  geom_point() +
  labs(title = "Número de baños y precio por clúster",
       x = "Número de baños",
       y = "Precio",
       color = "Clúster") +
  theme_minimal() +
  theme(legend.position = "bottom")

Los diagramas indican que existe una relación directa entre el precio de la vivienda y las variables área construida, número de habitaciones y número de baños.

Análisis de Correspondencia

El Análisis de Correspondencia es una técnica estadística que se emplea para explorar y visualizar asociaciones entre variables categóricas. Este método permite identificar relaciones entre las categorías de las variables, revelando patrones o estructuras subyacentes en los datos que podrían no ser evidentes a simple vista.

Selección del dataset con las variables categóricas

Las variables categóricas del dataset son estrato, zona y tipo, por lo tanto creamos un nuevo dataset con estas variables y verificamos los valores únicos de cada variable.

datos2 = datos[,c(1, 3, 9)]
datos2$estrato = as.factor(datos2$estrato)
unique(datos2$zona)
## [1] "Zona Oriente" "Zona Sur"     "Zona Norte"   "Zona Oeste"   "Zona Centro"
unique(datos2$estrato)
## [1] 3 4 5 6
## Levels: 3 4 5 6
unique(datos2$tipo)
## [1] "casa"        "apartamento"

Análisis de Correspondencia Múltiple

mca_result = MCA(datos2)

De acuerdo con la gráfica se puede afirmar que existe una correspondencia fuerte entre las variables estrato y zona; correspondencia que no comnparten con la variable tipo, además las variables estrato y zona tienen una influencia importante sobre las dos dimensiones.

Correspondencia entre las variables estrato y zona

t1 <- table(datos2$zona, datos2$estrato)

# Asignar nombres personalizados a las columnas
colnames(t1) <- c("Estrato 3", "Estrato 4", "Estrato 5", "Estrato 6")

# Embellecer la tabla
kbl(t1, caption = "Distribución de Zonas por Estratos", align = "c") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"),
                full_width = F, 
                position = "center",
                font_size = 14) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#4CAF50") %>%
  column_spec(1, bold = TRUE, color = "#1C5A99") %>%
  column_spec(2:5, background = "#F2F2F2")
Distribución de Zonas por Estratos
Estrato 3 Estrato 4 Estrato 5 Estrato 6
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(t1)
## 
##  Pearson's Chi-squared test
## 
## data:  t1
## X-squared = 3830.4, df = 12, p-value < 2.2e-16
resultados_ac1 = CA(t1)

Se observa que el estrato tres corresponde a la zona centro y a la zona oriente, elestrato 6 corresponde a la zona oeste y los estratos 4 y 5 corresponden a la zona norte y zona zur.

Grado de representatividad

vp1 = resultados_ac1$eig ; vp1
##       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(resultados_ac1, addlabels = TRUE, ylim = c(0, 80))+ggtitle("")+
ylab("Porcentaje de varianza explicado") + xlab("Ejes")

De acuerdo con la gráfica la primera componente resume el 70% y los dos primeros componentes prepresentados en el plano factorial, mientras que los dos primeros ejes resumen un 97.7% de los datos, lo que indica que son suficientes para explicar el data set.

Informe de Análisis Holístico del Mercado Inmobiliario Urbano

##Objetivo del Análisis

El presente informe tiene como objetivo realizar un análisis integral y multidimensional del mercado inmobiliario urbano. Mediante la aplicación de técnicas avanzadas de análisis de datos, se busca identificar patrones, relaciones y segmentaciones relevantes para mejorar la toma de decisiones en la compra, venta y valoración de propiedades. El análisis incluye el uso de Análisis de Componentes Principales (ACP), Análisis de Conglomerados y Análisis de Correspondencia, así como la visualización de resultados clave.

1. Análisis de Componentes Principales (ACP) El ACP fue utilizado para reducir la dimensionalidad del conjunto de datos y facilitar la identificación de las características que influyen significativamente en la variación de precios y ofertas del mercado inmobiliario. Los resultados obtenidos revelan que el primer componente principal (PC1) captura el 52.6% de la variabilidad total, mientras que los dos primeros componentes (PC1 y PC2) juntos explican el 70.24%. Al considerar los tres primeros componentes (PC1, PC2 y PC3), se logra capturar el 83.87% de la varianza total.

Estos hallazgos sugieren que es posible reducir la dimensionalidad de los datos a estos componentes sin perder una cantidad significativa de información relevante. En particular, las variables como “Precio”, “Parqueadero”, “Piso”, “Baños” y “Área Construida” muestran una fuerte correlación con los primeros componentes, lo que indica que son determinantes clave en la variabilidad observada en los datos. Por lo tanto, se recomienda enfocar el análisis en estas variables para obtener insights relevantes.

2. Análisis de Conglomerados El análisis de conglomerados, apoyado por el método del codo, identificó que el número óptimo de clusters es cuatro. Estos clusters representan diferentes segmentos del mercado inmobiliario urbano, como se detalla a continuación:

Cluster 1: Agrupa propiedades de alto valor y gran tamaño, ubicadas probablemente en zonas exclusivas. Estas viviendas tienen un Área Construida Media de 429.71 m² y un Precio Medio de 1,136.15 millones, destacándose por un elevado número de Baños Medios (5.20). Cluster 2: Comprende propiedades en pisos más altos, con un Área Construida Media de 113.15 m² y un Precio Medio de 389.17 millones. Este cluster sugiere un mercado de clase media, con apartamentos en edificios densos de zonas urbanas. Cluster 3: Representa viviendas más accesibles y de menor tamaño (Área Construida Media de 98.40 m²), con un Precio Medio de 255.05 millones. Estas propiedades podrían estar en áreas menos céntricas o ser más antiguas. Cluster 4: Se sitúa en un punto intermedio, con propiedades de tamaño medio (Área Construida Media de 248.42 m²) y un Precio Medio de 521.05 millones. Este cluster sugiere propiedades espaciosas en zonas semi-exclusivas. El análisis de conglomerados evidencia que el precio de la vivienda está directamente relacionado con el tamaño del área construida y el número de baños. La constancia en el número de parqueaderos sugiere que este factor no es un diferenciador significativo en función del precio o tamaño.

3. Análisis de Correspondencia El análisis de correspondencia se enfocó en las variables categóricas “estrato”, “zona” y “tipo”. Los resultados muestran una correspondencia fuerte entre las variables “estrato” y “zona”, mientras que la variable “tipo” no presenta una relación significativa con las otras dos. Se observa que:

El estrato 3 corresponde a las zonas centro y oriente. El estrato 6 está asociado a la zona oeste. Los estratos 4 y 5 se corresponden con las zonas norte y sur. Además, la primera componente resume el 70% de la información relevante, y las dos primeras componentes combinadas explican el 97.7% de los datos, lo que indica que estas dimensiones son suficientes para comprender el comportamiento de las variables categóricas en el dataset.

Concluciones y recomendaciones

Conclusiones:

Reducción de Dimensionalidad: El análisis de componentes principales (ACP) ha demostrado que un reducido número de componentes principales (PC1, PC2 y PC3) es suficiente para capturar la mayor parte de la variabilidad en los datos, específicamente el 83.87%. Esto permite simplificar significativamente el análisis sin perder información relevante. Las variables “Precio”, “Parqueadero”, “Piso”, “Baños” y “Área Construida” son los principales impulsores de esta variabilidad, lo que sugiere que deben ser el foco de cualquier evaluación futura del mercado.

Segmentación del Mercado: El análisis de conglomerados identificó cuatro clusters bien definidos, que representan distintos segmentos del mercado inmobiliario:

Cluster 1: Propiedades de lujo en zonas exclusivas. Cluster 2: Apartamentos en zonas urbanas densamente pobladas, dirigidos a la clase media. Cluster 3: Viviendas más económicas, posiblemente en áreas menos céntricas o más antiguas. Cluster 4: Propiedades de tamaño intermedio en zonas semi-exclusivas. Estos clusters muestran una clara relación entre el precio de la propiedad, el tamaño del área construida y el número de baños, con el número de parqueaderos siendo un factor menos relevante en la segmentación.

Correlación entre Estrato y Zona: El análisis de correspondencia reveló una fuerte relación entre el estrato socioeconómico y la zona geográfica. El estrato 3 se asocia con las zonas centro y oriente, el estrato 6 con la zona oeste, y los estratos 4 y 5 con las zonas norte y sur. Esta correlación es crucial para comprender las dinámicas de oferta y demanda en diferentes áreas de la ciudad.

Recomendaciones:

Enfoque Estratégico en Segmentos de Mercado: Con base en la segmentación obtenida, se recomienda que la empresa inmobiliaria enfoque sus esfuerzos en los segmentos más rentables, particularmente en el Cluster 1 (propiedades de lujo) y el Cluster 4 (propiedades de tamaño medio en zonas semi-exclusivas). Estos segmentos ofrecen un alto potencial de retorno sobre la inversión y deben ser priorizados en las estrategias de marketing y ventas.

Optimización de la Cartera de Propiedades: Dado que las variables “Precio”, “Área Construida” y “Baños” son las más influyentes en la variabilidad del mercado, se sugiere que la empresa optimice su cartera de propiedades teniendo en cuenta estos factores. La incorporación de propiedades que maximicen estas características puede mejorar significativamente la posición competitiva de la empresa en el mercado.

Expansión Geográfica Basada en Estrato: La correlación observada entre el estrato y la zona sugiere que las estrategias de expansión deben considerar la localización geográfica en función del estrato socioeconómico predominante. Por ejemplo, la empresa podría concentrar sus esfuerzos en desarrollar propiedades en la zona oeste, que se asocia con estratos más altos, para captar el segmento de lujo (estrato 6).

Comunicación Efectiva de Resultados: La visualización de los hallazgos mediante gráficos, mapas y otros recursos visuales debe ser utilizada para comunicar estos insights a la dirección de la empresa. Una presentación clara y concisa de los resultados facilitará la toma de decisiones estratégicas y permitirá una mejor planificación de las inversiones futuras.