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. 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.

Paquetes

# devtools::install_github("centromagis/paqueteMODELOS", force = TRUE)
library(paqueteMODELOS)
library(FactoMineR)
library(factoextra)
library(cluster)
library(tidyverse)
library(mice)
library(fpc)
library(corrplot)
library(gridExtra)
library(pander)
library(ggdendro)
library(skimr)

Datos

Se procede a cargar los datos

data("vivienda")
head(vivienda)
## # A tibble: 6 × 13
##      id zona    piso  estrato preciom areaconst parqueaderos banios habitaciones
##   <dbl> <chr>   <chr>   <dbl>   <dbl>     <dbl>        <dbl>  <dbl>        <dbl>
## 1  1147 Zona O… <NA>        3     250        70            1      3            6
## 2  1169 Zona O… <NA>        3     320       120            1      2            3
## 3  1350 Zona O… <NA>        3     350       220            2      2            4
## 4  5992 Zona S… 02          4     400       280            3      5            3
## 5  1212 Zona N… 01          5     260        90            1      2            3
## 6  1724 Zona N… 01          5     240        87            1      3            3
## # ℹ 4 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>

Se inicia con un resumen descriptivo de los datos contenidos en el dataframe de vivienda

skim(vivienda)
Data summary
Name vivienda
Number of rows 8322
Number of columns 13
_______________________
Column type frequency:
character 4
numeric 9
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
zona 3 1.00 8 12 0 5 0
piso 2638 0.68 2 2 0 12 0
tipo 3 1.00 4 11 0 2 0
barrio 3 1.00 4 29 0 436 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
id 3 1.00 4160.00 2401.63 1.00 2080.50 4160.00 6239.50 8319.00 ▇▇▇▇▇
estrato 3 1.00 4.63 1.03 3.00 4.00 5.00 5.00 6.00 ▅▆▁▇▆
preciom 2 1.00 433.89 328.65 58.00 220.00 330.00 540.00 1999.00 ▇▂▁▁▁
areaconst 3 1.00 174.93 142.96 30.00 80.00 123.00 229.00 1745.00 ▇▁▁▁▁
parqueaderos 1605 0.81 1.84 1.12 1.00 1.00 2.00 2.00 10.00 ▇▁▁▁▁
banios 3 1.00 3.11 1.43 0.00 2.00 3.00 4.00 10.00 ▇▇▃▁▁
habitaciones 3 1.00 3.61 1.46 0.00 3.00 3.00 4.00 10.00 ▂▇▂▁▁
longitud 3 1.00 -76.53 0.02 -76.59 -76.54 -76.53 -76.52 -76.46 ▁▅▇▂▁
latitud 3 1.00 3.42 0.04 3.33 3.38 3.42 3.45 3.50 ▃▇▅▇▅

El precio promedio de las viviendas es de 433.89 millones de COP, con una desviación estándar de 328.65 millones, lo que indica una gran variabilidad en los precios. Por el histograma generado se observa que la distribución de precios tiene un sesgo positivo, con algunos precios muy altos que elevan la media en comparación con la mediana. Por otra parte la variable de estrato solo incluye datos de viviendas clasificadas entre 3 y 6. Los precios de las viviendas consideradas varían de 58 a 1999 millones de COP, y las áreas construidas van desde 30 hasta 1745 metros cuadrados. Se observa que 1605 viviendas no especifican si tienen parqueaderos, aunque algunas registran hasta 10. También se ha notado que hay viviendas sin información sobre baños ni habitaciones, lo que podría indicar la necesidad de limpiar los datos, ya que estos registros podrían no ser relevantes para el análisis. Finalmente, se aclarará que el análisis se llevará a cabo sobre 8322 viviendas urbanas en una ciudad específica.

Para analizar las variables de tipo “character” se realizara lo siguiente:

vivienda %>%
  group_by(zona) %>%
  summarise(n = n(), .groups = "drop") %>%
  mutate(total = sum(n),
         porcentaje = (n / total) * 100) %>%
  arrange(desc(n))
## # A tibble: 6 × 4
##   zona             n total porcentaje
##   <chr>        <int> <int>      <dbl>
## 1 Zona Sur      4726  8322    56.8   
## 2 Zona Norte    1920  8322    23.1   
## 3 Zona Oeste    1198  8322    14.4   
## 4 Zona Oriente   351  8322     4.22  
## 5 Zona Centro    124  8322     1.49  
## 6 <NA>             3  8322     0.0360
vivienda %>%
  group_by(tipo) %>%
  summarise(n = n(), .groups = "drop") %>%
  mutate(total = sum(n),
         porcentaje = (n / total) * 100) %>%
  arrange(desc(n))
## # A tibble: 3 × 4
##   tipo            n total porcentaje
##   <chr>       <int> <int>      <dbl>
## 1 Apartamento  5100  8322    61.3   
## 2 Casa         3219  8322    38.7   
## 3 <NA>            3  8322     0.0360

Se nota que la mayoría de las viviendas están situadas en las zonas Sur, Norte y Oeste de la ciudad, con aproximadamente el 57% de ellas ubicadas en la zona Sur. Además, la base de datos tiene más registros de apartamentos que de casas.

vivienda %>%
  group_by(piso) %>%
  summarise(n = n(), .groups = "drop") %>%
  mutate(total = sum(n),
         porcentaje = (n / total) * 100) %>%
  arrange(desc(n))
## # A tibble: 13 × 4
##    piso      n total porcentaje
##    <chr> <int> <int>      <dbl>
##  1 <NA>   2638  8322     31.7  
##  2 02     1450  8322     17.4  
##  3 03     1097  8322     13.2  
##  4 01      860  8322     10.3  
##  5 04      607  8322      7.29 
##  6 05      567  8322      6.81 
##  7 06      245  8322      2.94 
##  8 08      211  8322      2.54 
##  9 07      204  8322      2.45 
## 10 09      146  8322      1.75 
## 11 10      130  8322      1.56 
## 12 11       84  8322      1.01 
## 13 12       83  8322      0.997
vivienda %>%
  group_by(barrio) %>%
  summarise(n = n(), .groups = "drop") %>%
  mutate(total = sum(n),
         porcentaje = (n / total) * 100) %>%
  arrange(desc(n))
## # A tibble: 437 × 4
##    barrio             n total porcentaje
##    <chr>          <int> <int>      <dbl>
##  1 valle del lili  1008  8322      12.1 
##  2 ciudad jardín    516  8322       6.20
##  3 pance            409  8322       4.91
##  4 la flora         366  8322       4.40
##  5 santa teresita   262  8322       3.15
##  6 el caney         208  8322       2.50
##  7 el ingenio       202  8322       2.43
##  8 la hacienda      164  8322       1.97
##  9 acopi            158  8322       1.90
## 10 los cristales    154  8322       1.85
## # ℹ 427 more rows

Se observa que los pisos 2 y 3 son los más comunes en las ofertas, aunque la información sobre el piso no siempre está incluida en los anuncios de las viviendas. Ademas, que el barrio Valle del Lili tiene la mayor cantidad de viviendas disponibles en el mercado.

Aunque se podrían realizar varios cruces de variables para el análisis, se propone comenzar con un análisis de componentes principales. Este método reducirá la cantidad de variables manteniendo la información esencial, facilitando la interpretación de los resultados y ayudando a identificar las variables más influyentes en la variabilidad de los datos. También ofrecerá una visión más clara de las posibles correlaciones entre las variables.

Análisis de Componentes Principales

Primero se llevará a cabo una selección de las variables numéricas, seguido de un análisis de datos faltantes, dado que esta metodología requiere únicamente valores numéricos y no admite la presencia de datos faltantes.

vivienda_new = vivienda[,c(4:9)]
md.pattern(vivienda_new, rotate.names = TRUE)

##      preciom estrato areaconst banios habitaciones parqueaderos     
## 6717       1       1         1      1            1            1    0
## 1602       1       1         1      1            1            0    1
## 1          1       0         0      0            0            0    5
## 2          0       0         0      0            0            0    6
##            2       3         3      3            3         1605 1619

En resumen, se puede concluir lo siguiente:

  • Existen 6717 observaciones con datos completos para todas las variables.
  • Hay 1602 observaciones que tienen datos para todas las variables, excepto para la de parqueaderos.
  • Una observación contiene datos únicamente para la variable preciom.
  • Dos observaciones no tienen datos para ninguna de las variables.

La variable “parqueaderos” tiene datos faltantes en el 19% de los registros. Dado que se considera crucial para determinar el precio de las viviendas, se decide eliminar los registros con datos incompletos. Esto permitirá crear un conjunto de datos sin valores ausentes.

# Elimina las filas con datos faltantes
vivienda_new <- na.omit(vivienda_new)

# Ahora 'vivienda_new' no tiene filas con datos faltantes
md.pattern(vivienda_new, rotate.names = TRUE)
##  /\     /\
## {  `---'  }
## {  O   O  }
## ==>  V <==  No need for mice. This data set is completely observed.
##  \  \|/  /
##   `-----'

##      estrato preciom areaconst parqueaderos banios habitaciones  
## 6717       1       1         1            1      1            1 0
##            0       0         0            0      0            0 0

Para evitar que las variables con escalas de valores más grandes influyan de manera desproporcionada en las estimaciones, se estandarizan las variables antes de iniciar el proceso de estimación de los componentes principales. Este paso garantiza que todas las variables aporten de manera equilibrada al análisis, independientemente de su escala original.

viviendaZ = vivienda_new %>%
scale()
head(viviendaZ)
##         estrato    preciom  areaconst parqueaderos     banios habitaciones
## [1,] -1.9279348 -0.6532909 -0.7712458   -0.7424551 -0.1850976    1.7511897
## [2,] -1.9279348 -0.4443626 -0.4242642   -0.7424551 -0.9096316   -0.4477275
## [3,] -1.9279348 -0.3548218  0.2696991    0.1465058 -0.9096316    0.2852449
## [4,] -0.8746661 -0.2055873  0.6860770    1.0354668  1.2639704   -0.4477275
## [5,]  0.1786025 -0.6234440 -0.6324532   -0.7424551 -0.9096316   -0.4477275
## [6,]  0.1786025 -0.6831378 -0.6532721   -0.7424551 -0.1850976   -0.4477275

Ahora se procede a realizar la estimación de las componentes principales

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
## estrato      0.2953982 -0.6377404  0.5431029  0.07074563  0.4349440 -0.1299429
## 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
res.pca <- prcomp(viviendaZ)
fviz_eig(res.pca, addlabels = TRUE)

En este caso, el primer componente principal captura el 58.1% de la variabilidad en la base de datos, y al considerar los dos primeros componentes, se explica el 78.5% de la variabilidad total. Esto sugiere que gran parte de la variabilidad de los datos puede resumirse utilizando solo una variable (PC1), que se obtiene a través de una combinación lineal de las variables originales.

fviz_pca_var(res.pca,
col.var = "contrib", # Color by contributions to the PC
gradient.cols = c("#FF7F00",  "#034D94"),
repel = TRUE     # Avoid text overlapping
) 

El círculo de correlaciones en el primer plano factorial revela varias relaciones significativas entre las variables. Se observa una alta correlación entre el precio de las viviendas y el número de parqueaderos, lo que indica que las viviendas con más parqueaderos tienden a tener precios más elevados.

De manera similar, el área construida y el número de baños también están altamente correlacionados, sugiriendo que las viviendas con mayor área construida suelen tener más baños.

En contraste, las variables “habitaciones” y “estrato” presentan una baja correlación, casi formando un ángulo recto en el círculo de correlaciones. No obstante, a pesar de esta baja correlación, ambas variables tienen una alta contribución al primer componente principal. Esto indica que, aunque no estén fuertemente relacionadas entre sí, son importantes para explicar la variabilidad en los datos y también están significativamente asociadas con el segundo componente principal.

Cabe destacar que, entre todas las variables, “parqueaderos” es la que menos contribuye al primer componente principal.

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.

cor(vivienda_new)
##                  estrato   preciom areaconst parqueaderos    banios
## estrato       1.00000000 0.5876109 0.2591140    0.4226084 0.3950842
## preciom       0.58761094 1.0000000 0.6839831    0.6886785 0.6719967
## areaconst     0.25911395 0.6839831 1.0000000    0.5848290 0.6671746
## parqueaderos  0.42260837 0.6886785 0.5848290    1.0000000 0.5705065
## banios        0.39508418 0.6719967 0.6671746    0.5705065 1.0000000
## habitaciones -0.08049567 0.2670210 0.5339207    0.2844808 0.5969167
##              habitaciones
## estrato       -0.08049567
## preciom        0.26702104
## areaconst      0.53392073
## parqueaderos   0.28448076
## banios         0.59691671
## habitaciones   1.00000000
corrplot(cor(vivienda_new))

Antes de comenzar la construcción de clústeres, es importante verificar que la matriz de correlación sea consistente con lo mostrado en el círculo de correlaciones. En particular, se observa que el número de habitaciones tiene la menor correlación con el precio, un aspecto que merece un análisis más detallado en relación con las variables que determinan el precio de una vivienda. La hipótesis es que la variable “habitaciones” podría estar mal especificada en los datos o que, en realidad, el número de habitaciones no influye en el precio de la vivienda. Esto se debe a que, en todos los estratos y tipos de viviendas, el número de habitaciones tiende a ser similar.

Ahora se construyen los clústers.

# PCA
res.pca <- PCA(vivienda_new, graph = FALSE, scale.unit = TRUE )

# Calculamos la distancia euclidiana
distancia <- dist(res.pca$ind$coord, method = "euclidean")

# Cluster
res.HCPC <-  HCPC(res.pca, nb.clust=4) 

Para validar si k=4 es el mejor número de clústers a seleccionar se utiliza el siguiente gráfico

# Método del codo
wss <- sapply(1:10, function(k){kmeans(res.pca$ind$coord, k)$tot.withinss})
plot(1:10, wss, type="b", pch = 19, frame = FALSE, 
     xlab="Número de clusters K", ylab="Total within-clusters sum of squares")

# Realizamos el clustering jerárquico
res.hclust <- hclust(distancia, method = "ward.D2")

# Calculamos el índice de Calinski-Harabasz para diferentes números de clusters
ch <- c()
for (k in 2:10) {
  cluster_assignments <- cutree(res.hclust, k)
  ch[k] <- cluster.stats(distancia, cluster_assignments)$ch
}

# Graficamos el índice de Calinski-Harabasz
plot(2:10, ch[2:10], type = "b", xlab = "Número de clusters", ylab = "Índice de Calinski-Harabasz")

Tanto el método del codo como el índice de Calinski-Harabasz indican que seleccionar k=4 es adecuado para determinar el número óptimo de clústeres.

A continuación, se procederá a analizar las características de cada clúster.

# Caracteristicas de las viviendas
res.HCPC$desc.var
## 
## Link between the cluster variable and the quantitative variables
## ================================================================
##                   Eta2 P-value
## estrato      0.5115513       0
## preciom      0.7088112       0
## areaconst    0.5796944       0
## parqueaderos 0.5840964       0
## banios       0.5968006       0
## habitaciones 0.5470108       0
## 
## Description of each cluster by quantitative variables
## =====================================================
## $`1`
##                 v.test Mean in category Overall mean sd in category  Overall sd
## habitaciones -37.39526         2.938025     3.610838      0.6547489   1.3642062
## estrato      -43.74113         4.282763     4.830430      0.7338314   0.9493547
## areaconst    -45.10955        95.413289   181.136408     44.9919667 144.0891185
## parqueaderos -45.22423         1.164300     1.835194      0.3884100   1.1248251
## preciom      -50.47409       245.865074   468.880601     84.1922536 335.0181418
## banios       -56.29631         2.230794     3.255471      0.6171589   1.3800948
##                    p.value
## habitaciones 4.666398e-306
## estrato       0.000000e+00
## areaconst     0.000000e+00
## parqueaderos  0.000000e+00
## preciom       0.000000e+00
## banios        0.000000e+00
## 
## $`2`
##                 v.test Mean in category Overall mean sd in category  Overall sd
## estrato      42.077915         5.566683     4.830430      0.5205347   0.9493547
## banios       13.176047         3.590620     3.255471      0.8522908   1.3800948
## preciom      12.042189       543.236932   468.880601    198.1223143 335.0181418
## parqueaderos  9.764005         2.037616     1.835194      0.5468315   1.1248251
## areaconst    -3.555174       171.695012   181.136408     68.3998397 144.0891185
## habitaciones -9.294717         3.377137     3.610838      0.7061908   1.3642062
##                   p.value
## estrato      0.000000e+00
## banios       1.205430e-39
## preciom      2.132208e-33
## parqueaderos 1.606820e-22
## areaconst    3.777294e-04
## habitaciones 1.475982e-20
## 
## $`3`
##                 v.test Mean in category Overall mean sd in category  Overall sd
## habitaciones  53.97947         6.119110     3.610838      1.5927523   1.3642062
## banios        25.61148         4.459424     3.255471      1.2962603   1.3800948
## areaconst     23.70205       297.464071   181.136408    116.3119806 144.0891185
## estrato      -22.07833         4.116492     4.830430      0.8207328   0.9493547
##                    p.value
## habitaciones  0.000000e+00
## banios       1.136501e-144
## areaconst    3.434430e-124
## estrato      5.106609e-108
## 
## $`4`
##                v.test Mean in category Overall mean sd in category  Overall sd
## preciom      61.12031      1144.574257   468.880601    350.4752529 335.0181418
## parqueaderos 55.95538         3.912129     1.835194      1.5199829   1.1248251
## areaconst    51.02315       423.738416   181.136408    200.3409117 144.0891185
## banios       42.62754         5.196782     3.255471      1.2225762   1.3800948
## estrato      29.03747         5.740099     4.830430      0.5211146   0.9493547
## habitaciones 17.77226         4.410891     3.610838      1.3047818   1.3642062
##                    p.value
## preciom       0.000000e+00
## parqueaderos  0.000000e+00
## areaconst     0.000000e+00
## banios        0.000000e+00
## estrato      2.215129e-185
## habitaciones  1.159203e-70

Para interpretar los clústeres, es crucial comprender los signos positivos o negativos que cada valor muestra en el v.test.

  • Clúster 1: Este grupo incluye viviendas con los valores más bajos en todas las variables analizadas, como menos habitaciones, el estrato más bajo, menor área construida, pocos parqueaderos, precio más bajo y menor número de baños.
  • Clúster 2: Agrupa viviendas de estratos altos, con un número moderado de baños, precio moderado, varios parqueaderos, poca área construida y pocas habitaciones.
  • Clúster 3: Este clúster comprende viviendas con muchas habitaciones, muchos baños, un área construida considerable y estratos bajos (3 o 4).
  • Clúster 4: Este grupo incluye viviendas con precios altos y, consecuentemente, valores elevados en las demás variables.

Interpretar y analizar los clústeres de esta manera es la forma más efectiva de segmentar las viviendas. Esto permite tomar decisiones informadas que impactan la compra y venta de propiedades, y facilita la construcción de un catálogo inmobiliario que, según la metodología de negocio utilizada, permitirá seleccionar el nicho más adecuado para trabajar.

Análisis de Correspondencia

Examinar la relación entre las variables categóricas (tipo de vivienda, zona y estrato), para identificar patrones de comportamiento de la oferta en mercado inmobiliario.

# Datos categoricos
vivienda_new_2 = vivienda[,c(10,2,4)]
vivienda_new_2 <- vivienda %>%
  select(c(10,2,4)) %>%
  mutate(across(everything(), as.factor))

head(vivienda_new_2)
## # A tibble: 6 × 3
##   tipo        zona         estrato
##   <fct>       <fct>        <fct>  
## 1 Casa        Zona Oriente 3      
## 2 Casa        Zona Oriente 3      
## 3 Casa        Zona Oriente 3      
## 4 Casa        Zona Sur     4      
## 5 Apartamento Zona Norte   5      
## 6 Apartamento Zona Norte   5

Se revisan datos faltantes

md.pattern(vivienda_new_2, rotate.names = TRUE)

##      tipo zona estrato  
## 8319    1    1       1 0
## 3       0    0       0 3
##         3    3       3 9

Se observa que:

  • 8319 casos tienen datos completos (ningún valor faltante).
  • Hay 3 casos donde todas las variables son faltantes.

Dado que la cantidad de datos faltantes es mínima, se opta por eliminarlos.

vivienda_new_2 <- na.omit(vivienda_new_2)

# Ahora 'vivienda_new_2' no tiene filas con datos faltantes
md.pattern(vivienda_new_2, rotate.names = TRUE)
##  /\     /\
## {  `---'  }
## {  O   O  }
## ==>  V <==  No need for mice. This data set is completely observed.
##  \  \|/  /
##   `-----'

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

Tipo - Zona

tabla <- table(vivienda_new_2$tipo, vivienda_new_2$zona)
tabla
##              
##               Zona Centro Zona Norte Zona Oeste Zona Oriente Zona Sur
##   Apartamento          24       1198       1029           62     2787
##   Casa                100        722        169          289     1939
chisq.test(tabla)
## 
##  Pearson's Chi-squared test
## 
## data:  tabla
## X-squared = 690.93, df = 4, p-value < 2.2e-16

El resultado indica que se rechaza la hipótesis de independencia de las variables (p-value: 0.0000), indicando grado tipo de relación entre ellas.

Tipo - Estrato

tabla2 <- table(vivienda_new_2$tipo, vivienda_new_2$estrato)
tabla2
##              
##                  3    4    5    6
##   Apartamento  639 1404 1766 1291
##   Casa         814  725  984  696
chisq.test(tabla2)
## 
##  Pearson's Chi-squared test
## 
## data:  tabla2
## X-squared = 224.33, df = 3, p-value < 2.2e-16

El resultado indica que se rechaza la hipótesis de independencia de las variables (p-value: 0.0000), indicando grado tipo de relación entre ellas.

Zona - Estrato

tabla3 <- table(vivienda_new_2$zona, vivienda_new_2$estrato)
tabla3
##               
##                   3    4    5    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(tabla3)
## 
##  Pearson's Chi-squared test
## 
## data:  tabla3
## X-squared = 3830.4, df = 12, p-value < 2.2e-16

El resultado indica que se rechaza la hipótesis de independencia de las variables (p-value: 0.0000), indicando grado tipo de relación entre ellas.

resultados_ac_ZE <- CA(tabla3)

El gráfico permite establecer relaciones y validarlas como son:

  • El estrato 6 se encuentra ubicado en la Zona Oeste
  • Los estratos 4 y 5 están ubicados principalmente en la Zona Sur y Norte
  • El estrato 3 está presente en las Zonas Oriente y Centro
fviz_screeplot(resultados_ac_ZE, addlabels = TRUE, ylim = c(0, 80))+ggtitle("")+
ylab("Porcentaje de varianza explicado") + xlab("Ejes")

Las variables se representan en los 2 primeros ejes, siendo la suma de ambas el 100% de la variabilidad.

Conclusiones

El análisis de componentes principales es un método que proporciona una excelente visión general del estado de las viviendas. En este caso, se utilizan diversas variables numéricas para identificar correlaciones entre ellas, especialmente en relación con la variación de los precios. Esto nos permite determinar cuáles son las variables más estrechamente vinculadas al valor de las viviendas y en qué medida influyen.

El análisis de conglomerados complementa el análisis de componentes principales al permitir la formación de grupos de viviendas con características similares. Estos grupos facilitan a la empresa la identificación de nichos de mercado, la definición de objetivos, y el enfoque en aspectos específicos de la venta de viviendas. Aunque se podría profundizar más en este análisis, la versión presentada en este informe ya ofrece una visión clara sobre las viviendas disponibles y sus características más destacadas.

Por último, el análisis de correspondencias, aunque sencillo, tiene algunas limitaciones cuando se trabaja con solo dos variables y puede ser menos útil si el número de categorías es muy grande. Sin embargo, es efectivo para identificar relaciones entre variables categóricas que no siempre son evidentes, lo cual es útil para responder preguntas específicas sobre las viviendas en función de estas variables.

Recomendaciones

El análisis facilita la identificación rápida de viviendas tanto en ubicaciones céntricas como en áreas periféricas. Por lo tanto, dirigir una estrategia bien definida hacia un nicho de mercado específico puede tener un impacto significativo en los resultados de venta.

Hay viviendas con características únicas, como un número reducido de habitaciones o baños, entre otros factores. Es importante considerar si el objetivo es vender a personas solteras, parejas casadas o dueños de mascotas para definir correctamente el nicho de mercado. De este modo, se pueden ofrecer viviendas que cumplan con un conjunto general de requisitos, tanto en cuanto a infraestructura como a ubicación.

Por último, hay viviendas de estrato medio con muy buena infraestructura que pueden ofrecer una alta rentabilidad. Estas propiedades pueden adquirirse a un precio razonable y venderse posteriormente a un valor más alto. Sin embargo, es esencial visitar estas viviendas, ya que es posible que el espacio no esté completamente terminado, lo que podría implicar costos adicionales.