0.0.1 Caso C&

0.0.2 Enunciado

Maria comenzó como agente de bienes raíces en Cali hace 10 años. Después de laborar dos años para una empresa nacional, se traslado a Bogotá y trabajó para otra agencia de bienes raíces. Sus amigos y familiares la convencieron de que con su experiencia y conocimientos del negocio debía abrir su propia agencia. Terminó por adquirir la licencia de intermediario y al poco tiempo fundó su propia compañía, C&A (Casas y Apartamentos) en Cali. Santiago y Lina, dos vendedores de la empresa anterior aceptaron trabajar en la nueva compaña. En la actualidad ocho agentes de bienes raíces colaboran con ella en C&A.

Actualmente las ventas de bienes raíces en Cali se han visto disminuidas de manera significativa en lo corrido del año. Durante este periodo muchas instituciones bancarias de ahorro y vivienda están prestando grandes sumas de dinero para la industria y la construcción comercial y residencial. Cuando el efecto producto de las tensiones políticas y sociales disminuya, se espera que la actividad económica de este sector se reactive.

Hace dos días, María recibió una carta solicitando asesoría para la compra de dos viviendas por parte de una compañía internacional que desea ubicar a dos de sus empleados con sus familias en la ciudad. Las solicitudes incluyen las siguientes condiciones:

Características | Vivienda 1 | Vivienda 2 |

|-||| | Tipo | Casa | Apartamento | | área construida | 200 | 300 | | parqueaderos | 1 | 3 | | baños | 2 | 3 | | habitaciones | 4 | 5 | | estrato | 4 o 5 | 5 o 6 | | zona | Norte | Sur | | crédito preaprobado | 350 millones | 850 millones |

Ayude a María a responder la solicitud, mediante técnicas modelación que usted conoce. Ella requiere le envíe un informe ejecutivo donde analice los dos casos y sus recomendaciones (Informe). Como soporte del informe debe anexar las estimaciones, validaciones y comparación de modelos requeridos (Anexos) .

variable descripción
zona ubicación de la vivienda : Zona Centro, Zona Norte,…
piso piso que ocupa la vivienda : primer piso, segundo piso…
estrato estrato socio-económico : 3,4,5,6
preciom precio de la vivienda en millones de pesos
areaconst área construida
parqueaderos número de parqueaderos
banios número de baños
habitaciones número de habitaciones
tipo tipo de vivienda : Casa, Apartamento
barrio barrio de ubicación de la vivienda : 20 de Julio, alamos,..
longitud coordenada geográfica
latitud coordenada geográfica

0.0.3 Pasos requeridos para la obtención de los resultados

  1. Realice un filtro a la base de datos e incluya solo las ofertas de : base1: casas, de la zona norte de la ciudad. Presente los primeros 3 registros de las bases y algunas tablas que comprueben la consulta. (Adicional un mapa con los puntos de las bases. Discutir si todos los puntos se ubican en la zona correspondiente o se presentan valores en otras zonas, por que?).

  2. Realice un análisis exploratorio de datos enfocado en la correlación entre la variable respuesta (precio de la casa) en función del área construida, estrato, numero de baños, numero de habitaciones y zona donde se ubica la vivienda. Use gráficos interactivos con el paquete plotly e interprete los resultados.

  3. Estime un modelo de regresión lineal múltiple con las variables del punto anterior (precio = f(área construida, estrato, número de cuartos, número de parqueaderos, número de baños ) ) e interprete los coeficientes si son estadísticamente significativos. Las interpretaciones deber están contextualizadas y discutir si los resultados son lógicos. Adicionalmente interprete el coeficiente R2 y discuta el ajuste del modelo e implicaciones (que podrían hacer para mejorarlo).

  4. Realice la validación de supuestos del modelo e interprete los resultados (no es necesario corregir en caso de presentar problemas, solo realizar sugerencias de que se podría hacer).

  5. Con el modelo identificado debe predecir el precio de la vivienda con las características de la primera solicitud.

  6. Con las predicciones del modelo sugiera potenciales ofertas que responda a la solicitud de la vivienda 1. Tenga encuentra que la empresa tiene crédito pre-aprobado de máximo 350 millones de pesos. Realice un análisis y presente en un mapa al menos 5 ofertas potenciales que debe discutir.

  7. Realice los pasos del 1 al 6. Para la segunda solicitud que tiene un crédito pre-aprobado por valor de $850 millones.

0.1 Configuración Inicial

Primero, se procede a instalar y cargar las librerías necesarias para el análisis. Se utilizarán devtools para instalar el paquete de datos, dplyr para la manipulación de datos, leaflet para la visualización geoespacial y plotly para gráficos interactivos.

# Instalar y cargar librerías
if (!require("devtools")) install.packages("devtools")
if (!require("paqueteMODELOS")) devtools::install_github("centromagis/paqueteMODELOS", force = TRUE)
if (!require("dplyr")) install.packages("dplyr")
if (!require("leaflet")) install.packages("leaflet")
if (!require("plotly")) install.packages("plotly")
if (!require("knitr")) install.packages("knitr")

library(paqueteMODELOS)
library(dplyr)
library(leaflet)
library(plotly)
library(knitr)

A continuación, se cargan los datos y se realiza una limpieza inicial. Se renombran las variables para una mejor comprensión y se eliminan registros incompletos que son cruciales para el análisis.

# Cargar el conjunto de datos
data("vivienda")

# Renombrar variables para mayor claridad
datos_inmuebles <- vivienda %>%
  rename(
    Zona = zona,
    Piso = piso,
    Estrato = estrato,
    Precio_Millones = preciom,
    Area_Construida = areaconst,
    Parqueaderos = parqueaderos,
    Banios = banios,
    Habitaciones = habitaciones,
    Tipo = tipo,
    Barrio = barrio,
    Longitud = longitud,
    Latitud = latitud
  ) %>%
  # Eliminar filas con valores NA en Precio_Millones o Area_Construida, ya que son cruciales
  filter(!is.na(Precio_Millones) & !is.na(Area_Construida))

1 Paso 1: Filtrado y Visualización de Datos para la Vivienda 1 (Casa en Zona Norte)

Para la primera solicitud, se necesita analizar únicamente las casas ubicadas en la Zona Norte de Cali. Se crea un subconjunto de datos (casas_norte) que cumple con estas características.

# Filtrar la base de datos para casas en la Zona Norte
casas_norte <- datos_inmuebles %>%
  filter(Tipo == 'Casa', Zona == 'Zona Norte')

# Mostrar los primeros 3 registros para verificar el filtro
kable(head(casas_norte, 3), caption = "Primeros 3 registros de Casas en la Zona Norte")
Primeros 3 registros de Casas en la Zona Norte
id Zona Piso Estrato Precio_Millones Area_Construida Parqueaderos Banios Habitaciones Tipo Barrio Longitud Latitud
1209 Zona Norte 02 5 320 150 2 4 6 Casa acopi -76.51341 3.47968
1592 Zona Norte 02 5 780 380 2 3 3 Casa acopi -76.51674 3.48721
4057 Zona Norte 02 6 750 445 NA 7 6 Casa acopi -76.52950 3.38527

Para confirmar que el filtro se aplicó correctamente, se generan tablas de frecuencia para las variables Tipo y Zona.

# Verificar la distribución por tipo de inmueble
cat("Porcentaje por Tipo de Inmueble:\n")
## Porcentaje por Tipo de Inmueble:
print(prop.table(table(casas_norte$Tipo)) * 100)
## 
## Casa 
##  100
# Verificar la distribución por zona
cat("\nPorcentaje por Zona:\n")
## 
## Porcentaje por Zona:
print(prop.table(table(casas_norte$Zona)) * 100)
## 
## Zona Norte 
##        100

Interpretación: Las tablas de frecuencia muestran que el 100% de los registros en el nuevo conjunto de datos casas_norte corresponden a ‘Casa’ y ‘Zona Norte’, lo que confirma que el filtro fue exitoso.

1.1 Mapa de Ubicación de las Viviendas

Se genera un mapa interactivo para visualizar la distribución geográfica de las casas en la Zona Norte. Esto permite evaluar si las coordenadas corresponden lógicamente a la zona especificada.

# Crear un mapa interactivo con Leaflet
mapa_casas_norte <- leaflet(data = casas_norte) %>%
  addTiles() %>%
  addMarkers(
    lng = ~Longitud,
    lat = ~Latitud,
    clusterOptions = markerClusterOptions(), # Agrupar marcadores cercanos
    popup = ~paste("<b>Precio:</b>", Precio_Millones, "M<br>",
                   "<b>Barrio:</b>", Barrio)
  )

# Mostrar el mapa
mapa_casas_norte

Interpretación del Mapa: El mapa muestra una concentración de propiedades en una región geográfica específica. (Análisis agregado) Sin embargo, se observa una dispersión considerable, con algunos puntos que parecen estar fuera de lo que tradicionalmente se consideraría la “Zona Norte” de Cali. Esto podría deberse a errores en el registro de las coordenadas geográficas o a una definición amplia de los límites de la zona en la base de datos. Para un análisis más preciso, sería recomendable validar estas ubicaciones atípicas.

2 Paso 2: Análisis Exploratorio de Datos (EDA)

Se realiza un análisis exploratorio para entender las relaciones entre el precio de la vivienda y sus características más relevantes.

2.1 Resumen Estadístico

Un resumen estadístico nos da una primera visión de la distribución de las variables numéricas.

# Generar un resumen estadístico de las variables numéricas
summary(casas_norte %>% select_if(is.numeric))
##        id            Estrato      Precio_Millones  Area_Construida 
##  Min.   :  58.0   Min.   :3.000   Min.   :  89.0   Min.   :  30.0  
##  1st Qu.: 766.2   1st Qu.:3.000   1st Qu.: 261.2   1st Qu.: 140.0  
##  Median :2257.0   Median :4.000   Median : 390.0   Median : 240.0  
##  Mean   :2574.6   Mean   :4.202   Mean   : 445.9   Mean   : 264.9  
##  3rd Qu.:4225.0   3rd Qu.:5.000   3rd Qu.: 550.0   3rd Qu.: 336.8  
##  Max.   :8319.0   Max.   :6.000   Max.   :1940.0   Max.   :1440.0  
##                                                                    
##   Parqueaderos        Banios        Habitaciones       Longitud     
##  Min.   : 1.000   Min.   : 0.000   Min.   : 0.000   Min.   :-76.59  
##  1st Qu.: 1.000   1st Qu.: 2.000   1st Qu.: 3.000   1st Qu.:-76.53  
##  Median : 2.000   Median : 3.000   Median : 4.000   Median :-76.52  
##  Mean   : 2.182   Mean   : 3.555   Mean   : 4.507   Mean   :-76.52  
##  3rd Qu.: 3.000   3rd Qu.: 4.000   3rd Qu.: 5.000   3rd Qu.:-76.50  
##  Max.   :10.000   Max.   :10.000   Max.   :10.000   Max.   :-76.47  
##  NA's   :287                                                        
##     Latitud     
##  Min.   :3.333  
##  1st Qu.:3.452  
##  Median :3.468  
##  Mean   :3.460  
##  3rd Qu.:3.482  
##  Max.   :3.496  
## 

Interpretación: El resumen muestra que el precio promedio de una casa en la Zona Norte es de 445.9 millones, con áreas construidas que varían significativamente. Se nota también la presencia de valores faltantes (NA's) en la variable Parqueaderos, lo cual deberá ser manejado antes de modelar.

2.2 Correlación entre Precio y Características

Utilizaremos gráficos interactivos de plotly para explorar visualmente la relación entre el precio y otras variables clave.

2.2.1 Precio vs. Área Construida

# Crear gráfico de dispersión interactivo: Precio vs. Área Construida
plot_area <- ggplot(casas_norte, aes(x = Area_Construida, y = Precio_Millones,
                                   text = paste("Estrato:", Estrato, "<br>Barrio:", Barrio))) +
  geom_point(aes(color = Estrato), alpha = 0.6) +
  geom_smooth(method = "lm", se = FALSE, color = "red") +
  labs(title = "Precio vs. Área Construida en la Zona Norte",
       x = "Área Construida (m²)",
       y = "Precio (Millones de Pesos)") +
  theme_minimal()

ggplotly(plot_area, tooltip = c("y", "x", "text"))

Interpretación: Se observa una correlación positiva clara entre el área construida y el precio. A medida que aumenta el tamaño de la casa, su precio tiende a incrementarse. Las líneas de tendencia confirma esta relación lineal. Existen algunos puntos atípicos con áreas muy grandes que podrían influir en un modelo posterior.

2.2.2 Precio vs. Estrato

# Crear boxplot interactivo: Precio vs. Estrato
plot_estrato <- ggplot(casas_norte, aes(x = as.factor(Estrato), y = Precio_Millones, fill = as.factor(Estrato))) +
  geom_boxplot(alpha = 0.7) +
  labs(title = "Distribución de Precios por Estrato",
       x = "Estrato Socioeconómico",
       y = "Precio (Millones de Pesos)") +
  theme_minimal() +
  guides(fill = "none") # Ocultar la leyenda

ggplotly(plot_estrato)

Interpretación: El gráfico de cajas muestra que el precio mediano aumenta con el estrato. Los estratos 5 y 6 presentan una mayor dispersión en los precios, indicando una mayor variabilidad en las propiedades de gama alta. El estrato 3, en cambio, tiene precios más homogéneos y bajos.

2.2.3 Precio vs. Número de Baños

# Crear gráfico de dispersión interactivo: Precio vs. Baños
plot_banios <- ggplot(casas_norte, aes(x = Banios, y = Precio_Millones)) +
  geom_jitter(aes(color = as.factor(Estrato)), width = 0.2, alpha = 0.6) + # Jitter para evitar sobreposición
  labs(title = "Precio vs. Número de Baños",
       x = "Cantidad de Baños",
       y = "Precio (Millones de Pesos)") +
  theme_minimal()

ggplotly(plot_banios)

Interpretación: Se evidencia una tendencia positiva: a mayor número de baños, el precio tiende a ser más alto. (Análisis agregado) Es interesante notar que las viviendas con más de 5 baños pertenecen casi exclusivamente a los estratos más altos (5 y 6), lo que sugiere una fuerte interacción entre estas variables.

2.2.4 Precio vs. Número de Habitaciones

# Crear gráfico de dispersión interactivo: Precio vs. Habitaciones
plot_habitaciones <- ggplot(casas_norte, aes(x = Habitaciones, y = Precio_Millones)) +
  geom_jitter(aes(color = as.factor(Estrato)), width = 0.2, alpha = 0.6) +
  labs(title = "Precio vs. Número de Habitaciones",
       x = "Cantidad de Habitaciones",
       y = "Precio (Millones de Pesos)") +
  theme_minimal()

ggplotly(plot_habitaciones)

Interpretación: Al igual que con los baños, existe una relación positiva entre el número de habitaciones y el precio. Las casas con un mayor número de habitaciones suelen tener precios más elevados, lo cual es coherente con la lógica del mercado inmobiliario, ya que a menudo se correlaciona con un mayor tamaño general de la vivienda.

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

Ahora, se construirá un modelo de regresión lineal múltiple para predecir el precio de las viviendas. La variable dependiente será Precio_Millones, y las variables independientes serán el área construida, estrato, número de habitaciones, baños y parqueaderos.

3.1 Preparación de los Datos para el Modelo

El análisis exploratorio reveló valores faltantes (NA) en la variable Parqueaderos. Para construir el modelo, se utilizará un enfoque de caso completo, eliminando las filas que contengan cualquier valor faltante en las variables de interés.

# Seleccionar variables para el modelo y eliminar filas con NAs
datos_modelo_casas <- casas_norte %>%
  select(Precio_Millones, Area_Construida, Estrato, Habitaciones, Banios, Parqueaderos) %>%
  na.omit()

# Verificar las dimensiones del nuevo dataset
cat("Número de observaciones completas para el modelo:", nrow(datos_modelo_casas))
## Número de observaciones completas para el modelo: 435

3.2 Construcción e Interpretación del Modelo

Se ajusta el modelo lineal (lm) con los datos preparados.

# Estimar el modelo de regresión lineal múltiple
modelo_casas <- lm(Precio_Millones ~ Area_Construida + Estrato + Habitaciones + Banios + Parqueaderos, 
                   data = datos_modelo_casas)

# Mostrar el resumen del modelo
summary(modelo_casas)
## 
## Call:
## lm(formula = Precio_Millones ~ Area_Construida + Estrato + Habitaciones + 
##     Banios + Parqueaderos, data = datos_modelo_casas)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -784.29  -77.56  -16.03   47.67  978.61 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)     -238.17090   44.40551  -5.364 1.34e-07 ***
## Area_Construida    0.67673    0.05281  12.814  < 2e-16 ***
## Estrato           80.63495    9.82632   8.206 2.70e-15 ***
## Habitaciones       7.64511    5.65873   1.351    0.177    
## Banios            18.89938    7.48800   2.524    0.012 *  
## Parqueaderos      24.00598    5.86889   4.090 5.14e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 155.1 on 429 degrees of freedom
## Multiple R-squared:  0.6041, Adjusted R-squared:  0.5995 
## F-statistic: 130.9 on 5 and 429 DF,  p-value: < 2.2e-16

Interpretación de los Resultados del Modelo:

El resumen del modelo nos proporciona información clave sobre la relación entre las variables.

  • Coeficientes (Estimate):
    • (Intercept): El valor de -238.17 es el precio base teórico si todas las demás variables fueran cero. En este contexto, no tiene una interpretación práctica, ya que una casa no puede tener 0 m² o pertenecer al estrato 0.
    • Area_Construida: Por cada metro cuadrado adicional, el precio de la vivienda se incrementa en 0.677 millones de pesos (o $677,000), manteniendo las demás variables constantes. Este coeficiente es altamente significativo (p-valor < 2e-16), lo cual es lógico y esperado.
    • Estrato: Por cada nivel que aumenta el estrato, el precio de la casa aumenta en promedio 80.63 millones de pesos. Es una de las variables más influyentes y es muy significativa.
    • Banios: Cada baño adicional se asocia con un aumento de 18.90 millones de pesos en el precio de la vivienda. Este resultado es estadísticamente significativo (p-valor = 0.012).
    • Parqueaderos: Cada parqueadero adicional incrementa el valor de la propiedad en 24.01 millones de pesos. También es muy significativo.
    • Habitaciones: Curiosamente, este coeficiente no es estadísticamente significativo (p-valor = 0.177). Esto podría indicar que su efecto ya está capturado por otras variables más dominantes como Area_Construida.
  • Coeficiente de Determinación (Adjusted R-squared):
    • El valor de 0.5995 (o 59.95%) indica que el modelo explica aproximadamente el 60% de la variabilidad en los precios de las casas en la Zona Norte. Si bien es un ajuste moderado, es un buen punto de partida.
    • ****(Análisis agregado)** Para mejorar el modelo, se podrían incluir variables adicionales como la antigüedad del inmueble, la calidad de los acabados, la cercanía a parques o centros comerciales, o incluso variables de interacción (ej. Area_Construida * Estrato).

4 Paso 4: Validación de Supuestos del Modelo

Todo modelo de regresión lineal se basa en ciertos supuestos sobre los residuos (los errores de predicción). Es crucial validarlos para confiar en las conclusiones.

# Generar gráficos de diagnóstico del modelo
par(mfrow = c(2, 2))
plot(modelo_casas)

par(mfrow = c(1, 1))

Interpretación de los Gráficos de Diagnóstico:

  1. Residuals vs. Fitted: Este gráfico ayuda a verificar la linealidad y la homocedasticidad (varianza constante de los errores). La línea roja no es perfectamente horizontal y se observa un patrón de “cono”, lo que sugiere una leve heterocedasticidad (la varianza de los errores aumenta con el valor predicho).
  2. Normal Q-Q: Los puntos se desvían de la línea diagonal en los extremos. Esto indica que los residuos no siguen una distribución normal perfectamente, especialmente en las colas (valores extremos).

Para confirmar la falta de normalidad, realizamos una prueba de Shapiro-Wilk.

# Realizar la prueba de normalidad de Shapiro-Wilk sobre los residuos
shapiro.test(residuals(modelo_casas))
## 
##  Shapiro-Wilk normality test
## 
## data:  residuals(modelo_casas)
## W = 0.85246, p-value < 2.2e-16

Interpretación de la Prueba de Normalidad: El p-valor es extremadamente pequeño (< 2.2e-16), lo que nos lleva a rechazar la hipótesis de normalidad. Los residuos del modelo no se distribuyen normalmente.

Sugerencias: Para corregir estos problemas, se podría: * Transformar la variable de respuesta: Aplicar una transformación logarítmica al precio (log(Precio_Millones)) suele estabilizar la varianza y normalizar los residuos. * Utilizar Regresión Robusta: Emplear métodos menos sensibles a los valores atípicos.

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

Con el modelo estimado, se predice el precio para una casa con las características solicitadas por el cliente, considerando las dos opciones de estrato (4 y 5).

# Crear un dataframe con las características de la vivienda solicitada
solicitud_1 <- data.frame(
  Area_Construida = 200,
  Parqueaderos = 1,
  Banios = 2,
  Habitaciones = 4,
  Estrato = c(4, 5) # Dos escenarios: estrato 4 y estrato 5
)

# Realizar la predicción
prediccion_v1 <- predict(modelo_casas, newdata = solicitud_1, interval = "confidence")

# Unir los resultados en una tabla clara
resultados_prediccion <- cbind(solicitud_1, Prediccion_M = prediccion_v1[,1])
kable(resultados_prediccion, caption = "Precios Estimados para la Vivienda Solicitada")
Precios Estimados para la Vivienda Solicitada
Area_Construida Parqueaderos Banios Habitaciones Estrato Prediccion_M
200 1 2 4 4 312.1010
200 1 2 4 5 392.7359

Interpretación de la Predicción: El modelo predice un precio de 312.1 millones de pesos para una casa de estrato 4 y 392.7 millones para una de estrato 5, con las demás características especificadas. La diferencia de ~80.6 millones entre ambas predicciones es consistente con el coeficiente de la variable Estrato calculado en el modelo. Dado el crédito pre-aprobado de 350 millones, la opción de estrato 4 es la única viable según esta estimación.

6 Paso 6: Sugerencia de Ofertas Potenciales

Finalmente, se filtra la base de datos para encontrar ofertas reales que se ajusten a los requisitos del cliente y a su presupuesto máximo de 350 millones de pesos.

# Filtrar ofertas que cumplan con los requisitos y el presupuesto
ofertas_potenciales_v1 <- casas_norte %>%
  filter(
    Precio_Millones <= 350,
    Estrato %in% c(4, 5),
    Area_Construida >= 200,
    Habitaciones >= 4,
    Banios >= 2,
    Parqueaderos >= 1
  ) %>%
  arrange(desc(Estrato), Precio_Millones) # Ordenar por estrato y luego por precio

# Mostrar las primeras 5 ofertas encontradas
kable(head(ofertas_potenciales_v1, 5), caption = "Top 5 Ofertas Potenciales para la Vivienda 1")
Top 5 Ofertas Potenciales para la Vivienda 1
id Zona Piso Estrato Precio_Millones Area_Construida Parqueaderos Banios Habitaciones Tipo Barrio Longitud Latitud
1009 Zona Norte NA 5 250 243 1 4 5 Casa el bosque -76.50755 3.47838
1914 Zona Norte 02 5 300 205 2 5 6 Casa vipasa -76.51832 3.48138
1343 Zona Norte 02 5 320 200 2 4 4 Casa la flora -76.51524 3.48893
3053 Zona Norte 02 5 320 230 2 4 4 Casa la flora -76.52353 3.48352
1151 Zona Norte NA 5 320 210 2 3 5 Casa urbanización la merced -76.51200 3.47600

Análisis y Mapa de Ofertas: Se encontraron varias propiedades que cumplen con los criterios. La tabla muestra las 5 opciones más relevantes. Para facilitar la decisión, se visualizan todas las ofertas encontradas en un mapa interactivo.

# Crear un mapa interactivo con las ofertas potenciales
mapa_ofertas_v1 <- leaflet(data = ofertas_potenciales_v1) %>%
  addTiles() %>%
  addMarkers(
    lng = ~Longitud,
    lat = ~Latitud,
    popup = ~paste("<b>Precio:</b>", Precio_Millones, "M<br>",
                   "<b>Área:</b>", Area_Construida, "m²<br>",
                   "<b>Estrato:</b>", Estrato, "<br>",
                   "<b>Barrio:</b>", Barrio)
  )

mapa_ofertas_v1

Discusión de Ofertas: El filtro ha identificado un conjunto de excelentes candidatas para el cliente. Hay opciones tanto en estrato 4 como en estrato 5 que se ajustan al presupuesto de 350 millones. (Análisis agregado) Se recomienda a María presentarle al cliente las propiedades del barrio “La Flora” y “Vipasa”, ya que ofrecen una buena combinación de características y se encuentran dentro del rango de precio, incluso siendo de estrato 5. El mapa interactivo es una herramienta ideal para que el cliente explore la ubicación exacta de cada una y evalúe su entorno.

7 Paso 7: Análisis Completo para la Vivienda 2 (Apartamento en Zona Sur)

Ahora se repite el proceso completo para la segunda solicitud: un apartamento en la Zona Sur con un presupuesto de 850 millones de pesos.

7.1 7.1. Filtrado y Visualización de Datos

Primero, se filtra el conjunto de datos principal para aislar los apartamentos ubicados en la Zona Sur de la ciudad.

# Filtrar la base de datos para apartamentos en la Zona Sur
apartamentos_sur <- datos_inmuebles %>%
  filter(Tipo == 'Apartamento', Zona == 'Zona Sur')

# Mostrar los primeros 3 registros para verificar el filtro
kable(head(apartamentos_sur, 3), caption = "Primeros 3 registros de Apartamentos en la Zona Sur")
Primeros 3 registros de Apartamentos en la Zona Sur
id Zona Piso Estrato Precio_Millones Area_Construida Parqueaderos Banios Habitaciones Tipo Barrio Longitud Latitud
5098 Zona Sur 05 4 290 96 1 2 3 Apartamento acopi -76.53464 3.44987
698 Zona Sur 02 3 78 40 1 1 2 Apartamento aguablanca -76.50100 3.40000
8199 Zona Sur NA 6 875 194 2 5 3 Apartamento aguacatal -76.55700 3.45900

Se crea un mapa para visualizar la distribución geográfica de estos apartamentos.

# Crear un mapa interactivo con Leaflet para los apartamentos del sur
mapa_apartamentos_sur <- leaflet(data = apartamentos_sur) %>%
  addTiles() %>%
  addMarkers(
    lng = ~Longitud,
    lat = ~Latitud,
    clusterOptions = markerClusterOptions(),
    popup = ~paste("<b>Precio:</b>", Precio_Millones, "M<br>",
                   "<b>Barrio:</b>", Barrio)
  )

# Mostrar el mapa
mapa_apartamentos_sur

Interpretación del Mapa: Como se esperaba, los puntos se concentran en la parte sur de la ciudad. La densidad de apartamentos en esta zona es notablemente mayor que la de casas en la zona norte, lo que refleja las tendencias de desarrollo urbano de Cali.

7.2 7.2. Análisis Exploratorio de Datos (EDA)

Se realiza un análisis exploratorio para entender las características de los apartamentos en esta zona.

# Generar un resumen estadístico de las variables numéricas
summary(apartamentos_sur %>% select_if(is.numeric))
##        id          Estrato     Precio_Millones  Area_Construida 
##  Min.   :   3   Min.   :3.00   Min.   :  75.0   Min.   : 40.00  
##  1st Qu.:2292   1st Qu.:4.00   1st Qu.: 175.0   1st Qu.: 65.00  
##  Median :4004   Median :5.00   Median : 245.0   Median : 85.00  
##  Mean   :4131   Mean   :4.63   Mean   : 297.3   Mean   : 97.47  
##  3rd Qu.:5876   3rd Qu.:5.00   3rd Qu.: 335.0   3rd Qu.:110.00  
##  Max.   :8302   Max.   :6.00   Max.   :1750.0   Max.   :932.00  
##                                                                 
##   Parqueaderos        Banios       Habitaciones      Longitud     
##  Min.   : 1.000   Min.   :0.000   Min.   :0.000   Min.   :-76.57  
##  1st Qu.: 1.000   1st Qu.:2.000   1st Qu.:3.000   1st Qu.:-76.54  
##  Median : 1.000   Median :2.000   Median :3.000   Median :-76.53  
##  Mean   : 1.415   Mean   :2.488   Mean   :2.966   Mean   :-76.53  
##  3rd Qu.: 2.000   3rd Qu.:3.000   3rd Qu.:3.000   3rd Qu.:-76.52  
##  Max.   :10.000   Max.   :8.000   Max.   :6.000   Max.   :-76.46  
##  NA's   :406                                                      
##     Latitud     
##  Min.   :3.334  
##  1st Qu.:3.370  
##  Median :3.383  
##  Mean   :3.390  
##  3rd Qu.:3.406  
##  Max.   :3.497  
## 

Interpretación: El precio promedio de un apartamento en la Zona Sur es de 297.3 millones, considerablemente menor que el de las casas en el norte. El área construida promedio también es menor (97.5 m²). Nuevamente, se observan valores faltantes en Parqueaderos y Piso.

7.2.1 Gráficos Interactivos de Correlación

# Gráfico de dispersión: Precio vs. Área Construida
plot_area_2 <- ggplot(apartamentos_sur, aes(x = Area_Construida, y = Precio_Millones)) +
  geom_point(aes(color = Estrato), alpha = 0.5) +
  geom_smooth(method = "lm", se = FALSE, color = "purple") +
  labs(title = "Precio vs. Área Construida (Aptos Sur)", x = "Área (m²)", y = "Precio (M)") +
  theme_bw()

# Boxplot: Precio vs. Estrato
plot_estrato_2 <- ggplot(apartamentos_sur, aes(x = as.factor(Estrato), y = Precio_Millones, fill = as.factor(Estrato))) +
  geom_boxplot(alpha = 0.7) +
  labs(title = "Precio por Estrato (Aptos Sur)", x = "Estrato", y = "Precio (M)") +
  theme_bw() + guides(fill="none")

# subplot para mostrar ambos gráficos
subplot(ggplotly(plot_area_2), ggplotly(plot_estrato_2), nrows = 1, titleX = TRUE, titleY = TRUE)

Interpretación de Gráficos: * Precio vs. Área: La relación positiva es aún más fuerte y clara que en el caso de las casas. El precio de los apartamentos está fuertemente ligado a su tamaño. (Análisis agregado) Se observa la presencia de apartamentos de lujo (puntos con precios y áreas muy altas), que podrían tener una influencia significativa en el modelo. * Precio vs. Estrato: La tendencia es idéntica: a mayor estrato, mayor es el precio y la variabilidad de este. El estrato 6 muestra los precios más altos y dispersos.

7.3 7.3. Estimación del Modelo de Regresión Lineal

Se ajusta un nuevo modelo lineal para predecir el precio de los apartamentos en la Zona Sur.

# Preparar datos (eliminando NAs) y estimar el modelo
datos_modelo_aptos <- apartamentos_sur %>%
  select(Precio_Millones, Area_Construida, Estrato, Habitaciones, Banios, Parqueaderos) %>%
  na.omit()

modelo_aptos <- lm(Precio_Millones ~ Area_Construida + Estrato + Habitaciones + Banios + Parqueaderos, 
                   data = datos_modelo_aptos)

# Mostrar el resumen del modelo
summary(modelo_aptos)
## 
## Call:
## lm(formula = Precio_Millones ~ Area_Construida + Estrato + Habitaciones + 
##     Banios + Parqueaderos, data = datos_modelo_aptos)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1092.02   -42.28    -1.33    40.58   926.56 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)     -261.62501   15.63220 -16.736  < 2e-16 ***
## Area_Construida    1.28505    0.05403  23.785  < 2e-16 ***
## Estrato           60.89709    3.08408  19.746  < 2e-16 ***
## Habitaciones     -24.83693    3.89229  -6.381 2.11e-10 ***
## Banios            50.69675    3.39637  14.927  < 2e-16 ***
## Parqueaderos      72.91468    3.95797  18.422  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 98.02 on 2375 degrees of freedom
## Multiple R-squared:  0.7485, Adjusted R-squared:  0.748 
## F-statistic:  1414 on 5 and 2375 DF,  p-value: < 2.2e-16

Interpretación de los Resultados del Modelo:

  • Coeficientes: Todas las variables son altamente significativas (p-valores muy bajos).
    • Area_Construida: Cada m² adicional incrementa el precio en 1.28 millones. Este impacto es casi el doble que en el modelo de casas.
    • Estrato: Un aumento de un nivel en el estrato se asocia a un incremento de 60.9 millones en el precio.
    • Banios y Parqueaderos: Aportan 50.7 y 72.9 millones al precio, respectivamente. Su influencia es mucho mayor en el mercado de apartamentos de la Zona Sur.
    • Habitaciones: Sorprendentemente, el coeficiente es negativo (-24.8 millones). Esto parece contraintuitivo. (Análisis agregado) Podría deberse a multicolinealidad. Es posible que, para un área construida fija, tener más habitaciones signifique que estas son más pequeñas o que otros espacios (como sala o cocina) se reducen, lo que podría disminuir el valor percibido por el mercado en esta zona específica.
  • Adjusted R-squared: El valor de 0.748 es excelente. El modelo explica casi el 75% de la variabilidad en los precios, lo que indica un muy buen ajuste a los datos.

7.4 7.4. Validación de Supuestos del Modelo

Se revisan los supuestos del nuevo modelo.

# Gráficos de diagnóstico
par(mfrow = c(2, 2))
plot(modelo_aptos)

par(mfrow = c(1, 1))

# Prueba de Shapiro-Wilk
shapiro.test(residuals(modelo_aptos))
## 
##  Shapiro-Wilk normality test
## 
## data:  residuals(modelo_aptos)
## W = 0.79118, p-value < 2.2e-16

Interpretación: Al igual que en el primer modelo, los gráficos y la prueba de Shapiro-Wilk (p-valor < 2.2e-16) indican que los residuos no cumplen los supuestos de homocedasticidad y normalidad. Las mismas sugerencias de mejora (transformación de la variable respuesta) aplicarían aquí.

7.5 7.5. Predicción de Precio para la Solicitud 2

Se utiliza el modelo_aptos para predecir el precio del apartamento solicitado.

# Crear dataframe con las características de la segunda solicitud
solicitud_2 <- data.frame(
  Area_Construida = 300,
  Parqueaderos = 3,
  Banios = 3,
  Habitaciones = 5,
  Estrato = c(5, 6) # Escenarios para estrato 5 y 6
)

# Realizar la predicción
prediccion_v2 <- predict(modelo_aptos, newdata = solicitud_2)

# Unir resultados en una tabla
resultados_prediccion_2 <- cbind(solicitud_2, Prediccion_M = prediccion_v2)
kable(resultados_prediccion_2, caption = "Precios Estimados para el Apartamento Solicitado")
Precios Estimados para el Apartamento Solicitado
Area_Construida Parqueaderos Banios Habitaciones Estrato Prediccion_M
300 3 3 5 5 675.0247
300 3 3 5 6 735.9218

Interpretación de la Predicción: El modelo estima un precio de 675 millones para un apartamento de estrato 5 y 735.9 millones para uno de estrato 6. Ambas predicciones están cómodamente dentro del presupuesto de 850 millones del cliente, dándole flexibilidad para elegir entre las dos opciones de estrato.

7.6 7.6. Sugerencia de Ofertas Potenciales

Finalmente, se buscan ofertas reales en el mercado que coincidan con los exigentes criterios del cliente.

# Filtrar ofertas que cumplan con los requisitos de la segunda solicitud
ofertas_potenciales_v2 <- apartamentos_sur %>%
  filter(
    Precio_Millones <= 850,
    Estrato %in% c(5, 6),
    Area_Construida >= 300,
    Habitaciones >= 5,
    Banios >= 3,
    Parqueaderos >= 3
  ) %>%
  arrange(Estrato, Precio_Millones)

# Mostrar las ofertas encontradas
kable(ofertas_potenciales_v2, caption = "Ofertas Potenciales para la Vivienda 2")
Ofertas Potenciales para la Vivienda 2
id Zona Piso Estrato Precio_Millones Area_Construida Parqueaderos Banios Habitaciones Tipo Barrio Longitud Latitud
7512 Zona Sur NA 5 670 300 3 5 6 Apartamento seminario -76.550 3.409
7182 Zona Sur NA 5 730 573 3 8 5 Apartamento guadalupe -76.548 3.408
# Crear un mapa interactivo con las ofertas encontradas
mapa_ofertas_v2 <- leaflet(data = ofertas_potenciales_v2) %>%
  addTiles() %>%
  addMarkers(
    lng = ~Longitud,
    lat = ~Latitud,
    popup = ~paste("<b>Precio:</b>", Precio_Millones, "M<br>",
                   "<b>Barrio:</b>", Barrio, "<br>",
                   "<b>Estrato:</b>", Estrato)
  )

mapa_ofertas_v2

Discusión y Recomendación Final: A diferencia de la primera búsqueda, la combinación de características para el apartamento es muy específica y corresponde a un nicho de lujo. Como resultado, solo se encontraron dos propiedades que cumplen con todos los criterios. * Una en el barrio Guadalupe (estrato 5) por 730 millones. * Otra en el barrio Seminario (estrato 5) por 670 millones.

Recomendación para María: Debe informar al cliente que, aunque su presupuesto es adecuado, la oferta de inmuebles con características tan específicas (más de 300 m², 5 habitaciones, etc.) es muy limitada. Las dos opciones encontradas son excelentes puntos de partida y se alinean con las predicciones del modelo. Se sugiere presentarlas de inmediato y, si no son del agrado del cliente, considerar flexibilizar ligeramente alguno de los requisitos (por ejemplo, reducir a 4 habitaciones o un área de 280 m²) para ampliar significativamente el abanico de propiedades disponibles.