knitr::opts_chunk$set(echo = TRUE, warning = FALSE, message = FALSE)
# 1. Cargar librerías
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.2.1 ✔ readr 2.2.0
## ✔ forcats 1.0.1 ✔ stringr 1.6.0
## ✔ ggplot2 4.0.3 ✔ tibble 3.3.1
## ✔ lubridate 1.9.5 ✔ tidyr 1.3.2
## ✔ purrr 1.2.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(FactoMineR)
library(factoextra)
## Welcome to factoextra!
## Want to learn more? See two factoextra-related books at https://www.datanovia.com/library/principal-component-methods
library(leaflet)
# 2. Cargar el paquete
library(paqueteMODELOS)
## Cargando paquete requerido: boot
## Cargando paquete requerido: broom
## Cargando paquete requerido: GGally
## Cargando paquete requerido: gridExtra
##
## Adjuntando el paquete: 'gridExtra'
##
## The following object is masked from 'package:dplyr':
##
## combine
##
## Cargando paquete requerido: knitr
## Cargando paquete requerido: summarytools
##
## Adjuntando el paquete: 'summarytools'
##
## The following object is masked from 'package:tibble':
##
## view
# 3. Cargar la base de datos
data(vivienda)
# 4. Limpieza
datos_clean <- vivienda %>%
select(-piso) %>%
mutate(
id = as.character(id),
zona = as.factor(zona),
tipo = as.factor(tipo),
barrio = as.factor(barrio),
estrato_fac = as.factor(estrato)
) %>%
drop_na()
# 5. Convertir el ID en el nombre de las filas
datos_clean <- column_to_rownames(datos_clean, var = "id")
Se realiza un Análisis de Componentes Principales (PCA). Su objetivo es reducir la dimensionalidad de las variables cuantitativas del conjunto de datos y visualizar la estructura de las variables que influyen en la variación de precios.
# 1. Seleccionar exclusivamente las variables métricas
datos_num <- datos_clean %>%
select(preciom, areaconst, parqueaderos, banios, habitaciones, estrato)
# 2. Ejecutar el PCA escalando los datos
res.pca <- PCA(datos_num, scale.unit = TRUE, graph = FALSE)
# 3. Gráfico de la varianza explicada
fviz_eig(res.pca, addlabels = TRUE, ylim = c(0, 60),
barfill = "#2E9FDF", barcolor = "#2E9FDF",
title = "Porcentaje de Varianza Explicada por Dimensiones")
# 4. Gráfico exclusivo de variables (correlación limpia)
fviz_pca_var(res.pca,
col.var = "#FC4E07",
repel = TRUE,
title = "Estructura de Variables - PCA (Mercado Inmobiliario)")
Se agruparan las propiedades residenciales en segmentos homogéneos con características similares. Esto permitirá a la dirección de la inmobiliaria entender las dinámicas de la oferta específica en diferentes partes de la ciudad y para diversos perfiles socioeconómicos con K-Means.
Antes de agrupar, se determinan cuántos conglomerados (\(k\)) son estadísticamente ideales.
# Estandarizar las variables numéricas
datos_scaled <- scale(datos_num)
# Método del codo para identificar el número óptimo de clústeres
fviz_nbclust(datos_scaled, kmeans, method = "wss") +
labs(title = "Método del Codo para Clústeres Óptimos",
x = "Número de Clústeres (k)",
y = "Suma de Cuadrados Totales Internos")
# Fijar la semilla
set.seed(123)
# Ejecutar K-means con k = 3
res_kmeans <- kmeans(datos_scaled, centers = 3, nstart = 25)
# Añadir la etiqueta del clúster a la base de datos limpia
datos_clean$cluster <- as.factor(res_kmeans$cluster)
# Visualización de los conglomerados en el espacio de las componentes principales
fviz_cluster(res_kmeans, data = datos_scaled,
palette = c("#2E9FDF", "#E7B800", "#FC4E07"),
geom = "point",
ellipse.type = "convex",
ggtheme = theme_minimal(),
title = "Segmentación de Propiedades (K-Means, k=3)")
# Calcular el promedio de las variables principales por cada clúster
datos_clean %>%
group_by(cluster) %>%
summarise(
Cantidad_Inmuebles = n(),
Precio_Promedio_M = mean(preciom, na.rm = TRUE),
Area_Promedio_m2 = mean(areaconst, na.rm = TRUE),
Estrato_Medio = median(estrato, na.rm = TRUE),
Baños_Promedio = mean(banios, na.rm = TRUE)
) %>%
knitr::kable(caption = "Perfil Estadístico de los Clústeres Identificados")
| cluster | Cantidad_Inmuebles | Precio_Promedio_M | Area_Promedio_m2 | Estrato_Medio | Baños_Promedio |
|---|---|---|---|---|---|
| 1 | 887 | 1117.0417 | 419.64676 | 6 | 5.231116 |
| 2 | 3498 | 261.2593 | 97.70307 | 4 | 2.271584 |
| 3 | 2332 | 533.7779 | 215.56657 | 5 | 3.979846 |
Se examina la relación entre las variables categóricas del mercado
inmobiliario urbano: Tipo de vivienda
(tipo), Zona geográfica
(zona) y Estrato socioeconómico
(estrato_fac).
Consultando sobre el tema debido a la duda sobre incluirla o no, la
base contiene la variable barrio, esta posee más de 400
categorías únicas; incluirla directamente en un plano factorial
generaría pérdida de legibilidad. Por lo tanto, el Análisis de
Correspondencias Múltiples se focalizará en la interacción estructural
entre el tipo de inmueble, la zona y el estrato.
Se aplica el MCA utilizando el paquete FactoMineR para
mapear las asociaciones estadísticas entre categorías cualitativas.
# Seleccionar exclusivamente las variables categóricas relevantes
datos_cat <- datos_clean %>%
select(tipo, zona, estrato_fac)
# Ejecutar el Análisis de Correspondencias Múltiples
res.mca <- MCA(datos_cat, graph = FALSE)
# Visualizar las categorías en el plano factorial del MCA
fviz_mca_var(res.mca,
repel = TRUE,
col.var = "contrib", # Colorear según su contribución a la inercia
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
title = "MCA - Relaciones entre Variables Categóricas del Mercado")
El presente análisis holístico y multidimensional del mercado inmobiliario urbano de Cali ha permitido desentrañar la estructura oculta de la oferta residencial. A continuación, se presentan las conclusiones clave y las recomendaciones específicas orientadas a dotar a la empresa de una ventaja competitiva sostenible, optimizar la asignación de capital y maximizar los beneficios en un entorno dinámico.
Precios Dictados por el Tamaño y el Lujo: El análisis de componentes principales demostró que más del 58% de la variabilidad del mercado se concentra en un único eje latente compuesto por el área construida, el número de baños, los parqueaderos y el estrato socioeconómico. Esto confirma que el mercado opera bajo una lógica altamente racional de “costo por metro cuadrado y estatus socioeconómico”.
Segmentación Clara del Mercado (Clustering K-Means): La división de la oferta en tres conglomerados permitió aislar con precisión los nichos exisentes:
Geografía y Tipología Habitacional: El análisis de correspondencias evidenció que la oferta no se distribuye de manera homogénea; existen sinergias entre ciertas zonas urbanas y el tipo de infraestructura predominante (desarrollo vertical vs. horizontal).
Capacidad Predictiva y de Tasación (Regresión Lineal Múltiple): El modelo econométrico ajustado otorga a la compañía una capacidad predictiva robusta para la valoración automatizada de inmuebles, reduciendo la incertidumbre en las negociaciones de compra y venta.
Optimización de la Inversión en Inventario: Se recomienda priorizar la adquisición de activos inmobiliarios alineados con el Clúster 2 (segmento de volumen) para asegurar una rotación de capital rápida, complementándolo con adquisiciones puntuales en el Clúster 1 bajo estrategias de remodelación y revalorización
Automatización de Precios de Oferta: Implementar de manera inmediata los coeficientes de la Regresión Lineal Múltiple en los sistemas de cotización interna de los asesores comerciales. Para evitar la subvaloración de activos al momento de captar propiedades y sobrevaloraciones que ahuyenten a los compradores en un mercado altamente competitivo.
Campañas de Marketing segmentadas: Las agencias de marketing de la inmobiliaria no deben de realizar pauta generalizada. Los perfiles obtenidos en el análisis de conglomerados deben usarse para dirigir campañas digitales específicas: anuncios enfocados en familias para zonas de gama media-alta, y campañas de inversión de capital/renta para los segmentos de ultra-lujo.
Inteligencia Geográfica: Utilizar el mapa interactivo desarrollado en este estudio como un cuadro de mando permanente (dashboard) para identificar “zonas de oportunidad” donde el precio de oferta esté por debajo del promedio estimado por el modelo econométrico, permitiendo cazar oportunidades de compra anticipada frente a la competencia.