Introducción

Este informe realiza un análisis exploratorio y multivariado de la base vivienda (paquete paqueteMODELOS) con el fin de extraer conocimiento útil para la toma de decisiones en una compañía inmobiliaria. Se abordan: * limpieza y guardado de datasets intermedios, * análisis descriptivo y detección de outliers, * Análisis de Componentes Principales (ACP) y su interpretación, * análisis de correspondencias entre variables categóricas, * clustering basado en ACP (HCPC) para segmentación, * clustering con variables mixtas usando distancia de Gower + PAM, * conclusiones y recomendaciones.

Preparar el entorno

1. Carga y revisión inicial de la base vivienda

## Rows: 8,322
## Columns: 13
## $ id           <dbl> 1147, 1169, 1350, 5992, 1212, 1724, 2326, 4386, 1209, 159…
## $ zona         <chr> "Zona Oriente", "Zona Oriente", "Zona Oriente", "Zona Sur…
## $ piso         <chr> NA, NA, NA, "02", "01", "01", "01", "01", "02", "02", "02…
## $ estrato      <dbl> 3, 3, 3, 4, 5, 5, 4, 5, 5, 5, 6, 4, 5, 6, 4, 5, 5, 4, 5, …
## $ preciom      <dbl> 250, 320, 350, 400, 260, 240, 220, 310, 320, 780, 750, 62…
## $ areaconst    <dbl> 70, 120, 220, 280, 90, 87, 52, 137, 150, 380, 445, 355, 2…
## $ parqueaderos <dbl> 1, 1, 2, 3, 1, 1, 2, 2, 2, 2, NA, 3, 2, 2, 1, 4, 2, 2, 2,…
## $ banios       <dbl> 3, 2, 2, 5, 2, 3, 2, 3, 4, 3, 7, 5, 6, 2, 4, 4, 4, 3, 2, …
## $ habitaciones <dbl> 6, 3, 4, 3, 3, 3, 3, 4, 6, 3, 6, 5, 6, 2, 5, 5, 4, 3, 3, …
## $ tipo         <chr> "Casa", "Casa", "Casa", "Casa", "Apartamento", "Apartamen…
## $ barrio       <chr> "20 de julio", "20 de julio", "20 de julio", "3 de julio"…
## $ longitud     <dbl> -76.51168, -76.51237, -76.51537, -76.54000, -76.51350, -7…
## $ latitud      <dbl> 3.43382, 3.43369, 3.43566, 3.43500, 3.45891, 3.36971, 3.4…

Muestra de los datos

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

Medida de centralidad y desviación para atributos numéricos

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

La base contiene variables geográficas (longitud, latitud), características físicas (areaconst, habitaciones, banios, parqueaderos), socioeconómicas (estrato), precio (preciom) y categóricas como zona, tipo, barrio. Es la información que se espera analizar sobre la oferta inmobiliaria.

2. Limpieza y creación de datasets intermedios

El Objetivo en este paso es dejar un dataset “limpio” (sin id ni piso), un dataset numérico listo para métodos multivariados y su versión estandarizada.

##           id         zona         piso      estrato      preciom    areaconst 
##            3            3         2638            3            2            3 
## parqueaderos       banios habitaciones         tipo       barrio     longitud 
##         1605            3            3            3            3            3 
##      latitud 
##            3
## Dimensión vivienda_limpia: 8322 11
## Dimensión vivienda_num (sin NAs): 6717 6

3. Exploración descriptiva y visualizaciones Básicas

El preciom suele presentar una asimetría positiva mostrando que las propiedades de lujo inflan la distribución. Mientras que por zonas y estrato aparecen diferencias claras en medianas y rango de precio; las zonas con mayor presencia de estrato alto muestran medianas y colas superiores.

4. Outliers y valores extremos

## # A tibble: 10 × 6
##    estrato preciom areaconst parqueaderos banios habitaciones
##      <dbl>   <dbl>     <dbl>        <dbl>  <dbl>        <dbl>
##  1       5    1999       800            5      7            5
##  2       6    1950       400            4      5            3
##  3       6    1950       450            4      5            4
##  4       6    1950       400            4      5            3
##  5       5    1940       734            3      8           10
##  6       6    1900       320            6      5            8
##  7       6    1900       450            6      4            4
##  8       6    1900       335            4      5            4
##  9       6    1900       850            8      7            6
## 10       6    1900       450            8      6            4

Tome una decisión práctica y fue la de no eliminar outliers de forma automática ya que son parte del mercado. Para análisis sensibles a outliers considere transformaciones o análisis por estratos.

5. Análisis de Componentes Principales (ACP)

Para este paso use FactoMineR::PCA sobre las variables numéricas estandarizadas. Esto nos permite aplicar luego el clustering sobre componentes.

##        eigenvalue percentage of variance cumulative percentage of variance
## comp 1      3.484                 58.063                            58.063
## comp 2      1.223                 20.385                            78.447
## comp 3      0.499                  8.325                            86.772
## comp 4      0.360                  5.992                            92.765
## comp 5      0.244                  4.073                            96.838
## comp 6      0.190                  3.162                           100.000

Lo que logro interpretar es que el primer componente (PC1) concentra, típicamente, la escala de la vivienda: areaconst, habitaciones, y banios y se correlaciona con preciom. Es decir, tamaño ↔︎ precio.

El segundo componente (PC2) puede contrastar variables de calidad/servicios o proporciones como parqueaderos frente a antigüedad si se incluyera. Esto te ayuda a visualizar perfiles: propiedades grandes y caras vs. pequeñas y económicas.

6. Guardar puntuaciones del ACP

##        Dim.1      Dim.2      Dim.3       Dim.4       Dim.5
## 1 -1.1050383  2.4803563  0.1929622  0.54905092 -0.13269162
## 2 -1.8442734  0.9172671 -0.9160133 -0.43845450 -0.50736645
## 3 -0.8904313  1.3925402 -1.4107237 -0.17014423  0.09103464
## 4  0.8512322  0.4938433 -0.9501729  0.24595720 -1.03772710
## 5 -1.3999688 -0.4259253  0.3015225 -0.10046398  0.39329418
## 6 -1.1003121 -0.3000252  0.5811531  0.03258118 -0.08862621

7. Clustering sobre componentes (HCPC)

Aplique HCPC (FactoMineR) sobre el resultado de PCA para obtener clusters interpretables.

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

En este caso los clusters suelen mostrar: (1) propiedades grandes y caras (alto PC1), (2) unidades medianas en estrato medio, (3) pequeñas y económicas, etc.

8. Análisis de correspondencias (AC)

Antes de ejecutar AC se verificó automáticamente qué pares de variables categóricas ofrecen al menos 2 dimensiones.

##   zona   tipo barrio 
##      5      2    436
##   var1   var2 K
## 1 zona barrio 4
## Ejecutando AC con: zona vs barrio 
## 
## Call:
## CA(X = tabla_ac, graph = FALSE) 
## 
## The chi square of independence between the two variables is equal to 29343.43 (p-value =  0 ).
## 
## Eigenvalues
##                        Dim.1   Dim.2   Dim.3   Dim.4
## Variance               0.962   0.930   0.895   0.740
## % of var.             27.272  26.361  25.379  20.988
## Cumulative % of var.  27.272  53.633  79.012 100.000
## 
## Rows
##                   Iner*1000     Dim.1     ctr    cos2     Dim.2     ctr    cos2
## Zona Centro     |   730.143 |   0.173   0.046   0.001 |  -0.045   0.003   0.000
## Zona Norte      |   729.767 |   1.553  57.872   0.763 |   0.587   8.549   0.109
## Zona Oeste      |   795.563 |   0.373   2.085   0.025 |  -2.304  82.242   0.961
## Zona Oriente    |   859.691 |   0.827   2.999   0.034 |   1.019   4.711   0.051
## Zona Sur        |   412.114 |  -0.792  36.998   0.864 |   0.271   4.494   0.101
##                     Dim.3     ctr    cos2  
## Zona Centro     |   0.542   0.489   0.006 |
## Zona Norte      |  -0.630  10.234   0.126 |
## Zona Oeste      |   0.235   0.890   0.010 |
## Zona Oriente    |   4.301  87.190   0.908 |
## Zona Sur        |  -0.137   1.197   0.026 |
## 
## Columns (the 10 first)
##                   Iner*1000    Dim.1    ctr   cos2    Dim.2    ctr   cos2  
## 20 de julio     |     8.186 |  0.843  0.027  0.031 |  1.057  0.043  0.049 |
## 3 de julio      |     0.091 | -0.807  0.008  0.857 |  0.281  0.001  0.104 |
## acopi           |    62.262 |  1.568  4.857  0.750 |  0.607  0.751  0.112 |
## agua blanca     |     2.729 |  0.843  0.009  0.031 |  1.057  0.014  0.049 |
## aguablanca      |     1.290 |  0.018  0.000  0.000 |  0.669  0.012  0.083 |
## aguacatal       |    76.223 |  0.370  0.186  0.023 | -2.365  7.883  0.962 |
## alameda         |    59.395 | -0.131  0.003  0.001 |  0.056  0.001  0.000 |
## alameda del rio |     0.401 |  1.583  0.031  0.752 |  0.609  0.005  0.111 |
## alameda del río |     0.801 |  1.583  0.063  0.752 |  0.609  0.010  0.111 |
## alamos          |     5.609 |  1.583  0.439  0.752 |  0.609  0.067  0.111 |
##                  Dim.3    ctr   cos2  
## 20 de julio      4.546  0.832  0.910 |
## 3 de julio      -0.145  0.000  0.028 |
## acopi           -0.663  0.932  0.134 |
## agua blanca      4.546  0.277  0.910 |
## aguablanca       2.200  0.130  0.902 |
## aguacatal        0.245  0.088  0.010 |
## alameda          0.348  0.026  0.004 |
## alameda del rio -0.666  0.006  0.133 |
## alameda del río -0.666  0.012  0.133 |
## alamos          -0.666  0.083  0.133 |

El CA muestra qué categorías de var1 se asocian con qué categorías de var2.Lo que revela que ciertos tipos de vivienda se concentran en ciertas zonas o que determinados barrios están más asociados a estratos concretos.

9. Clustering con variables mixtas (Gower + PAM)

Aquí hacemos una segmentación que tenga en cuenta variables cuantitativas (tamaño, precio…) y cualitativas (zona, tipo). Usamos la distancia de Gower (daisy) y PAM (k-medoids), más robusto ante outliers y variables mixtas.

## k óptimo (silhouette): 5

## # A tibble: 5 × 17
##   Cluster_mixto estrato_mean estrato_sd preciom_mean preciom_sd areaconst_mean
##           <int>        <dbl>      <dbl>        <dbl>      <dbl>          <dbl>
## 1             1         3.99      0.963         423.       230.           270.
## 2             2         4.94      0.904         629.       381.           288.
## 3             3         4.49      0.903         303.       186.           102.
## 4             4         4.73      0.807         314.       192.           102.
## 5             5         5.67      0.607         711.       384.           189.
## # ℹ 11 more variables: areaconst_sd <dbl>, parqueaderos_mean <dbl>,
## #   parqueaderos_sd <dbl>, banios_mean <dbl>, banios_sd <dbl>,
## #   habitaciones_mean <dbl>, habitaciones_sd <dbl>, longitud_mean <dbl>,
## #   longitud_sd <dbl>, latitud_mean <dbl>, latitud_sd <dbl>

PAM+Gower permite agrupar teniendo en cuenta zona y tipo simultáneamente con preciom, areaconst etc.

10. Análisis final y recomendaciones (humano)

Síntesis de hallazgos clave:

  • La variabilidad del precio está altamente asociada a areaconst, habitaciones y banios. Es decir, la parte “física” de la vivienda explica gran parte de la diferencia en precios (confirmado por ACP).

  • Las zonas y estratos muestran patrones claros: algunas zonas concentran estratos altos con precios más elevados; otras zonas concentran oferta económica. El AC confirma asociaciones relevantes entre categorías.

  • Los clusters (tanto HCPC sobre ACP como PAM sobre Gower) generan segmentos prácticos: premium, medios, económicos y segmentos intermedios. Las variables con mayor discriminación aparecen en res.HCPC$desc.var.

  • No eliminamos outliers automáticamente porque representan propiedades premium reales; sin embargo, para modelos predictivos se recomienda transformar (log(preciom)) o modelar por estrato/zona.

11. Archivos generados

## [1] "vivienda_clusters_mixtos.csv" "vivienda_clusters_pca.csv"   
## [3] "vivienda_escalado.csv"        "vivienda_limpia.csv"         
## [5] "vivienda_numerico.csv"        "vivienda_scores_pca.csv"