1. Introducción

En el dinámico escenario empresarial de hoy, la toma de decisiones fundamentadas es esencial para el éxito y la competitividad. Este informe se sumerge en el dinámico mercado inmobiliario de Cali, Colombia, utilizando un análisis estadístico descriptivo como herramienta principal. Su propósito radica en examinar las tendencias y patrones que caracterizan el sector de bienes raíces en esta próspera ciudad, con la finalidad de proporcionar a la empresa B&C (Bines y Casas) una visión integral y fundamentada que oriente su estrategia empresarial hacia un futuro prometedor.

El nacimiento y consolidación de B&C como una agencia de bienes raíces en Cali son testimonio del incansable espíritu emprendedor de Sandra Milena, quien, hace una década, sentó las bases de esta empresa. En la actualidad, con un equipo compuesto por ocho agentes inmobiliarios, B&C ha forjado un nombre sólido en el mercado local. El crecimiento constante de la población, la inversión extranjera directa y la efervescencia en el desarrollo de nuevos proyectos inmobiliarios han propiciado un ascenso vertiginoso en el mercado inmobiliario caleño. En el año 2021, las ventas del sector alcanzaron la cifra de $6700 millones, mientras que en 2022 ascendieron a $6100 millones, proyectando una trayectoria de expansión continua que augura un futuro prometedor para la economía regional.

Este informe no solo ofrecerá una panorámica clara de la evolución del mercado, sino que también identificará áreas de oportunidad a medida que se revelen patrones en la distribución de precios en diferentes zonas de la ciudad. Además, al discernir los tipos de viviendas más demandados y las características preferidas por los compradores, el informe arrojará luz sobre posibles nichos de mercado que B&C podría explotar para fortalecer su posición competitiva. La información derivada del análisis también influirá en la formulación de estrategias de marketing altamente enfocadas y en la fijación de precios optimizados para los diversos segmentos del mercado. Al aprovechar estas perspicacias, B&C estará equipada para ofrecer servicios personalizados a sus clientes y promoverá la toma de decisiones informadas tanto para los compradores como para los vendedores de propiedades.

En resumen, este análisis ofrece a B&C una base sólida para adaptarse a un mercado en constante cambio y tomar decisiones estratégicas que amplíen su influencia en el competitivo panorama inmobiliario de Cali. Con una mirada aguda sobre las tendencias y patrones, la empresa podrá no solo enfrentar los desafíos, sino también capitalizar las oportunidades emergentes en este emocionante sector

2. Objetivos

2.1 Objetivo General

Realizar un análisis estadístico descriptivo del mercado inmobiliario en Cali, Colombia, con el propósito de proporcionar a la empresa B&C (Bines y Casas) una visión completa y fundamentada que oriente sus decisiones estratégicas y fortalezca su posición competitiva en el sector.

2.2 Objetivos específicos

  • Garantizar la integridad y calidad de la información recopilada, llevando a cabo un proceso riguroso de validación de datos, limpieza y estandarización. Esto asegurará que el análisis posterior se base en datos confiables y coherentes, permitiendo resultados más precisos y concluyentes.

  • Analizar los tipos de viviendas más demandados por los compradores en Cali así como las características preferidas por los clientes, con el fin de identificar nichos de mercado y áreas de oportunidad para ofrecer servicios personalizados y adaptar estrategias de marketing.

3. Métodos

Esta sección se centra en las metodologías empleadas para la realización de un análisis del mercado inmobiliario en Cali. Se describirá el proceso de recolección de datos, seguido de las estrategias implementadas para la limpieza y estandarización de los mismos. Estos pasos críticos en la investigación garantizarán la integridad y fiabilidad de los resultados obtenidos

3.1. Recolección de datos

La empresa B&C (Bienes y Casas) proporcionan la base de datos sobre viviendas para el estudio estadístico descriptivo de los mismos, comenzaremos descargando la base de datos

#install.packages("devtools") 
#install.packages("dplyr") 
devtools::install_github("dgonxalex80/paqueteMET")

library(paqueteMET)
library(dplyr)
data(vivienda_faltantes)
head(vivienda_faltantes)
id zona piso estrato preciom areaconst parquea banios habitac tipo barrio longitud latitud
8312 Zona Oeste 4 6 1300 318 2 4 2 Apartamento arboleda -76576 3454
8311 Zona Oeste 1 6 480 300 1 4 4 Casa normandía -76571 3454
8307 Zona Oeste NA 5 1200 800 4 7 5 Casa miraflores -76568 3455
8296 Zona Sur 2 3 220 150 1 2 4 Casa el guabal -76565 3417
8297 Zona Oeste NA 5 330 112 2 4 3 Casa bella suiza alta -76565 3408
8298 Zona Sur NA 5 1350 390 8 10 10 Casa bella suiza alta -76565 3409

Ahora vamos a describir cada una de las columnas de la tabla.

  • Id: N° único para identificar la vivienda
  • Zona: Zona vivienda: Centro, Norte, Oeste, Oriente, Sur
  • Piso: # Piso en que se encuentra la vivienda
  • Estrato: Estrato socioeconómico: 3,4,5,6
  • Preciom: Precio del inmueble en millones
  • Areaconst: Área Construida en metros
  • Parquea: # parqueaderos
  • Banios: # baños
  • Habitac: # habitaciones
  • Tipo: Tipo de vivienda: Apartamento, apto, Casa
  • Barrio: Barrrio en que se encuentra la vivienda
  • Longitud: distancia en grados, minutos y segundos que hay con respecto al meridiano Greenwich
  • Latitud: Distancia en grados, minutos y segundos que hay con respecto al ecuador

3.2. Limpieza de datos

Si filtramos los datos que no se encuentran para la columna ID, se observa que esta ausencia de datos también se refleja en las otras columnas del conjunto, como lo muestra la siguiente tabla:

Filas_NA <- subset(vivienda_faltantes, is.na(id))
head(Filas_NA)
id zona piso estrato preciom areaconst parquea banios habitac tipo barrio longitud latitud
NA NA NA NA NA NA NA NA NA NA NA NA NA
NA NA NA NA NA NA NA NA NA NA NA NA NA
NA NA NA NA 330 NA NA NA NA NA NA NA NA

Por lo anterior se decide eliminar esas filas y crear una nueva base de datos llamada “vivienda_faltantesOK”

vivienda_faltantesOK <- vivienda_faltantes[complete.cases(vivienda_faltantes$id),] #Seguimos trabajando con vivienda_faltantesOK no tiene NA en la columna ID 

El resumen de la base de datos:

#install.packages("skimr")
skimr::skim(vivienda_faltantesOK)
Data summary
Name vivienda_faltantesOK
Number of rows 8327
Number of columns 13
_______________________
Column type frequency:
character 3
numeric 10
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
zona 0 1 8 12 0 5 0
tipo 0 1 4 11 0 6 0
barrio 0 1 4 29 0 436 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
id 0 1.00 4163.99 2403.93 1.00 2082.50 4164.00 6245.50 8319.00 ▇▇▇▇▇
piso 2638 0.68 3.77 2.62 1.00 2.00 3.00 5.00 12.00 ▇▃▁▁▁
estrato 0 1.00 4.63 1.03 3.00 4.00 5.00 5.00 6.00 ▅▆▁▇▆
preciom 0 1.00 434.25 329.03 58.00 220.00 330.00 540.00 1999.00 ▇▂▁▁▁
areaconst 0 1.00 174.99 142.95 30.00 80.00 123.00 229.00 1745.00 ▇▁▁▁▁
parquea 1603 0.81 1.84 1.13 1.00 1.00 2.00 2.00 10.00 ▇▁▁▁▁
banios 0 1.00 3.11 1.43 0.00 2.00 3.00 4.00 10.00 ▇▇▃▁▁
habitac 0 1.00 3.61 1.46 0.00 3.00 3.00 4.00 10.00 ▂▇▂▁▁
longitud 0 1.00 -21845.13 34503.90 -76576.00 -76506.00 -76.54 -76.52 -76.46 ▃▁▁▁▇
latitud 0 1.00 970.37 1539.16 3.33 3.39 3.45 3367.00 3497.00 ▇▁▁▁▃

Se observa que para la variables piso y parquea se encuentran datos perdidos (NA),

#install.packages("heatmaply")
apply(X= is.na(vivienda_faltantesOK), MARGIN = 2, FUN = sum)
##        id      zona      piso   estrato   preciom areaconst   parquea    banios 
##         0         0      2638         0         0         0      1603         0 
##   habitac      tipo    barrio  longitud   latitud 
##         0         0         0         0         0
apply(X= is.na(vivienda_faltantesOK), MARGIN = 2, FUN = mean)
##        id      zona      piso   estrato   preciom areaconst   parquea    banios 
## 0.0000000 0.0000000 0.3168008 0.0000000 0.0000000 0.0000000 0.1925063 0.0000000 
##   habitac      tipo    barrio  longitud   latitud 
## 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000

A partir de lo anteriormente expuesto, se evidencia que un 31.6% de los datos correspondientes a la variable “piso” se encuentran en estado de falta (NA), mientras que un 19.2% de los datos asociados a la variable “parquea” presentan la misma condición de ausencia.

Se sugiere que el responsable de la recolección de datos valide y describa la naturaleza de los valores faltantes (NA), así como proponga posibles métodos de imputación. En investigaciones futuras, se considera la opción de completar estas variables mediante imputaciones utilizando técnicas como imputación por la mediana, la media o la moda, en función de la distribución y características de los datos ausentes.

3.3. Estandarización de datos

Al examinar las variables “Zona” y “Tipo”,

table(vivienda_faltantesOK$zona)
Zona Centro Zona Norte Zona Oeste Zona Oriente Zona Sur
124 1922 1204 351 4726
table(vivienda_faltantesOK$tipo)
Apartamento APARTAMENTO apto casa Casa CASA
5032 61 13 14 3195 12

Resulta evidente la necesidad de estandarizar los datos en la variable “Tipo”. Con este propósito, se aplicará una transformación que limitará los valores de dicha variable a únicamente “Apartamento” y “Casa”.

vivienda_faltantesOK$tipo <- ifelse(vivienda_faltantesOK$tipo%in% c("apto","APARTAMENTO"), "Apartamento", vivienda_faltantesOK$tipo)#Estandarizando tipo Apartamento

vivienda_faltantesOK$tipo <- ifelse(vivienda_faltantesOK$tipo%in% c("casa","CASA"), "Casa", vivienda_faltantesOK$tipo)#Estandarizando tipo Casa

Tras la implementación de la mencionada transformación, el resultado sería el siguiente: Con una participación de 61.32% para Apartamentos y un 38.68% para casas

table(vivienda_faltantesOK$tipo)
Apartamento Casa
5106 3221
barplot(table(vivienda_faltantesOK$tipo),
        main = "Transformación variable Tipo",
        xlab = "Tipo",
        ylab = "Cantidad de viviendas",
        col = "mediumseagreen"
                  )

4. Resultados

4.1 Distribución Estrato por Zona

T.Zona<- table(vivienda_faltantesOK$zona)
Porcentajes <- round(x=prop.table(T.Zona)*100,digits = 2)

Tabla_Resultado <- data.frame(Valor = names(T.Zona),
                              Valores = as.vector(T.Zona),
                              Porcentaje = Porcentajes)
print(Tabla_Resultado)
##          Valor Valores Porcentaje.Var1 Porcentaje.Freq
## 1  Zona Centro     124     Zona Centro            1.49
## 2   Zona Norte    1922      Zona Norte           23.08
## 3   Zona Oeste    1204      Zona Oeste           14.46
## 4 Zona Oriente     351    Zona Oriente            4.22
## 5     Zona Sur    4726        Zona Sur           56.76

Como se observa en la tabla previa, de un total de 8,327 viviendas en la base de datos, 4,726 (56.76%) están ubicadas en la zona sur, mientras que 1,922 (23.08%) se encuentran en la zona norte. El restante 20% está distribuido entre las áreas oeste, oriente y centro, siendo la zona centro la de menor representación con apenas un 1.49%.

Estrato_Zona <- table(vivienda_faltantesOK$estrato, vivienda_faltantesOK$zona)

barplot(Estrato_Zona,
        main= "Estrato por Zona",
        ylab = "Cantidad de viviendas",
        ylim = c(0, 5000),
        legend = rownames(Estrato_Zona),
        args.legend = list(x= "top", horiz = TRUE),
        col = c("#FFFFE0", "#E6E6FA", "#87CEEB","#98FB98")
                )

# Tabla Viviendas por estrato y Zona 
table(vivienda_faltantesOK$estrato, vivienda_faltantesOK$zona)
/ Zona Centro Zona Norte Zona Oeste Zona Oriente Zona Sur
3 105 572 54 340 382
4 14 408 85 8 1616
5 4 770 290 2 1685
6 1 172 775 1 1043
#Tabla % Vivienda por estrato y Zona
round(x= table(vivienda_faltantesOK$estrato, vivienda_faltantesOK$zona)%>%
 prop.table(.,2)*100, digits = 2)
/ Zona Centro Zona Norte Zona Oeste Zona Oriente Zona Sur
3 84.68 29.76 4.49 96.87 8.08
4 11.29 21.23 7.06 2.28 34.19
5 3.23 40.06 24.09 0.57 35.65
6 0.81 8.95 64.37 0.28 22.07

Las tablas anteriores reflejan que la zona sur está configurada por un 57% de viviendas en los estratos 5 y 6, y un 92% en los estratos 4, 5 y 6 en conjunto. De esto se deduce que el segmento de mercado más preponderante en la zona sur es el de los estratos 4, 5 y 6. Además, se destaca que un 80% de las viviendas se sitúan en los estratos 4, 5 y 6, categorizados como estratos socioeconómicos correspondientes a la clase media/alta.

Estos resultados resaltan no solo la composición estratificada de la zona sur, sino también la importancia de dirigir esfuerzos y estrategias hacia el segmento de estratos 4, 5 y 6, que no solo predomina numéricamente, sino que también se alinea con el perfil socioeconómico de la clase media/alta, abriendo oportunidades para abordar necesidades específicas y brindar soluciones a la medida de este grupo demográfico.

4.2 Distribución Zona por Tipo de vivienda

Zona_Tipo <- table(vivienda_faltantesOK$tipo, vivienda_faltantesOK$zona)

barplot(Zona_Tipo,
        main= "Zona por Tipo de vivienda",
        ylab = "Cantidad de viviendas",
        ylim = c(0, 5000),
        legend = rownames(Zona_Tipo),
        args.legend = list(x= "top", horiz = TRUE),
        col = c("#87CEEB","#98FB98"), )

# Tabla Viviendas por zona y tipo 
table(vivienda_faltantesOK$zona, vivienda_faltantesOK$tipo)
/ Apartamento Casa
Zona Centro 24 100
Zona Norte 1199 723
Zona Oeste 1035 169
Zona Oriente 62 289
Zona Sur 2786 1940
#Tabla % Vivienda por zona y tipo
round(x= table(vivienda_faltantesOK$zona, vivienda_faltantesOK$tipo)%>%
 prop.table(.,1)*100, digits = 2)
/ Apartamento Casa
Zona Centro 19.35 80.65
Zona Norte 62.38 37.62
Zona Oeste 85.96 14.04
Zona Oriente 17.66 82.34
Zona Sur 58.95 41.05

Al examinar la zona de mayor concentración de viviendas, es decir, la zona sur, se evidencia que no prevalece una predominancia clara entre apartamentos y casas. Sin embargo, en las zonas Oeste y Norte, se observa una diferencia significativa en cuanto a la proporción de apartamentos, con un 62% en la zona norte y un 85% en la zona oeste.

4.3 Distribución número de habitaciones por zona

#Creando diagrama de cajas Habitaciones x Zona
boxplot(vivienda_faltantesOK$habitac~vivienda_faltantesOK$zona,
        col= c("#FFFFE0", "#E6E6FA", "#87CEEB","#98FB98", "#FFB6C1"),
        main= "Habitaciones por zona",
        ylab= "Cantidad de Habitaciones",
        xlab = "",)

La mediana de habitaciones por vivienda en cada zona varía entre 3 y 4 habitaciones. En la zona sur, el 50% de las viviendas presenta un rango de 3 a 4 habitaciones. En contraste, en la zona oriente, la dispersión es mayor, con un rango de 3 a 7 habitaciones, posiblemente debido a la baja representación de viviendas en esta área, que apenas alcanza un 4.22% del total.

4.4 Distribución número de baños por zona

#Creando diagrama de cajas Baños x Zona
boxplot(vivienda_faltantesOK$banios~vivienda_faltantesOK$zona,
        col= c("#FFFFE0", "#E6E6FA", "#87CEEB","#98FB98", "#FFB6C1"),
        main= "Baños por zona",
        ylab= "Cantidad de Baños",
        xlab = "",)

La mediana de los baños por vivienda en cada zona se encuentra ente 2 y 4 baños, para la zona sur el 50% de las viviendas tienen entre 2 y 4 baños, se recomienda validar las viviendas que tienen cero baños ya que no es coherente teniendo en cuenta que los tipos de vivienda son apartamentos y casas.

4.5 Distribución número de parquederos por zona

#Creando diagrama de cajas  Parqueaderos x Zona
boxplot(vivienda_faltantesOK$parquea~vivienda_faltantesOK$zona,
        col= c("#FFFFE0", "#E6E6FA", "#87CEEB","#98FB98", "#FFB6C1"),
        main= "Parqueaderos por zona",
        ylab= "Cantidad de Parqueaderos",
        ylim= c(0,10),
        xlab = "",)

La mediana de parqueaderos por vivienda en todas las zonas, a excepción de la zona oeste, es de uno. Es importante señalar que, para el análisis del número de parqueaderos, se están excluyendo los datos NA.

4.6 Distribución precios de vivienda por zona

#desactivando formato tabla
detach("package:printr", unload = TRUE)

#Resumen descriptivo de la variable Preciom
summarytools::descr(vivienda_faltantesOK$preciom)
## Descriptive Statistics  
## vivienda_faltantesOK$preciom  
## N: 8327  
## 
##                     preciom
## ----------------- ---------
##              Mean    434.25
##           Std.Dev    329.03
##               Min     58.00
##                Q1    220.00
##            Median    330.00
##                Q3    540.00
##               Max   1999.00
##               MAD    209.05
##               IQR    320.00
##                CV      0.76
##          Skewness      1.85
##       SE.Skewness      0.03
##          Kurtosis      3.66
##           N.Valid   8327.00
##         Pct.Valid    100.00
#Histograma Precio
hist(x= vivienda_faltantesOK$preciom,
     main = "Histograma Precio de viviendas",
     xlab = "Precio en Millones",
     ylab = "Cantidad de viviendas",
     col = "mediumseagreen",
     ylim = c(0,2000)
     )

Los datos de precios de viviendas en Cali abarcan desde 58 millones de pesos hasta 1999 millones de pesos, con una media de alrededor de 434,25 millones de pesos y una desviación estándar de unos 329,03 millones de pesos.

La distribución de precios inclina su forma ligeramente hacia la derecha, con una asimetría de 1,85 y una kurtosis de 3,66, indicando colas más densas que una distribución normal.

Los cuartiles revelan que el 25% de los precios son inferiores a 220 millones de pesos, la mediana es inferior a 330 millones de pesos (50%), y el 75% no supera los 540 millones de pesos. El rango intercuartílico, la diferencia entre el tercer y primer cuartil, es de 320 millones de pesos.

En síntesis, los precios de viviendas en Cali presentan diversidad con una media destacada y alta variabilidad. La distribución inclinada y las colas densas sugieren valores altos atípicos y una concentración de precios más bajos

library(ggplot2)
#Definiendo colores para cada zona
colores_zona<- c("Zona Centro" ="#FFFFE0","Zona Norte" = "#E6E6FA","Zona Oeste" = "#87CEEB","Zona Oriente" ="#98FB98","Zona Sur" = "#FFB6C1")

#Generando Histograma por zona
ggplot(vivienda_faltantesOK, aes(x = preciom, fill= zona))+
  geom_histogram(binwidth = 50, color= "gray")+
  scale_fill_manual(values = colores_zona)+
  facet_wrap(~zona, ncol = 2, scales = "free")+
  labs(title = "Histograma de precio por zona")+
  theme_classic()+
  ylab("Cantidad de viviendas")+
  xlab("Precio en Millones")

4.7 Distribución de Precio y Area construida por zona

#Definiendo colores para cada zona
colores_zona<- c("Zona Centro" ="#FFFFE0","Zona Norte" = "#E6E6FA","Zona Oeste" = "#87CEEB","Zona Oriente" ="#98FB98","Zona Sur" = "#FFB6C1")

#Grafico
    ggplot(vivienda_faltantesOK, aes(x= areaconst, y= preciom, color = zona))+
  geom_point()+
    geom_smooth(method = "lm", se = FALSE)+
  scale_color_manual(values = colores_zona)+
  labs(title = "Precio y Area Construida por Zona")+
  theme_dark()+
  ylab("Precio en Millones")+
  xlab("Area construida en M2")

#install.packages("dplyr")
library(dplyr)

#calcular las pendientes por zona
pendientes_por_zona <- vivienda_faltantesOK %>%
  group_by(zona) %>%
  summarize(pendiente = coef(lm(preciom ~ areaconst))[2])

# Mostrar pendientes por zona
print(pendientes_por_zona)
## # A tibble: 5 × 2
##   zona         pendiente
##   <chr>            <dbl>
## 1 Zona Centro      0.900
## 2 Zona Norte       1.28 
## 3 Zona Oeste       2.14 
## 4 Zona Oriente     0.332
## 5 Zona Sur         1.65

El gráfico y las pendientes que se han calculado representan las tasas de cambio en el precio de las viviendas en relación con el área construida, específicamente para cada una de las diferentes zonas en el mercado inmobiliario de Cali. Las pendientes nos brindan información crucial sobre cómo varía el precio de las viviendas a medida que el área construida aumenta en cada una de estas zonas geográficas.

En el caso de la Zona Centro, una unidad adicional de área construida (medida en metros cuadrados) está asociada con un incremento promedio de 0.9 millones de pesos en el precio de las viviendas. Esto indica que, en promedio, un aumento en el tamaño del área construida en la Zona Centro está vinculado a un incremento de 0.9 millones de pesos en el valor de las propiedades.

Para la Zona Norte, la relación entre el área construida y el precio de las viviendas es más pronunciada. Cada unidad adicional de área construida contribuye a un aumento promedio de 1.28 millones de pesos en el precio de las viviendas en esta zona.

En contraste, en la Zona Oeste, el efecto del área construida sobre el precio es aún más significativo. Cada unidad de incremento en el área construida se asocia con un aumento promedio de 2.14 millones de pesos en el valor de las viviendas. Esto sugiere que en la Zona Oeste, el tamaño del área construida tiene un impacto más considerable en el precio de las propiedades en comparación con otras zonas.

La Zona Oriente muestra un efecto menos marcado. Un incremento en el área construida en esta zona está relacionado con un aumento promedio de 0.332 millones de pesos en el precio de las viviendas.

Finalmente, en la Zona Sur, el área construida también tiene un impacto considerable en el precio de las viviendas. Cada unidad adicional de área construida contribuye a un aumento promedio de 1.65 millones de pesos en el valor de las propiedades en la Zona Sur

5. Conclusiones

  • Nuestro análisis revela que la Zona sur y norte de Cali albergan la mayoría de las viviendas, con una destacada representación de los estratos 4, 5 y 6. En consecuencia, B&C podría concentrar su estrategia en estas zonas, particularmente en la Zona Sur, enfocándose en los mencionados estratos.

  • En las zonas norte y sur, la proporción de apartamentos y casas es equitativa, con una ligera ventaja para los apartamentos. Esta revelación conlleva la recomendación de desarrollar estrategias de marketing y publicidad específicas para estos tipos de viviendas en dichas zonas, capitalizando el interés relativamente más alto por los apartamentos.

  • La búsqueda de nuevas propiedades debería priorizar viviendas con 3 a 4 habitaciones, 2 a 4 baños y disponibilidad de parqueadero, aspectos que optimizarían las oportunidades de venta y satisfarían las preferencias de los clientes.

  • Para incrementar el rendimiento por metro cuadrado, B&C podría considerar adquirir propiedades en la Zona Oeste y Zona Sur, ya que estas áreas presentan un mayor potencial de aumento en el precio de venta debido a la expansión de los metros cuadrados.

Estas conclusiones resaltan oportunidades estratégicas para B&C, apuntando hacia enfoques claros en la elección de ubicaciones, tipos de viviendas y características deseadas para maximizar su presencia en el mercado inmobiliario de Cali.