El mercado de finca raíz en Cali se ha vuelto un sector importante que genera rentabilidaes atractivas para los inversionistas. A continuación se hace un análisis exploratorio del sector, a partir del registro de ventas de viviendas, para conocer las tendencias en las ventas, precios y ubicación de la oferta inmobiliaria.
El objetivo del análisis es registrar los patrones de comportamiento del mercado de finca raíz en la ciudad de Cali asociados a precios, ubicación y características de las viviendas.
Se trabajó con una base con 8.330 observaciones y 13 variable, que recogen información categórica sobre la zona de ubicación, el barrio y el tipo de vivienda, y otros atributos de las viviendas como área, habitaciones, baños, piso, garage. Adicional a lo anterior, la base de datos registra la variable continua del precio de la vivienda. El método empleado para se basa en una primera etapa de limpieza de datos que se describe en esta sección, y una siguiente etapa de análisis exploratorio para terminar en las conclusiones que brinden los datos.
La limpieza de datos aborda: análisis de faltantes, análisis de duplicados y categorización de variables.
Dos variables que tienen que ver con las características de las viviendas tienen un número mayor a 1000 registros de datos faltantes, por lo que no es una opción eliminar estas observaciones, a continuación se registrará el comportamiento de estas dos variables para contemplar la solución a estos registros nulos.
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 1.000 2.000 3.000 3.772 5.000 12.000 2641
Aunque la mediana de la variable piso se concentra en los valores 2 y 3, también se registran valores altos de la variable hasta 12 por lo que no vale la pena hacer una imputación de valor a los faltantes, se resuelve hacer una categorización de esta variable y los faltantes análizarlos dentro de la categorían “No información”
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 1.000 1.000 2.000 1.836 2.000 10.000 1606
Los valores de la variable número de parqueaderos se acumula en los valores 1 y 2 con datos extremos que llegan hasta 10, esta variables podría tomar el valor 0, aunque no lo registra por lo que imputarle un valor a estos faltantes podría inducir a un error en el análisis, para esta variable también se resuelve los datos faltantes con la clasificación de la variable, incluyendo la categoría “No información”
duplicados <- duplicated.data.frame(vivienda_faltantes)
viv_sin_duplicados <- subset(vivienda_faltantes, !duplicados)
viv_sinNA <- viv_sin_duplicados[-8320, ]
viv_sinNA2 <- viv_sinNA[-8320, ]Del análisis de duplicados se eliminaron 9 observaciones duplicadas y 2 observaciones más con valor de “NA” (Ver anexos), como resultado la base de datos de trabajo quedó con 8.319 observaciones.
# transformation de variables
#piso
viv_sinNA2$piso2 <- viv_sinNA2$piso
viv_sinNA2$piso2[is.na(viv_sinNA2$piso2)] <- 99
interv_piso <- c(1, 2, 3, 4, 13, Inf)
etiqpiso <- c("1 piso", "2 pisos", "3 pisos", "4 o mas", "No informacion")
viv_sinNA2$cate_piso <- cut(viv_sinNA2$piso2, breaks = interv_piso, labels = etiqpiso, right = FALSE)La variable piso se categoriza y se incluye como categoría “No información” de acuerdo al análisis de faltantes.
#parqueadero
viv_sinNA2$parquea2 <- viv_sinNA2$parquea
viv_sinNA2$parquea2[is.na(viv_sinNA2$parquea2)] <- 99
interv_parquea <- c(1, 2, 3, 4, 13, Inf)
etiqparquea <- c("1", "2", "3", "4 o mas", "No informacion")
viv_sinNA2$cate_parquea <- cut(viv_sinNA2$parquea2, breaks = interv_parquea, labels = etiqparquea, right = FALSE)La variable número de parqueaderos se categoriza y se incluye como categoría “No información”
#area
intervalos <- c(0, 100, 200, 300, 400, 500, Inf)
etiquetas <- c("Menores de 99", "100-199", "200-299", "300-399", "400-499", "Mayores de 500")
viv_sinNA2$categoria_area <- cut(viv_sinNA2$areaconst, breaks = intervalos, labels = etiquetas, right = FALSE)
#baños
interv_banio <- c(0, 1, 2, 3, 4, Inf)
etiqbanio <- c("Sin banio","1", "2", "3", "4 o mas")
viv_sinNA2$cate_banio <- cut(viv_sinNA2$banios, breaks = interv_banio, labels = etiqbanio, right = FALSE)
#habitacion
interv_habitac <- c(0, 1, 2, 3, 4, Inf)
etiqhabitac <- c("Sin habitac","1", "2", "3", "4 o mas")
viv_sinNA2$cate_habitac <- cut(viv_sinNA2$habitac, breaks = interv_habitac, labels = etiqhabitac, right = FALSE)
#tipo
viv_sinNA2$tipo[viv_sinNA2$tipo == "APARTAMENTO"] <- "Apartamento"
viv_sinNA2$tipo[viv_sinNA2$tipo == "apto"] <- "Apartamento"
viv_sinNA2$tipo[viv_sinNA2$tipo == "casa"] <- "Casa"
viv_sinNA2$tipo[viv_sinNA2$tipo == "CASA"] <- "Casa"Las variables área, número de baños y número de habitaciones se concentran en los menores valores de la variable aunque se registran valores altos de baja frecuencia por lo que se categorizan de acuerdo al análisis de frecuencias. La variable tipo de vivienda se ajusta por errores de digitación.
##Nueva Base
viv_ajustes <- subset(viv_sinNA2, select = -c(piso, parquea, banios, habitac, barrio, longitud, latitud))Después de los ajustes descritos la base de datos resultante quedó con 8319 observaciones y 13 variables transformadas como se señaló en la sección de métodos.
##Zona
## Frequencies
## viv_ajustes$zona
## Type: Character
##
## Freq % Valid % Valid Cum. % Total % Total Cum.
## ------------------ ------ --------- -------------- --------- --------------
## Zona Centro 124 1.49 1.49 1.49 1.49
## Zona Norte 1920 23.08 24.57 23.08 24.57
## Zona Oeste 1198 14.40 38.97 14.40 38.97
## Zona Oriente 351 4.22 43.19 4.22 43.19
## Zona Sur 4726 56.81 100.00 56.81 100.00
## <NA> 0 0.00 100.00
## Total 8319 100.00 100.00 100.00 100.00
El 56% de las viviendas fueron vendidas en la zona sur de la ciudad, la zona norte y oeste llegan casi al 40% del mercado y las zonas oriente y centro son las zonas de menores ventas, la última con solo 1.5% de las ventas, es decir 124 inmuebles.
## Frequencies
## viv_ajustes$tipo
## Type: Character
##
## Freq % Valid % Valid Cum. % Total % Total Cum.
## ----------------- ------ --------- -------------- --------- --------------
## Apartamento 5099 61.29 61.29 61.29 61.29
## Casa 3220 38.71 100.00 38.71 100.00
## <NA> 0 0.00 100.00
## Total 8319 100.00 100.00 100.00 100.00
##
## Zona Centro Zona Norte Zona Oeste Zona Oriente Zona Sur
## Apartamento 24 1198 1029 62 2786
## Casa 100 722 169 289 1940
El 61% (5.099) de las ventas fueron tipo apartamento
## Frequencies
## viv_ajustes$categoria_area
## Type: Factor
##
## Freq % Valid % Valid Cum. % Total % Total Cum.
## -------------------- ------ --------- -------------- --------- --------------
## Menores de 99 3164 38.03 38.03 38.03 38.03
## 100-199 2634 31.66 69.70 31.66 69.70
## 200-299 1206 14.50 84.19 14.50 84.19
## 300-399 694 8.34 92.54 8.34 92.54
## 400-499 332 3.99 96.53 3.99 96.53
## Mayores de 500 289 3.47 100.00 3.47 100.00
## <NA> 0 0.00 100.00
## Total 8319 100.00 100.00 100.00 100.00
El 84% de las viviendas son de menos de 300 metros. La mayor frecuencia se encuentra en las viviendas de menos de 100 metros seguido por las vivienas entre 100 y 200 metros.
## Frequencies
## viv_ajustes$cate_piso
## Type: Factor
##
## Freq % Valid % Valid Cum. % Total % Total Cum.
## -------------------- ------ --------- -------------- --------- --------------
## 1 piso 860 10.34 10.34 10.34 10.34
## 2 pisos 1450 17.43 27.77 17.43 27.77
## 3 pisos 1097 13.19 40.95 13.19 40.95
## 4 o mas 2277 27.37 68.33 27.37 68.33
## No informacion 2635 31.67 100.00 31.67 100.00
## <NA> 0 0.00 100.00
## Total 8319 100.00 100.00 100.00 100.00
La variable número de piso es una que tiene alta proporción de faltantes, sin embargo es interesante ver cómo de las viviendas que si se obtuvo la información la mayor proporción está en los pisos 4 o más, sugiere que la preferencia de las viviendas estaría en los pisos altos.
## Frequencies
## viv_ajustes$cate_parquea
## Type: Factor
##
## Freq % Valid % Valid Cum. % Total % Total Cum.
## -------------------- ------ --------- -------------- --------- --------------
## 1 3155 37.93 37.93 37.93 37.93
## 2 2475 29.75 67.68 29.75 67.68
## 3 520 6.25 73.93 6.25 73.93
## 4 o mas 567 6.82 80.74 6.82 80.74
## No informacion 1602 19.26 100.00 19.26 100.00
## <NA> 0 0.00 100.00
## Total 8319 100.00 100.00 100.00 100.00
El 67% de las viviendas tienen 1 o 2 parqueaderos
## Frequencies
## viv_ajustes$cate_banio
## Type: Factor
##
## Freq % Valid % Valid Cum. % Total % Total Cum.
## --------------- ------ --------- -------------- --------- --------------
## Sin banio 45 0.54 0.54 0.54 0.54
## 1 496 5.96 6.50 5.96 6.50
## 2 2946 35.41 41.92 35.41 41.92
## 3 1993 23.96 65.87 23.96 65.87
## 4 o mas 2839 34.13 100.00 34.13 100.00
## <NA> 0 0.00 100.00
## Total 8319 100.00 100.00 100.00 100.00
El 59.4% de las viviendas tienen 2 o 3 baños, pero no es menor el número de viviendas que se registró con 4 baños o más que fue un 34% muy cercano al número de viviendas con 2 baños.
## Frequencies
## viv_ajustes$cate_habitac
## Type: Factor
##
## Freq % Valid % Valid Cum. % Total % Total Cum.
## ----------------- ------ --------- -------------- --------- --------------
## Sin habitac 66 0.79 0.79 0.79 0.79
## 1 59 0.71 1.50 0.71 1.50
## 2 926 11.13 12.63 11.13 12.63
## 3 4097 49.25 61.88 49.25 61.88
## 4 o mas 3171 38.12 100.00 38.12 100.00
## <NA> 0 0.00 100.00
## Total 8319 100.00 100.00 100.00 100.00
##
## Sin habitac 1 2 3 4 o mas
## Menores de 99 12 48 761 2159 184
## 100-199 12 6 138 1434 1044
## 200-299 18 3 16 351 818
## 300-399 10 1 7 106 570
## 400-499 5 1 1 30 295
## Mayores de 500 9 0 3 17 260
El 87% de las viviendas tienen 3 habitaciones o más, las viviendas con 2 o 1 habitaciones solo representaron el 12,6% de las ventas, siendo claro la preferencia por tener espacios con mayores divisiones, aunque no necesariamente más grande al ver la preferencia en metros cuadrados.
## Descriptive Statistics
## viv_ajustes$preciom
## N: 8319
##
## preciom
## ----------------- ---------
## Mean 433.90
## Std.Dev 328.67
## Min 58.00
## Q1 220.00
## Median 330.00
## Q3 540.00
## Max 1999.00
## MAD 207.56
## IQR 320.00
## CV 0.76
## Skewness 1.85
## SE.Skewness 0.03
## Kurtosis 3.67
## N.Valid 8319.00
## Pct.Valid 100.00
En promedio el precio de la vivienda fue de $433,9 millones, con un mínimo de $58 millones y un máximo de $1.999 millones. Una mediana de $330 lo que describe una alta frecuencia de valores por debajo del promedio y unos pocas viviendas de alto valor.
El diagrama de cajas deja ver que el 75% de las viviendas costaron hasta $540 millones y el 25% más costos estuvo por encima de ese valor, los valores más altos de vivienda y menos frecuentes se encontraron por encima de los $1000 millones de pesos.
boxplot(viv_ajustes$preciom~viv_ajustes$zona,
main = "Distribución de precio por zona",
ylab="millones",
xlab = "zona", las=1,
)precio_promedio_por_zona <- aggregate(viv_ajustes$preciom ~ viv_ajustes$zona, data = viv_ajustes, FUN = function (preciom) c(media = mean(preciom), mediana = median(preciom), suma = sum(preciom)))
print(precio_promedio_por_zona)## viv_ajustes$zona viv_ajustes$preciom.media viv_ajustes$preciom.mediana
## 1 Zona Centro 309.6935 297.0000
## 2 Zona Norte 345.6083 300.0000
## 3 Zona Oeste 677.5801 580.0000
## 4 Zona Oriente 228.5299 210.0000
## 5 Zona Sur 426.5184 320.0000
## viv_ajustes$preciom.suma
## 1 38402.0000
## 2 663568.0000
## 3 811741.0000
## 4 80214.0000
## 5 2015726.0000
La zona más costosa fue la zona oeste con $677 millones en promedio, en contraste el valor de las viviendas de la zona oriente fue la menor. La zona de mayor venta que fue el sur tuvo un costo promedio de $426 millones, cercano al promedio de la ciudad.
##
## Apartamento Casa
## Zona Centro 24 100
## Zona Norte 1198 722
## Zona Oeste 1029 169
## Zona Oriente 62 289
## Zona Sur 2786 1940
precio_promedio_por_area <- aggregate(viv_ajustes$preciom ~ viv_ajustes$categoria_area, data = viv_ajustes, FUN = function (preciom) c(media = mean(preciom), mediana = median(preciom), suma = sum(preciom)))
print(precio_promedio_por_area)## viv_ajustes$categoria_area viv_ajustes$preciom.media
## 1 Menores de 99 208.8040
## 2 100-199 413.6815
## 3 200-299 616.0887
## 4 300-399 738.7017
## 5 400-499 886.6867
## 6 Mayores de 500 1070.2976
## viv_ajustes$preciom.mediana viv_ajustes$preciom.suma
## 1 198.5000 660656.0000
## 2 380.0000 1089637.0000
## 3 500.0000 743003.0000
## 4 644.0000 512659.0000
## 5 750.0000 294380.0000
## 6 1100.0000 309316.0000
boxplot(viv_ajustes$preciom~viv_ajustes$categoria_area,
main = "Distribución de precio por área",
ylab="millones",
xlab = "categoria área", las=1,
)
Cómo es esperado a mayor metros cuadrados, mayor valor del inmueble.
precio_promedio_por_piso <- aggregate(viv_ajustes$preciom ~ viv_ajustes$cate_piso, data = viv_ajustes, FUN = function (preciom) c(media = mean(preciom), mediana = median(preciom), suma = sum(preciom)))
print(precio_promedio_por_piso)## viv_ajustes$cate_piso viv_ajustes$preciom.media viv_ajustes$preciom.mediana
## 1 1 piso 424.5686 300.0000
## 2 2 pisos 494.1297 400.0000
## 3 3 pisos 410.2680 330.0000
## 4 4 o mas 384.9060 290.0000
## 5 No informacion 455.9920 350.0000
## viv_ajustes$preciom.suma
## 1 365129.0000
## 2 716488.0000
## 3 450064.0000
## 4 876431.0000
## 5 1201539.0000
boxplot(viv_ajustes$preciom~viv_ajustes$cate_piso,
main = "Distribución de precio por piso",
ylab="millones",
xlab = "categoria piso", las=1,
)No hay diferencia notable en los precios con los pisos, por lo que se puede determinar que esta caracteristica no incide en el precio o en las preferencias de forma significativa.
precio_promedio_por_parque <- aggregate(viv_ajustes$preciom ~ viv_ajustes$cate_parquea, data = viv_ajustes, FUN = function (preciom) c(media = mean(preciom), mediana = median(preciom), suma = sum(preciom)))
print(precio_promedio_por_parque)## viv_ajustes$cate_parquea viv_ajustes$preciom.media
## 1 1 269.1141
## 2 2 514.7014
## 3 3 852.5904
## 4 4 o mas 1028.5414
## 5 No informacion 287.2534
## viv_ajustes$preciom.mediana viv_ajustes$preciom.suma
## 1 250.0000 849055.0000
## 2 450.0000 1273886.0000
## 3 800.0000 443347.0000
## 4 950.0000 583183.0000
## 5 179.0000 460180.0000
boxplot(viv_ajustes$preciom~viv_ajustes$cate_parquea,
main = "Distribución de precio por # parqueaderos",
ylab="millones",
xlab = "categoria piso", las=1,
)El número de parqueaderos y el precio de la vivienda si tienen relación, entre más parqueaderos mayor valor de la vivienda.
precio_promedio_por_hab <- aggregate(viv_ajustes$preciom ~ viv_ajustes$cate_habitac, data = viv_ajustes, FUN = function (preciom) c(media = mean(preciom), mediana = median(preciom), suma = sum(preciom)))
print(precio_promedio_por_hab)## viv_ajustes$cate_habitac viv_ajustes$preciom.media
## 1 Sin habitac 493.2121
## 2 1 316.7458
## 3 2 248.2905
## 4 3 365.4674
## 5 4 o mas 577.4752
## viv_ajustes$preciom.mediana viv_ajustes$preciom.suma
## 1 410.0000 32552.0000
## 2 260.0000 18688.0000
## 3 208.0000 229917.0000
## 4 280.0000 1497320.0000
## 5 470.0000 1831174.0000
boxplot(viv_ajustes$preciom~viv_ajustes$cate_habitac,
main = "Distribución de precio por # habitaciones",
ylab="millones",
xlab = "categoria piso", las=1,
)Si el número de habitaciones es de 1, 2 o 3 no hay una diferencia aparente con el precio de la vivienda, a partir de 4 habitaciones es cuando el precio de la vivienda se diferencia.
precio_promedio_por_banio <- aggregate(viv_ajustes$preciom ~ viv_ajustes$cate_banio, data = viv_ajustes, FUN = function (preciom) c(media = mean(preciom), mediana = median(preciom), suma = sum(preciom)))
print(precio_promedio_por_banio)## viv_ajustes$cate_banio viv_ajustes$preciom.media viv_ajustes$preciom.mediana
## 1 Sin banio 548.4667 399.0000
## 2 1 141.5827 120.0000
## 3 2 237.1303 220.0000
## 4 3 395.0983 350.0000
## 5 4 o mas 714.5925 620.0000
## viv_ajustes$preciom.suma
## 1 24681.0000
## 2 70225.0000
## 3 698586.0000
## 4 787431.0000
## 5 2028728.0000
boxplot(viv_ajustes$preciom~viv_ajustes$cate_banio,
main = "Distribución de precio por # baños",
ylab="millones",
xlab = "categoria piso", las=1,
)El diferenciador esta en las viviendas con más de 4 baños, muy parecido a lo que se ve en relación con el número de habitaciones.
La zona sur se configura como la preferida de los compradores, sin embargo la zona norte y oeste le siguen en participación, para profundizar en las preferencias sobre zona es necesario ampliar este estudio para entender la oferta de transporte, centros educativos y culturales que ofrece cada una de las zonas y análizar los potenciales de las zonas norte y oeste, en particular la zona oeste al presentar los precios más elevados de las viviendas se configura como una zona para los nichos de mayores ingresos.
El tipo de vivienda predominante fueron apartamentos con 3 o más habitaciones, 1 o 2 parqueaderos y menos de 200 metros cuadrados, solo el 38% de las ventas fueron casas y la mayoría de estas ubicadas en la zona sur.
El precio de la vivienda estuvo fuertemente relacionado con la zona, jalonando el promedio por los valores de ventas de la zona sur. Las variables que se pudieron relacionar con mayor precio fue que estuviera ubicada en el oeste, con más de 200 metros, con más de 3 parqueaderos, con más de 4 baños y 4 habitaciones, lo anterior son características de las viviendas con mayor precio y menor frecuencia de ventas relacionados con los compradores de mayor ingreso.
Para la mayoria de las ventas, estar en las zonas sur o norte, 3 habitaciones, 1 o 2 baños y 1 o 2 parquederos representan las preferencias promedio de los compradores.
El objetivo del trabajo fue registrar los patrones de comportamiento del mercado de finca raíz en la ciudad de Cali asociados a precios, ubicación y características de las viviendas, lo que se logró reconociendo que en la ciudad de Cali las zonas de mayores ventas fue la zona sur, aunque las más costosas fue el oeste y en contraste la de menos movimiento tanto en volumen de venta como en precio de la vivienda es la zona del centro.
La preferencia general fue por el tipo de vivienda apartamentos aunque en la zona sur que tiene amplia participación en ventas la proporción de casa y apartamentos es similar.
Los compradores están buscando más número de habitaciones pero esto no está correlacionado con el área, lo que indica que la preferencia se da en la división de los espacios.
Las características de la vivienda que se destacaron fueron viviendas con menos de 200 metros, con 1 o 2 parqueaderos y 3 o más habitaciones.
## id zona estrato preciom
## Min. : 1 Length:8319 Min. :3.000 Min. : 58.0
## 1st Qu.:2080 Class :character 1st Qu.:4.000 1st Qu.: 220.0
## Median :4160 Mode :character Median :5.000 Median : 330.0
## Mean :4160 Mean :4.634 Mean : 433.9
## 3rd Qu.:6240 3rd Qu.:5.000 3rd Qu.: 540.0
## Max. :8319 Max. :6.000 Max. :1999.0
## areaconst tipo piso2 cate_piso
## Min. : 30.0 Length:8319 Min. : 1.00 1 piso : 860
## 1st Qu.: 80.0 Class :character 1st Qu.: 2.00 2 pisos :1450
## Median : 123.0 Mode :character Median : 5.00 3 pisos :1097
## Mean : 174.9 Mean :33.93 4 o mas :2277
## 3rd Qu.: 229.0 3rd Qu.:99.00 No informacion:2635
## Max. :1745.0 Max. :99.00
## parquea2 cate_parquea categoria_area cate_banio
## Min. : 1.00 1 :3155 Menores de 99 :3164 Sin banio: 45
## 1st Qu.: 1.00 2 :2475 100-199 :2634 1 : 496
## Median : 2.00 3 : 520 200-299 :1206 2 :2946
## Mean :20.55 4 o mas : 567 300-399 : 694 3 :1993
## 3rd Qu.: 4.00 No informacion:1602 400-499 : 332 4 o mas :2839
## Max. :99.00 Mayores de 500: 289
## cate_habitac
## Sin habitac: 66
## 1 : 59
## 2 : 926
## 3 :4097
## 4 o mas :3171
##