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.
## # 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>
Observamos la dimensión de los datos
## [1] 8322 13
El conjunto de datos con el que se está trabajando está compuesto por 8322 filas y 13 columnas, lo que se traduce en 8322 observaciones (viviendas) con 13 variables para cada una de ellas.
Es importante revisar la distribución de los las observaciones para evidenciar si existen datos no simétricos y datos atípicos. Adicionalmente para conocer la oferta que se tiene en la data.
## 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>
## 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
Verificamos los tipos de variable
## id zona piso estrato preciom areaconst
## "numeric" "character" "character" "numeric" "numeric" "numeric"
## parqueaderos banios habitaciones tipo barrio longitud
## "numeric" "numeric" "numeric" "character" "character" "numeric"
## latitud
## "numeric"
Se observa que el atributo Piso está como texto, lo mejor seria convertir a numérico para facilitar el tratamiento de la Data.
## variable faltantes
## id id 3
## zona zona 3
## piso piso 2638
## estrato estrato 3
## preciom preciom 2
## areaconst areaconst 3
## parqueaderos parqueaderos 1605
## banios banios 3
## habitaciones habitaciones 3
## tipo tipo 3
## barrio barrio 3
## longitud longitud 3
## latitud latitud 3
Podemos identificar la presencia de registros con datos faltantes o NA,las columnas con mayor presencia son Piso con 2638 registros y parqueaderos con 1605 registros.
En el contexto del análisis realizado, opté por utilizar el modelo kNN (k-Nearest Neighbors) para la imputación de datos debido a la complejidad de los datos y la interrelación de múltiples variables. Dado que el conjunto de datos incluye diversas características de las viviendas, como el precio, la ubicación, el número de habitaciones y baños, entre otros, el modelo kNN permite imputar los valores faltantes basándose en la similitud de los registros cercanos, capturando de manera efectiva las relaciones entre estas variables. Además, este enfoque es útil cuando existen valores faltantes en varias variables, ayudando a evitar sesgos en el análisis.
Se procede a elimimar las filas que cumplan la condición de id=NA
## Se han eliminado 3 filas del dataset.
Se verifica que ya no queden datos faltantes.
## variable faltantes
## id id 0
## zona zona 0
## piso piso 0
## estrato estrato 0
## preciom preciom 0
## areaconst areaconst 0
## parqueaderos parqueaderos 0
## banios banios 0
## habitaciones habitaciones 0
## tipo tipo 0
## barrio barrio 0
## longitud longitud 0
## latitud latitud 0
Una vez terminamos con el análisis exploratorio de los datos y limpieza procedemos con el objetivo de la presente actividad.
El propósito de este análisis es reducir la dimensionalidad del conjunto de datos para simplificar su estructura y facilitar la identificación de las características clave que influyen en la variación de precios y la oferta en el mercado inmobiliario. A través de técnicas de análisis de componentes principales (PCA, por sus siglas en inglés), se busca transformar las variables originales en un conjunto reducido de componentes que capturen la mayor parte de la variabilidad presente en los datos. Esto permitirá visualizar de manera más clara las relaciones entre las variables y comprender cuáles son las características más relevantes que afectan los precios y la oferta en el mercado.
El Análisis de Componentes Principales (PCA) se aplica exclusivamente a variables numéricas continuas, ya que se basa en la varianza y la covarianza entre ellas. Este método es especialmente útil cuando se trabaja con un gran número de variables, permitiendo reducir la dimensionalidad sin perder demasiada información.
Sin embargo, en la presente base de datos, solo dos atributos (preciom y areaconst) cumplen con las condiciones para aplicar PCA. Dado que reducir la dimensionalidad con solo dos variables no aporta un valor significativo, el uso de PCA en este caso no sería la mejor opción.
No obstante, con el objetivo de cumplir con la actividad, se aplicará PCA a variables numéricas continuas, discretas y categóricas ordinales, con el propósito de reducir la dimensionalidad y extraer patrones relevantes.
Para garantizar que el PCA proporcione resultados significativos, es fundamental normalizar las variables antes del análisis. Dado que el PCA se basa en la varianza y covarianza de los datos—medidas sensibles a las diferencias en magnitud—es necesario escalar las variables para evitar que aquellas con valores más grandes dominen la contribución a los componentes principales.
## Dim.1 Dim.2 Dim.3 Dim.4 Dim.5
## piso -0.1648925 0.6784041 0.70029221 0.1453981 -0.01828896
## estrato 0.5714343 0.6437753 -0.19729629 -0.4125021 -0.01648071
## preciom 0.8808178 0.2605842 -0.08041210 0.0885072 -0.14531818
## areaconst 0.8375903 -0.2150020 0.02018597 0.2490267 -0.38237670
## parqueaderos 0.8044745 0.1747302 -0.16047216 0.3551611 0.40330781
## banios 0.8612771 -0.1127032 0.20536131 -0.2562469 0.06676711
## habitaciones 0.5487416 -0.6359139 0.42708333 -0.1674133 0.13252128
## Dim.6 Dim.7
## piso 0.01574446 0.02112402
## estrato 0.21081554 0.07223206
## preciom -0.08898033 -0.33603774
## areaconst 0.10113795 0.18263079
## parqueaderos 0.05278809 0.07039590
## banios -0.34317228 0.12425343
## habitaciones 0.23488639 -0.10646684
El primer componente principal (PC1) explica el 50.3% de la varianza total en los datos, lo cual es significativo. El segundo componente principal (PC2) explica un 20.5% adicional de la varianza. Los primeros dos componentes juntos explican alrededor del 70.8% de la varianza total, lo cual indica que gran parte de la información de los datos originales puede ser capturada por solo dos componentes. Los componentes principales posteriores (del tercero en adelante) explican cada vez menos varianza, siendo estos valores 11.2%, 6,9%,5%, 3,4%, 2,6% respectivamente. Esto sugiere que la mayoría de la información relevante está contenida en los primeros dos componentes.
#### Componentes principales:
El primer componente (Dim1) está fuertemente asociado con las variables precio, estrato, parqueaderos, baños, areaconst, y habitaciones sugiriendo que este componente está asociado con características estructurales y económicas de las viviendas. Estas variables tienen vectores largos en la dirección de Dim1, lo que indica que tienen una alta contribución en la varianza explicada por este componente.
El segundo componente (Dim2) está fuertemente influenciado por la variable piso, que se encuentra en una dirección casi perpendicular a las otras variables, lo que indica que está débilmente correlacionada con las variables de Dim1.
Las variables que están agrupadas y apuntan en la misma dirección (precio, estrato, parqueaderos, baños, areaconst, habitaciones) están altamente correlacionadas entre sí. Esto sugiere que cuando una de estas variables aumenta, las otras también tienden a aumentar.
La variable piso, al estar casi perpendicular a las demás, tiene poca o ninguna correlación con estas, lo que sugiere que el número de pisos tiene un comportamiento diferente respecto a las demás variables.
La escala de colores indica la contribución de cada variable a los componentes principales. Las variables con colores más cálidos (precio y estrato) tienen una mayor contribución, especialmente al primer componente.
Las variables preciom (probablemente el precio), baños, areaconst (área
construida), y parqueaderos son las que más contribuyen al primer
componente principal (Dim-1), con una contribución superior al 15%. Esto
sugiere que estas variables son las más importantes para explicar la
varianza en la dirección del primer componente.
preciom tiene la mayor contribución, con más del 20%, seguida de cerca por baños y areaconst.
Las variables estrato, habitaciones, y piso tienen una contribución mucho menor al primer componente. Especialmente piso, cuya contribución es casi nula. Esto confirma que piso no está bien representado en Dim-1 y podría estar más relacionado con otros componentes (como Dim-2, según el gráfico anterior).
Las variables “piso”, “estrato”, y “habitaciones” son las que más contribuyen a la Dim-2, con contribuciones superiores al 20%. Esto sugiere que estas variables tienen una gran influencia en la formación de esta dimensión.
Variables de Menor Contribución: Las variables “preciom”, “areaconst”, “parqueaderos”, y “baños” tienen una contribución significativamente menor a Dim-2, todas por debajo del 10%. Esto indica que su influencia en esta dimensión es limitada.
Para agrupar las propiedades residenciales en segmentos homogéneos con características similares y comprender las dinámicas de las ofertas en distintas partes de la ciudad y estratos socioeconómicos, se emplea el análisis de conglomerados. Este método ayuda a descubrir estructuras subyacentes en los datos al agrupar objetos de manera lógica y útil, considerando la similitud y distancia entre los individuos de los grupos.
Punto de Inflexión (Codo): El gráfico muestra un claro punto de inflexión en k = 3. Esto significa que a partir de 3 clusters, la disminución en la suma de cuadrados dentro de los grupos se vuelve menos pronunciada. Este punto sugiere que 3 es el número óptimo de clusters, ya que es donde se logra un buen equilibrio entre minimizar la variabilidad dentro de los grupos y no sobrecargar el modelo con demasiados clusters.
Pico en k=2 El gráfico muestra un pico máximo en el valor promedio
cuando k=2, lo que sugiere que el número óptimo de clusters sería 2.
Esto indica que los datos se agrupan mejor en dos clusters, con una
buena separación entre ellos y cohesión interna.
Finalmente, se procede a realizar el análisis de correspondencia, que consiste en estimar las coordenadas para cada uno de los niveles de las variables categóricas y representarlas en un plano cartesiano. El objetivo principal del análisis de correspondencia es descubrir patrones y relaciones entre las categorías de las variables mediante una representación gráfica en un espacio de baja dimensión.
##
## 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
##
## Pearson's Chi-squared test
##
## data: tabla
## X-squared = 3830.4, df = 12, p-value < 2.2e-16
El valor p es extremadamente pequeño, menor que 0.00000000000000022. Un valor p tan bajo indica que hay evidencia muy fuerte para rechazar la hipótesis nula.
Se puede identificar de acuerd0 a cada :
El estrato 6 se ubica en la zona Oeste El estrato 4 y 5 En la zonal sur El estrato 3 se ubica en la zona centro y Oriente
## 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
El primer componente explica el 70% de la varianza total, mientras que el segundo componente aporta el 27.7%. Por lo tanto, juntos, los dos primeros componentes explican el 97.7% de la varianza total de los datos.
## $`Dim 1`
## $`Dim 1`$row
## coord
## Zona Oeste -0.5690714
## Zona Sur -0.2090141
## Zona Norte 0.3898305
## Zona Centro 1.7245923
## Zona Oriente 2.0148839
##
## $`Dim 1`$col
## coord
## 6 -0.5190649
## 4 -0.1544575
## 5 -0.1323066
## 3 1.1865554
##
##
## $`Dim 2`
## $`Dim 2`$row
## coord
## Zona Sur -0.1880737
## Zona Norte -0.1471227
## Zona Centro 0.3637090
## Zona Oriente 0.5374546
## Zona Oeste 0.7826088
##
## $`Dim 2`$col
## coord
## 4 -0.3798066
## 5 -0.2042818
## 3 0.2066347
## 6 0.5385722
El PCA es útil para reducir la dimensionalidad, pero en este caso, aplicar PCA solo a preciom y areaconst no aporta valor significativo. Para mejorar el análisis, se incluirán variables numéricas discretas y categóricas ordinales, asegurando su normalización
Los dos primeros componentes principales capturan una gran parte de la variabilidad en los datos (70.8% en total). Por lo tanto, podríamos utilizar estos dos componentes para reducir la dimensionalidad del conjunto de datos sin perder mucha información.
Las variables como precio, estrato, y parqueaderos están estrechamente relacionadas y podrían estar representando una dimensión similar en los datos.
La variable piso parece estar capturando una información diferente en comparación con las otras variables, lo que podría ser relevante para un análisis adicional o para interpretaciones específicas.
A medida que se incrementa el número de clusters de 1 a 3, la suma de cuadrados dentro de los grupos disminuye rápidamente, indicando que agregar más clusters en esta región mejora significativamente la calidad de la clasificación. Sin embargo, después de 3 clusters, las mejoras se vuelven marginales.
Para mejorar su posicionamiento en el mercado y maximizar los beneficios, se recomienda a la empresa:
Implementar campañas de marketing segmentadas: Dirigir las campañas de mercadeo y publicidad según las preferencias de las viviendas (casas o apartamentos) y el estrato socioeconómico y ubicación. Esto permitirá clasificar a los potenciales clientes de acuerdo con su nivel de ingresos promedio.
Explorar oportunidades en zonas de bajo precio: Considerar inversiones a largo plazo en las Zonas Centro y Oriente, que tienen menos viviendas y precios de venta promedio más bajos. Evaluar la adquisición de viviendas económicas para su valorización o la compra de lotes para desarrollar nuevos proyectos, buscando aumentar la cantidad de viviendas disponibles y, por ende, maximizar los beneficios.