Introducción

El presente informe tiene como objetivo realizar un análisis integral y multidimensional de la base de datos de viviendas urbanas para comprender a fondo el mercado inmobiliario y orientar la toma de decisiones estratégicas. Se aplicaron diversas técnicas estadísticas:

Finalmente, se han generado diversas visualizaciones que facilitan la comunicación de los hallazgos a la dirección de la empresa.

Exploración de la Base de Datos

# Cargar la base de datos y paquetes necesarios
library(paqueteMODELOS)
library(summarytools)
data("vivienda")

# Exploración inicial
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>
descr(vivienda)
## Descriptive Statistics  
## vivienda  
## N: 8322  
## 
##                     areaconst    banios   estrato   habitaciones        id   latitud   longitud
## ----------------- ----------- --------- --------- -------------- --------- --------- ----------
##              Mean      174.93      3.11      4.63           3.61   4160.00      3.42     -76.53
##           Std.Dev      142.96      1.43      1.03           1.46   2401.63      0.04       0.02
##               Min       30.00      0.00      3.00           0.00      1.00      3.33     -76.59
##                Q1       80.00      2.00      4.00           3.00   2080.00      3.38     -76.54
##            Median      123.00      3.00      5.00           3.00   4160.00      3.42     -76.53
##                Q3      229.00      4.00      5.00           4.00   6240.00      3.45     -76.52
##               Max     1745.00     10.00      6.00          10.00   8319.00      3.50     -76.46
##               MAD       84.51      1.48      1.48           1.48   3083.81      0.05       0.02
##               IQR      149.00      2.00      1.00           1.00   4159.00      0.07       0.02
##                CV        0.82      0.46      0.22           0.40      0.58      0.01       0.00
##          Skewness        2.69      0.93     -0.18           1.63      0.00      0.03       0.65
##       SE.Skewness        0.03      0.03      0.03           0.03      0.03      0.03       0.03
##          Kurtosis       12.91      1.13     -1.11           3.98     -1.20     -1.15       0.58
##           N.Valid     8319.00   8319.00   8319.00        8319.00   8319.00   8319.00    8319.00
##         Pct.Valid       99.96     99.96     99.96          99.96     99.96     99.96      99.96
## 
## Table: Table continues below
## 
##  
## 
##                     parqueaderos   preciom
## ----------------- -------------- ---------
##              Mean           1.84    433.89
##           Std.Dev           1.12    328.65
##               Min           1.00     58.00
##                Q1           1.00    220.00
##            Median           2.00    330.00
##                Q3           2.00    540.00
##               Max          10.00   1999.00
##               MAD           1.48    207.56
##               IQR           1.00    320.00
##                CV           0.61      0.76
##          Skewness           2.33      1.85
##       SE.Skewness           0.03      0.03
##          Kurtosis           8.31      3.67
##           N.Valid        6717.00   8320.00
##         Pct.Valid          80.71     99.98
# Mostrar dfSummary en un contenedor scrollable para que no se salga del margen
s_vivienda <- dfSummary(vivienda)
cat('<div style="overflow-x: auto; width:100%;">')
print(s_vivienda, method = "render")

Data Frame Summary

vivienda

Dimensions: 8322 x 13
Duplicates: 1
No Variable Stats / Values Freqs (% of Valid) Graph Valid Missing
1 id [numeric]
Mean (sd) : 4160 (2401.6)
min ≤ med ≤ max:
1 ≤ 4160 ≤ 8319
IQR (CV) : 4159 (0.6)
8319 distinct values 8319 (100.0%) 3 (0.0%)
2 zona [character]
1. Zona Centro
2. Zona Norte
3. Zona Oeste
4. Zona Oriente
5. Zona Sur
124(1.5%)
1920(23.1%)
1198(14.4%)
351(4.2%)
4726(56.8%)
8319 (100.0%) 3 (0.0%)
3 piso [character]
1. 02
2. 03
3. 01
4. 04
5. 05
6. 06
7. 08
8. 07
9. 09
10. 10
[ 2 others ]
1450(25.5%)
1097(19.3%)
860(15.1%)
607(10.7%)
567(10.0%)
245(4.3%)
211(3.7%)
204(3.6%)
146(2.6%)
130(2.3%)
167(2.9%)
5684 (68.3%) 2638 (31.7%)
4 estrato [numeric]
Mean (sd) : 4.6 (1)
min ≤ med ≤ max:
3 ≤ 5 ≤ 6
IQR (CV) : 1 (0.2)
3:1453(17.5%)
4:2129(25.6%)
5:2750(33.1%)
6:1987(23.9%)
8319 (100.0%) 3 (0.0%)
5 preciom [numeric]
Mean (sd) : 433.9 (328.6)
min ≤ med ≤ max:
58 ≤ 330 ≤ 1999
IQR (CV) : 320 (0.8)
539 distinct values 8320 (100.0%) 2 (0.0%)
6 areaconst [numeric]
Mean (sd) : 174.9 (143)
min ≤ med ≤ max:
30 ≤ 123 ≤ 1745
IQR (CV) : 149 (0.8)
652 distinct values 8319 (100.0%) 3 (0.0%)
7 parqueaderos [numeric]
Mean (sd) : 1.8 (1.1)
min ≤ med ≤ max:
1 ≤ 2 ≤ 10
IQR (CV) : 1 (0.6)
1:3155(47.0%)
2:2475(36.8%)
3:520(7.7%)
4:384(5.7%)
5:68(1.0%)
6:68(1.0%)
7:18(0.3%)
8:17(0.3%)
9:4(0.1%)
10:8(0.1%)
6717 (80.7%) 1605 (19.3%)
8 banios [numeric]
Mean (sd) : 3.1 (1.4)
min ≤ med ≤ max:
0 ≤ 3 ≤ 10
IQR (CV) : 2 (0.5)
11 distinct values 8319 (100.0%) 3 (0.0%)
9 habitaciones [numeric]
Mean (sd) : 3.6 (1.5)
min ≤ med ≤ max:
0 ≤ 3 ≤ 10
IQR (CV) : 1 (0.4)
11 distinct values 8319 (100.0%) 3 (0.0%)
10 tipo [character]
1. Apartamento
2. Casa
5100(61.3%)
3219(38.7%)
8319 (100.0%) 3 (0.0%)
11 barrio [character]
1. valle del lili
2. ciudad jardín
3. pance
4. la flora
5. santa teresita
6. el caney
7. el ingenio
8. la hacienda
9. acopi
10. los cristales
[ 426 others ]
1008(12.1%)
516(6.2%)
409(4.9%)
366(4.4%)
262(3.1%)
208(2.5%)
202(2.4%)
164(2.0%)
158(1.9%)
154(1.9%)
4872(58.6%)
8319 (100.0%) 3 (0.0%)
12 longitud [numeric]
Mean (sd) : -76.5 (0)
min ≤ med ≤ max:
-76.6 ≤ -76.5 ≤ -76.5
IQR (CV) : 0 (0)
2928 distinct values 8319 (100.0%) 3 (0.0%)
13 latitud [numeric]
Mean (sd) : 3.4 (0)
min ≤ med ≤ max:
3.3 ≤ 3.4 ≤ 3.5
IQR (CV) : 0.1 (0)
3679 distinct values 8319 (100.0%) 3 (0.0%)

Generated by summarytools 1.0.1 (R version 4.4.1)
2025-02-10

cat('</div>')
# Cargar paquetes adicionales para análisis
library(factoextra)
library(FactoMineR)

A partir de esta exploración se identificaron las variables relevantes. En este análisis se seleccionaron las variables numéricas: estrato, preciom, areaconst, parqueaderos, banios y habitaciones.

Preparación y Análisis de Componentes Principales (PCA)

# Selección de variables numéricas
vivienda_num <- vivienda[, c("estrato", "preciom", "areaconst", "parqueaderos", "banios", "habitaciones")]
descr(vivienda_num)
## Descriptive Statistics  
## vivienda_num  
## N: 8322  
## 
##                     areaconst    banios   estrato   habitaciones   parqueaderos   preciom
## ----------------- ----------- --------- --------- -------------- -------------- ---------
##              Mean      174.93      3.11      4.63           3.61           1.84    433.89
##           Std.Dev      142.96      1.43      1.03           1.46           1.12    328.65
##               Min       30.00      0.00      3.00           0.00           1.00     58.00
##                Q1       80.00      2.00      4.00           3.00           1.00    220.00
##            Median      123.00      3.00      5.00           3.00           2.00    330.00
##                Q3      229.00      4.00      5.00           4.00           2.00    540.00
##               Max     1745.00     10.00      6.00          10.00          10.00   1999.00
##               MAD       84.51      1.48      1.48           1.48           1.48    207.56
##               IQR      149.00      2.00      1.00           1.00           1.00    320.00
##                CV        0.82      0.46      0.22           0.40           0.61      0.76
##          Skewness        2.69      0.93     -0.18           1.63           2.33      1.85
##       SE.Skewness        0.03      0.03      0.03           0.03           0.03      0.03
##          Kurtosis       12.91      1.13     -1.11           3.98           8.31      3.67
##           N.Valid     8319.00   8319.00   8319.00        8319.00        6717.00   8320.00
##         Pct.Valid       99.96     99.96     99.96          99.96          80.71     99.98
# Mostrar dfSummary de vivienda_num en un contenedor scrollable
s_vivienda_num <- dfSummary(vivienda_num)
cat('<div style="overflow-x: auto; width:100%;">')
print(s_vivienda_num, method = "render")

Data Frame Summary

vivienda_num

Dimensions: 8322 x 6
Duplicates: 799
No Variable Stats / Values Freqs (% of Valid) Graph Valid Missing
1 estrato [numeric]
Mean (sd) : 4.6 (1)
min ≤ med ≤ max:
3 ≤ 5 ≤ 6
IQR (CV) : 1 (0.2)
3:1453(17.5%)
4:2129(25.6%)
5:2750(33.1%)
6:1987(23.9%)
8319 (100.0%) 3 (0.0%)
2 preciom [numeric]
Mean (sd) : 433.9 (328.6)
min ≤ med ≤ max:
58 ≤ 330 ≤ 1999
IQR (CV) : 320 (0.8)
539 distinct values 8320 (100.0%) 2 (0.0%)
3 areaconst [numeric]
Mean (sd) : 174.9 (143)
min ≤ med ≤ max:
30 ≤ 123 ≤ 1745
IQR (CV) : 149 (0.8)
652 distinct values 8319 (100.0%) 3 (0.0%)
4 parqueaderos [numeric]
Mean (sd) : 1.8 (1.1)
min ≤ med ≤ max:
1 ≤ 2 ≤ 10
IQR (CV) : 1 (0.6)
1:3155(47.0%)
2:2475(36.8%)
3:520(7.7%)
4:384(5.7%)
5:68(1.0%)
6:68(1.0%)
7:18(0.3%)
8:17(0.3%)
9:4(0.1%)
10:8(0.1%)
6717 (80.7%) 1605 (19.3%)
5 banios [numeric]
Mean (sd) : 3.1 (1.4)
min ≤ med ≤ max:
0 ≤ 3 ≤ 10
IQR (CV) : 2 (0.5)
11 distinct values 8319 (100.0%) 3 (0.0%)
6 habitaciones [numeric]
Mean (sd) : 3.6 (1.5)
min ≤ med ≤ max:
0 ≤ 3 ≤ 10
IQR (CV) : 1 (0.4)
11 distinct values 8319 (100.0%) 3 (0.0%)

Generated by summarytools 1.0.1 (R version 4.4.1)
2025-02-10

cat('</div>')
# Eliminación de casos con datos faltantes
vivienda_num <- na.omit(vivienda_num)

# Normalización de las variables (media = 0, SD = 1)
vivienda_num <- scale(vivienda_num)
descr(vivienda_num)
## Descriptive Statistics  
## 
##                                areaconst                banios                estrato
## ----------------- ---------------------- --------------------- ----------------------
##              Mean                   0.00                  0.00                   0.00
##           Std.Dev                   1.00                  1.00                   1.00
##               Min                  -1.05                 -2.36                  -1.93
##                Q1                  -0.66                 -0.91                  -0.87
##            Median                  -0.35                 -0.19                   0.18
##                Q3                   0.36                  0.54                   1.23
##               Max                  10.85                  4.89                   1.23
##               MAD                   0.58                  1.07                   1.56
##               IQR                   1.02                  1.45                   2.11
##                CV   -6185916608976538.00   -978558839893499.75   -1312137704007749.50
##          Skewness                   2.72                  0.90                  -0.37
##       SE.Skewness                   0.03                  0.03                   0.03
##          Kurtosis                  13.26                  0.94                  -0.81
##           N.Valid                6717.00               6717.00                6717.00
##         Pct.Valid                 100.00                100.00                 100.00
## 
## Table: Table continues below
## 
##  
## 
##                             habitaciones          parqueaderos               preciom
## ----------------- ---------------------- --------------------- ---------------------
##              Mean                   0.00                  0.00                  0.00
##           Std.Dev                   1.00                  1.00                  1.00
##               Min                  -2.65                 -0.74                 -1.23
##                Q1                  -0.45                 -0.74                 -0.66
##            Median                  -0.45                  0.15                 -0.34
##                Q3                   0.29                  0.15                  0.33
##               Max                   4.68                  7.26                  4.57
##               MAD                   0.00                  1.32                  0.60
##               IQR                   0.73                  0.89                  0.99
##                CV   -1362919452008278.25   -323087889384105.75   7714795804022447.00
##          Skewness                   1.78                  2.33                  1.78
##       SE.Skewness                   0.03                  0.03                  0.03
##          Kurtosis                   4.70                  8.31                  3.28
##           N.Valid                6717.00               6717.00               6717.00
##         Pct.Valid                 100.00                100.00                100.00
# Mostrar dfSummary de vivienda_num escalado en un contenedor scrollable
s_vivienda_num_scaled <- dfSummary(vivienda_num)
cat('<div style="overflow-x: auto; width:100%;">')
print(s_vivienda_num_scaled, method = "render")

Data Frame Summary

vivienda_num

Dimensions: 6717 x 6
Duplicates: 649
No Variable Stats / Values Freqs (% of Valid) Graph Valid Missing
1 estrato [numeric]
Mean (sd) : 0 (1)
min ≤ med ≤ max:
-1.9 ≤ 0.2 ≤ 1.2
IQR (CV) : 2.1 (-1.312138e+15)
-1.93 !:684(10.2%)
-0.87 !:1641(24.4%)
0.18 !:2522(37.5%)
1.23 !:1870(27.8%)
! rounded
6717 (100.0%) 0 (0.0%)
2 preciom [numeric]
Mean (sd) : 0 (1)
min ≤ med ≤ max:
-1.2 ≤ -0.3 ≤ 4.6
IQR (CV) : 1 (7.714796e+15)
502 distinct values 6717 (100.0%) 0 (0.0%)
3 areaconst [numeric]
Mean (sd) : 0 (1)
min ≤ med ≤ max:
-1 ≤ -0.4 ≤ 10.9
IQR (CV) : 1 (-6.185917e+15)
610 distinct values 6717 (100.0%) 0 (0.0%)
4 parqueaderos [numeric]
Mean (sd) : 0 (1)
min ≤ med ≤ max:
-0.7 ≤ 0.1 ≤ 7.3
IQR (CV) : 0.9 (-3.230879e+14)
-0.74 !:3155(47.0%)
0.15 !:2475(36.8%)
1.04 !:520(7.7%)
1.92 !:384(5.7%)
2.81 !:68(1.0%)
3.70 !:68(1.0%)
4.59 !:18(0.3%)
5.48 !:17(0.3%)
6.37 !:4(0.1%)
7.26 !:8(0.1%)
! rounded
6717 (100.0%) 0 (0.0%)
5 banios [numeric]
Mean (sd) : 0 (1)
min ≤ med ≤ max:
-2.4 ≤ -0.2 ≤ 4.9
IQR (CV) : 1.4 (-9.785588e+14)
11 distinct values 6717 (100.0%) 0 (0.0%)
6 habitaciones [numeric]
Mean (sd) : 0 (1)
min ≤ med ≤ max:
-2.6 ≤ -0.4 ≤ 4.7
IQR (CV) : 0.7 (-1.362919e+15)
11 distinct values 6717 (100.0%) 0 (0.0%)

Generated by summarytools 1.0.1 (R version 4.4.1)
2025-02-10

cat('</div>')

Se aplicó PCA para extraer los componentes principales:

pca_vivienda <- prcomp(vivienda_num, center = TRUE, scale. = TRUE)
summary(pca_vivienda)
## Importance of components:
##                           PC1    PC2     PC3     PC4     PC5     PC6
## Standard deviation     1.8665 1.1059 0.70675 0.59961 0.49435 0.43560
## Proportion of Variance 0.5806 0.2039 0.08325 0.05992 0.04073 0.03162
## Cumulative Proportion  0.5806 0.7845 0.86772 0.92765 0.96838 1.00000

Visualización e Interpretación del PCA

# Scree plot: Varianza explicada por cada componente
fviz_eig(pca_vivienda, addlabels = TRUE, ylim = c(0, 100)) +
  ggtitle("Scree Plot - Varianza Explicada en PCA")

# Gráfico de variables: Contribución de cada variable
fviz_pca_var(pca_vivienda, col.var = "cos2", 
             gradient.cols = c("blue", "red"), 
             repel = TRUE) +
  ggtitle("Contribución de Variables en PCA")

# Gráfico de individuos: Distribución de las observaciones en el espacio PCA
fviz_pca_ind(pca_vivienda, col.ind = "cos2", 
             gradient.cols = c("blue", "red"), 
             repel = TRUE) +
  ggtitle("Visualización de Individuos en el Espacio PCA")

Conclusiones del PCA:

  • PC1 (aproximadamente 55% de la varianza) está fuertemente influenciado por preciom y areaconst, lo que indica que el tamaño y el precio son determinantes en el mercado.
  • PC2 (alrededor del 25% de la varianza) se asocia con parqueaderos y banios, aportando información sobre la funcionalidad de las propiedades.
  • Es viable reducir la dimensionalidad a dos componentes (PC1 y PC2) sin perder información significativa.

Análisis de Conglomerados (Clustering)

# Volvemos a escalar (en caso de ser necesario)
df_scaled <- scale(vivienda_num)

# Determinación del número óptimo de clusters usando el método del codo
fviz_nbclust(df_scaled, kmeans, method = "wss") +
  ggtitle("Método del Codo para Determinar el Número de Clusters")

# Aplicar K-Means (k = 3)
set.seed(123)
km_model <- kmeans(df_scaled, centers = 3, nstart = 25)

# Visualización de clusters
fviz_cluster(km_model, data = df_scaled, geom = "point", 
             ellipse.type = "convex", palette = "jco", 
             ggtheme = theme_minimal()) +
  ggtitle("Gráfico de Conglomerados - K-Means")

# Mostrar centroides
km_model$centers
##      estrato    preciom  areaconst parqueaderos     banios habitaciones
## 1  0.8934477  1.9345605  1.6551743    1.7630718  1.4314219    0.7199050
## 2 -0.4534189 -0.6196854 -0.5789967   -0.5343193 -0.7128599   -0.4894261
## 3  0.3402964  0.1936983  0.2389327    0.1308766  0.5248339    0.4603159

Para relacionar los clusters con variables de ubicación y estrato, se creó una versión limpia de la base original:

# Crear base limpia: filas sin NA en las variables numéricas
vars_num <- c("estrato", "preciom", "areaconst", "parqueaderos", "banios", "habitaciones")
vivienda_clean <- vivienda[complete.cases(vivienda[, vars_num]), ]
print(dim(vivienda_clean))  # Debe coincidir con el número de filas en vivienda_num
## [1] 6717   13
# Agregar la variable de cluster
vivienda_clean$cluster <- km_model$cluster
library(knitr)
library(kableExtra)

# Distribución de Clusters por Barrio
kable(table(vivienda_clean$cluster, vivienda_clean$barrio), 
      caption = "Distribución de Clusters por Barrio") %>%
  kable_styling(full_width = FALSE, position = "center") %>%
  scroll_box(width = "100%", height = "400px")
Distribución de Clusters por Barrio
20 de julio 3 de julio acopi aguablanca aguacatal alameda alameda del río alamos alcazares alf√©rez real alferez real alfonso lopez alfonso lópez alto jordán altos de guadalupe altos de menga altos de santa antonio nariño aranjuez arboleda arboleda campestre candelaria arboledas atanasio girardot autopista sur bajo aguacatal barranquilla barrio el recuerdo barrio obrero base a√©rea belalcazar belisario caicedo bella suiza bella suiza alta bellavista benjamín herrera bochalema bosques de alboleda bosques del limonar boyacá bretaña brisas de guadalupe brisas de los Brisas De Los brisas del limonar buenos aires caldas Cali cali bella cali canto calibella calicanto calicanto viii calima calimio norte cambulos camino real Camino Real campestre cañasgordas cañaveralejo cañaverales cañaverales los samanes caney caney especial capri cascajal cataya real centelsa centenario Centenario centro cerro cristales cerros de guadalupe champagnat chapinero chiminangos chipichape ciudad 2000 Ciudad 2000 ciudad antejardin ciudad bochalema ciudad capri ciudad cordoba ciudad córdoba ciudad jardin ciudad jardín Ciudad Jardín ciudad jardin pance ciudad los alamos ciudad los álamos ciudad mel√©ndez ciudad melendez ciudad modelo ciudad pacifica ciudad real ciudad talanga ciudadela comfandi ciudadela melendez ciudadela paso ancho ciudadela pasoancho colinas del bosque colinas del sur colon colseguros colseguros andes conjunto gibraltar cristales cristobal colón cristóbal colón cuarto de legua departamental el bosque El Bosque el caney El Caney el castillo el cedro el diamante el dorado el gran limonar el guabal el guabito el ingenio El Ingenio el ingenio 3 el ingenio i el ingenio ii el ingenio iii el jardín el lido el limonar el paraíso el peñon el prado el refugio el sena el tr√©bol el troncal el vallado eucarístico evaristo garcía farrallones de pance fenalco kennedy flora flora industrial floralia francisco eladio ramirez fuentes de la gran limonar granada guadalupe guadalupe alto guaduales guayaquil hacienda alferez real ingenio ingenio i ingenio ii jamundi jamundi alfaguara jorge eliecer gaitán jorge isaacs juanamb√∫ juanambu junin junín la alborada la alianza la arboleda la base la buitrera la campiña la cascada la ceibas la esmeralda la flora La Flora la floresta la fortaleza la gran colombia la hacienda La Hacienda la independencia la libertad la merced la morada la nueva base la playa la portada al la primavera la reforma la rivera la rivera i la rivera ii la riverita la riviera la selva la villa del laflora las acacias las am√©ricas las camelias las ceibas las delicias las granjas las vegas las vegas de libertadores los alamos los alcazares los alcázares los andes los cambulos los cámbulos los cristales los cristales club los guaduales Los Guaduales los jockeys los libertadores los parques barranquilla los robles lourdes mamellan manzanares mayapan las vegas mel√©ndez melendez menga metropolitano del norte miraflores Miraflores morichal de comfandi multicentro municipal napoles nápoles normandia normandía normandía west point norte la flora nueva floresta nueva tequendama oasis de comfandi oasis de pasoancho pacara pacará palmas del ingenio pampa linda pampalinda panamericano pance Pance parcelaciones pance paseo de los paso del comercio pasoancho poblado campestre ponce popular porvenir prados de oriente prados del limonar Prados Del Limonar prados del norte Prados Del Norte prados del sur primavera primero de mayo puente del comercio puente palma quintas de don Quintas De Don quintas de salomia rafael uribe uribe refugio rincon de la riveras del valle rozo la torre saavedra galindo salomia samanes sameco san antonio san bosco san carlos san cayetano san fernando San Fernando san fernando nuevo san fernando viejo san joaquin san joaquín san juan bosco san judas tadeo san luis san nicolás san pedro san vicente santa santa anita Santa Anita santa anita sur santa bárbara santa elena santa fe santa helena de santa isabel Santa Isabel santa monica Santa Monica santa mónica santa monica norte santa mónica popular santa monica residencial santa mónica residencial santa rita santa teresita Santa Teresita santo domingo sector aguacatal sector cañaveralejo guadalupe seminario sierras de normandía siete de agosto simón bolivar tejares cristales tejares de san templete tequendama torres de comfandi unicentro cali unión de vivienda urbanización barranquilla urbanización boyacá urbanización colseguros urbanizacion gratamira urbanización la flora urbanización la merced urbanización la nueva urbanización las cascadas urbanizacion lili urbanización nueva granada urbanización pacara urbanización río lili urbanización san joaquin urbanización tequendama valle del lili Valle Del Lili valle grande versalles villa colombia villa de veracruz villa del lago villa del parque villa del prado Villa Del Prado villa del sol villa del sur villas de veracruz vipasa zona norte zona norte los zona oeste zona oriente zona residencial zona sur
0 0 0 0 28 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 0 5 0 0 0 0 0 0 0 0 0 2 1 2 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 2 0 0 0 0 0 2 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 2 0 0 11 183 0 0 0 0 0 0 0 0 0 0 0 0 0 12 0 0 0 1 0 0 12 0 0 2 0 4 0 1 0 0 0 0 0 1 0 0 20 0 0 2 7 2 0 4 18 0 4 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 6 2 2 0 0 1 0 0 1 0 0 0 0 0 11 0 0 0 0 0 5 1 2 1 1 0 0 16 0 0 0 0 2 0 0 0 2 0 0 0 1 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 18 0 0 0 1 0 0 0 0 0 1 1 0 0 3 0 4 0 0 1 0 0 0 3 49 0 0 0 3 0 0 0 0 0 2 0 2 165 3 37 0 0 0 0 0 0 0 0 2 0 6 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 3 0 0 1 0 1 0 1 0 0 0 5 1 0 0 0 0 0 0 0 1 0 11 1 0 0 0 2 6 19 79 0 0 0 0 1 0 0 0 3 9 1 6 0 1 0 0 0 0 0 5 0 0 0 1 0 0 0 0 2 4 0 0 7 1 0 0 0 1 0 0 0 0 3 1 0 3 0 0 9
3 0 9 1 22 3 1 7 1 3 1 0 8 1 1 1 0 0 7 0 1 4 1 0 0 1 1 1 0 1 2 9 0 14 3 22 0 9 0 7 0 34 1 1 6 1 2 1 1 1 6 0 2 5 2 24 1 1 0 9 12 1 54 1 40 0 0 1 7 1 1 14 1 5 2 2 16 51 1 0 38 8 3 1 6 77 0 0 1 12 1 1 3 1 1 1 9 1 0 0 1 4 1 22 2 1 35 2 1 23 4 14 0 120 1 1 0 0 4 4 8 1 93 0 1 11 5 9 3 33 53 1 25 0 86 1 2 4 1 1 1 0 0 1 12 2 0 1 6 4 8 1 1 3 0 0 0 1 3 0 0 0 11 0 5 1 3 3 0 4 0 7 2 0 1 245 0 5 1 1 121 2 3 1 12 1 2 0 0 0 0 3 1 1 0 1 9 1 1 4 1 1 11 1 3 0 1 0 1 9 1 8 18 3 58 0 10 1 0 1 5 1 2 0 4 23 12 26 6 15 7 0 1 17 1 2 14 1 33 0 1 5 30 2 1 18 4 0 10 5 2 18 0 2 2 2 2 2 0 1 0 3 5 1 76 0 1 1 22 2 0 44 1 3 0 1 1 0 1 1 14 1 1 3 0 2 2 19 0 4 4 0 0 3 0 1 0 2 10 0 37 2 0 1 2 1 0 36 1 10 0 0 0 1 0 6 3 22 0 1 1 2 18 1 5 1 1 1 2 13 24 0 1 1 1 2 1 55 1 0 0 0 1 1 2 0 2 769 1 1 37 1 2 1 1 12 1 17 1 1 4 13 1 13 6 1 30
0 1 12 0 36 3 0 0 0 0 0 1 2 0 3 1 1 1 5 2 0 28 4 1 1 0 0 0 2 0 0 7 3 24 1 0 1 6 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 1 7 0 0 5 1 1 0 13 3 10 0 1 0 6 0 0 8 0 7 0 0 12 29 0 1 0 3 2 0 4 234 2 1 0 0 0 0 2 0 2 0 1 0 1 8 0 1 0 14 2 0 33 4 0 17 11 27 1 46 0 0 5 1 0 3 5 0 85 1 0 6 9 8 5 15 49 0 26 1 25 0 1 5 0 0 0 1 1 0 1 0 1 0 12 6 9 0 0 1 1 1 0 0 0 1 1 1 28 2 4 0 0 0 12 3 0 4 3 1 0 88 2 3 2 0 37 0 4 0 11 0 0 1 0 1 0 1 0 0 0 0 0 0 0 5 1 0 4 0 1 1 0 1 0 0 0 3 5 2 72 1 0 0 0 2 0 0 0 1 0 18 2 5 5 0 11 1 0 6 0 0 5 1 69 1 0 2 33 0 0 1 0 1 11 5 1 214 0 18 0 2 0 0 1 1 1 1 12 0 21 1 1 0 6 0 1 24 0 0 1 1 0 1 0 0 4 0 0 6 2 0 4 22 1 6 10 4 14 0 0 0 1 0 18 0 7 0 1 1 4 2 1 23 0 28 0 2 2 2 3 25 21 148 1 2 0 0 13 0 2 0 0 4 0 15 0 0 0 0 0 1 0 21 3 1 1 1 1 0 3 4 2 64 0 0 21 3 0 0 0 1 0 0 1 0 19 3 0 8 6 0 21
# Distribución de Clusters por Zona
kable(table(vivienda_clean$cluster, vivienda_clean$zona), 
      caption = "Distribución de Clusters por Zona") %>%
  kable_styling(full_width = FALSE, position = "center")
Distribución de Clusters por Zona
Zona Centro Zona Norte Zona Oeste Zona Oriente Zona Sur
2 91 245 3 546
39 814 306 95 2244
23 382 547 65 1315
# Distribución de Clusters por Estrato
kable(table(vivienda_clean$cluster, vivienda_clean$estrato), 
      caption = "Distribución de Clusters por Estrato") %>%
  kable_styling(full_width = FALSE, position = "center")
Distribución de Clusters por Estrato
3 4 5 6
9 36 186 656
517 1276 1494 211
158 329 842 1003

Conclusiones del Clustering:

Análisis de Correspondencia (MCA)

# Seleccionar variables categóricas de interés
vars_cat <- vivienda_clean[, c("tipo", "zona", "barrio")]
str(vars_cat)
## spc_tbl_ [6,717 × 3] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ tipo  : chr [1:6717] "Casa" "Casa" "Casa" "Casa" ...
##  $ zona  : chr [1:6717] "Zona Oriente" "Zona Oriente" "Zona Oriente" "Zona Sur" ...
##  $ barrio: chr [1:6717] "20 de julio" "20 de julio" "20 de julio" "3 de julio" ...
##  - 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>
# Convertir a factores (si es necesario)
vars_cat$tipo   <- as.factor(vars_cat$tipo)
vars_cat$zona   <- as.factor(vars_cat$zona)
vars_cat$barrio <- as.factor(vars_cat$barrio)

# Realizar el MCA
res_mca <- MCA(vars_cat, graph = FALSE)
# Visualización del MCA
fviz_screeplot(res_mca, addlabels = TRUE, ylim = c(0, 50)) +
  ggtitle("Scree Plot - Varianza Explicada en MCA")

fviz_mca_var(res_mca, 
             repel = TRUE,         
             col.var = "contrib",  
             gradient.cols = c("blue", "red", "green")) +
  ggtitle("Contribución de Variables en MCA")

fviz_mca_ind(res_mca, 
             repel = TRUE,         
             col.ind = "cos2",     
             gradient.cols = c("blue", "red", "green")) +
  ggtitle("Visualización de Individuos en MCA")

fviz_mca_biplot(res_mca, 
                repel = TRUE,       
                ggtheme = theme_minimal()) +
  ggtitle("Biplot MCA de Variables Categóricas")

Conclusiones del MCA:

Conclusiones y Recomendaciones

Conclusiones Generales

  • Identificación de Variables Clave:
    El PCA ha demostrado que el precio de la propiedad (preciom) y el área construida (areaconst) son determinantes en la variación del mercado, lo que indica que el tamaño y el precio son fundamentales para la valoración de las viviendas.

  • Segmentación del Mercado:
    El análisis de conglomerados ha segmentado el mercado en tres grupos:

    • Cluster 2 agrupa la mayoría de las propiedades en estratos 3, 4 y 5, representando el segmento intermedio.
    • Clusters 1 y 3 concentran propiedades en el estrato 6, indicando dos subperfiles diferenciados dentro del segmento de alto nivel.
  • Patrones de Ubicación y Tipología:
    El MCA ha revelado asociaciones significativas entre el tipo de vivienda, la zona y el barrio, permitiendo identificar áreas específicas con ciertos perfiles de oferta y demanda.

Recomendaciones Estratégicas

  1. Focalización en Inversiones en Segmento Intermedio:
    Priorizar inversiones en zonas y barrios donde se concentran las propiedades del Cluster 2, ya que este segmento (estratos 3-5) presenta alto potencial de demanda y retorno de inversión.

  2. Desarrollo de Estrategias de Marketing Diferenciadas:
    Diseñar campañas de marketing específicas para los dos subperfiles del segmento de alto nivel (Clusters 1 y 3) para maximizar la captación de clientes premium.

  3. Optimización en la Valoración de Activos:
    Incorporar los hallazgos del PCA en los modelos de valoración para establecer precios precisos y competitivos, reduciendo riesgos y optimizando los márgenes de beneficio.

  4. Monitoreo y Actualización Constante del Mercado:
    Implementar un sistema de seguimiento continuo que permita actualizar el análisis y ajustar las estrategias conforme cambien las dinámicas del mercado.

  5. Diversificación Geográfica de la Cartera:
    Utilizar la información de ubicación (barrio y zona) para diversificar la cartera de inversiones, focalizándose en áreas con potencial de revalorización y crecimiento sostenido.

  6. Capacitación y Uso de Herramientas Analíticas:
    Invertir en capacitación interna y en herramientas de análisis de datos para que el equipo tome decisiones basadas en información actualizada y en un análisis profundo de las tendencias del mercado.