# 0. Preparación y carga de paquetes (Optimizado)
if(!require(devtools)) install.packages("devtools")
## Loading required package: devtools
## Loading required package: usethis
if(!require(dplyr)) install.packages("dplyr")
## Loading required package: dplyr
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
if(!require(leaflet)) install.packages("leaflet")
## Loading required package: leaflet
# Base de datos
install.packages("devtools") # solo la primera vez
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.6'
## (as 'lib' is unspecified)
devtools::install_github("centromagis/paqueteMODELOS", force =TRUE)
## Warning: `install_github()` was deprecated in devtools 2.5.0.
## ℹ Please use pak::pak("user/repo") instead.
## This warning is displayed once per session.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Downloading GitHub repo centromagis/paqueteMODELOS@HEAD
## 
## ── R CMD build ─────────────────────────────────────────────────────────────────
##      checking for file ‘/tmp/Rtmp11soB5/remotes224e4944c044/Centromagis-paqueteMODELOS-3b06257/DESCRIPTION’ ...  ✔  checking for file ‘/tmp/Rtmp11soB5/remotes224e4944c044/Centromagis-paqueteMODELOS-3b06257/DESCRIPTION’ (597ms)
##   ─  preparing ‘paqueteMODELOS’:
##    checking DESCRIPTION meta-information ...  ✔  checking DESCRIPTION meta-information
##   ─  checking for LF line-endings in source and make files and shell scripts (561ms)
##   ─  checking for empty or unneeded directories
##   ─  building ‘paqueteMODELOS_0.1.0.tar.gz’
##      Warning: invalid uid value replaced by that for user 'nobody'
##      
## 
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.6'
## (as 'lib' is unspecified)
library(paqueteMODELOS)
## Loading required package: boot
## Loading required package: broom
## Loading required package: GGally
## Loading required package: ggplot2
## Loading required package: gridExtra
## 
## Attaching package: 'gridExtra'
## The following object is masked from 'package:dplyr':
## 
##     combine
## Loading required package: knitr
## Loading required package: summarytools
## Warning in fun(libname, pkgname): couldn't connect to display ":0"
## system might not have X11 capabilities; in case of errors when using dfSummary(), set st_options(use.x11 = FALSE)
data("vivienda")

# Carga la librería de los datos
library(paqueteMODELOS)
library(dplyr)
library(leaflet)

# Cargamos la base completa
data("vivienda")

# 1. Filtrar la base de datos (base1: casas, zona norte)
# Usamos filter para limpiar datos vacíos en coordenadas y evitar errores en el mapa
base1 <- vivienda %>%
  filter(tipo == "Casa", zona == "Zona Norte") %>%
  filter(!is.na(longitud) & !is.na(latitud)) 

# 2. Presentar los primeros 3 registros
print("--- Primeros 3 registros de la base filtrada ---")
## [1] "--- Primeros 3 registros de la base filtrada ---"
head(base1, 3)
# 3. Tablas de comprobación de la consulta
print("--- Comprobación de Tipo de Vivienda ---")
## [1] "--- Comprobación de Tipo de Vivienda ---"
table(base1$tipo)
## 
## Casa 
##  722
print("--- Comprobación de Zona ---")
## [1] "--- Comprobación de Zona ---"
table(base1$zona)
## 
## Zona Norte 
##        722
# 4. Creación del Mapa Optimizado
mapa_base1 <- leaflet(base1) %>%
  addTiles() %>%
  addMarkers(
    lng = ~longitud,
    lat = ~latitud,
    # El popup mostrará el precio y el barrio al hacer clic
    popup = ~paste("Barrio:", barrio, "<br>Precio:", preciom, "M"),
    # clusterOptions es VITAL en Posit Cloud para no saturar la memoria de video/RAM
    clusterOptions = markerClusterOptions() 
  )

# Mapa
mapa_base1

Paso 1: Filtro de Datos y Análisis Espacial Inicial

Para responder a la primera solicitud, se realizó un filtro a la base de datos original aislando exclusivamente las ofertas correspondientes a Casas ubicadas en la Zona Norte de la ciudad[cite: 1]. Tras el filtro, se obtuvo un subconjunto de 722 registros.

Discusión sobre la ubicación geográfica (Análisis del Mapa): Al proyectar las coordenadas geográficas de esta base filtrada en el mapa interactivo, se identificó un comportamiento inusual: no todos los puntos se ubican geográficamente en la Zona Norte[cite: 1].

  • Se visualizan clústeres de propiedades que, aunque tienen la etiqueta “Zona Norte” en la base de datos, caen espacialmente en el centro, en el sur, e incluso hacia las zonas montañosas de los cerros tutelares.
  • ¿Por qué sucede esto? Este fenómeno es recurrente en el manejo de bases de datos inmobiliarias y se debe principalmente a errores de captura o digitación humana. Es probable que el agente inmobiliario haya seleccionado incorrectamente la zona en el sistema al crear la oferta, o que las coordenadas GPS tomadas mediante dispositivos móviles tuvieran un desfase de precisión en ese momento. Esto resalta la importancia de la validación espacial cruzada en el trabajo de analítica de datos.
# ---------------------------------------------------------
# VALIDACIÓN DE VARIABLES
# ---------------------------------------------------------

# 1. Resumen estadístico: mostrará min, max, media y la cantidad de NAs de cada variable
print("--- Resumen Estadístico de las Variables ---")
## [1] "--- Resumen Estadístico de las Variables ---"
summary(base1)
##        id                zona            piso        estrato     
##  Min.   :  58.0   Length   :722   Length   :722   Min.   :3.000  
##  1st Qu.: 766.2   N.unique :  1   N.unique :  5   1st Qu.:3.000  
##  Median :2257.0   N.blank  :  0   N.blank  :  0   Median :4.000  
##  Mean   :2574.6   Min.nchar: 10   Min.nchar:  2   Mean   :4.202  
##  3rd Qu.:4225.0   Max.nchar: 10   Max.nchar:  2   3rd Qu.:5.000  
##  Max.   :8319.0                   NAs      :372   Max.   :6.000  
##                                                                  
##     preciom         areaconst       parqueaderos        banios      
##  Min.   :  89.0   Min.   :  30.0   Min.   : 1.000   Min.   : 0.000  
##  1st Qu.: 261.2   1st Qu.: 140.0   1st Qu.: 1.000   1st Qu.: 2.000  
##  Median : 390.0   Median : 240.0   Median : 2.000   Median : 3.000  
##  Mean   : 445.9   Mean   : 264.9   Mean   : 2.182   Mean   : 3.555  
##  3rd Qu.: 550.0   3rd Qu.: 336.8   3rd Qu.: 3.000   3rd Qu.: 4.000  
##  Max.   :1940.0   Max.   :1440.0   Max.   :10.000   Max.   :10.000  
##                                    NAs    :287                      
##   habitaciones           tipo           barrio       longitud     
##  Min.   : 0.000   Length   :722   Length   :722   Min.   :-76.59  
##  1st Qu.: 3.000   N.unique :  1   N.unique :103   1st Qu.:-76.53  
##  Median : 4.000   N.blank  :  0   N.blank  :  0   Median :-76.52  
##  Mean   : 4.507   Min.nchar:  4   Min.nchar:  4   Mean   :-76.52  
##  3rd Qu.: 5.000   Max.nchar:  4   Max.nchar: 25   3rd Qu.:-76.50  
##  Max.   :10.000                                   Max.   :-76.47  
##                                                                   
##     latitud     
##  Min.   :3.333  
##  1st Qu.:3.452  
##  Median :3.468  
##  Mean   :3.460  
##  3rd Qu.:3.482  
##  Max.   :3.496  
## 
# 2. Conteo exacto de datos nulos (NAs) por columna
print("--- Cantidad de NAs por columna ---")
## [1] "--- Cantidad de NAs por columna ---"
colSums(is.na(base1))
##           id         zona         piso      estrato      preciom    areaconst 
##            0            0          372            0            0            0 
## parqueaderos       banios habitaciones         tipo       barrio     longitud 
##          287            0            0            0            0            0 
##      latitud 
##            0
# ---------------------------------------------------------
# IMPUTACIÓN DE DATOS NULOS
# ---------------------------------------------------------

# Imputamos los NAs de 'parqueaderos' usando la mediana de esa misma columna
base1 <- base1 %>%
  mutate(
    parqueaderos = ifelse(is.na(parqueaderos), 
                          median(parqueaderos, na.rm = TRUE), 
                          parqueaderos)
  )

# Verificamos que ya no existan NAs en la columna parqueaderos
print("--- NAs restantes en parqueaderos tras la imputación ---")
## [1] "--- NAs restantes en parqueaderos tras la imputación ---"
sum(is.na(base1$parqueaderos))
## [1] 0
# ---------------------------------------------------------
# PASO 2: ANÁLISIS EXPLORATORIO DE DATOS (Correlación)
# ---------------------------------------------------------

# Instalar y cargar plotly
if(!require(plotly)) install.packages("plotly")
## Loading required package: plotly
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
library(plotly)

# Seleccionamos solo las variables numéricas solicitadas para correlacionar con el precio
# y usamos na.omit() para limpiar las filas incompletas momentáneamente
datos_correlacion <- base1 %>%
  select(preciom, areaconst, estrato, banios, habitaciones) %>%
  na.omit() 

# Calculamos la matriz de correlación
matriz_cor <- cor(datos_correlacion)

# Generamos el gráfico de calor (Heatmap) interactivo con plotly
mapa_calor <- plot_ly(
  z = matriz_cor,
  x = colnames(matriz_cor),
  y = colnames(matriz_cor),
  type = "heatmap",
  colorscale = "RdBu", # Rojo para correlación negativa, Azul para positiva
  zmin = -1, zmax = 1
) %>%
  layout(title = "Matriz de Correlación - Casas Zona Norte (Interactiva)")

# Mostrar el gráfico interactivo
mapa_calor

Paso 2: Interpretación del Análisis Exploratorio

Al analizar la relación de las variables independientes con la variable respuesta (preciom), observamos lo siguiente:

  • Mayor impacto en el precio: Las variables areaconst (área construida) y estrato muestran los tonos rojizos más intensos al cruzarse con el precio. Esto indica una fuerte correlación positiva. Tiene total lógica comercial: las casas más grandes y ubicadas en mejores estratos tienden a ser significativamente más costosas.

  • Impacto moderado: La variable banios (número de baños) presenta un tono salmón/naranja intermedio, lo que sugiere una correlación positiva moderada con el valor del inmueble.

  • Menor impacto (Dato curioso): La variable habitaciones muestra el tono más pálido (casi beige) frente al precio. Esto significa que la cantidad de cuartos tiene una correlación muy débil. Esto puede explicarse porque en la Zona Norte (estratos altos), una casa muy costosa no necesariamente tiene muchas habitaciones, sino que puede tener pocas habitaciones pero de gran tamaño y lujo.

# ---------------------------------------------------------
# PASO 3: MODELO DE REGRESIÓN LINEAL MÚLTIPLE
# ---------------------------------------------------------

# Estimamos el modelo con las variables solicitadas
modelo_norte <- lm(preciom ~ areaconst + estrato + habitaciones + parqueaderos + banios, data = base1)

# Generamos el resumen estadístico del modelo para ver los coeficientes y el R^2
print("--- Resumen del Modelo de Regresión (Zona Norte) ---")
## [1] "--- Resumen del Modelo de Regresión (Zona Norte) ---"
summary(modelo_norte)
## 
## Call:
## lm(formula = preciom ~ areaconst + estrato + habitaciones + parqueaderos + 
##     banios, data = base1)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -924.94  -77.71  -17.66   45.90 1081.29 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -251.05177   30.11848  -8.335 3.94e-16 ***
## areaconst       0.81090    0.04352  18.634  < 2e-16 ***
## estrato        84.61108    7.17727  11.789  < 2e-16 ***
## habitaciones    0.95948    4.10569   0.234  0.81529    
## parqueaderos   16.55976    5.70396   2.903  0.00381 ** 
## banios         24.57669    5.35583   4.589 5.26e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 158.2 on 716 degrees of freedom
## Multiple R-squared:  0.6548, Adjusted R-squared:  0.6524 
## F-statistic: 271.6 on 5 and 716 DF,  p-value: < 2.2e-16

Paso 3: Interpretación del Modelo de Regresión Lineal Múltiple

1. Significancia de los Coeficientes y Lógica Comercial Al evaluar el modelo estimado para la Zona Norte, encontramos lo siguiente:

  • Variables Significativas (p-valor < 0.05): El área construida, el estrato, la cantidad de parqueaderos y el número de baños tienen un efecto estadísticamente significativo sobre el precio de la vivienda.
  • Variable No Significativa (p-valor > 0.05): El número de habitaciones arrojó un p-valor de 0.815, indicando que no aporta información estadísticamente relevante para predecir el precio en este modelo (lo cual coincide con la baja correlación vista en el análisis exploratorio).
  • Interpretación contextualizada:
    • Área construida: Por cada metro cuadrado adicional, el precio de la casa aumenta en promedio 0.81 millones de pesos (manteniendo todo lo demás constante).
    • Estrato: Pasar de un estrato al siguiente incrementa el valor del inmueble en aproximadamente 84.6 millones de pesos, reflejando la alta valorización de los sectores exclusivos.
    • Baños y Parqueaderos: Un baño adicional suma 24.5 millones al valor, y un parqueadero extra suma 16.5 millones. Ambos rubros son coherentes con las comodidades exigidas en viviendas de estrato alto.

2. Ajuste del Modelo (\(R^2\)) e Implicaciones * Ajuste: El modelo presenta un \(R^2\) múltiple de 0.6548. Esto significa que las variables incluidas explican el 65.48% de la variabilidad de los precios de las casas en la Zona Norte. * Implicaciones: Es un ajuste aceptable, pero señala que casi un 34.5% de la variación del precio obedece a factores externos no contemplados. * Sugerencias de mejora: Para optimizar el modelo, se podrían incluir variables adicionales como la antigüedad del inmueble, la presencia de vigilancia privada o si está en conjunto cerrado. También se podría explorar una transformación logarítmica de la variable precio para suavizar posibles valores atípicos.

# ---------------------------------------------------------
# PASO 4: VALIDACIÓN DE SUPUESTOS DEL MODELO
# ---------------------------------------------------------

# Configuramos la ventana gráfica para ver 4 gráficos al mismo tiempo
par(mfrow = c(2, 2))

# Generamos los gráficos de diagnóstico del modelo
plot(modelo_norte)

# Restauramos la ventana gráfica a la normalidad (1 solo gráfico)
par(mfrow = c(1, 1))

Paso 4: Validación de Supuestos del Modelo

A partir del análisis gráfico de los residuos (errores del modelo), se identifican los siguientes comportamientos respecto a los supuestos teóricos:

  • Linealidad (Gráfico 1: Residuals vs Fitted): La línea roja de tendencia se mantiene relativamente horizontal en el centro, lo que indica que el supuesto de linealidad se cumple de forma aceptable. Sin embargo, se observa una ligera dispersión en forma de embudo hacia la derecha.
  • Normalidad de los Residuos (Gráfico 2: Q-Q Residuals): Para que se cumpla este supuesto, los puntos deberían estar alineados perfectamente sobre la línea punteada diagonal. Observamos que en el centro se ajustan bien, pero en los extremos (las “colas”) hay una desviación clara, especialmente con valores atípicos marcados (ej. 208, 513, 632). Esto indica que los residuos no siguen una distribución perfectamente normal.
  • Homocedasticidad o Varianza Constante (Gráfico 3: Scale-Location): En este gráfico buscamos que la línea roja sea horizontal y los puntos formen una nube aleatoria. Al contrario, vemos que la línea tiene una pendiente positiva y los puntos se abren (forma de embudo) a medida que aumentan los valores ajustados. Esto es un claro síntoma de heterocedasticidad (la varianza de los errores no es constante y aumenta con el precio de la casa).
  • Observaciones Influyentes (Gráfico 4: Residuals vs Leverage): Este gráfico nos ayuda a identificar puntos extremos que están “jalando” o sesgando el modelo. Se observa que el dato número 632 tiene un alto apalancamiento y se acerca a los límites de la Distancia de Cook, lo que significa que esta casa en particular está influyendo fuertemente en los resultados de los coeficientes.

Sugerencias de mejora (Qué se podría hacer): 1. Transformación Logarítmica: Para corregir los problemas de normalidad y heterocedasticidad, la solución estadística más común y recomendada es aplicar el logaritmo natural a la variable dependiente (precio). Modelar log(preciom) suele estabilizar la varianza en datos inmobiliarios. 2. Tratamiento de valores atípicos: Se debe revisar el registro de las casas que aparecen como extremas (como la 632) para verificar si hubo un error de digitación en el área o en el precio y evaluar su exclusión del conjunto de datos de entrenamiento.

# ---------------------------------------------------------
# PASO 5: PREDICCIÓN DEL PRECIO DE LA VIVIENDA 1
# ---------------------------------------------------------

# 1. Creamos un data frame con las características de la solicitud 1.
# Hacemos dos filas: una para estrato 4 y otra para estrato 5.
solicitud_1 <- data.frame(
  areaconst = c(200, 200),
  estrato = c(4, 5),
  habitaciones = c(4, 4),
  parqueaderos = c(1, 1),
  banios = c(2, 2)
)

# 2. Usamos la función predict() con el modelo
predicciones <- predict(modelo_norte, newdata = solicitud_1)

# 3. Organizamos los resultados en una tabla para verlos claros
resultados_paso5 <- data.frame(
  Escenario = c("Estrato 4", "Estrato 5"),
  Precio_Estimado_Millones = round(predicciones, 2)
)

print("--- Predicción de Precio para la Vivienda 1 ---")
## [1] "--- Predicción de Precio para la Vivienda 1 ---"
print(resultados_paso5)
##   Escenario Precio_Estimado_Millones
## 1 Estrato 4                   319.12
## 2 Estrato 5                   403.74

Paso 5: Predicción del Precio para la Solicitud 1

Utilizando el modelo de regresión lineal múltiple, estimamos el valor de mercado para una casa en la Zona Norte con 200 m² de área construida, 4 habitaciones, 2 baños y 1 parqueadero, evaluando los dos estratos solicitados:

  • Escenario Estrato 4: El precio estimado es de 319.12 millones de pesos.
  • Escenario Estrato 5: El precio estimado es de 403.74 millones de pesos.

Conclusión financiera: Dado que la compañía internacional cuenta con un crédito preaprobado máximo de 350 millones de pesos, la búsqueda real de ofertas deberá concentrarse en inmuebles de estrato 4. Buscar esta propiedad en estrato 5 requeriría un esfuerzo de negociación poco realista (buscar un descuento de más de 50 millones respecto al valor de mercado estimado).

# ---------------------------------------------------------
# PASO 6: SUGERENCIA DE 5 OFERTAS POTENCIALES
# ---------------------------------------------------------

# Filtramos la base buscando propiedades reales que se ajusten al presupuesto y área
ofertas_potenciales <- base1 %>%
  filter(preciom <= 350) %>%                  # Límite estricto del crédito
  filter(estrato %in% c(4, 5)) %>%            # Estratos solicitados
  filter(areaconst >= 150) %>%                # Área aceptable cercana a la solicitud
  arrange(abs(areaconst - 200)) %>%           # Ordenamos para que las más cercanas a 200m2 queden de primeras
  head(5)                                     # Tomamos el Top 5

# Opciones
print("--- Top 5 Ofertas Reales para el Cliente ---")
## [1] "--- Top 5 Ofertas Reales para el Cliente ---"
ofertas_potenciales %>% select(id, barrio, estrato, areaconst, habitaciones, banios, preciom)
# Mapa con 5 ofertas
mapa_ofertas <- leaflet(ofertas_potenciales) %>%
  addTiles() %>%
  addMarkers(
    lng = ~longitud,
    lat = ~latitud,
    popup = ~paste("<b>Barrio:</b>", barrio, 
                   "<br><b>Precio:</b> $", preciom, "M",
                   "<br><b>Área:</b>", areaconst, "m2",
                   "<br><b>Estrato:</b>", estrato)
  )

# Mapa
mapa_ofertas

Paso 6: Sugerencia de Ofertas Potenciales (Vivienda 1)

A partir de las predicciones del modelo y considerando la restricción del crédito preaprobado (350 millones de pesos), se realizó una búsqueda de propiedades reales en la base de datos. Se seleccionaron 5 ofertas potenciales que cumplen con los requerimientos:

  • Análisis de las ofertas: Se encontraron excelentes opciones con áreas construidas entre 200 y 203 m² en barrios exclusivos del norte como El Bosque, La Flora y La Merced.
  • Hallazgo comercial clave: Aunque el modelo de regresión estimó un valor promedio superior a 400 millones para las casas de estrato 5, la búsqueda empírica demuestra que sí existen oportunidades de mercado en este estrato por valores entre 320 y 350 millones. Esto representa un gran valor agregado para el cliente, permitiéndole acceder a un estrato mayor sin exceder su presupuesto.
  • Ubicación espacial: La georreferenciación en el mapa confirma que las 5 propiedades sugeridas están correctamente agrupadas en la Zona Norte de la ciudad, facilitando la logística de visitas para la agencia.
# ---------------------------------------------------------
# PASO 7: SEGUNDA SOLICITUD (APARTAMENTO EN EL SUR)
# ---------------------------------------------------------

# 1. Filtro y limpieza de datos (Base 2: Apartamentos, Zona Sur)
base2 <- vivienda %>%
  filter(tipo == "Apartamento", zona == "Zona Sur") %>%
  filter(!is.na(longitud) & !is.na(latitud)) %>%
  # Imputamos NAs en parqueaderos para no perder datos
  mutate(parqueaderos = ifelse(is.na(parqueaderos), 
                               median(parqueaderos, na.rm = TRUE), 
                               parqueaderos))

# 2. Estimación del Modelo para el Sur
modelo_sur <- lm(preciom ~ areaconst + estrato + habitaciones + parqueaderos + banios, data = base2)

print("--- Resumen del Modelo (Apartamentos Zona Sur) ---")
## [1] "--- Resumen del Modelo (Apartamentos Zona Sur) ---"
summary(modelo_sur)
## 
## Call:
## lm(formula = preciom ~ areaconst + estrato + habitaciones + parqueaderos + 
##     banios, data = base2)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1151.66   -37.75    -2.59    38.06   922.20 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -266.91089   12.89132 -20.705  < 2e-16 ***
## areaconst       1.36019    0.04843  28.084  < 2e-16 ***
## estrato        59.23620    2.66624  22.217  < 2e-16 ***
## habitaciones  -17.89121    3.32828  -5.376 8.27e-08 ***
## parqueaderos   73.20959    3.65913  20.007  < 2e-16 ***
## banios         44.71978    2.98956  14.959  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 92.99 on 2781 degrees of freedom
## Multiple R-squared:  0.7648, Adjusted R-squared:  0.7643 
## F-statistic:  1808 on 5 and 2781 DF,  p-value: < 2.2e-16
# 3. Predicción para la Solicitud 2 (Estratos 5 y 6)
solicitud_2 <- data.frame(
  areaconst = c(300, 300),
  estrato = c(5, 6),
  habitaciones = c(5, 5),
  parqueaderos = c(3, 3),
  banios = c(3, 3)
)

predicciones_sur <- predict(modelo_sur, newdata = solicitud_2)

resultados_sur <- data.frame(
  Escenario = c("Estrato 5", "Estrato 6"),
  Precio_Estimado_Millones = round(predicciones_sur, 2)
)

print("--- Predicción de Precio para la Vivienda 2 ---")
## [1] "--- Predicción de Precio para la Vivienda 2 ---"
print(resultados_sur)
##   Escenario Precio_Estimado_Millones
## 1 Estrato 5                   701.66
## 2 Estrato 6                   760.90

Paso 7: Segunda Solicitud (Apartamento en la Zona Sur)

1. Interpretación del Modelo (Apartamentos Zona Sur) Al estimar el modelo de regresión lineal para la segunda solicitud, se observan dinámicas de mercado distintas a las de las casas en el norte:

  • Significancia: Todas las variables (área construida, estrato, habitaciones, parqueaderos y baños) resultaron ser estadísticamente significativas (p-valor < 0.05).
  • El efecto de las habitaciones (Dato clave): A diferencia de las otras variables que suman valor, el número de habitaciones tiene un coeficiente negativo (-17.89). Esto significa que, manteniendo la misma área construida, un apartamento con más habitaciones tiende a ser más económico. La lógica comercial dicta que fraccionar un apartamento en muchos cuartos reduce la amplitud de los espacios, restándole atractivo a los inmuebles de lujo.
  • Ajuste del Modelo: El \(R^2\) múltiple es de 0.7648. Es decir, las variables incluidas explican un 76.48% de la variabilidad del precio, logrando un ajuste superior al modelo de las casas.

2. Predicción del Precio (Vivienda 2) Se estimó el valor para un apartamento en la Zona Sur con 300 m², 5 habitaciones, 3 parqueaderos y 3 baños:

  • Escenario Estrato 5: El precio estimado es de 701.66 millones de pesos.
  • Escenario Estrato 6: El precio estimado es de 760.90 millones de pesos.

Conclusión financiera: Dado que la compañía cuenta con un crédito preaprobado de 850 millones de pesos, el cliente tiene amplia capacidad de compra. Puede adquirir un apartamento que cumpla con todas sus exigencias en el estrato más alto (estrato 6) y aún le sobraría un margen de negociación de casi 90 millones de pesos respecto al valor proyectado.

# ---------------------------------------------------------
# OFERTAS POTENCIALES - SOLICITUD 2
# ---------------------------------------------------------

# Filtramos propiedades reales (Presupuesto máx: 850M, Área cercana a 300)
ofertas_sur <- base2 %>%
  filter(preciom <= 850) %>%                  
  filter(estrato %in% c(5, 6)) %>%            
  filter(areaconst >= 250) %>%                
  arrange(abs(areaconst - 300)) %>%           
  head(5)                                     

# Tabla
print("--- Top 5 Ofertas Reales (Apartamentos Zona Sur) ---")
## [1] "--- Top 5 Ofertas Reales (Apartamentos Zona Sur) ---"
ofertas_sur %>% select(id, barrio, estrato, areaconst, habitaciones, banios, preciom)
# Mapa
mapa_ofertas_sur <- leaflet(ofertas_sur) %>%
  addTiles() %>%
  addMarkers(
    lng = ~longitud,
    lat = ~latitud,
    popup = ~paste("<b>Barrio:</b>", barrio, 
                   "<br><b>Precio:</b> $", preciom, "M",
                   "<br><b>Área:</b>", areaconst, "m2",
                   "<br><b>Estrato:</b>", estrato)
  )

# Mostrar el mapa
mapa_ofertas_sur

Paso 7 (Final): Ofertas Reales Sugeridas (Vivienda 2)

Para responder definitivamente a la segunda solicitud, se filtró la base de datos buscando apartamentos en la Zona Sur que cumplieran con el crédito preaprobado de 850 millones de pesos.

  • Opciones encontradas: Se identificaron 5 excelentes propiedades de estrato 5, con áreas muy cercanas a los 300 m² solicitados, ubicadas en barrios consolidados del sur de la ciudad como Cuarto de Legua, Seminario y Ciudadela Pasoancho.
  • Análisis financiero y valor agregado: Mientras que el presupuesto disponible es de 850 millones, las opciones reales encontradas oscilan entre los 410 y 670 millones de pesos. Esto representa un ahorro significativo para la compañía internacional, demostrando que su presupuesto está muy por encima de los precios actuales del mercado para estas características.
  • Validación geográfica: El mapa de visualización confirma que las propiedades sugeridas están correctamente ubicadas en el corredor sur de la ciudad, cumpliendo a cabalidad con la restricción geográfica de la solicitud[cite: 1].

Conclusión Ejecutiva y Recomendaciones Finales

Tras aplicar técnicas de modelación estadística y realizar un análisis espacial detallado de la base de datos de C&A, presentamos las siguientes conclusiones generales para responder a la solicitud de la compañía internacional[cite: 1]:

  • Viabilidad del portafolio: Ambas solicitudes son altamente viables dentro de la actual dinámica del mercado inmobiliario en Cali. La agencia cuenta con el inventario real y georreferenciado necesario para satisfacer las exigencias de ubicación, área y comodidades requeridas para los dos empleados y sus familias[cite: 1].
  • Cumplimiento y Optimización (Vivienda 1 - Casa en el Norte): El crédito preaprobado de 350 millones de pesos es adecuado[cite: 1]. Nuestro análisis demuestra que es posible adquirir propiedades que cumplen exactamente con las especificaciones (200 m², 4 habitaciones, 2 baños)[cite: 1], e incluso se lograron identificar oportunidades de mercado para ubicar al empleado en el estrato 5 sin exceder el límite financiero.
  • Ahorro Estratégico (Vivienda 2 - Apartamento en el Sur): La compañía internacional ha asignado un presupuesto muy holgado de 850 millones de pesos para esta propiedad[cite: 1]. El análisis revela que existen excelentes opciones de lujo en el estrato 5 de la Zona Sur que cumplen con todas las características exigidas (300 m², 5 habitaciones, 3 parqueaderos)[cite: 1] por valores notablemente inferiores (entre 410 y 670 millones). Esto representa una gran oportunidad de ahorro para la empresa compradora.
  • Recomendación comercial para C&A: Se sugiere a María presentar este portafolio de 10 ofertas potenciales. El hecho de que la agencia haya logrado encontrar opciones de alto perfil optimizando los créditos preaprobados fortalecerá enormemente la confianza del cliente corporativo, facilitando un cierre de ventas exitoso que ayudará a reactivar los ingresos de la compañía[cite: 1].