Con el fin de dar respuesta a la solicitud realizada por la compañía internacional interesada en adquirir dos viviendas para sus empleados en la ciudad de Cali, se realizó un análisis de la base de datos de ofertas inmobiliarias disponible para los últimos tres meses. Esta base contiene información de 8.322 registros y 13 variables relacionadas con ubicación, tipo de vivienda, precio, área construida, número de habitaciones, baños, parqueaderos y coordenadas geográficas.
A partir de esta información se revisaron por separado dos casos: la búsqueda de una casa en la zona norte y la búsqueda de un apartamento en la zona sur. El propósito fue estimar un precio razonable para cada solicitud y, con base en ello, recomendar ofertas reales que se ajustaran tanto a las características pedidas como al presupuesto disponible.
## [1] "LC_COLLATE=es_ES.UTF-8;LC_CTYPE=es_ES.UTF-8;LC_MONETARY=es_ES.UTF-8;LC_NUMERIC=C;LC_TIME=es_ES.UTF-8"
## Rows: 8,322
## Columns: 13
## $ id <dbl> 1147, 1169, 1350, 5992, 1212, 1724, 2326, 4386, 1209, 159…
## $ zona <chr> "Zona Oriente", "Zona Oriente", "Zona Oriente", "Zona Sur…
## $ piso <chr> NA, NA, NA, "02", "01", "01", "01", "01", "02", "02", "02…
## $ estrato <dbl> 3, 3, 3, 4, 5, 5, 4, 5, 5, 5, 6, 4, 5, 6, 4, 5, 5, 4, 5, …
## $ preciom <dbl> 250, 320, 350, 400, 260, 240, 220, 310, 320, 780, 750, 62…
## $ areaconst <dbl> 70, 120, 220, 280, 90, 87, 52, 137, 150, 380, 445, 355, 2…
## $ parqueaderos <dbl> 1, 1, 2, 3, 1, 1, 2, 2, 2, 2, NA, 3, 2, 2, 1, 4, 2, 2, 2,…
## $ banios <dbl> 3, 2, 2, 5, 2, 3, 2, 3, 4, 3, 7, 5, 6, 2, 4, 4, 4, 3, 2, …
## $ habitaciones <dbl> 6, 3, 4, 3, 3, 3, 3, 4, 6, 3, 6, 5, 6, 2, 5, 5, 4, 3, 3, …
## $ tipo <chr> "Casa", "Casa", "Casa", "Casa", "Apartamento", "Apartamen…
## $ barrio <chr> "20 de julio", "20 de julio", "20 de julio", "3 de julio"…
## $ longitud <dbl> -76.51168, -76.51237, -76.51537, -76.54000, -76.51350, -7…
## $ latitud <dbl> 3.43382, 3.43369, 3.43566, 3.43500, 3.45891, 3.36971, 3.4…
| variable | descripcion |
|---|---|
| zona | Ubicación de la vivienda (ej.: Zona Centro, Zona Norte, etc.) |
| piso | Piso que ocupa la vivienda (ej.: primer piso, segundo piso, etc.) |
| estrato | Estrato socio-económico (3, 4, 5, 6) |
| preciom | Precio de la vivienda en millones de pesos |
| areaconst | Área construida de la vivienda |
| parqueaderos | Número de parqueaderos |
| banios | Número de baños |
| habitaciones | Número de habitaciones |
| tipo | Tipo de vivienda (Casa, Apartamento) |
| barrio | Barrio donde se ubica la vivienda (ej.: 20 de Julio, Álamos, etc.) |
| longitud | Coordenada geográfica (longitud) |
| latitud | Coordenada geográfica (latitud) |
Se extrajo la dimensión del dataframe, es decir, el número total de filas (observaciones) y columnas (variables), con el objetivo de conocer la magnitud del conjunto de datos y facilitar la planificación de su análisis.
## [1] 8322 13
## [1] 8322
## [1] 13
| Variable | Tipo | |
|---|---|---|
| id | id | numeric |
| zona | zona | character |
| piso | piso | character |
| estrato | estrato | numeric |
| preciom | preciom | numeric |
| areaconst | areaconst | numeric |
| parqueaderos | parqueaderos | numeric |
| banios | banios | numeric |
| habitaciones | habitaciones | numeric |
| tipo | tipo | character |
| barrio | barrio | character |
| longitud | longitud | numeric |
| latitud | latitud | numeric |
En esta etapa no se identificaron errores de escritura en las variables del conjunto de datos actual, dado que todas las columnas fueron interpretadas como variables numéricas. Esto indica que las posibles inconsistencias tipográficas en variables categóricas (como el uso de mayúsculas/minúsculas o espacios) ya han sido previamente corregidas o que dichas variables no están presentes en la versión actual del dataset.
Vemos la estructura y tipos de datos para el dataframe. Muestra el tipo de cada variable: numérica, factor, carácter, etc.
## spc_tbl_ [8,322 × 13] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ id : num [1:8322] 1147 1169 1350 5992 1212 ...
## $ zona : chr [1:8322] "Zona Oriente" "Zona Oriente" "Zona Oriente" "Zona Sur" ...
## $ piso : chr [1:8322] NA NA NA "02" ...
## $ estrato : num [1:8322] 3 3 3 4 5 5 4 5 5 5 ...
## $ preciom : num [1:8322] 250 320 350 400 260 240 220 310 320 780 ...
## $ areaconst : num [1:8322] 70 120 220 280 90 87 52 137 150 380 ...
## $ parqueaderos: num [1:8322] 1 1 2 3 1 1 2 2 2 2 ...
## $ banios : num [1:8322] 3 2 2 5 2 3 2 3 4 3 ...
## $ habitaciones: num [1:8322] 6 3 4 3 3 3 3 4 6 3 ...
## $ tipo : chr [1:8322] "Casa" "Casa" "Casa" "Casa" ...
## $ barrio : chr [1:8322] "20 de julio" "20 de julio" "20 de julio" "3 de julio" ...
## $ longitud : num [1:8322] -76.5 -76.5 -76.5 -76.5 -76.5 ...
## $ latitud : num [1:8322] 3.43 3.43 3.44 3.44 3.46 ...
## - attr(*, "spec")=
## .. cols(
## .. id = col_double(),
## .. zona = col_character(),
## .. piso = col_character(),
## .. estrato = col_double(),
## .. preciom = col_double(),
## .. areaconst = col_double(),
## .. parqueaderos = col_double(),
## .. banios = col_double(),
## .. habitaciones = col_double(),
## .. tipo = col_character(),
## .. barrio = col_character(),
## .. longitud = col_double(),
## .. latitud = col_double()
## .. )
## - attr(*, "problems")=<externalptr>
## preciom areaconst estrato banios habitaciones parqueaderos
## preciom 1.0000000 0.6853915 0.52827831 0.5086427 0.36508586 0.4116620
## areaconst 0.6853915 1.0000000 0.35352525 0.4574766 0.42068968 0.3069709
## estrato 0.5282783 0.3535252 1.00000000 0.3512569 0.05819709 0.2612647
## banios 0.5086427 0.4574766 0.35125685 1.0000000 0.59038214 0.3918638
## habitaciones 0.3650859 0.4206897 0.05819709 0.5903821 1.00000000 0.2413962
## parqueaderos 0.4116620 0.3069709 0.26126471 0.3918638 0.24139617 1.0000000
##
## Call:
## lm(formula = preciom ~ areaconst + estrato + habitaciones + parqueaderos +
## banios, data = train)
##
## Residuals:
## Min 1Q Median 3Q Max
## -820.05 -82.01 -16.44 59.88 927.66
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -298.9580 56.1527 -5.324 2.00e-07 ***
## areaconst 0.7009 0.0626 11.196 < 2e-16 ***
## estrato 88.6349 12.0653 7.346 1.96e-12 ***
## habitaciones 9.5859 6.8033 1.409 0.15988
## parqueaderos 21.8842 7.0529 3.103 0.00210 **
## banios 24.0205 9.1262 2.632 0.00893 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 159 on 298 degrees of freedom
## Multiple R-squared: 0.618, Adjusted R-squared: 0.6116
## F-statistic: 96.44 on 5 and 298 DF, p-value: < 2.2e-16
##
## Shapiro-Wilk normality test
##
## data: resid(m1)
## W = 0.88054, p-value = 1.173e-14
##
## studentized Breusch-Pagan test
##
## data: m1
## BP = 77.254, df = 5, p-value = 3.148e-15
##
## Durbin-Watson test
##
## data: m1
## DW = 2.0314, p-value = 0.6054
## alternative hypothesis: true autocorrelation is greater than 0
## areaconst estrato habitaciones parqueaderos banios
## 1.442014 1.262229 1.637818 1.203020 1.747273
## fit lwr upr
## 1 304.0276 -10.46369 618.5189
## fit lwr upr
## 1 392.6625 77.29381 708.0312
##
## Call:
## lm(formula = preciom ~ areaconst + estrato + habitaciones + parqueaderos +
## banios, data = train2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -994.91 -40.09 -0.49 40.57 859.65
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -250.45557 19.07977 -13.127 < 2e-16 ***
## areaconst 1.71445 0.07165 23.928 < 2e-16 ***
## estrato 53.35366 3.78973 14.078 < 2e-16 ***
## habitaciones -26.81509 4.72470 -5.676 1.63e-08 ***
## parqueaderos 73.96688 4.95626 14.924 < 2e-16 ***
## banios 45.50903 4.15286 10.958 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 98.26 on 1661 degrees of freedom
## Multiple R-squared: 0.7705, Adjusted R-squared: 0.7698
## F-statistic: 1115 on 5 and 1661 DF, p-value: < 2.2e-16
##
## Shapiro-Wilk normality test
##
## data: resid(m2)
## W = 0.78638, p-value < 2.2e-16
##
## studentized Breusch-Pagan test
##
## data: m2
## BP = 537.72, df = 5, p-value < 2.2e-16
##
## Durbin-Watson test
##
## data: m2
## DW = 2.0179, p-value = 0.6426
## alternative hypothesis: true autocorrelation is greater than 0
## areaconst estrato habitaciones parqueaderos banios
## 2.311187 1.598052 1.483594 1.890896 2.662817
## fit lwr upr
## 1 755.0014 560.1552 949.8476
## fit lwr upr
## 1 808.3551 613.4632 1003.247
## RMSE MAE R2_test
## 148.7317549 97.1848021 0.5853386
## RMSE MAE R2_test
## 103.1766549 59.7593190 0.6929045
Para el primer caso se filtraron únicamente las ofertas correspondientes a casas ubicadas en la zona norte. Después del filtro quedaron 435 registros, lo que muestra que sí existe una oferta suficiente para analizar este tipo de vivienda. Dentro de este grupo, el precio mínimo encontrado fue de 89 millones, el precio medio fue cercano a 480 millones, la mediana fue de 425 millones y el valor máximo llegó a 1.940 millones. Esto deja ver que en esta zona hay casas de muchos niveles de precio, desde opciones relativamente accesibles hasta inmuebles de alto valor.
Al revisar el mapa de las viviendas filtradas se observó que la mayoría de los puntos sí se concentran en el sector norte, aunque algunos parecen estar más dispersos. Esto puede pasar porque la clasificación por zona no siempre coincide exactamente con la ubicación geográfica puntual, porque algunos barrios están cerca de límites entre zonas o porque puede haber pequeñas inconsistencias en el registro de coordenadas. Por tanto, el mapa sirve como apoyo visual, pero no debe verse como una división totalmente exacta.
Al explorar los datos se observó que el precio de la casa tiene una relación más fuerte con el área construida, seguida del estrato, la cantidad de baños y el número de parqueaderos. La variable que mostró una relación más baja fue el número de habitaciones. En palabras sencillas, esto significa que el valor de una casa en esta zona sube principalmente cuando la vivienda es más grande, está en un mejor estrato y ofrece más comodidades.
Los gráficos también muestran una tendencia clara: a medida que aumenta el área construida, el precio tiende a subir. De igual forma, las viviendas de estratos más altos suelen tener valores mayores. En cambio, el número de habitaciones por sí solo no siempre explica el precio, porque dos casas pueden tener el mismo número de cuartos, pero áreas muy diferentes o condiciones distintas de ubicación y acabados.
Con la información filtrada se construyó un modelo para estimar el precio de la primera solicitud, es decir, una casa, con 200 m² de área construida, 1 parqueadero, 2 baños, 4 habitaciones, ubicada en zona norte, con preferencia por estrato 4 o 5 y con un crédito preaprobado de 350 millones. El resultado principal del modelo arrojó una estimación cercana a 304 millones de pesos. Además, en la validación del modelo se obtuvo un ajuste intermedio, lo que indica que el modelo es útil como guía, aunque no debe tomarse como un valor exacto e inamovible.
En este caso, el nivel de explicación del modelo fue de alrededor de 61,8% dentro del entrenamiento, y en la prueba externa mostró un desempeño aceptable, con un R² cercano a 0,59. Esto quiere decir que el modelo logra captar una parte importante del comportamiento del precio, pero todavía hay otros factores no incluidos que también influyen, como el estado de conservación, los acabados, el barrio exacto, la antigüedad del inmueble o atributos adicionales no registrados en la base.
Teniendo en cuenta que la estimación obtenida se ubicó alrededor de los 304 millones y que el presupuesto máximo disponible es de 350 millones, se considera que sí es viable atender esta solicitud dentro del mercado revisado. De hecho, el análisis permitió identificar al menos cinco ofertas potenciales dentro del presupuesto, ubicadas en barrios como La Merced, Vipasa, El Bosque y Urbanización La Merced, con precios entre 320 y 350 millones.
Entre estas opciones, las más recomendables son aquellas que se acercan mejor a la solicitud original en términos de área y distribución, pero sin sobrepasar el tope del crédito. En general, la recomendación para María es priorizar viviendas alrededor de 320 a 350 millones, ya que se encuentran dentro del rango manejable y permiten responder adecuadamente a la necesidad del cliente. También sería prudente revisar en detalle el estado físico del inmueble y la ubicación exacta antes de cerrar cualquier negociación.
Para la segunda solicitud se trabajó con el filtro de apartamentos ubicados en la zona sur. En este caso quedaron 2.381 registros, lo que indica una oferta mucho más amplia que en el caso anterior. Esto es favorable porque permite contar con más alternativas para encontrar un inmueble que se ajuste tanto a las necesidades de la familia como al presupuesto aprobado de 850 millones de pesos.
En los gráficos de esta segunda base se observó nuevamente que el precio aumenta a medida que crece el área construida y también sube de manera importante en los estratos más altos. Esto era esperable, ya que un apartamento más amplio, mejor ubicado y de mayor estrato suele tener mayor valor en el mercado.
Para la segunda solicitud se estimó el valor de un apartamento con 300 m², 3 parqueaderos, 3 baños, 5 habitaciones, ubicado en la zona sur y con preferencia de estrato 5 o 6. El modelo arrojó una estimación cercana a 755 millones de pesos, valor que se encuentra por debajo del crédito preaprobado de 850 millones, por lo cual la solicitud también resulta viable dentro del mercado estudiado.
En comparación con el caso de las casas del norte, este segundo modelo mostró un mejor comportamiento general. Su capacidad explicativa fue cercana al 77%, y en la prueba externa presentó un R² cercano a 0,69, además de menores errores de predicción. Esto significa que, para el caso de los apartamentos en zona sur, el modelo ofrece una guía más sólida y confiable para apoyar la decisión comercial.
Un punto interesante es que, al revisar todas las variables juntas, el número de habitaciones apareció con un efecto negativo. Esto no debe interpretarse como que “más habitaciones bajan el precio” de forma general. Más bien sugiere que, cuando ya se tiene en cuenta el área, el estrato, los baños y los parqueaderos, dividir el espacio en más habitaciones no siempre hace que el inmueble valga más. En algunos casos puede significar espacios más reducidos o una distribución menos amplia.
Con base en los resultados obtenidos, se concluye que la segunda solicitud también puede ser atendida dentro del presupuesto disponible. El valor estimado del apartamento se encuentra por debajo del tope de financiación, y además se identificaron en el análisis varias ofertas recomendadas en el mapa para este rango de búsqueda.
La recomendación para María es enfocar la búsqueda en apartamentos del sur que se encuentren preferiblemente por debajo de 800 millones, de manera que exista un margen de maniobra para negociación, trámites y posibles gastos adicionales. Dado que el comportamiento del modelo fue mejor en este segundo caso, el respaldo para la recomendación comercial es más fuerte que en la vivienda 1.
En términos generales, el estudio permitió concluir que las dos solicitudes son viables con base en la información disponible del mercado. Para la vivienda 1, la estimación fue cercana a 304 millones, por lo que sí existen opciones reales dentro del límite de 350 millones. Para la vivienda 2, la estimación fue cercana a 755 millones, valor que también se ajusta al tope de 850 millones aprobado por la empresa.
Aunque los modelos utilizados no explican el comportamiento del precio de manera perfecta, sí ofrecen una base objetiva y útil para orientar la decisión. En ambos casos se recomienda complementar la estimación con una revisión comercial y física de las ofertas seleccionadas, especialmente en aspectos como ubicación exacta, estado del inmueble, acabados, antigüedad y facilidad de acceso. En consecuencia, se recomienda a María presentar a la compañía internacional un grupo corto de opciones priorizadas, mostrando que ambas necesidades pueden ser cubiertas de forma razonable con el presupuesto disponible.
Finalmente, los resultados de validación muestran que los modelos funcionan como una herramienta de apoyo para la toma de decisiones, pero no como una regla exacta. En ambos casos hubo señales de que el mercado presenta variaciones que el modelo no alcanza a recoger por completo, por lo que la recomendación final siempre debe combinar el resultado numérico con el criterio comercial. Aun así, la independencia de los errores fue adecuada y el segundo caso mostró un desempeño mejor que el primero.
Con este análisis se encontró que sí hay opciones para responder a las dos solicitudes planteadas. En el caso de la casa en zona norte, el valor estimado fue cercano a 304 millones, por lo que el presupuesto de 350 millones sí permite encontrar alternativas adecuadas. Para el apartamento en zona sur, la estimación fue cercana a 755 millones, también dentro del presupuesto máximo de 850 millones. En ambos casos, los resultados sirven como guía para apoyar la decisión, pero siempre es importante revisar también la ubicación exacta, el estado real del inmueble y las condiciones de negociación antes de recomendar la compra definitiva.