Problema

Una empresa inmobiliaria busca comprender mejor el mercado de viviendas urbanas para optimizar sus decisiones estratégicas. Para ello, se analizará una base de datos extensa con información detallada sobre propiedades residenciales.

Retos

Se requiere un análisis integral del mercado aplicando diversas técnicas:

  • Análisis de Componentes Principales (PCA): Reducir la dimensionalidad y detectar factores clave que influyen en los precios y la oferta.

  • Análisis de Conglomerados: Identificar grupos homogéneos de propiedades según ubicación y estrato socioeconómico.

  • Análisis de Correspondencia: Explorar relaciones entre variables categóricas como tipo de vivienda, zona y barrio para detectar patrones de oferta.

Este análisis permitirá segmentar mejor el mercado y mejorar la toma de decisiones en compra, venta y valoración de propiedades.


Preparación del entorno y carga de datos

El siguiente código configura el entorno de trabajo en R para realizar análisis exploratorio y modelos estadísticos sobre el mercado inmobiliario.

Configuración y descarga de paquetes

Se establece el espejo CRAN y se instalan paquetes esenciales, incluyendo devtools para instalar el paquete paqueteMODELOS desde GitHub. Se instalan y cargan librerías necesarias para el análisis de datos (tidyverse, dplyr), visualización (ggplot2, plotly, factoextra), y modelado estadístico (FactoMineR, mice para datos faltantes, cluster para análisis de conglomerados).

Carga de datos

Se importa la base de datos vivienda desde el paquete paqueteMODELOS y se explora su estructura con str(vivienda). Este proceso asegura la disponibilidad de herramientas y datos para el análisis del mercado inmobiliario.

Resumen de los datos originales

El código summary(vivienda) proporciona un resumen estadístico de la base de datos vivienda, permitiendo identificar características clave de las variables.

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

1. Análisis de Componentes Principales

a. Patrón de datos faltantes

El gráfico siguiente generado con md.pattern(vivienda) muestra la distribución de los valores faltantes en la base de datos.

  • Se observa que la variable piso tiene la mayor cantidad de valores faltantes (2,638), seguida de areaconst con 1,605 datos ausentes.
  • Otras variables, como preciom y zona, tienen datos completos, lo que indica que pueden ser utilizadas directamente en el análisis sin necesidad de imputación.
  • Es importante manejar los datos faltantes adecuadamente, ya sea eliminando registros incompletos o aplicando métodos de imputación según la naturaleza de la información.

##      preciom id zona estrato areaconst banios habitaciones tipo barrio longitud
## 4808       1  1    1       1         1      1            1    1      1        1
## 1909       1  1    1       1         1      1            1    1      1        1
## 876        1  1    1       1         1      1            1    1      1        1
## 726        1  1    1       1         1      1            1    1      1        1
## 1          1  0    0       0         0      0            0    0      0        0
## 2          0  0    0       0         0      0            0    0      0        0
##            2  3    3       3         3      3            3    3      3        3
##      latitud parqueaderos piso     
## 4808       1            1    1    0
## 1909       1            1    0    1
## 876        1            0    1    1
## 726        1            0    0    2
## 1          0            0    0   12
## 2          0            0    0   13
##            3         1605 2638 4275

b. Estandarización y manejo de valores faltantes

En este fragmento de código, se realiza la selección y estandarización de las variables cuantitativas areaconst, parqueaderos, baños y habitaciones.

Se aplica la función scale() para normalizar los datos, lo que permite compararlos en una misma escala. Se verifica la presencia de valores faltantes (NA) y valores infinitos (Inf o -Inf). Finalmente, se eliminan las observaciones con valores faltantes para asegurar que solo se trabajen datos completos en el análisis posterior.

c. Aplicación del Análisis de Componentes Principales (ACP)

En este código, se aplica el Análisis de Componentes Principales (ACP) a las variables previamente estandarizadas.

La función prcomp() se utiliza para calcular los componentes principales. La salida del summary(resultado_acp) muestra la importancia de cada componente en la varianza total de los datos. Se observa que el primer componente (PC1) explica el 66.1% de la varianza, mientras que los dos primeros componentes combinados explican el 83.7%.

## Importance of components:
##                           PC1    PC2     PC3     PC4
## Standard deviation     1.5904 0.8197 0.58295 0.53151
## Proportion of Variance 0.6615 0.1757 0.08888 0.07388
## Cumulative Proportion  0.6615 0.8372 0.92612 1.00000

d. Visualización de la Varianza Explicada

Este gráfico muestra la proporción de varianza explicada por cada componente principal en el Análisis de Componentes Principales (ACP).

  • El primer componente (PC1) explica 66.2% de la varianza total, lo que indica que concentra la mayor parte de la información de los datos.
  • Los dos primeros componentes (PC1 y PC2) juntos explican 83.8% de la variabilidad, lo que sugiere que una representación bidimensional capturaría gran parte de la estructura de los datos.
  • Los componentes restantes explican una fracción menor de la varianza.

e. Visualización de Variables en el ACP

Este gráfico muestra la representación de las variables en el plano de los componentes principales del Análisis de Componentes Principales (ACP).

  • “Parqueaderos” tiene una fuerte contribución en el primer componente principal (PC1).
  • “Areaconst”, “baños” y “habitaciones” están alineadas en otra dirección, indicando su relación con el segundo componente (PC2).
  • Los colores reflejan la contribución de cada variable a la variabilidad total.

f. Cargas de las Variables en los Componentes Principales

La tabla muestra las cargas de las variables en cada componente principal (PC1, PC2, PC3, PC4) del Análisis de Componentes Principales (ACP).

  • “Areaconst” y “baños” tienen cargas altas en PC1, lo que indica que influyen significativamente en esta dimensión.
  • “Parqueaderos” está fuertemente asociada con PC2, mientras que “habitaciones” tiene una contribución negativa en este mismo componente.
  • PC3 y PC4 capturan menor variabilidad, pero aún reflejan relaciones entre variables.
##                    PC1         PC2        PC3         PC4
## areaconst    0.5556108  0.02864857 -0.8303378  0.03185851
## parqueaderos 0.4796197  0.70438647  0.3598118  0.37992118
## banios       0.5339178 -0.11197059  0.3237416 -0.77303667
## habitaciones 0.4197538 -0.70034387  0.2761629  0.50701009

g. Conclusión

Los resultados del Análisis de Componentes Principales (PCA) revelan que la mayor parte de la variabilidad en los datos, específicamente un 66.2%, puede explicarse a través de solo dos dimensiones principales. Esta simplificación facilita la interpretación de los factores que más inciden en el mercado inmobiliario.

En cuanto a los factores determinantes, las variables que tienen mayor influencia en la segmentación del mercado son la cantidad de parqueaderos, el área construida, los baños y las habitaciones. Además, se observa una clara relación entre variables, ya que las viviendas con más parqueaderos presentan una distribución diferente en comparación con aquellas que priorizan un mayor número de habitaciones y baños.

Dado este panorama, se sugieren dos recomendaciones estratégicas. En primer lugar, es fundamental adaptar las estrategias de marketing en función de estos factores clave, diferenciando los proyectos inmobiliarios según las preferencias de los compradores. En segundo lugar, resulta clave ajustar la clasificación de las viviendas tomando en cuenta estos ejes principales, con el objetivo de mejorar la toma de decisiones en la comercialización y optimizar la segmentación del mercado.

2. Análisis de Conglomerados

a. Preparación de Datos

En este fragmento de código, se realiza la selección y limpieza de las variables numéricas de la base de datos:

  • Selección de variables numéricas: Se filtran solo las columnas que contienen datos numéricos.
  • Imputación de valores faltantes: Se reemplazan los valores NA con la mediana de cada variable para evitar sesgos en el análisis.
  • Verificación de datos: Se utiliza summary() para comprobar la ausencia de valores faltantes antes de aplicar técnicas de escalamiento y análisis de agrupamiento.

b. Estandarización de Datos

En este código, se realiza la normalización de las variables numéricas mediante el método z-score (scale()), lo cual es esencial para el Análisis de Conglomerados.

  • Transformación z-score: Convierte los datos en una escala común con media = 0 y desviación estándar = 1.
  • Exclusión de la columna “id”: Se omite esta variable, ya que no aporta información relevante para el análisis.

c. Cálculo de Distancias entre Observaciones

Este código calcula diferentes métricas de distancia para medir la similitud entre observaciones en los datos estandarizados:

  • Distancia Euclidiana: Mide la distancia directa entre dos puntos en un espacio multidimensional.
  • Distancia de Manhattan: Calcula la distancia sumando las diferencias absolutas en cada dimensión.
  • Distancia de Minkowski (p=3): Generaliza las distancias Euclidiana y Manhattan, permitiendo ajustar el parámetro p.

d. Clustering Jerárquico con Método Ward

Este código aplica el clustering jerárquico utilizando el método Ward.D2, el cual minimiza la varianza dentro de los clusters en cada fusión.

El objetivo es agrupar observaciones similares en función de la distancia Euclidiana previamente calculada. Este método es útil para identificar segmentaciones naturales en los datos y visualizar las relaciones entre grupos mediante un dendrograma.

e. Dendrograma

El gráfico muestra un dendrograma, resultado del clustering jerárquico con el método Ward.D2 y la distancia euclidiana como métrica.

Se han definido 2 grupos (resaltados en colores), lo que permite identificar patrones de similitud entre las observaciones. Este tipo de análisis es útil para segmentar datos y detectar estructuras en el conjunto de información.

f. Asignación de Clusters

En este paso, se asigna cada observación a uno de los 4 clusters obtenidos a partir del clustering jerárquico. Los grupos se almacenan como una nueva variable categórica dentro del conjunto de datos estandarizados, lo que permitirá analizar sus características y diferencias.

Este gráfico de dispersión muestra la distribución de los clusters en función del precio de la vivienda (preciom) y el estrato socioeconómico (estrato). Cada color representa un grupo distinto, permitiendo visualizar cómo las propiedades se agrupan según estas características. Se observa que los clusters presentan patrones diferenciados en la relación entre el precio y el estrato, lo que facilita la segmentación del mercado inmobiliario.

g. Coeficiente de Silhouette

Se evalúa el número óptimo de conglomerados utilizando el coeficiente de Silhouette. - Define una función silhouette_scores que calcula el promedio del coeficiente de Silhouette para diferentes valores de k (cantidad de clusters). - Luego, se prueba con valores de k entre 2 y 6, aplicando la función a cada uno de ellos mediante sapply. Esto permite identificar la mejor segmentación de los datos basada en la cohesión y separación de los clusters.

El gráfico siguiente muestra el coeficiente de Silhouette para diferentes valores de k, lo que ayuda a determinar el número óptimo de clusters. Se observa que el coeficiente disminuye a medida que aumenta k, lo que indica que la estructura de los clusters se vuelve menos definida. Generalmente, el mejor k es aquel que maximiza el coeficiente de Silhouette, equilibrando cohesión y separación entre grupos.

En este paso, se asignan los clusters óptimos utilizando k = 2. Luego, se calcula el coeficiente de Silhouette para evaluar la calidad de la agrupación. Finalmente, se imprime el coeficiente promedio, que en este caso es 0.2439, lo que indica una separación moderada entre los clusters.

## Coeficiente de Silhouette promedio k=2 :  0.2438592

h. Conclusión

El análisis de Clustering Jerárquico indica que el mercado inmobiliario se divide en dos grandes segmentos principales, lo que facilita una segmentación más precisa de la oferta. En este sentido, el coeficiente de Silhouette señala que el número óptimo de clusters es dos o tres, ya que un mayor número de divisiones disminuye la claridad en la separación entre grupos.

Además, se ha confirmado la existencia de perfiles de compradores claramente diferenciados, lo que abre la posibilidad de diseñar estrategias comerciales específicas para cada segmento. Por ello, es recomendable aplicar estrategias diferenciadas para los dos segmentos principales identificados, ajustando la oferta inmobiliaria a las necesidades de cada grupo. Asimismo, se debe priorizar la segmentación en dos clusters principales, con la opción de refinar la clasificación en caso de que se requiera una mayor precisión en la estrategia comercial.

3. Análisis de Correspondencia

a. Preparación de datos

Para realizar el análisis de correspondencia, primero se seleccionan únicamente las variables categóricas relevantes: tipo de vivienda, zona y barrio, ya que estas permiten examinar las relaciones entre las distintas categorías. Luego, se convierten en factores utilizando la función as.factor(), asegurando que el software las interprete correctamente en el análisis. Finalmente, se verifica la presencia de valores faltantes con la función md.pattern(), lo que permite identificar posibles problemas en la calidad de los datos antes de continuar con el estudio.

##      tipo zona barrio  
## 8319    1    1      1 0
## 3       0    0      0 3
##         3    3      3 9

Se centra en la limpieza de datos categóricos dentro del análisis de correspondencias. Primero, se eliminan las filas que contienen valores omitidos utilizando la función na.omit(), asegurando así que la base de datos no tenga valores faltantes. Luego, se emplea la función md.pattern() con la opción rotate.names = TRUE para visualizar si aún existen valores ausentes en el conjunto de datos. Este procedimiento es clave para garantizar que el análisis posterior no se vea afectado por datos incompletos, lo que podría distorsionar los resultados del estudio.

##  /\     /\
## {  `---'  }
## {  O   O  }
## ==>  V <==  No need for mice. This data set is completely observed.
##  \  \|/  /
##   `-----'

##      tipo zona barrio  
## 8319    1    1      1 0
##         0    0      0 0

Después, el objetivo es de normalizar los valores de la columna barrio dentro del conjunto de datos vivienda_cat. Primero, convierte todos los nombres a minúsculas para evitar duplicados causados por diferencias en mayúsculas y minúsculas. Luego, elimina los espacios en blanco sobrantes al inicio y al final de los nombres y reemplaza los espacios múltiples dentro de los valores por un único espacio. Posteriormente, se eliminan los acentos o tildes de los caracteres para estandarizar los nombres. Finalmente, los valores normalizados se convierten nuevamente en factores, asegurando que la variable mantenga su estructura categórica para su posterior análisis.

b. Análisis de Tablas Cruzadas

Se generan tablas cruzadas para analizar la relación entre distintas variables categóricas del conjunto de datos vivienda_cat. Se crean tres tablas: la primera examina la distribución del tipo de vivienda en cada zona (tabla_tipo_zona), la segunda analiza la relación entre el tipo de vivienda y los barrios (tabla_tipo_barrio), y la tercera explora la correspondencia entre barrios y zonas (tabla_zona_barrio). Estas tablas permiten identificar patrones y tendencias en la distribución geográfica de los tipos de vivienda.

c. Prueba de Chi-Cuadrado

El código realiza pruebas de independencia de Chi-cuadrado para evaluar la relación entre las variables categóricas del conjunto de datos. Se aplican pruebas a tres tablas cruzadas:

  • Tipo de vivienda vs. Zona
  • Tipo de vivienda vs. Barrio
  • Zona vs. Barrio

Los valores de p-value extremadamente bajos indican que hay una asociación estadísticamente significativa entre las variables analizadas. Sin embargo, las advertencias sugieren que la aproximación del Chi-cuadrado podría no ser precisa debido a frecuencias esperadas muy bajas en algunas celdas.

## 
##  Pearson's Chi-squared test
## 
## data:  tabla_tipo_zona
## X-squared = 690.93, df = 4, p-value < 0.00000000000000022
## 
##  Pearson's Chi-squared test
## 
## data:  tabla_tipo_barrio
## X-squared = 2434.1, df = 388, p-value < 0.00000000000000022
## 
##  Pearson's Chi-squared test
## 
## data:  tabla_zona_barrio
## X-squared = 29263, df = 1552, p-value < 0.00000000000000022

d. Análisis de Varianza Explicada

El análisis de correspondencias revela cómo las dimensiones principales explican la variabilidad de los datos. En el caso de Zona vs Barrio, observamos que la primera dimensión explica el 27.3% de la varianza, la segunda el 26.4%, la tercera el 25.4% y la cuarta el 20.8%, sumando el 100% de la varianza total. Esto indica que la estructura de los datos está bien distribuida entre estas cuatro dimensiones, sin una dominancia absoluta de una sola. La gráfica de varianza explicada ilustra claramente esta distribución, mostrando la contribución de cada componente en la representación de los datos.

##       eigenvalue percentage of variance cumulative percentage of variance
## dim 1  0.9617855               27.34191                          27.34191
## dim 2  0.9291207               26.41330                          53.75521
## dim 3  0.8945369               25.43015                          79.18536
## dim 4  0.7321809               20.81464                         100.00000

Después, el análisis de valores propios muestra que tanto la relación entre tipo de vivienda y barrio como la relación entre tipo de vivienda y zona están completamente explicadas por una única dimensión, ya que el porcentaje acumulado de varianza es del 100%. Esto sugiere que la relación entre estas variables es muy estructurada y no requiere más dimensiones para su interpretación. En otras palabras, el tipo de vivienda está fuertemente determinado por el barrio y la zona en la que se encuentra, sin una variabilidad significativa que necesite más factores explicativos.

##       eigenvalue percentage of variance cumulative percentage of variance
## dim 1  0.2925982                    100                               100
##       eigenvalue percentage of variance cumulative percentage of variance
## dim 1 0.08305442                    100                               100

e. Mapa de Correspondencia entre Zonas y Barrios

El gráfico de análisis de correspondencias muestra la relación entre las diferentes zonas (en rojo) y los barrios (en azul). Se observa que ciertos barrios están fuertemente asociados con zonas específicas, indicando patrones espaciales en la distribución del mercado inmobiliario. Las dimensiones explican el 27.34% y el 26.41% de la varianza, lo que sugiere que la estructura de los datos está bien representada en este mapa. Los barrios agrupados cerca de una zona indican similitudes en términos de características socioeconómicas o urbanísticas.

f. Conclusión

El Análisis de Correspondencias (CA) ha revelado que las zonas de la ciudad presentan una fuerte asociación con barrios específicos, lo que refleja patrones de localización bien definidos. En particular, se han identificado diferencias estructurales significativas entre zonas como Oriente y Oeste, las cuales se ubican en extremos opuestos dentro del análisis, evidenciando contrastes en su composición inmobiliaria y demanda. Además, la distribución de los barrios muestra una organización clara, lo que indica que la demanda de viviendas sigue patrones geográficos predecibles y estructurados.

Ante estos hallazgos, es recomendable diseñar estrategias de venta y marketing adaptadas a cada zona y a los barrios con mayor influencia en la dinámica del mercado. Asimismo, es fundamental identificar oportunidades en barrios con una oferta aún limitada, pero que comparten características con aquellos de alta demanda, con el fin de fomentar la expansión de nuevos proyectos inmobiliarios y maximizar el aprovechamiento del mercado.

4. Conclusión general

La conclusión del análisis ha permitido identificar los principales factores que explican la dinámica del mercado inmobiliario, resaltando la importancia de variables como el número de parqueaderos, habitaciones, baños y el área construida en la toma de decisiones de los compradores. Asimismo, se ha confirmado que la relación entre zonas y barrios desempeña un papel fundamental en la planificación de estrategias de comercialización y expansión.

Por otro lado, gracias a la aplicación del clustering jerárquico y la evaluación del coeficiente de Silhouette, se ha determinado que la segmentación del mercado es más efectiva cuando se divide en dos grupos principales. Esta clasificación facilita la implementación de estrategias diferenciadas que permiten optimizar las inversiones y maximizar la rentabilidad.

5. Recomendaciones

En términos estratégicos, es fundamental optimizar la inversión en barrios con alta demanda y características específicas de vivienda, lo que permitirá captar un mayor número de compradores potenciales. Además, la segmentación del mercado basada en los clusters identificados posibilita la personalización de estrategias comerciales, asegurando que la oferta se adapte a las necesidades de cada segmento. Asimismo, resulta clave impulsar la expansión en barrios emergentes que presenten similitudes con zonas de alta demanda, ya que esto abre nuevas oportunidades de crecimiento y consolidación en el mercado. Finalmente, la diferenciación de la oferta inmobiliaria debe considerar las variables clave identificadas en el análisis PCA, con el objetivo de ofrecer productos alineados con las expectativas y preferencias de los compradores.

Dado que el sector inmobiliario es altamente competitivo y está en constante evolución, el uso de análisis de datos avanzados se vuelve una herramienta esencial para la toma de decisiones estratégicas. La capacidad de fundamentar estas decisiones en información precisa no solo optimiza la rentabilidad, sino que también fortalece la posición de la empresa en el mercado, permitiéndole anticiparse a las tendencias y responder de manera eficaz a las demandas del sector.