El mercado inmobiliario en Colombia genera ventas por billones de pesos cada año, para Cali este número fue de $6.100 millones en 2023, actualmente es la cuarta ciudad con precios inmobiliarios más altos en Colombia. No obstante, durante el último año se presentaron caídas en las ventas del sector, motivo por el cual se hace necesario generar factores e indicadores que representen ventajas para la compañía B&C (Bienes y Casas). En este marco se plantea un análisis de datos el cual facilite la toma de decisiones y genere señales que indiquen sobre áreas para concentrar esfuerzos con la finalidad de atraer más clientes.
Teniendo en cuenta lo anterior el presente informe desarrolla un análisis sobre una base de datos recopilada con información inmobiliaria para la ciudad de Cali. Esta base de datos cuenta con un total de 8.327 registros de viviendas, para los cuales se cuenta con información acerca de su ubicación, piso en el que se encuentran ubicados, si son casas o apartamentos, valor de la vivienda, número de baños, número de parqueaderos, número de habitaciones, área de construcción y previo de las viviendas.
Teniendo en cuenta los datos se realizará un análisis de estadística descriptiva en el que se identifiquen oportunidades y factores determinantes en la venta y valor de viviendas.
El objetivo del presente documento consiste realizar un análisis estadístico sobre la información recopilada para el mercado inmobiliario en Cali, lo anterior para brindar información estadística dirigida a la empresa B&C la cual le permita mejorar sus operaciones, detectando oportunidades para explotar en el sector inmobiliario.
Se da inició utilizando una base de datos de 8.330 registros, de los cuales se removieron 3 puesto que presentaban datos vacíos en al menos 12 de las 13 variables revisadas.
Posteriormente se revisó cada variable registrada en la base de datos para determinar cuántos datos vacíos se presentaban en cada variable, el resultado se observa en la tabla 1 en donde se aprecia que solo 2 variables presentaban este tipo de datos. Las variables son piso con 2.638 datos vacíos lo que representa un 32% del total de datos y parquea con 1.603 datos vacíos lo que representa un 19%. Los mecanismos para tratar con estos datos serán tratados con mayor profundidad.
Posteriormente se revisó la homogeneidad de los datos, verificando que los valores de las columnas cumplieran con unos lineamientos básicos. Para esto se revisaron los valores únicos de cada columna. Los cambios necesarios se dieron en la variable piso, en la que se contaba con las categorías apartamento y casa, pero por la forma en que se registraron los datos aparecían más categorías como CASA y Casa, para esto se reemplazaron los valores que contenían los caracteres de “ca” por casa y los que contenían “ap” por apartamento, esto eliminando los espacios en blanco. De la misma forma se eliminaron las mayúsculas en la variable barrio. Posteriormente se incluyó otra variable en la que se obtuvo el valor de metro cuadrado dividiendo el valor de la vivienda entre el área construida. Al realizar el proceso de limpieza y transformación de datos se obtuvo como resultado una base de datos con 8.327 registros y 14 columnas o variables.
Las variables son:
library(kableExtra)
library(paqueteMETODOS)
library(magrittr)
library(ggplot2)
library(googleway)
data(vivienda_faltantes)
datos_8327 <- vivienda_faltantes[!is.na(vivienda_faltantes$id), ]
diccionario_datos <- data.frame(
Variable = c("Zona", "Piso", "Estrato", "Preciom", "Areaconst", "Parquea", "Banios", "Habitac", "Tipo", "Barrio", "Precio_m2"),
Descripción = c("Zona de la ciudad en la que se encuentra la vivienda",
"Piso de un edificio en el que se encuentra ubicada la vivienda",
"Clasificación de estrato dada a la vivienda dependiendo de su ubicación",
"Precio en millones de la vivienda",
"Área en metros cuadrados de construcción de la casa",
"Número de parqueaderos con los que cuenta la vivienda",
"Número de baños con los que cuenta la vivienda",
"Número de habitaciones con los que cuenta la vivienda",
"Tipo de vivienda",
"Barrio residencial en el que se encuentra ubicada la vivienda",
"Valor del metro cuadrado de la vivienda en millones"),
Tipo = c("Cualitativa", "Cualitativa", "Cualitativa", "Nominal", "Nominal", "Nominal", "Nominal", "Nominal", "Cualitativa", "Cualitativa", "Nominal")
)
kable(diccionario_datos, caption = "Diccionario de datos", align = "c") %>%
kable_styling(full_width = FALSE)| Variable | Descripción | Tipo |
|---|---|---|
| Zona | Zona de la ciudad en la que se encuentra la vivienda | Cualitativa |
| Piso | Piso de un edificio en el que se encuentra ubicada la vivienda | Cualitativa |
| Estrato | Clasificación de estrato dada a la vivienda dependiendo de su ubicación | Cualitativa |
| Preciom | Precio en millones de la vivienda | Nominal |
| Areaconst | Área en metros cuadrados de construcción de la casa | Nominal |
| Parquea | Número de parqueaderos con los que cuenta la vivienda | Nominal |
| Banios | Número de baños con los que cuenta la vivienda | Nominal |
| Habitac | Número de habitaciones con los que cuenta la vivienda | Nominal |
| Tipo | Tipo de vivienda | Cualitativa |
| Barrio | Barrio residencial en el que se encuentra ubicada la vivienda | Cualitativa |
| Precio_m2 | Valor del metro cuadrado de la vivienda en millones | Nominal |
#Revision de las variables (depuración y limpieza)
#Se elimina 3 registros vacios
datos_vacios <- colSums(is.na(datos_8327))
resumen_vacios <- data.frame(Columna = names(datos_vacios),
Datos_Vacios = datos_vacios,
Porcentaje_Datos_Vacios = datos_vacios / nrow(datos_8327) * 100)
#Se ajustan los datos de tipo de vivienda
datos_8327$tipo <- trimws(tolower(datos_8327$tipo))
datos_8327$tipo <- ifelse(grepl("ca", datos_8327$tipo), "Casa",ifelse(grepl("ap", datos_8327$tipo), "Apartamento", datos_8327$tipo))
#Se ajustan los datos de tipo de Barrio
datos_8327$barrio <- trimws(tolower(datos_8327$barrio))
#Se incluye columna de valor del metro cuadrado
datos_8327$precio_m2 <- datos_8327$preciom / datos_8327$areaconst
#Se remplazan los pisos N/A por 1
datos_8327$piso <- ifelse(is.na(datos_8327$piso), 1, datos_8327$piso)Para las variables del número de parqueaderos (parquea) y piso en que se ubica la vivienda (piso) se presentan varia casos en los que no hay información reportada 1.603 y 2.638 casos respectivamente. Para el caso de la variable del piso al que corresponde la vivienda se imputarán datos de manera tal que los datos que se muestran como N/A serán tomados como primer piso. La razón para esta decisión se centra en el bajo número reportado para el piso 1. Teniendo en cuenta que se trabaja con una muestra aleatoria el piso 1 debería ser el más representativo, en tanto toda construcción inmobiliaria necesariamente debe reportar un primer piso.
Respecto a la variable del parqueadero se propone usar valores de cero para los casos en que no se registra información. Esto teniendo en cuenta que en el país la proporción de viviendas con cero parqueaderos es menor que la de viviendas con al menos un parqueadero. No obstante, esta imputación no será realizada, dado que el argumento requiere un mayor sustento y que la proporción de viviendas sin parqueadero respecto a las que cuenta con algún parqueadero, si es mayor pese a que no sea la esperada.
De acuerdo con los objetivos planteados el análisis iniciará mostrando un resumen de algunos de los principales datos encontrados. En primer lugar, se analizarán las variables cualitativas.
Respecto al estrato se tiene que en el estudio realizado se recolectó información de viviendas que fueran de un estrato 3 o superior. Las viviendas de estrato 5 representan el 34% de las viviendas analizadas, después están las de estratos 4, 6 y 3 con participaciones de 26%, 23% y 27% respectivamente. Lo anterior implica que la empresa desarrolla sus operaciones enfocadas en viviendas de lo que podría considerarse clase media o superior.
kable(summarytools::freq(datos_8327$piso),
caption = "**Tabla de frecuencia absoluta y relativa para la variable piso**")| Freq | % Valid | % Valid Cum. | % Total | % Total Cum. | |
|---|---|---|---|---|---|
| 1 | 3499 | 42.0199352 | 42.01994 | 42.0199352 | 42.01994 |
| 2 | 1450 | 17.4132341 | 59.43317 | 17.4132341 | 59.43317 |
| 3 | 1097 | 13.1740122 | 72.60718 | 13.1740122 | 72.60718 |
| 4 | 607 | 7.2895401 | 79.89672 | 7.2895401 | 79.89672 |
| 5 | 568 | 6.8211841 | 86.71791 | 6.8211841 | 86.71791 |
| 6 | 245 | 2.9422361 | 89.66014 | 2.9422361 | 89.66014 |
| 7 | 207 | 2.4858893 | 92.14603 | 2.4858893 | 92.14603 |
| 8 | 211 | 2.5339258 | 94.67996 | 2.5339258 | 94.67996 |
| 9 | 146 | 1.7533325 | 96.43329 | 1.7533325 | 96.43329 |
| 10 | 130 | 1.5611865 | 97.99448 | 1.5611865 | 97.99448 |
| 11 | 84 | 1.0087667 | 99.00324 | 1.0087667 | 99.00324 |
| 12 | 83 | 0.9967575 | 100.00000 | 0.9967575 | 100.00000 |
| 0 | NA | NA | 0.0000000 | 100.00000 | |
| Total | 8327 | 100.0000000 | 100.00000 | 100.0000000 | 100.00000 |
conteo <- datos_8327 %>% count(piso)
ggplot(conteo, aes(x = piso, y = n)) +
geom_text(aes(label = n), vjust = -0.5, size = 3) +
geom_bar(stat = "identity", fill = "skyblue", color = "black") +
labs(title = "Número de viviendas por número de piso", x = "Piso", y = "Frecuencia") +
theme_minimal()Respecto al tipo de vivienda se tiene que la participación de los apartamentos (61%) es superior a la de las casas (39%). Esto puede implicar una preferencia de los compradores por un tipo de vivienda con características como seguridad privada. Esto también puede ser un reflejo de un incremento en la verticalización urbana debido al aumento de la densidad poblacional de la ciudad.
tabla = (table(datos_8327$tipo))
Frecuencia_R=prop.table(tabla)
kable(data.frame(Valor = names(tabla),
Frecuencia = as.vector(tabla),
Frecuencia_R = as.numeric(Frecuencia_R)),
caption = "**Tabla de frecuencia absoluta y relativa para la variable tipo**")| Valor | Frecuencia | Frecuencia_R |
|---|---|---|
| Apartamento | 5106 | 0.613186 |
| Casa | 3221 | 0.386814 |
Para la variable zona se tiene que la zona sur es la que presenta un mayor número de viviendas en Cali cubriendo al rededor del 58% de las propiedades analizadas, le siguen la zona norte con 23%, oeste con 14%, oriente con 4% y centro con 1%.
tabla = (table(datos_8327$zona))
Frecuencia_R=prop.table(tabla)
datos=data.frame(Zona = names(tabla),
Frecuencia = as.vector(tabla),
Frecuencia_R = as.numeric(Frecuencia_R))
kable((datos),caption = "**Tabla de frecuencia absoluta y relativa para la variable zona**")| Zona | Frecuencia | Frecuencia_R |
|---|---|---|
| Zona Centro | 124 | 0.0148913 |
| Zona Norte | 1922 | 0.2308154 |
| Zona Oeste | 1204 | 0.1445899 |
| Zona Oriente | 351 | 0.0421520 |
| Zona Sur | 4726 | 0.5675513 |
kable(summarytools::freq(datos_8327$estrato),
caption = "**Tabla de frecuencia absoluta y relativa para la variable estrato**")| Freq | % Valid | % Valid Cum. | % Total | % Total Cum. | |
|---|---|---|---|---|---|
| 3 | 1453 | 17.44926 | 17.44926 | 17.44926 | 17.44926 |
| 4 | 2131 | 25.59145 | 43.04071 | 25.59145 | 43.04071 |
| 5 | 2751 | 33.03711 | 76.07782 | 33.03711 | 76.07782 |
| 6 | 1992 | 23.92218 | 100.00000 | 23.92218 | 100.00000 |
| 0 | NA | NA | 0.00000 | 100.00000 | |
| Total | 8327 | 100.00000 | 100.00000 | 100.00000 | 100.00000 |
conteo <- datos_8327 %>% count(estrato)
ggplot(conteo, aes(x = estrato, y = n)) +
geom_text(aes(label = n), vjust = -0.5, size = 3) +
geom_bar(stat = "identity", fill = "skyblue", color = "black") +
labs(title = "Número de viviendas por estrato", x = "Estrato", y = "Frecuencia") +
theme_minimal()Se revisaron los 5 barrios con un mayor precio de metro cuadrado resaltando los barrios Mamellan, Unicentro Cali, Calicanto viii, Normandía West Point y San Nicolas como aquellos que podrían venderse a un precio más alto por metro cuadrado. Así mismo se revisaron los 5 barrios con mayor promedio en el valor de las viviedas entre los que resaltaron Santa, La Portada, Tequendama, La Riverita y Unicentro Cali.
#google_map(key = "AIzaSyBJRQ-QdyW-hqoNaSS0RcxEsaWleXVwVmI") %>%
# add_markers(data = datos_8327 , lat = "latitud", lon = "longitud")
valor_promedio_por_barrio <- aggregate(datos_8327$precio_m2, by = list(barrio = datos_8327$barrio), FUN = mean)
barrios_ordenados <- valor_promedio_por_barrio[order(-valor_promedio_por_barrio$x), ]
top_5_barrios <- barrios_ordenados[1:5, ]
kable(top_5_barrios, col.names = c("Barrio", "Valor Promedio por m²"), caption = "Top 5 barrios con mayor valor promedio por metro cuadrado")| Barrio | Valor Promedio por m² | |
|---|---|---|
| 250 | mamellan | 7.386364 |
| 371 | unicentro cali | 5.868545 |
| 63 | calicanto viii | 5.067568 |
| 268 | normandía west point | 5.042373 |
| 332 | san nicolas | 5.038760 |
valor_promedio_por_barrio <- aggregate(datos_8327$preciom, by = list(barrio = datos_8327$barrio), FUN = mean)
barrios_ordenados <- valor_promedio_por_barrio[order(-valor_promedio_por_barrio$x), ]
top_5_barrios <- barrios_ordenados[1:5, ]
kable(top_5_barrios, col.names = c("Barrio", "Valor Promedio de la vivienda"), caption = "Top 5 barrios con viviendas con mayor valor promedio")| Barrio | Valor Promedio de la vivienda | |
|---|---|---|
| 336 | santa | 1950 |
| 212 | la portada al | 1500 |
| 368 | tequendema | 1500 |
| 218 | la riverita | 1390 |
| 371 | unicentro cali | 1250 |
Para analizar las variables cuantitativas se realizó un resumen de los principales indicadores de posición y centro. Esta revisión mostro que los tamaños de las viviendas en Cali van desde 30 m² hasta 1.745 m², pese a que existe apartamentos con diferentes medidas los datos reflejan que el 75% de las viviendas no superan los 229 m².
kable(summary(datos_8327[c("preciom","areaconst","parquea","banios","habitac","precio_m2")]), full_width = FALSE,
caption = "**Tabla de principales indicadores de pocisión centro y dispersión para las variables cuantitativas**")| preciom | areaconst | parquea | banios | habitac | precio_m2 | |
|---|---|---|---|---|---|---|
| Min. : 58.0 | Min. : 30 | Min. : 1.000 | Min. : 0.000 | Min. : 0.000 | Min. :0.1461 | |
| 1st Qu.: 220.0 | 1st Qu.: 80 | 1st Qu.: 1.000 | 1st Qu.: 2.000 | 1st Qu.: 3.000 | 1st Qu.:1.9167 | |
| Median : 330.0 | Median : 123 | Median : 2.000 | Median : 3.000 | Median : 3.000 | Median :2.6431 | |
| Mean : 434.3 | Mean : 175 | Mean : 1.836 | Mean : 3.112 | Mean : 3.605 | Mean :2.7230 | |
| 3rd Qu.: 540.0 | 3rd Qu.: 229 | 3rd Qu.: 2.000 | 3rd Qu.: 4.000 | 3rd Qu.: 4.000 | 3rd Qu.:3.3810 | |
| Max. :1999.0 | Max. :1745 | Max. :10.000 | Max. :10.000 | Max. :10.000 | Max. :9.4681 | |
| NA | NA | NA’s :1603 | NA | NA | NA |
plot(density(datos_8327$areaconst),
main = "Gráfica de Densidad de area de la vivienda respecto al precio del metro cuadrado",
xlab = "m²",
ylab = "Densidad")La distribución del precio de las viviendas refleja una situación similar al precio del metro cuadrado, siendo que pese a existir un rango amplio, los valores se concentran en la izquierda de la gráfica, entiéndase valores más bajos.
limites <- seq(min(datos_8327$preciom), max(datos_8327$preciom), length.out = 10+1)
limites_formateados <- format(limites, nsmall = 0)
etiquetas_intervalos <- paste0(limites_formateados[-length(limites_formateados)], " - ", limites_formateados[-1])
intervalos <- cut(datos_8327$preciom, breaks = limites, include.lowest = TRUE, labels = etiquetas_intervalos)
tabla_frecuencias <- table(intervalos)
kable(tabla_frecuencias)| intervalos | Freq |
|---|---|
| 58.0 - 252.1 | 2831 |
| 252.1 - 446.2 | 2721 |
| 446.2 - 640.3 | 1201 |
| 640.3 - 834.4 | 624 |
| 834.4 - 1028.5 | 395 |
| 1028.5 - 1222.6 | 197 |
| 1222.6 - 1416.7 | 181 |
| 1416.7 - 1610.8 | 87 |
| 1610.8 - 1804.9 | 62 |
| 1804.9 - 1999.0 | 28 |
ggplot(data.frame(Intervalo = etiquetas_intervalos, Frecuencia = as.numeric(tabla_frecuencias)), aes(x = Intervalo, y = Frecuencia)) +
geom_bar(stat = "identity", fill = "skyblue", color = "black") +
labs(title = "Histograma del precio de la vivienda",
x = "Precio",
y = "Frecuencia") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))El histograma realizado para representar la frecuencia de la vivienda según su tamaño muestra que la mayoría de las casas son relativamente pequeñas, teniendo en cuenta el rango de construcción existente de 1.715 m², mientras que el promedio es de 175 m².
limites <- seq(min(datos_8327$areaconst), max(datos_8327$areaconst), length.out = 10+1)
limites_formateados <- format(limites, nsmall = 0)
etiquetas_intervalos <- paste0(limites_formateados[-length(limites_formateados)], " - ", limites_formateados[-1])
intervalos <- cut(datos_8327$areaconst, breaks = limites, include.lowest = TRUE, labels = etiquetas_intervalos)
tabla_frecuencias <- table(intervalos)
kable(tabla_frecuencias)| intervalos | Freq |
|---|---|
| 30.0 - 201.5 | 5919 |
| 201.5 - 373.0 | 1690 |
| 373.0 - 544.5 | 525 |
| 544.5 - 716.0 | 109 |
| 716.0 - 887.5 | 46 |
| 887.5 - 1059.0 | 24 |
| 1059.0 - 1230.5 | 6 |
| 1230.5 - 1402.0 | 2 |
| 1402.0 - 1573.5 | 3 |
| 1573.5 - 1745.0 | 3 |
ggplot(data.frame(Intervalo = etiquetas_intervalos, Frecuencia = as.numeric(tabla_frecuencias)), aes(x = Intervalo, y = Frecuencia)) +
geom_bar(stat = "identity", fill = "skyblue", color = "black") +
labs(title = "Histograma del area de las viviendas",
x = "tamaño en metros cuadrados",
y = "Frecuencia") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))tabla = (table(datos_8327$parquea))
Frecuencia_R=prop.table(tabla)
kable(data.frame(Valor = names(tabla),
Frecuencia = as.vector(tabla),
Frecuencia_R = as.numeric(Frecuencia_R)),
caption = "**Tabla de frecuencia absoluta y relativa para la variable parqueadero**")| Valor | Frecuencia | Frecuencia_R |
|---|---|---|
| 1 | 3156 | 0.4693635 |
| 2 | 2478 | 0.3685306 |
| 3 | 521 | 0.0774836 |
| 4 | 386 | 0.0574063 |
| 5 | 68 | 0.0101130 |
| 6 | 68 | 0.0101130 |
| 7 | 18 | 0.0026770 |
| 8 | 17 | 0.0025283 |
| 9 | 4 | 0.0005949 |
| 10 | 8 | 0.0011898 |
datos_8327$parquea <- as.factor(datos_8327$parquea)
conteo <- datos_8327 %>% count(parquea)
ggplot(conteo, aes(x = parquea, y = n)) +
geom_text(aes(label = n), vjust = -0.5, size = 3) +
geom_bar(stat = "identity", fill = "skyblue", color = "black") +
labs(title = "Número de viviendas segun número de parqueaderos", x = "Parqueadero", y = "Frecuencia") +
theme_minimal()tabla = (table(datos_8327$banios))
Frecuencia_R=prop.table(tabla)
kable(data.frame(Valor = names(tabla),
Frecuencia = as.vector(tabla),
Frecuencia_R = as.numeric(Frecuencia_R)),
caption = "**Tabla de frecuencia absoluta y relativa para la variable baños**")| Valor | Frecuencia | Frecuencia_R |
|---|---|---|
| 0 | 45 | 0.0054041 |
| 1 | 497 | 0.0596854 |
| 2 | 2946 | 0.3537889 |
| 3 | 1994 | 0.2394620 |
| 4 | 1460 | 0.1753333 |
| 5 | 891 | 0.1070013 |
| 6 | 315 | 0.0378287 |
| 7 | 107 | 0.0128498 |
| 8 | 48 | 0.0057644 |
| 9 | 15 | 0.0018014 |
| 10 | 9 | 0.0010808 |
datos_8327$banios <- as.factor(datos_8327$banios)
conteo <- datos_8327 %>% count(banios)
ggplot(conteo, aes(x = banios, y = n)) +
geom_text(aes(label = n), vjust = -0.5, size = 3) +
geom_bar(stat = "identity", fill = "skyblue", color = "black") +
labs(title = "Número de viviendas según número de baños", x = "Baños", y = "Frecuencia") +
theme_minimal()Respecto al número de parqueaderos, baños y habitaciones se encontraron resultados en los que un parqueadero, un baño o una habitación extra no implican necesariamente incrementos en el precio del metro cuadrado, al contrario, pueden implicar que los compradores buscan estos espacios en una cantidad suficiente la cual satisfaga sus necesidades, posteriormente pueden preferir dedicar espacios de su hogar para otros usos como una cocina más grande o una sala de estar más amplia.
tabla = (table(datos_8327$habitac))
Frecuencia_R=prop.table(tabla)
kable(data.frame(Valor = names(tabla),
Frecuencia = as.vector(tabla),
Frecuencia_R = as.numeric(Frecuencia_R)),
caption = "**Tabla de frecuencia absoluta y relativa para la variable habitaciones**")| Valor | Frecuencia | Frecuencia_R |
|---|---|---|
| 0 | 66 | 0.0079260 |
| 1 | 59 | 0.0070854 |
| 2 | 927 | 0.1113246 |
| 3 | 4101 | 0.4924943 |
| 4 | 1731 | 0.2078780 |
| 5 | 680 | 0.0816621 |
| 6 | 318 | 0.0381890 |
| 7 | 173 | 0.0207758 |
| 8 | 138 | 0.0165726 |
| 9 | 83 | 0.0099676 |
| 10 | 51 | 0.0061247 |
datos_8327$habitac <- as.factor(datos_8327$habitac)
conteo <- datos_8327 %>% count(habitac)
ggplot(conteo, aes(x = habitac, y = n)) +
geom_text(aes(label = n), vjust = -0.5, size = 3) +
geom_bar(stat = "identity", fill = "skyblue", color = "black") +
labs(title = "Número de viviendas según número de habitaciones", x = "Habitaciones", y = "Frecuencia") +
theme_minimal()promedio_precio_parqueaderos <- tapply(datos_8327$precio_m2, datos_8327$parquea, mean)
barplot(promedio_precio_parqueaderos,
xlab = "Número de Parqueaderos", ylab = "Promedio Precio por Metro Cuadrado",
col = "skyblue", main = "Promedio Precio por Metro Cuadrado por Número de Parqueaderos")promedio_precio_banios <- tapply(datos_8327$precio_m2, datos_8327$banios, mean)
barplot(promedio_precio_banios,
xlab = "Número de Baños", ylab = "Promedio Precio por Metro Cuadrado",
col = "skyblue", main = "Promedio Precio por Metro Cuadrado por Número de Baños")promedio_precio_habitaciones <- tapply(datos_8327$precio_m2, datos_8327$habitac, mean)
barplot(promedio_precio_habitaciones,
xlab = "Número de Habitaciones", ylab = "Promedio Precio por Metro Cuadrado",
col = "skyblue", main = "Promedio Precio por Metro Cuadrado por Número de Habitaciones")Respecto al precio del metro cuadrado se puede concluir que el rango es de casi $ 10 millones, el promedio es de $2,7 millones, bastante inferior al precio máximo, la mediana es de $2,6 millones lo que indica que en términos generales el comportamiento tiende a la normalidad, pero cuenta con datos atípicos que amplían el rango. La conclusión anterior se refuerza con el grafico boxplot, en el cual rango de precio por metro cuadrado va desde $0,146 millones hasta $9,468 millones, el grueso de las viviendas muestra precios por metro cuadrado entre $1,916 millones $3,381 millones y los datos atípicos empiezan poco antes de los $6 millones.
limites <- seq(min(datos_8327$precio_m2), max(datos_8327$precio_m2), length.out = 10 + 1)
etiquetas_intervalos <- paste0(format(round(limites, 2), nsmall = 2)[-length(limites)], " - ", format(round(limites, 2), nsmall = 2)[-1])
intervalos <- cut(datos_8327$precio_m2, breaks = limites, include.lowest = TRUE, xlabels = etiquetas_intervalos)
tabla_frecuencias <- table(intervalos)
kable(tabla_frecuencias)| intervalos | Freq |
|---|---|
| [0.146,1.08] | 280 |
| (1.08,2.01] | 2079 |
| (2.01,2.94] | 2763 |
| (2.94,3.87] | 2031 |
| (3.87,4.81] | 852 |
| (4.81,5.74] | 222 |
| (5.74,6.67] | 83 |
| (6.67,7.6] | 11 |
| (7.6,8.54] | 5 |
| (8.54,9.47] | 1 |
ggplot(data.frame(Intervalo = etiquetas_intervalos, Frecuencia = as.numeric(tabla_frecuencias)), aes(x = Intervalo, y = Frecuencia)) +
geom_bar(stat = "identity", fill = "skyblue", color = "black") +
labs(title = "Histograma del area de las viviendas",
x = "tamaño en metros cuadrados",
y = "Frecuencia") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))boxplot(datos_8327$precio_m2,
main = "Boxplot del precio por m²",
ylab = "Precio por m²",
col = c("skyblue"))Para futuros análisis se podría realizar revisiones más profundas en las que se analicen correlaciones entre las variables, esto permitiría contar con un mayor nivel de confianza sobre las hipótesis planteadas respecto al mercado inmobiliario, como por ejemplo las relaciones que han sido presentadas en el informe respecto al valor del metro cuadrado y su relación con el número de parqueaderos, habitaciones y baños.
Algo que también podrá ser de utilidad para futuros análisis puede ser la obtención de una muestra más grande, esto se plantea al contemplar que la mayoría de los datos corresponden a estratos altos. Se podría analizar la posibilidad de incursionar en el nicho de los estratos más bajos de la ciudad, los cuales pueden tener características diferentes. Siendo así sería necesario contar con una muestra más amplia a la usada en el informe actual.
Adicionalmente se plantea la necesidad de usar técnicas de imputación de datos que permitan ajustar las variables de piso y parqueadero. Pese a que en el informe actual se plantearon soluciones originadas en el conocimiento sobre el sector inmobiliario, contar con estas técnicas puede servir en el caso que el conocimiento del sector no sea suficiente.
El análisis estadístico realizado ha mostrado en primer lugar que existe una preferencia por parte de la empresa B&C por el mercado de los estratos 4 y 5, esto indica que el público objetivo son personas con un nivel adquisitivo medio-alto. Dentro de las preferencias de este nicho se encuentra una inclinación por contar con al menos 2 y hasta 3 parqueaderos, respecto al número de baños existe un rango amplio de entre 2 y 5 que representan un valor agregado muy similar, el hallazgo más sorprendente es que para el nicho tratado el mayor precio promedio se da para las viviendas con una única habitación.
El valor agregado al que se hace referencia se basa en el promedio del precio por metro cuadrado que se refleja al cruzar la variable de valor por metro cuadrado y las variables de número de parqueaderos, baños o habitaciones.
Al realizar el análisis sobre los barrios con precios de vivienda más altos y precios de metro cuadrado más altos se tiene que se podría explorar campañas de ventas y marketing dirigidas hacia los barrios Mamellan, Unicentro Cali, Calicanto viii, Normandía West Point, San Nicolas, Santa, La Portada, Tequendama, La Riverita y Unicentro Cali, esto para obtener ventas más altas con el uso minimo de personal y recursos.