Evaluación de la oferta inmobiliaria urbana

1. Problema

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.

Base de datos y variables

# Especificar un mirror de CRAN
options(repos = c(CRAN = "https://cloud.r-project.org"))

# Instalar librerías si no están instaladas
if (!require(ggplot2)) install.packages("ggplot2")
if (!require(dplyr)) install.packages("dplyr")
if (!require(factoextra)) install.packages("factoextra")
if (!require(FactoMineR)) install.packages("FactoMineR")
if (!require(ggcorrplot)) install.packages("ggcorrplot")
if (!require(ca)) install.packages("ca")


# Cargar librerías
library(ggplot2)
library(dplyr)
library(factoextra)
library(FactoMineR)
library(ggcorrplot)
library(paqueteMODELOS)
library(cluster)
library(ca)

# Cargar datos
data(vivienda)
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>

Retos:

El reto principal consisten en realizar un análisis integral y multidimensional de la base de datos para obtener una comprensión del mercado inmobiliario urbano. Se requiere aplicar diversas técnicas de análisis de datos, incluyendo:

1. Análisis de resultados

1.1 Análisis de Componentes Principales:

Reducir la dimensionalidad del conjunto de datos y visualizar la estructura de las variables en componentes principales para identificar características clave que influyen en la variación de precios y oferta del mercado.

# Seleccionar variables numéricas
vivienda_num <- vivienda %>% select(preciom, areaconst, parqueaderos, banios, habitaciones)

# Estandarizar datos
vivienda_scaled <- scale(vivienda_num)

# Realizar PCA
pca_result <- PCA(vivienda_scaled, graph = FALSE)
## Warning in PCA(vivienda_scaled, graph = FALSE): Missing values are imputed by
## the mean of the variable: you should use the imputePCA function of the missMDA
## package
# Visualizar la varianza explicada por los componentes principales
fviz_screeplot(pca_result, addlabels = TRUE, ylim = c(0, 50))

# Visualizar variables en el plano de los dos primeros componentes principales
fviz_pca_var(pca_result, col.var = "contrib", gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"), repel = TRUE)

Interpretación del Scree Plot * Eje X (Dimensiones): Representa los componentes principales. * Eje Y (Porcentaje de varianza explicada): Muestra el porcentaje de varianza que cada componente explica en los datos originales.

Observaciones del Scree Plot: * PC1 (Primer componente principal): Explica aproximadamente el 62.9% de la varianza total en los datos. * PC2 (Segundo componente principal): Explica alrededor del 17.7% de la varianza total. * PC3 (Tercer componente principal): Explica el 8.6% de la varianza total. Los componentes posteriores explican progresivamente menos varianza, con PC4 y PC5 explicando 6.9% y 3.9%, respectivamente.

Interpretación: * PC1 y PC2: Juntos, estos dos componentes explican aproximadamente el 80.6% de la varianza en los datos (62.9% + 17.7%). Esto sugiere que la mayor parte de la información en los datos originales puede ser capturada por solo dos componentes principales. * PC3 y posteriores: Los componentes adicionales explican mucho menos varianza individualmente, indicando que su contribución adicional a la interpretación de los datos es limitada.

Interpretación del Biplot de Variables (PCA) El biplot muestra cómo las variables originales se proyectan en el espacio de los primeros dos componentes principales (PC1 y PC2). A continuación se presenta la interpretación del gráfico:

Ejes del biplot:

  • Dim1 (PC1): Explica el 62.9% de la varianza.
  • Dim2 (PC2): Explica el 17.7% de la varianza.

Vectores de las variables:

  • habitaciones: Alta contribución al PC2.
  • preciom y areaconst: Alta contribución al PC1.
  • banios y parqueaderos: Contribuyen tanto a PC1 como a PC2, aunque en menor medida.

Interpretación de las relaciones entre variables:

  • preciom y areaconst: Ambos vectores están alineados en una dirección similar en PC1, lo que indica que el precio y el área construida están altamente correlacionados. Esto sugiere que a medida que aumenta el área construida de una propiedad, su precio también tiende a aumentar.
  • habitaciones: Este vector tiene una alta contribución en PC2, lo que sugiere que el número de habitaciones tiene una influencia distinta en la variación de los datos, no tan relacionada con el precio o el área construida.
  • banios y parqueaderos: Están en direcciones que indican que tienen una influencia moderada en ambos componentes principales, pero no tan significativa como precio y área construida.

Relaciones y conclusiones adicionales:

  • Las variables que están agrupadas o tienen vectores cercanos están positivamente correlacionadas. Por ejemplo, el precio y el área construida están positivamente correlacionados.
  • Las variables que están en ángulos rectos (90 grados) están no correlacionadas. Por ejemplo, si el vector de habitaciones estuviera en ángulo recto con preciom, indicaría que el número de habitaciones no tiene una relación directa con el precio.
  • Las variables en direcciones opuestas estarían negativamente correlacionadas, lo que no parece ser el caso aquí.

1.2 Análisis de Conglomerados:

Agrupar las propiedades residenciales en segmentos homogéneos con características similares para entender las dinámicas de las ofertas específicas en diferentes partes de la ciudad y en diferentes estratos socioeconómicos.

# Seleccionar variables numéricas
vivienda_num <- vivienda %>% select(preciom, areaconst, parqueaderos, banios, habitaciones)

# Estandarizar datos
vivienda_scaled <- scale(vivienda_num)

# Verificar y eliminar filas con NA/NaN/Inf en los datos escalados
vivienda_scaled <- vivienda_scaled[complete.cases(vivienda_scaled), ]

# Determinar el número óptimo de clusters con el método del codo
fviz_nbclust(vivienda_scaled, kmeans, method = "wss")

# Aplicar K-means con el número óptimo de clusters
set.seed(123)
kmeans_result <- kmeans(vivienda_scaled, centers = 3, nstart = 25)

# Añadir los clusters a los datos originales
# Asegurarse de que las filas eliminadas en vivienda_scaled también se eliminen en vivienda original
vivienda <- vivienda[complete.cases(vivienda_num), ]
vivienda$cluster <- as.factor(kmeans_result$cluster)

# Visualizar los clusters
fviz_cluster(kmeans_result, data = vivienda_scaled, ellipse.type = "convex", geom = "point", stand = FALSE)

Interpretación del Método del Codo (Scree Plot para K-means)

El scree plot muestra la suma total de los cuadrados dentro del grupo (total within-cluster sum of squares) en función del número de clusters (k).

Puntos clave del scree plot:

  • Eje X (Número de clusters k): Muestra el número de clusters que se están evaluando.
  • Eje Y (Suma total de cuadrados dentro del grupo): Indica la variación dentro de cada cluster. Un valor más bajo es mejor, ya que indica que los datos dentro de cada cluster están más cerca entre sí.

Observaciones del scree plot:

  • El gráfico muestra una disminución pronunciada en la suma total de cuadrados dentro del grupo hasta k = 3, después de lo cual la disminución se vuelve menos pronunciada.
  • El “codo” en el gráfico se encuentra alrededor de k = 3. Este punto indica el número óptimo de clusters, ya que añadir más clusters no mejora significativamente la variación explicada.

Interpretación del Cluster Plot

La segunda gráfica muestra los resultados del análisis de conglomerados utilizando K-means con 3 clusters.

Puntos clave del cluster plot:

Ejes del gráfico:

  • Dim1 (PC1): Explica el 65.7% de la varianza.
  • Dim2 (PC2): Explica el 16.3% de la varianza.

Colores y formas:

  • Cada punto representa una observación (propiedad).
  • Los puntos están coloreados y diferenciados por la forma según el cluster asignado.
  • Las elipses convexas indican la extensión de cada cluster en el espacio de las dos primeras dimensiones.

Observaciones del cluster plot:

  • Cluster 1 (Rojo): Está ubicado en la parte izquierda del gráfico y contiene propiedades que probablemente compartan características comunes diferenciadas de los otros dos clusters.
  • Cluster 2 (Verde): Está en la parte derecha del gráfico, cubriendo un área grande, lo que indica una mayor variabilidad dentro de este cluster.
  • Cluster 3 (Azul): Está en el centro del gráfico y parece tener una extensión más moderada.

Implicaciones para la empresa inmobiliaria

  • Cluster 1 (Rojo): Este grupo podría representar propiedades de un rango de precios o características específicas, que podrían ser un segmento objetivo para estrategias de marketing específicas.
  • Cluster 2 (Verde): Dado su mayor grado de variabilidad, este cluster podría representar un segmento más diverso de propiedades, donde las estrategias deben ser más adaptativas y variadas.
  • Cluster 3 (Azul): Un segmento intermedio que podría ser tratado con estrategias balanceadas, adaptándose tanto a estrategias de volumen como de valor.
  • Estos resultados del análisis de clusters ayudan a la empresa inmobiliaria a segmentar el mercado de manera más efectiva, permitiendo enfoques personalizados para diferentes grupos de propiedades y, en última instancia, tomar decisiones estratégicas más informadas.

1.3 Análisis de Correspondencia :

Examinar la relación entre las variables categóricas (tipo de vivienda, zona y barrio), para identificar patrones de comportamiento de la oferta en mercado inmobiliario.

Análisis de Correspondencia: Zona y Estrato

# Función para verificar y limpiar tablas de contingencia
limpiar_tabla_contingencia <- function(tabla) {
  tabla <- tabla[rowSums(tabla) > 0, colSums(tabla) > 0]
  return(tabla)
}

# Crear tabla de contingencia para 'zona' y 'estrato'
tabla_contingencia_zona_estrato <- table(vivienda$zona, vivienda$estrato)

# Verificar y limpiar la tabla de contingencia
tabla_contingencia_zona_estrato <- limpiar_tabla_contingencia(tabla_contingencia_zona_estrato)

# Verificar si la tabla de contingencia es válida para análisis
if (nrow(tabla_contingencia_zona_estrato) > 1 && ncol(tabla_contingencia_zona_estrato) > 1) {
  # Realizar análisis de correspondencia
  ca_result_zona_estrato <- ca(tabla_contingencia_zona_estrato)

  # Visualizar resultados del análisis de correspondencia
  fviz_ca_biplot(ca_result_zona_estrato, repel = TRUE)
} else {
  print("Tabla de contingencia para 'zona' y 'estrato' no es válida para análisis de correspondencia.")
}

Interpretación del Biplot de Análisis de Correspondencia

Ejes del gráfico:

  • Dim1 (66.4%): Representa el primer componente, que explica el 66.4% de la varianza total.
  • Dim2 (30.2%): Representa el segundo componente, que explica el 30.2% de la varianza total.
  • Juntos, estos dos componentes explican el 96.6% de la varianza total, lo que indica que la mayor parte de la información está contenida en estos dos componentes.

Puntos en el gráfico:

  • Puntos azules: Representan las categorías de la variable zona (Zona Oriente, Zona Centro, Zona Norte, Zona Sur, Zona Oeste).
  • Puntos rojos: Representan las categorías de la variable estrato (3, 4, 5, 6). el estrato representa diferentes tipos de viviendas categorizadas numéricamente de acuerdo con el estrato socio económico.

2. Conclusiones

Análisis de Componentes Principales (PCA)

Varianza Explicada:

  • PC1 (Primer componente principal): Explica el 62.9% de la varianza total en los datos.
  • PC2 (Segundo componente principal): Explica el 17.7% de la varianza total.
  • Juntos, estos dos componentes explican aproximadamente el 80.6% de la varianza en los datos.

Relaciones entre Variables:

  • Precio y Área Construida: Altamente correlacionados y principales contribuyentes a la variabilidad en los datos, indicando que el tamaño y el precio de la propiedad son factores clave en la diferenciación de las viviendas.
  • Número de Habitaciones: Influencia significativa en la variabilidad, no tan relacionada con el precio o el área construida.
  • Cantidad de Baños y Parqueaderos: Moderada influencia en ambos componentes principales.

Análisis de Conglomerados (Clustering)

Número Óptimo de Clusters:

  • El método del codo indica que el número óptimo de clusters es 3.

Segmentación del Mercado:

  • Cluster 1 (Rojo): Propiedades con características distintivas, posiblemente más homogéneas.
  • Cluster 2 (Verde): Propiedades con mayor variabilidad interna, representando un segmento más diverso.
  • Cluster 3 (Azul): Propiedades con características intermedias, representando un equilibrio entre los otros dos clusters.

Análisis de Correspondencia: Zona y Tipo

Relación entre Categorías:

  • Zona Oriente y Zona Centro: Perfiles similares en cuanto a tipos de vivienda, sugiriendo una mayor diversidad.
  • Zona Norte: Perfil de vivienda diferente, indicando tipos de vivienda específicos y menos diversidad.
  • Zona Oeste y Zona Sur: Perfiles de vivienda específicos, con asociaciones claras a ciertos tipos de vivienda.

Asociaciones Específicas:

Zona Sur: Asociada con los estratos 4 y 5. Zona Oriente y Zona Centro: Mayor diversidad de estratos. Zona Oeste: Asociada con el estrato 6. Zona Norte: Asociada con el estrato 3.

3. Recomendaciones

Desarrollo y Promoción de Proyectos:

  • Zonas con Perfiles Específicos: Desarrollar y promover proyectos inmobiliarios en zonas con estratos específicos, ajustando la oferta a la demanda local. Por ejemplo, enfocar proyectos para estrato 4 y 5 en la Zona Sur y de estrato 6 en la Zona Oeste.
  • Zonas con Mayor Diversidad: Considerar proyectos más diversos en zonas como Oriente y Centro, donde la diversidad de estratos puede atraer a diferentes segmentos del mercado.

Estrategias de Marketing:

  • Segmentación del Mercado: Implementar estrategias de marketing personalizadas según las características predominantes de cada zona. Enfocar estrategias amplias y diversas en zonas como Oriente y Centro, y estrategias focalizadas en zonas como Norte, Oeste y Sur.
  • Promoción Focalizada: Promover los tipos de vivienda predominantes en cada zona para maximizar el impacto en el mercado.

Decisiones de Inversión:

  • Oportunidades de Inversión: Inversores y desarrolladores pueden identificar oportunidades de inversión en zonas con estratos específicos que se alineen con sus objetivos de negocio. Considerar la variabilidad y las características específicas de cada cluster y zona para optimizar las inversiones.

Diversificación de la Oferta:

  • Adaptación a la Demanda Local: Adaptar la oferta inmobiliaria según las características y demandas locales identificadas en el análisis de correspondencia y clustering.

  • Equilibrio entre Diversidad y Especificidad: Mantener un equilibrio entre proyectos diversos y específicos, según las zonas y clusters identificados.

4. Anexos

Guia “Evaluación de la oferta inmobiliaria urbana” de la asignatura “Modelos Estadísticos para la toma de decisiones” de la Maestría en ciencia de datos de la Universidad Javeriana Sede Cali