El mercado inmobiliario urbano presenta una alta complejidad debido a la diversidad de características físicas, económicas y espaciales que influyen en la oferta y valoración de las viviendas. En este contexto, el uso de modelos estadísticos multivariados permite analizar grandes volúmenes de información y extraer patrones relevantes que apoyen la toma de decisiones estratégicas.
El presente informe tiene como objetivo analizar la oferta inmobiliaria urbana a partir de una base de datos real, utilizando técnicas de análisis exploratorio de datos, análisis de componentes principales, análisis de conglomerados y análisis de correspondencia. Los resultados obtenidos buscan proporcionar información útil para la compra, venta y valoración de propiedades en un entorno urbano altamente competitivo.
Cantidad de atributos y registros del dataset
El dataset cuenta con 13 atributos y 8.322 registros.
dim(vivienda)
## [1] 8322 13
Estructura general de los datos
La base de datos contiene información de 8.322 viviendas, incluyendo variables numéricas como precio, área construida, número de habitaciones y baños, así como variables categóricas como zona, tipo de vivienda y barrio.
str(vivienda, give.attr = FALSE)
## 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 ...
Análisis de valores faltantes
Se observa la presencia de valores faltantes principalmente en la variable piso y parqueaderos. Para los análisis multivariados se trabajará unicamente con las variables completas y relevantes.
data.frame(
NAN = colSums(is.na(vivienda)),
Percent = round(colSums(is.na(vivienda)) / nrow(vivienda) * 100, 2)
)
## NAN Percent
## id 3 0.04
## zona 3 0.04
## piso 2638 31.70
## estrato 3 0.04
## preciom 2 0.02
## areaconst 3 0.04
## parqueaderos 1605 19.29
## banios 3 0.04
## habitaciones 3 0.04
## tipo 3 0.04
## barrio 3 0.04
## longitud 3 0.04
## latitud 3 0.04
Cantidad de datos duplicados en el dataset
sum(duplicated(vivienda))
## [1] 1
Resumen estadístico
El precio de las viviendas presenta una alta dispersión, lo cual sugiere heterogeneidad en la oferta inmobiliaria, posiblemente asociada a la ubicación, el estrato y las características físicas del inmueble.
summary(vivienda[, c("preciom","areaconst","parqueaderos","banios","habitaciones","estrato")])
## 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 estrato
## Min. : 0.000 Min. :3.000
## 1st Qu.: 3.000 1st Qu.:4.000
## Median : 3.000 Median :5.000
## Mean : 3.605 Mean :4.634
## 3rd Qu.: 4.000 3rd Qu.:5.000
## Max. :10.000 Max. :6.000
## NA's :3 NA's :3
Análisis de correlación
Este análisis evidencia que el precio de la vivienda mantiene una relación positiva con el área construida, el número de parqueaderos, baños y habitaciones, lo que indica que mayores características físicas se asocian con valores más altos. Asimismo, el estrato socioeconómico influye de manera positiva en el precio, mientras que las variables geográficas muestran una relación débil o negativa, sugiriendo un efecto menos determinante en la valoración.
# Filtro de solo columnas numéricas
vivienda_num <- vivienda[, sapply(vivienda, is.numeric)]
matriz_cor <- cor(vivienda_num, use = "complete.obs")
#Graficar
corrplot(matriz_cor,
method = "color",
type = "full",
col = colorRampPalette(c("blue", "white", "red"))(200),
addCoef.col = "black",
number.cex = 0.5,
tl.col = "black",
tl.srt = 45,
diag = TRUE)
Boxplots de atributos numéricos
El análisis de los boxplots evidencia una alta dispersión y presencia de valores atípicos en las variables precio y área construida, lo que refleja la heterogeneidad del mercado inmobiliario urbano. En contraste, variables como número de parqueaderos, baños y habitaciones presentan distribuciones más concentradas, mientras que las variables geográficas muestran menor variabilidad. Estos resultados justifican la necesidad de aplicar técnicas de estandarización y análisis multivariado en etapas posteriores.
par(mar = c(8,4,4,2))
boxplot(vivienda_num,
las = 2,
main = "Boxplots de atributos numéricos",
col = "blue",
ylim = c(0, 2000))
# Preparación del dataset
Durante la etapa de preparación de los datos se realizaron transformaciones orientadas a mejorar la calidad y consistencia de la información. Se eliminó el identificador único, dado que no aporta valor analítico, y se transformó la variable estrato a formato categórico. Posteriormente, los valores nulos y atípicos inconsistentes fueron tratados mediante imputación con la mediana en variables numéricas y la moda en variables categóricas. Finalmente, se verificó la ausencia de valores faltantes y se eliminaron registros duplicados, garantizando un conjunto de datos limpio para los análisis posteriores.
#Eliminación del atributo id y transformación de la variable estrato
vivienda$id <- NULL
vivienda$estrato <- as.factor(vivienda$estrato)
#Imputación de valores nulos y atípicos con la mediana (reemplazamos los valores iguales a 0 en la variable habitaciones por el valor 3)
vivienda$habitaciones[vivienda$habitaciones == 0] <- 3
vivienda$banios[vivienda$banios == 0] <- 3
# Identificar columnas categóricas y numéricas
categoricas <- c("piso", "zona", "tipo","barrio", "estrato")
numericas <- sapply(vivienda, is.numeric)
# Función para calcular la moda
moda <- function(x) {
ux <- unique(x[!is.na(x) & x != ""])
ux[which.max(tabulate(match(x, ux)))]
}
# Reemplazar NA en columnas categóricas por la moda
vivienda[categoricas] <- lapply(vivienda[categoricas], function(x) {
moda_valor <- moda(x)
x[is.na(x) | x == ""] <- moda_valor
return(x)
})
# Reemplazar NA en columnas numéricas por la mediana
vivienda[numericas] <- lapply(vivienda[numericas], function(x) {
x[is.na(x)] <- median(x, na.rm = TRUE)
return(x)
})
data.frame(
NAN = colSums(is.na(vivienda))
)
## NAN
## zona 0
## piso 0
## estrato 0
## preciom 0
## areaconst 0
## parqueaderos 0
## banios 0
## habitaciones 0
## tipo 0
## barrio 0
## longitud 0
## latitud 0
#Eliminación de valores duplicados
vivienda <- vivienda[!duplicated(vivienda), ]
Análisis de Componentes Principales
El análisis de componentes principales permite identificar las variables que explican la mayor variabilidad del mercado inmobiliario. Los resultados muestran que el primer componente esta asociado principalmente al precio y al área construida, mientras que los componentes siguientes reflejan características estructurales de las viviendas.
vars_pca <- vivienda %>%
select(preciom, areaconst, parqueaderos, banios, habitaciones)
vars_pca <- scale(vars_pca)
pca <- prcomp(vars_pca, center = TRUE, scale. = TRUE)
summary(pca)
## Importance of components:
## PC1 PC2 PC3 PC4 PC5
## Standard deviation 1.7781 0.9335 0.66779 0.57615 0.43470
## Proportion of Variance 0.6323 0.1743 0.08919 0.06639 0.03779
## Cumulative Proportion 0.6323 0.8066 0.89582 0.96221 1.00000
fviz_eig(pca)
fviz_pca_biplot(pca, repel = TRUE)
Análisis de Conglomerados (Clustering)
Los clusters identificados permiten segmentar el mercado en viviendas de bajo, medio y alto valor, lo cual resulta útil para estrategias de inversión y comercialización diferenciadas.
set.seed(123)
datos_cluster <- vivienda %>%
select(preciom, areaconst, parqueaderos, banios, habitaciones) %>%
scale()
# Metodo del codo
fviz_nbclust(datos_cluster, kmeans, method = "wss")
# K-means
km <- kmeans(datos_cluster, centers = 3, nstart = 25)
vivienda$cluster <- km$cluster
aggregate(vivienda[, c("preciom","areaconst","banios","habitaciones")],
by = list(cluster = vivienda$cluster),
mean)
## cluster preciom areaconst banios habitaciones
## 1 1 257.0037 95.32271 2.235234 2.918913
## 2 2 530.8061 239.26463 4.118280 4.662684
## 3 3 1132.7508 429.82966 5.219978 4.600449
Análisis de Correspondencia
El análisis de correspondencia evidenció una asociación significativa entre la zona y el estrato socioeconómico, confirmando que la distribución de los estratos varía según la ubicación. Los primeros ejes factoriales concentran la mayor parte de la variabilidad, lo que permite identificar patrones claros de segmentación socioeconómica del mercado inmobiliario y aporta información relevante para la toma de decisiones estratégicas.
tabla <- table(vivienda$zona, vivienda$estrato)
colnames(tabla) <- c("Estrato3", "Estrato4", "Estrato5", "Estrato6" )
tabla
##
## Estrato3 Estrato4 Estrato5 Estrato6
## Zona Centro 105 14 4 1
## Zona Norte 567 406 763 172
## Zona Oeste 54 83 289 769
## Zona Oriente 339 8 2 1
## Zona Sur 380 1594 1670 1040
La distribución de los estratos socioeconómicos varía de forma marcada entre las zonas, destacándose la Zona Sur y la Zona Norte por concentrar la mayor oferta en estratos altos, mientras que la Zona Centro y Oriente presentan una mayor presencia de estratos intermedios y bajos.
chisq.test(tabla)
##
## Pearson's Chi-squared test
##
## data: tabla
## X-squared = 3802.6, df = 12, p-value < 2.2e-16
La prueba ji-cuadrado indica una asociación estadísticamente significativa entre la zona y el estrato socioeconómico (p-valor < 0.001), confirmando que ambas variables no son independientes.
resultados_ac <- CA(tabla)
El mapa factorail muestra asociaciones claras entre zonas y estratos socioeconómicos. La Zona Oeste se encuentra estrechamente relacionada con el estrato 6, lo que indica una mayor concentración de viviendas de alto nivel socioeconómico en esta zona. Por su parte, la Zona Sur se asocia principalmente con los estratos 4 y 5, reflejando una oferta predominante de estratos medio–altos. La Zona Norte presenta una relación más cercana con el estrato 5, mientras que la Zona Centro y la Zona Oriente se asocian con el estrato 3, evidenciando una mayor presencia de estratos intermedios en estas áreas. El primer eje explica la mayor parte de la variabilidad, lo que indica que estas asociaciones son relevantes para caracterizar la segmentación socioeconómica del mercado inmobiliario.
valores_prop <-resultados_ac$eig ; valores_prop
## eigenvalue percentage of variance cumulative percentage of variance
## dim 1 0.32236431 70.032960 70.03296
## dim 2 0.12732444 27.660964 97.69392
## dim 3 0.01061495 2.306076 100.00000
fviz_screeplot(resultados_ac, addlabels = TRUE, ylim = c(0, 80))+ggtitle("")+
ylab("Porcentaje de varianza explicado") + xlab("Ejes")
El análisis realizado permitió comprender que el mercado inmobiliario urbano es altamente heterogéneo y se encuentra fuertemente influenciado por las características físicas, socioeconómicas y espaciales de las viviendas. La distribución de la oferta varía significativamente entre zonas, lo que evidencia la existencia de segmentos claramente diferenciados dentro del mercado.
Los resultados muestran que el precio de la vivienda es explicado principalmente por variables como el área construida, el número de baños, habitaciones y parqueaderos, así como por el estrato socioeconómico, las cuales presentan asociaciones positivas con el valor del inmueble. Estas variables estructurales resultan determinantes en la valoración inmobiliaria.
La oferta inmobiliaria se segmenta en grupos bien definidos, asociados a diferentes niveles de precio y características del inmueble, así como a zonas específicas de la ciudad. Esta segmentación refleja la concentración de estratos altos en determinadas zonas y de estratos intermedios en otras, lo cual fue evidenciado mediante el análisis de conglomerados y el análisis de correspondencia.
Finalmente, los hallazgos obtenidos apoyan la toma de decisiones estratégicas al permitir identificar zonas y segmentos con mayor potencial de inversión, orientar estrategias de comercialización diferenciadas y ajustar la fijación de precios de acuerdo con el perfil socioeconómico y las características predominantes del mercado inmobiliario urbano.