library(dplyr)            # Manipulación de datos
## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(paqueteMODELOS)   # Carga de datos
## Cargando paquete requerido: boot
## Cargando paquete requerido: broom
## Cargando paquete requerido: GGally
## Warning: package 'GGally' was built under R version 4.5.2
## Cargando paquete requerido: ggplot2
## Warning: package 'ggplot2' was built under R version 4.5.2
## Cargando paquete requerido: gridExtra
## 
## Adjuntando el paquete: 'gridExtra'
## The following object is masked from 'package:dplyr':
## 
##     combine
## Cargando paquete requerido: knitr
## Cargando paquete requerido: summarytools
library(ggplot2)          # Visualizaciones
library(FactoMineR)       # Análisis de Correspondencias
## Warning: package 'FactoMineR' was built under R version 4.5.2
library(factoextra)       # Visualización PCA y clustering
## Warning: package 'factoextra' was built under R version 4.5.2
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(cluster)          # Métodos adicionales de 
library(knitr)            # Para crear tablas con formatoç
library(DT)               # Para visualizar tablas descriptivas interactivas
library(tidyr)
library(plotly)
## Warning: package 'plotly' was built under R version 4.5.2
## 
## Adjuntando el paquete: '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(kableExtra)
## 
## Adjuntando el paquete: 'kableExtra'
## The following object is masked from 'package:dplyr':
## 
##     group_rows
library(leaflet)
## Warning: package 'leaflet' was built under R version 4.5.2

1 Descripción del caso

La empresa C&A Casas y Apartamentos es una agencia inmobiliaria dedicada a la intermediación en la compra y venta de propiedades en distintas zonas de la ciudad. Recientemente, la compañía recibió una solicitud de asesoría por parte de una empresa internacional interesada en adquirir dos viviendas en Cali para ubicar a dos de sus empleados junto con sus familias. Cada solicitud establece condiciones específicas relacionadas con el tipo de vivienda, la zona de la ciudad, el área construida, el número de habitaciones, baños y parqueaderos, así como un presupuesto máximo definido a partir del crédito aprobado para la compra.

Con el propósito de apoyar este proceso de decisión, se utilizará la base de datos vivienda, disponible en el paquete paqueteMODELOS. Esta base contiene información sobre diversas propiedades ofrecidas en el mercado inmobiliario de la ciudad, incluyendo variables relevantes como el precio de la vivienda, el área construida, el estrato socioeconómico, el tipo de propiedad, la zona y las coordenadas geográficas.

A partir de esta información se realizará inicialmente un análisis exploratorio de los datos con el fin de comprender la estructura del mercado y las relaciones entre las variables. Posteriormente, se estimará un modelo de regresión lineal múltiple que permita analizar cómo diferentes características de las viviendas influyen en su precio. Con base en los resultados obtenidos, se generarán predicciones y se identificarán posibles ofertas que se ajusten a las necesidades y restricciones establecidas por el cliente.

2 Problema

En el mercado inmobiliario, el valor de una vivienda está determinado por múltiples factores, entre los que se encuentran el área construida, el estrato socioeconómico, el número de habitaciones, baños y parqueaderos, entre otras características estructurales. Debido a la variedad de variables que influyen en la formación del precio, para un agente inmobiliario puede resultar complejo identificar de manera rápida cuáles de las propiedades disponibles en el mercado se ajustan mejor a las necesidades específicas de un cliente y a las restricciones de su presupuesto.

En el caso de la empresa C&A Casas y Apartamentos, surge la necesidad de realizar un análisis que permita comprender cómo las características de las viviendas se relacionan con su precio en el mercado. A partir de este análisis se busca generar estimaciones del valor esperado de las propiedades y facilitar la identificación de ofertas que cumplan con las condiciones y requerimientos establecidos por los clientes.


3 Objetivo general

Aplicar técnicas de análisis exploratorio de datos y modelos de regresión lineal múltiple sobre una base de datos de viviendas, con el propósito de modelar la relación existente entre las características de los inmuebles y su precio de mercado, y utilizar este modelo para generar predicciones que permitan recomendar opciones inmobiliarias acordes con las solicitudes de los clientes.


4 Objetivos específicos

  1. Realizar un proceso de filtrado y depuración de la base de datos con el fin de identificar las viviendas que cumplen con los criterios iniciales relacionados con el tipo de propiedad y la zona geográfica solicitada por los clientes.

  2. Desarrollar un análisis exploratorio de datos (EDA) mediante visualizaciones que permitan identificar posibles relaciones entre el precio de la vivienda y variables relevantes como el área construida, el estrato socioeconómico, el número de habitaciones, baños y parqueaderos.

  3. Estimar un modelo de regresión lineal múltiple utilizando el método de mínimos cuadrados ordinarios (MCO) para analizar el impacto de las características estructurales de las viviendas sobre su precio.

  4. Verificar los supuestos del modelo de regresión con el objetivo de evaluar su validez estadística e identificar posibles limitaciones en su aplicación.

  5. Utilizar el modelo estimado para generar predicciones del precio esperado de viviendas con características específicas, correspondientes a las solicitudes realizadas por los clientes.

  6. Identificar y recomendar al menos cinco ofertas inmobiliarias disponibles que cumplan con las condiciones establecidas por cada cliente, teniendo en cuenta el presupuesto máximo disponible.

  7. Evaluar el desempeño del modelo mediante indicadores de predicción, utilizando un conjunto de datos de prueba que permita analizar su capacidad de generalización.


5 Carga de datos

Para el desarrollo del análisis se emplea la base de datos vivienda, disponible en el paquete paqueteMODELOS. Esta base contiene información sobre distintas ofertas de propiedades en el mercado inmobiliario de la ciudad, incluyendo variables relacionadas con el precio de los inmuebles, sus características físicas y su localización geográfica.

Entre las variables más relevantes para el análisis se encuentran:

  1. preciom: precio de la vivienda expresado en millones de pesos.
  2. areaconst: área construida de la vivienda.
  3. habitaciones: número de habitaciones del inmueble.
  4. banios: número de baños.
  5. parqueaderos: número de espacios de parqueadero disponibles.
  6. estrato: estrato socioeconómico de la vivienda.
  7. tipo: tipo de propiedad (casa o apartamento).
  8. zona: zona geográfica de la ciudad donde se ubica el inmueble.
  9. latitud y longitud: coordenadas geográficas que permiten identificar la ubicación del inmueble.

A continuación, se procede a cargar la base de datos y realizar una exploración inicial de su estructura con el fin de comprender la naturaleza de las variables y verificar la consistencia de la información disponible para el análisis.

data("vivienda")

DT::datatable(
  head(vivienda, 10),
  options = list(pageLength = 10, scrollX = TRUE),
  caption = htmltools::tags$caption(
    style = "caption-side: top; text-align: left; font-weight: bold;",
    "Vista previa del dataset vivienda (primeras 10 filas)"
  )
)
n_filas <- nrow(vivienda)
n_cols  <- ncol(vivienda)
na_pct  <- round(mean(is.na(vivienda)) * 100, 2)

kable(
  data.frame(
    Indicador = c("Observaciones (filas)", "Variables (columnas)", "% valores faltantes (global)"),
    Valor = c(n_filas, n_cols, paste0(na_pct, "%"))
  ),
  format = "html",
  col.names = c("Indicador", "Valor")
) %>% 
  kableExtra::kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover"))
Indicador Valor
Observaciones (filas) 8322
Variables (columnas) 13
% valores faltantes (global) 3.95%
vars <- data.frame(
  Variable = names(vivienda),
  Tipo = sapply(vivienda, function(x) class(x)[1])
)

DT::datatable(
  vars,
  options = list(pageLength = 10, dom = 'tip'),
  caption = htmltools::tags$caption(
    style = "caption-side: top; text-align: left; font-weight: bold;",
    "Variables y tipo de dato"
  )
)
num_vars <- vivienda %>% dplyr::select(where(is.numeric))

resumen <- data.frame(
  Variable = names(num_vars),
  Min = sapply(num_vars, min, na.rm = TRUE),
  Media = round(sapply(num_vars, mean, na.rm = TRUE), 2),
  Mediana = round(sapply(num_vars, median, na.rm = TRUE), 2),
  Max = sapply(num_vars, max, na.rm = TRUE),
  NA_count = sapply(num_vars, function(x) sum(is.na(x)))
)

DT::datatable(
  resumen,
  options = list(pageLength = 10, scrollX = TRUE),
  caption = htmltools::tags$caption(
    style = "caption-side: top; text-align: left; font-weight: bold;",
    "Resumen descriptivo de variables numéricas"
  )
)

6 VIVIENDA 1 Filtrado de la base 1

Con el objetivo de analizar las posibles ofertas que se ajusten a los requerimientos de la Vivienda 1, se realiza un proceso de filtrado sobre la base de datos vivienda, restringiendo el conjunto de observaciones a aquellas propiedades cuyo tipo de inmueble corresponde a casas y cuya localización pertenece a la zona norte de la ciudad.

Como resultado de este procedimiento se genera una base de datos denominada base1, que contiene únicamente las observaciones relevantes para el análisis del primer escenario y que será utilizada en las etapas posteriores de análisis exploratorio y modelación.

base1 <- vivienda %>%
  filter(tipo == "Casa", zona == "Zona Norte")

DT::datatable(
  head(base1,10),
  caption = "Primeras 10 observaciones de la base filtrada (Casas - Zona Norte)"
)

A continuación, se muestran los tres primeros registros de la base de datos filtrada, con el propósito de observar de manera preliminar algunas de las características de las casas ubicadas en la Zona Norte. Asimismo, se presentan algunas tablas de verificación que permiten confirmar que el proceso de filtrado se realizó correctamente.

DT::datatable(
  head(base1,3),
  options = list(pageLength = 3, scrollX = TRUE),
  caption = "Primeros 3 registros de las casas ubicadas en la Zona Norte"
)

Tabla de validación del tipo de vivienda

ver_tipo <- base1 %>%
  count(tipo)

DT::datatable(
  ver_tipo,
  options = list(dom = 't'),
  caption = "Verificación del filtro por tipo de vivienda"
)

Tabla de verificación por zona

ver_zona <- base1 %>%
  count(zona)

DT::datatable(
  ver_zona,
  options = list(dom = 't'),
  caption = "Verificación del filtro por zona"
)

Las tablas presentadas anteriormente permiten confirmar que el proceso de filtrado se realizó correctamente, dado que la base de datos resultante (base1) incluye únicamente viviendas cuyo tipo corresponde a Casa y que se encuentran ubicadas en la Zona Norte de la ciudad.

Mapa de ubicación de las viviendas incluidas en la base filtrada

leaflet(base1) %>%
  addProviderTiles(providers$CartoDB.Positron) %>%
  addCircleMarkers(
    lng = ~longitud,
    lat = ~latitud,
    radius = 4,
    color = "blue",
    popup = ~paste(
      "Barrio:", barrio,
      "<br>Precio:", preciom,
      "<br>Área:", areaconst
    )
  )

El mapa presenta la distribución geográfica de las viviendas clasificadas como casas en la Zona Norte según la variable zona registrada en la base de datos. Sin embargo, al observar la localización de los puntos en el mapa se evidencia que no todas las viviendas se concentran exclusivamente en el sector norte de la ciudad, ya que algunos registros aparecen ubicados en otras áreas de Cali.

Este comportamiento puede explicarse porque la variable zona probablemente corresponde a una clasificación administrativa o comercial utilizada en el mercado inmobiliario, la cual no necesariamente coincide de manera exacta con la ubicación geográfica determinada por las coordenadas de latitud y longitud. Asimismo, es posible que existan imprecisiones en el proceso de georreferenciación o inconsistencias en el registro de la variable de ubicación.

En consecuencia, aunque el filtrado realizado selecciona viviendas etiquetadas como pertenecientes a la Zona Norte, el análisis espacial sugiere que la correspondencia entre la clasificación de la zona y las coordenadas geográficas no es completamente exacta para todos los registros.

##El Análisis Exploratorio de Datos (EDA)

En esta sección se presenta el análisis exploratorio de datos (EDA), enfocado en examinar la relación entre la variable respuesta, correspondiente al precio de la vivienda, y diversas variables explicativas como el área construida, el estrato socioeconómico, el número de baños, el número de habitaciones y la zona en la que se ubica el inmueble.

Para el desarrollo de este análisis se emplearon gráficos interactivos generados mediante el paquete plotly en R, los cuales permiten explorar de manera dinámica las posibles relaciones entre el precio de la vivienda y las variables explicativas consideradas. Este enfoque facilita la identificación de patrones, tendencias y posibles asociaciones que posteriormente pueden ser incorporadas en el modelo de regresión lineal múltiple.

##cORRELACIÓN PRECIO VS AREA CONSTRUIDA

graf_area <- plot_ly(
  data = base1,
  x = ~areaconst,
  y = ~preciom,
  type = "scatter",
  mode = "markers",
  color = ~estrato,
  colors = "Blues",
  marker = list(size = 6, opacity = 0.6)
) %>%
  layout(
    title = "Relación entre Precio y Área Construida",
    xaxis = list(title = "Área construida (m2)"),
    yaxis = list(title = "Precio de la vivienda (millones)")
  )

graf_area

El gráfico evidencia una relación positiva entre el área construida y el precio de la vivienda. En términos generales, se observa que a medida que aumenta el tamaño del inmueble, también tiende a incrementarse su valor en el mercado. No obstante, la dispersión de los puntos sugiere que el precio no está determinado únicamente por el área construida, sino que también puede estar influenciado por otros factores relevantes como el estrato socioeconómico, el número de baños o la ubicación de la vivienda.

##PRECIO VS ESTRATO

graf_estrato <- plot_ly(
  data = base1,
  x = ~factor(estrato),
  y = ~preciom,
  type = "box",
  boxmean = TRUE,
  color = ~factor(estrato),
  colors = c("#2C7BB6","#ABD9E9","#FDAE61","#D7191C")
) %>%
  layout(
    title = "Precio de las viviendas según estrato socioeconómico",
    xaxis = list(title = "Estrato"),
    yaxis = list(title = "Precio (millones)"),
    showlegend = FALSE
  )

graf_estrato

El gráfico sugiere una relación positiva entre el estrato socioeconómico y el precio de la vivienda, evidenciando que los inmuebles ubicados en estratos más altos tienden a presentar precios medianos y rangos de variación mayores que aquellos situados en estratos inferiores.

Este patrón es consistente con la estructura del mercado inmobiliario urbano, donde el estrato funciona como un indicador de las condiciones del entorno residencial, el acceso a servicios urbanos y el nivel socioeconómico del sector, factores que influyen directamente en la valoración de las propiedades.

7 Precio vs Número de Baños

graf_banos <- plot_ly(
  data = base1,
  x = ~factor(banios),
  y = ~preciom,
  type = "box",
  boxmean = TRUE,
  color = ~factor(banios),
  colors = c("#4E79A7","#59A14F","#F28E2B","#E15759","#76B7B2")
) %>%
  layout(
    title = "Precio de las viviendas según número de baños",
    xaxis = list(title = "Número de baños"),
    yaxis = list(title = "Precio (millones)"),
    showlegend = FALSE
  )

graf_banos

El gráfico muestra una tendencia positiva entre el número de baños y el precio de la vivienda, evidenciando que, en términos generales, las propiedades con mayor número de baños tienden a presentar valores de mercado más elevados.

Este comportamiento es coherente con la dinámica del mercado inmobiliario, ya que las viviendas con más baños suelen estar asociadas a inmuebles de mayor tamaño o con características de mayor calidad. No obstante, también se observa una dispersión importante en los precios dentro de cada categoría, lo que indica que el número de baños no explica por sí solo la variación del precio, sino que este también está influenciado por otras variables como el área construida, el estrato socioeconómico o la ubicación de la vivienda.

8 Precio vs Número de Habitaciones

graf_habit <- plot_ly(
  data = base1,
  x = ~factor(habitaciones),
  y = ~preciom,
  type = "box",
  boxmean = TRUE,
  color = ~factor(habitaciones),
  colors = c("#4E79A7","#59A14F","#F28E2B","#E15759","#76B7B2")
) %>%
  layout(
    title = "Precio de las viviendas según número de habitaciones",
    xaxis = list(title = "Número de habitaciones"),
    yaxis = list(title = "Precio (millones)"),
    showlegend = FALSE
  )

graf_habit

El gráfico permite observar la relación entre el número de habitaciones y el precio de la vivienda. En términos generales, se identifica una tendencia creciente, lo que sugiere que las viviendas con un mayor número de habitaciones tienden a presentar precios más altos en el mercado.

No obstante, también se evidencia una dispersión considerable en los precios dentro de cada categoría de habitaciones, lo que indica que esta variable por sí sola no explica completamente la variación en el valor de las viviendas. En este sentido, otros factores como el área construida, el estrato socioeconómico o el número de baños también pueden desempeñar un papel relevante en la determinación del precio.

9 Precio vs zona

graf_zona <- plot_ly(
  data = base1,
  x = ~zona,
  y = ~preciom,
  type = "box",
  boxmean = TRUE,
  color = ~zona,
  colors = "#4E79A7"
) %>%
  layout(
    title = "Distribución del precio de viviendas en la Zona Norte",
    xaxis = list(title = "Zona"),
    yaxis = list(title = "Precio (millones)"),
    showlegend = FALSE
  )

graf_zona

El gráfico presenta la distribución del precio de las viviendas ubicadas en la Zona Norte de la ciudad. Se observa una mediana cercana a los 400 millones de pesos, junto con una dispersión considerable en los valores reportados. Asimismo, se identifican algunos valores atípicos, correspondientes a propiedades con precios significativamente más elevados que el resto de la muestra, algunos de los cuales superan los 1500 millones de pesos.

Esta variabilidad indica que, incluso dentro de una misma zona de la ciudad, el precio de las viviendas puede presentar diferencias importantes. Dichas variaciones pueden estar asociadas a factores como el área construida, el estrato socioeconómico o las características particulares del inmueble, entre otros aspectos relevantes del mercado inmobiliario.

10 Análisis general del EDA

El análisis exploratorio de datos permitió identificar patrones relevantes en la relación entre el precio de la vivienda y las variables explicativas consideradas en el estudio. De manera general, se observa que variables como el área construida, el número de habitaciones, el número de baños y el estrato socioeconómico presentan una relación positiva con el precio de las viviendas. Esto sugiere que propiedades con mayor tamaño, con un mayor número de espacios funcionales y ubicadas en estratos socioeconómicos más altos tienden a registrar valores de mercado más elevados.

Asimismo, se evidencia una alta variabilidad en los precios dentro de cada categoría analizada, lo que indica que el valor de las viviendas no depende únicamente de una sola característica, sino de la combinación de múltiples factores estructurales y de ubicación que influyen en la formación del precio en el mercado inmobiliario.

Durante la exploración de los datos también se identificó la presencia de valores atípicos en los precios de algunas viviendas, así como posibles registros con valores faltantes en determinadas variables, lo cual podría afectar el número efectivo de observaciones utilizadas en la estimación del modelo de regresión. No obstante, estos valores extremos pueden corresponder a propiedades con características particulares dentro del mercado inmobiliario, por lo que se decidió mantenerlos en el análisis.

En conjunto, los resultados obtenidos en el análisis exploratorio respaldan la utilización de un modelo de regresión lineal múltiple, ya que este tipo de modelo permite analizar simultáneamente el efecto de varias variables explicativas sobre el precio de la vivienda y cuantificar su influencia dentro del mercado inmobiliario estudiado.


11 Estimación del modelo de regresión múltiple

En esta sección se procederá a estimar un modelo de regresión lineal múltiple, utilizando las variables identificadas en el análisis exploratorio, con el fin de explicar el comportamiento del precio de las viviendas en función de sus características estructurales.

Posteriormente, se analizará si los coeficientes estimados del modelo resultan estadísticamente significativos, lo que permitirá determinar cuáles variables influyen de manera relevante en la formación del precio de las viviendas. Asimismo, se interpretará el coeficiente de determinación \(R^2\) con el objetivo de evaluar el grado de ajuste del modelo y discutir posibles mejoras que podrían implementarse para optimizar su capacidad explicativa.

La variable respuesta del modelo corresponde al precio de la vivienda (preciom), mientras que las variables explicativas consideradas son:

  • Área construida (areaconst)
  • Estrato socioeconómico (estrato)
  • Número de habitaciones (habitaciones)
  • Número de parqueaderos (parqueaderos)
  • Número de baños (banios)

De esta manera, el modelo de regresión lineal múltiple puede expresarse de la siguiente forma:

\[ Precio = \beta_0 + \beta_1 Área + \beta_2 Estrato + \beta_3 Habitaciones + \beta_4 Parqueaderos + \beta_5 Baños + \varepsilon \]

A continuación, se procederá a estimar el modelo utilizando las variables definidas en el ejercicio.

modelo <- lm(
  preciom ~ areaconst + estrato + habitaciones + parqueaderos + banios,
  data = base1
)

summary(modelo)
## 
## Call:
## lm(formula = preciom ~ areaconst + estrato + habitaciones + parqueaderos + 
##     banios, data = base1)
## 
## 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 ***
## areaconst       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    
## parqueaderos   24.00598    5.86889   4.090 5.14e-05 ***
## banios         18.89938    7.48800   2.524    0.012 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 155.1 on 429 degrees of freedom
##   (287 observations deleted due to missingness)
## Multiple R-squared:  0.6041, Adjusted R-squared:  0.5995 
## F-statistic: 130.9 on 5 and 429 DF,  p-value: < 2.2e-16
knitr::kable(
  summary(modelo)$coefficients,
  digits = 3,
  caption = "Resultados del modelo de regresión lineal múltiple",
  align = "c",
  escape = FALSE
)
Resultados del modelo de regresión lineal múltiple
Estimate Std. Error t value Pr(>|t|)
(Intercept) -238.171 44.406 -5.364 0.000
areaconst 0.677 0.053 12.814 0.000
estrato 80.635 9.826 8.206 0.000
habitaciones 7.645 5.659 1.351 0.177
parqueaderos 24.006 5.869 4.090 0.000
banios 18.899 7.488 2.524 0.012

12 Interpretación de los coeficientes del modelo

A partir de los resultados obtenidos en el modelo de regresión lineal múltiple, se analizan los coeficientes estimados con el fin de identificar el efecto de cada variable explicativa sobre el precio de la vivienda, manteniendo constantes las demás variables incluidas en el modelo.

Área construida

El coeficiente asociado a la variable área construida es aproximadamente 0.676 y resulta altamente significativo desde el punto de vista estadístico (p < 0.001).

Este resultado indica que, manteniendo constantes el estrato socioeconómico, el número de habitaciones, el número de parqueaderos y el número de baños, un incremento de un metro cuadrado en el área construida se asocia con un aumento promedio de aproximadamente 0.68 millones de pesos en el precio de la vivienda.

Este comportamiento es consistente con la dinámica del mercado inmobiliario, ya que viviendas con mayor área construida suelen tener un mayor valor comercial.


Estrato socioeconómico

El coeficiente estimado para la variable estrato socioeconómico es aproximadamente 80.63, y también resulta altamente significativo (p < 0.001).

Esto implica que, manteniendo constantes las demás variables del modelo, un incremento de una unidad en el estrato socioeconómico se asocia con un aumento promedio de aproximadamente 80.6 millones de pesos en el precio de la vivienda.

Este resultado es coherente con el contexto urbano colombiano, donde los estratos más altos suelen estar asociados con mejores condiciones del entorno, mayor calidad de infraestructura urbana y mayor valorización del suelo.


Número de habitaciones

El coeficiente correspondiente al número de habitaciones es aproximadamente 7.65, sin embargo, no resulta estadísticamente significativo (p ≈ 0.177).

Esto sugiere que, una vez controlado el efecto de variables como el área construida, el estrato socioeconómico, el número de parqueaderos y el número de baños, el número de habitaciones no aporta evidencia suficiente para explicar variaciones adicionales en el precio de la vivienda.

Una posible explicación es la correlación existente entre el número de habitaciones y el área construida, ya que viviendas con mayor tamaño suelen tener más habitaciones. En consecuencia, parte del efecto de esta variable podría estar siendo capturado por la variable área construida dentro del modelo.


Número de parqueaderos

El coeficiente asociado al número de parqueaderos es aproximadamente 24.01 y resulta estadísticamente significativo (p < 0.001).

Esto indica que, manteniendo constantes las demás variables del modelo, cada parqueadero adicional se asocia con un incremento promedio de aproximadamente 24 millones de pesos en el precio esperado de la vivienda.

Este resultado es consistente con las dinámicas del mercado inmobiliario urbano, donde la disponibilidad de parqueaderos constituye una característica altamente valorada por los compradores.


Número de baños

El coeficiente estimado para el número de baños es aproximadamente 18.90 y resulta estadísticamente significativo (p ≈ 0.012).

Esto indica que, manteniendo constantes las demás variables del modelo, cada baño adicional se asocia con un incremento promedio de aproximadamente 18.9 millones de pesos en el precio de la vivienda.

Este resultado también es coherente con las preferencias del mercado, dado que viviendas con mayor número de baños suelen ofrecer mayores niveles de comodidad y funcionalidad para los hogares.


13 Tabla de ajuste del modelo (R² y métricas)

resumen_modelo <- summary(modelo)

f_stat <- resumen_modelo$fstatistic
p_valor_global <- pf(
  f_stat[1],
  f_stat[2],
  f_stat[3],
  lower.tail = FALSE
)

ajuste <- data.frame(
  Indicador = c(
    "R²",
    "R² ajustado",
    "Error estándar residual",
    "Estadístico F",
    "Valor p global"
  ),
  Valor = c(
    round(resumen_modelo$r.squared, 4),
    round(resumen_modelo$adj.r.squared, 4),
    round(resumen_modelo$sigma, 2),
    round(unname(f_stat[1]), 2),
    format.pval(p_valor_global, digits = 4)
  )
)

knitr::kable(
  ajuste,
  caption = "Indicadores de ajuste del modelo"
) %>%
  kableExtra::kable_styling(
    full_width = FALSE,
    bootstrap_options = c("striped", "hover", "condensed")
  )
Indicadores de ajuste del modelo
Indicador Valor
0.6041
R² ajustado 0.5995
Error estándar residual 155.11
Estadístico F 130.92
Valor p global < 2.2e-16

14 Evaluación del poder explicativo del modelo (R²)

El modelo estimado presenta un coeficiente de determinación \(R^2 = 0.604\).

Este resultado indica que aproximadamente el 60.4% de la variabilidad observada en el precio de las viviendas puede ser explicada por las variables incluidas en el modelo, específicamente el área construida, el estrato socioeconómico, el número de habitaciones, el número de parqueaderos y el número de baños.

Este nivel de explicación puede considerarse moderadamente alto en el contexto del mercado inmobiliario, dado que el precio de una vivienda suele depender de múltiples factores adicionales que no se encuentran disponibles en la base de datos utilizada. Entre estos factores se pueden mencionar:

  • el barrio específico donde se ubica la vivienda
  • la antigüedad del inmueble
  • el estado de conservación
  • la cercanía a servicios urbanos y equipamientos
  • así como características particulares del entorno urbano

En consecuencia, aunque el modelo logra capturar una proporción importante de la variabilidad en los precios, es razonable esperar que existan otros determinantes relevantes que también influyen en la formación del valor de las viviendas en el mercado.


15 Análisis del ajuste del modelo de regresión

En términos generales, los resultados obtenidos son consistentes con el comportamiento esperado del mercado inmobiliario.

Las variables área construida, estrato socioeconómico, número de parqueaderos y número de baños presentan efectos positivos y estadísticamente significativos sobre el precio de la vivienda, lo cual coincide con la lógica del mercado, donde propiedades con mayor tamaño, mejor ubicación socioeconómica y mayores comodidades tienden a alcanzar precios más elevados.

Por otro lado, la variable número de habitaciones no resulta estadísticamente significativa dentro del modelo. Este resultado podría estar asociado a la relación existente entre esta variable y otras características estructurales del inmueble, particularmente el área construida. En efecto, viviendas con mayor área suelen contar con un mayor número de habitaciones, por lo que parte del efecto de esta variable podría estar siendo capturado por el área construida.

Esto sugiere que el número de habitaciones no aporta información adicional relevante una vez que el modelo ya incorpora el tamaño de la vivienda como variable explicativa.


16 Posibles mejoras en la especificación del modelo

El modelo estimado podría mejorarse mediante diferentes estrategias metodológicas que permitan aumentar su capacidad explicativa y predictiva. Entre las posibles mejoras se destacan:

  1. Incorporar variables adicionales, como el barrio específico, la antigüedad de la vivienda, el estado de conservación del inmueble o características del entorno urbano.

  2. Explorar transformaciones de variables, por ejemplo utilizando el logaritmo del precio de la vivienda, lo cual puede contribuir a mejorar la linealidad del modelo y reducir problemas de heterogeneidad en la varianza.

  3. Evaluar posibles interacciones entre variables, como la interacción entre el área construida y el estrato socioeconómico, lo cual podría capturar diferencias en la valorización del espacio según el nivel socioeconómico de la zona.

  4. Analizar la posible multicolinealidad entre variables estructurales como el área construida, el número de habitaciones y el número de baños.

  5. Evaluar formalmente los supuestos del modelo de regresión, incluyendo la normalidad de los residuos, la homocedasticidad y la independencia de los errores.


17 Diagnóstico gráfico y evaluación del modelo

Con el fin de evaluar el comportamiento del modelo de regresión estimado y analizar la calidad de sus predicciones, se realiza un conjunto de gráficos de diagnóstico. Estas visualizaciones permiten examinar de manera gráfica diferentes aspectos del modelo, tales como la relación entre los valores observados y los valores predichos, la distribución de los residuos y la posible presencia de patrones sistemáticos en los errores de predicción.

En particular, se presentan tres gráficos principales:

  1. Gráfico de valores reales versus valores predichos, el cual permite evaluar qué tan bien el modelo logra aproximar los valores observados del precio de las viviendas.

  2. Gráfico de residuos frente a los valores predichos, útil para identificar posibles problemas de heterocedasticidad o patrones sistemáticos que el modelo no esté capturando adecuadamente.

  3. Histograma de residuos, que permite analizar la forma de la distribución de los errores del modelo y verificar si estos presentan un comportamiento aproximadamente normal.

El análisis conjunto de estas visualizaciones proporciona información importante sobre el ajuste del modelo y la validez de sus supuestos, permitiendo identificar posibles limitaciones y oportunidades de mejora en la especificación del modelo de regresión.

18 Comparación entre precio observado y precio estimado

base_modelo <- modelo$model

base_modelo$predicho <- fitted(modelo)
base_modelo$residuos <- resid(modelo)
ggplot(base_modelo, aes(x = predicho, y = preciom)) +
  geom_point(
    color = "#2C7FB8",
    alpha = 0.6,
    size = 2
  ) +
  geom_abline(
    intercept = 0,
    slope = 1,
    color = "red",
    linetype = "dashed",
    linewidth = 1
  ) +
  geom_smooth(
    method = "lm",
    se = FALSE,
    color = "#08306B",
    linewidth = 1
  ) +
  labs(
    title = "Comparación entre precio observado y precio estimado",
    subtitle = "Evaluación del ajuste del modelo de regresión",
    x = "Precio estimado por el modelo (millones)",
    y = "Precio observado (millones)"
  ) +
  theme_minimal(base_size = 13) +
  theme(
    plot.title = element_text(face = "bold"),
    plot.subtitle = element_text(color = "gray40")
  )
## `geom_smooth()` using formula = 'y ~ x'

El gráfico compara los precios observados de las viviendas con los valores estimados por el modelo de regresión. Se observa que una proporción importante de los puntos se concentra alrededor de una relación creciente, lo que indica que el modelo logra capturar de manera razonable el comportamiento general del precio de las viviendas. Sin embargo, también se aprecia cierta dispersión en los datos, lo cual sugiere que existen factores adicionales que no están incluidos en el modelo y que también influyen en la determinación del precio de las propiedades.

19 Análisis de residuos frente a valores predichos

graf_res <- plot_ly(
  data = base_modelo,
  x = ~predicho,
  y = ~residuos,
  type = "scatter",
  mode = "markers",
  marker = list(
    color = "#C0392B",
    size = 7,
    opacity = 0.6
  )
) %>%
  add_lines(
    x = ~predicho,
    y = 0,
    line = list(color = "black", dash = "dash"),
    inherit = FALSE
  ) %>%
  layout(
    title = "Residuos del modelo vs valores estimados",
    xaxis = list(title = "Precio estimado por el modelo (millones)"),
    yaxis = list(title = "Residuos del modelo"),
    showlegend = FALSE
  )

graf_res

El gráfico de residuos frente a los valores predichos permite evaluar la presencia de posibles patrones sistemáticos en los errores del modelo. Idealmente, los residuos deberían distribuirse de forma aleatoria alrededor de cero. En este caso, los residuos se encuentran relativamente dispersos alrededor de dicha línea, lo que sugiere que el modelo no presenta evidencias claras de sesgo en sus predicciones. Sin embargo, la variabilidad observada indica que aún existen factores no considerados en el modelo que podrían influir en la formación del precio de las viviendas.

20 Histográma de residuos

graf_hist <- plot_ly(
  data = base_modelo,
  x = ~residuos,
  type = "histogram",
  nbinsx = 30,
  marker = list(
    color = "#2C7FB8",
    opacity = 0.75
  )
) %>%
  layout(
    title = "Distribución de los residuos del modelo de regresión",
    xaxis = list(title = "Residuos del modelo"),
    yaxis = list(title = "Frecuencia"),
    shapes = list(
      list(
        type = "line",
        x0 = 0, x1 = 0,
        y0 = 0, y1 = 1,
        yref = "paper",
        line = list(color = "red", dash = "dash")
      )
    )
  )

graf_hist

El histograma de los residuos permite analizar la forma de la distribución de los errores del modelo. En términos generales, los residuos tienden a concentrarse alrededor de cero, lo cual es consistente con el supuesto de que los errores del modelo presentan una media cercana a cero. No obstante, la distribución puede mostrar cierto grado de asimetría o la presencia de valores extremos, lo que sugiere que aún existen factores no capturados por el modelo que podrían estar influyendo en el precio de las viviendas. Esto indica que el modelo podría mejorarse mediante la incorporación de variables adicionales o mediante la exploración de transformaciones en algunas variables del modelo.

21 Evaluación diagnóstica del modelo

En conjunto, los gráficos de diagnóstico sugieren que el modelo logra capturar una parte importante de la relación existente entre las características de las viviendas y su precio. Sin embargo, la dispersión observada en los residuos y la presencia de algunos valores atípicos indican que todavía existen factores adicionales que podrían mejorar la capacidad explicativa del modelo. Este resultado refuerza la idea de que el precio de las viviendas depende de múltiples características estructurales y de ubicación que no necesariamente están incluidas en la base de datos utilizada para el análisis.


22 Validación de los supuestos del modelo

Una vez estimado el modelo de regresión lineal múltiple, es necesario evaluar si se cumplen los supuestos estadísticos fundamentales sobre los cuales se basa este tipo de modelo. La verificación de estos supuestos es importante, ya que permite determinar si las estimaciones obtenidas son confiables y si las inferencias realizadas a partir del modelo pueden considerarse válidas.

En particular, se analizarán los siguientes supuestos:

  • Linealidad
  • Normalidad de los residuos
  • Homoscedasticidad
  • Independencia de los errores

Para evaluar estos supuestos se utilizan diferentes gráficos de diagnóstico, los cuales permiten analizar el comportamiento de los residuos y detectar posibles patrones que indiquen problemas en la especificación del modelo.

23 Gráficos de diagnóstico del modelo

par(mfrow = c(2,2))
plot(modelo)

1. Residuos vs Valores Ajustados (Linealidad)

Este gráfico permite evaluar si la relación entre las variables explicativas y la variable respuesta puede considerarse aproximadamente lineal. En un modelo bien especificado, los residuos deberían distribuirse de manera aleatoria alrededor de la línea horizontal en cero, sin presentar patrones sistemáticos.

La presencia de estructuras definidas, como formas curvadas o patrones en los residuos, podría indicar que la relación entre las variables no es completamente lineal o que existen variables relevantes que no han sido incluidas en el modelo.

En este caso, los residuos se distribuyen de manera relativamente aleatoria alrededor de cero, lo que sugiere que el supuesto de linealidad se cumple de manera razonable dentro del modelo estimado.

2. QQ-Plot de residuos (Normalidad)

El gráfico Q-Q (Quantile-Quantile) compara la distribución empírica de los residuos del modelo con una distribución normal teórica.

Si los puntos se ubican aproximadamente sobre la línea diagonal, puede considerarse que los residuos siguen una distribución cercana a la normalidad, lo cual es un supuesto importante para la validez de las inferencias estadísticas en modelos de regresión.

En el modelo estimado, la mayoría de los puntos se encuentran próximos a la línea diagonal, aunque se observan ligeras desviaciones en los extremos. Este comportamiento es relativamente común en datos reales y no necesariamente implica un problema grave en el modelo.

Por lo tanto, puede concluirse que el supuesto de normalidad de los residuos se cumple de manera aproximada.

3. Scale-Location (Homoscedasticidad)

Este gráfico permite evaluar si la varianza de los residuos se mantiene aproximadamente constante a lo largo de los valores predichos del modelo, lo cual corresponde al supuesto de homocedasticidad.

Cuando los puntos se distribuyen de forma aleatoria y sin formar patrones claros, se puede considerar que la varianza de los errores es relativamente constante. En cambio, patrones en forma de embudo o dispersión creciente podrían indicar problemas de heterocedasticidad.

En este caso, los residuos presentan una dispersión relativamente uniforme a lo largo del rango de valores predichos, lo que sugiere que no existe evidencia clara de heterocedasticidad significativa.

4. Residuals vs Leverage (Observaciones influyentes)

Este gráfico permite identificar observaciones que podrían ejercer una influencia excesiva sobre la estimación del modelo. Las observaciones con valores elevados de leverage o ubicadas fuera de las líneas de Cook’s distance pueden indicar puntos influyentes que afectan de manera desproporcionada los resultados del modelo.

En el modelo analizado no se identifican observaciones extremadamente influyentes que comprometan de forma significativa la estabilidad de las estimaciones. En general, las observaciones se mantienen dentro de rangos razonables de influencia.

Conclusión

En conjunto, los gráficos de diagnóstico sugieren que los supuestos principales del modelo de regresión lineal múltiple se cumplen de manera razonable. Los residuos se distribuyen aproximadamente de forma aleatoria alrededor de cero, el gráfico Q-Q indica una distribución cercana a la normalidad, y no se observan patrones claros que evidencien problemas graves de heterocedasticidad ni observaciones altamente influyentes que afecten de manera significativa las estimaciones del modelo.

En caso de detectarse problemas más pronunciados en alguno de estos supuestos, podrían considerarse alternativas metodológicas como la transformación de variables, la inclusión de nuevas variables explicativas o el uso de métodos de regresión robusta, con el fin de mejorar el ajuste y la estabilidad del modelo.


24 Predicción del precio de viviendas

Una vez estimado y validado el modelo de regresión lineal múltiple, es posible utilizarlo para estimar el precio esperado de viviendas con características específicas. Este proceso permite apoyar la toma de decisiones de los clientes interesados en adquirir una propiedad que cumpla con determinadas condiciones estructurales y de ubicación.

A partir del modelo estimado, se calcularán los valores predichos del precio de las viviendas disponibles en la base de datos filtrada. Con esta información será posible identificar aquellas propiedades que se ajusten de mejor manera a las características solicitadas por los clientes y a las restricciones presupuestales establecidas.

base1$precio_estimado <- predict(modelo, newdata = base1)

Visualización de algunas predicciones

DT::datatable(
  base1 %>%
    select(preciom, precio_estimado, areaconst, habitaciones, banios, parqueaderos, estrato) %>%
    head(10) %>%
    rename(
      `Precio real (millones)` = preciom,
      `Precio estimado (millones)` = precio_estimado,
      `Área construida (m²)` = areaconst,
      `Habitaciones` = habitaciones,
      `Baños` = banios,
      `Parqueaderos` = parqueaderos,
      `Estrato` = estrato
    ),
  caption = htmltools::tags$caption(
    style = "caption-side: top; text-align: left; font-weight: bold;",
    "Comparación entre precio real y precio estimado (valores en millones de pesos)"
  ),
  options = list(
    pageLength = 10,
    autoWidth = TRUE,
    scrollX = TRUE
  ),
  rownames = FALSE
) %>%
  DT::formatCurrency(
    columns = c("Precio real (millones)", "Precio estimado (millones)"),
    currency = "$ ",
    interval = 3,
    mark = ".",
    dec.mark = ",",
    digits = 2
  ) %>%
  DT::formatRound(
    columns = "Área construida (m²)",
    digits = 0
  )

La tabla anterior muestra una comparación entre el precio real de las viviendas y el precio estimado por el modelo de regresión lineal múltiple. Este análisis permite evaluar la capacidad predictiva del modelo y analizar qué tan cercanas son las estimaciones del modelo a los valores observados en el mercado inmobiliario, considerando las características estructurales de cada propiedad.

Tabla de viviendas recomendadas según la solicitud del cliente

recomendadas <- base1 %>%
  filter(
    estrato %in% c(4, 5),
    habitaciones >= 4,
    banios >= 2,
    parqueaderos >= 1,
    preciom <= 350
  ) %>%
  mutate(
    diferencia_presupuesto = 350 - preciom
  ) %>%
  arrange(abs(precio_estimado - 350)) %>%
  select(
    tipo,
    barrio,
    preciom,
    precio_estimado,
    diferencia_presupuesto,
    areaconst,
    habitaciones,
    banios,
    parqueaderos,
    estrato
  ) %>%
  head(5) %>%
  rename(
    `Tipo de vivienda` = tipo,
    `Barrio` = barrio,
    `Precio real (millones)` = preciom,
    `Precio estimado (millones)` = precio_estimado,
    `Margen frente al presupuesto (millones)` = diferencia_presupuesto,
    `Área construida (m²)` = areaconst,
    `Habitaciones` = habitaciones,
    `Baños` = banios,
    `Parqueaderos` = parqueaderos,
    `Estrato` = estrato
  )

DT::datatable(
  recomendadas,
  caption = htmltools::tags$caption(
    style = "caption-side: top; text-align: left; font-weight: bold;",
    "Viviendas recomendadas según las condiciones del cliente"
  ),
  options = list(
    pageLength = 5,
    autoWidth = TRUE,
    scrollX = TRUE,
    dom = "t"
  ),
  rownames = FALSE
) %>%
  DT::formatCurrency(
    columns = c(
      "Precio real (millones)",
      "Precio estimado (millones)",
      "Margen frente al presupuesto (millones)"
    ),
    currency = "$ ",
    interval = 3,
    mark = ".",
    dec.mark = ",",
    digits = 2
  ) %>%
  DT::formatRound(
    columns = "Área construida (m²)",
    digits = 0
  )

La tabla anterior presenta un conjunto de viviendas que, en términos generales, cumplen con varias de las características solicitadas por el cliente, particularmente en lo relacionado con la zona de ubicación, el número de habitaciones, el número de baños y el estrato socioeconómico. En efecto, la mayoría de las propiedades analizadas se encuentran en estratos 4 y 5 y cuentan con al menos cuatro habitaciones, lo cual coincide con los criterios definidos para la búsqueda.

No obstante, al analizar el precio estimado por el modelo de regresión, se observa que varias de estas viviendas superan el presupuesto máximo disponible del cliente (350 millones de pesos). Este resultado sugiere que las características solicitadas —especialmente el tamaño de la vivienda y el nivel socioeconómico del sector— suelen estar asociadas con valores de mercado más elevados dentro del mercado inmobiliario analizado.

Adicionalmente, algunas de las propiedades consideradas cuentan con más de un parqueadero, lo cual supera el requisito mínimo establecido por el cliente. Si bien esta característica representa un atributo adicional de valor, también puede contribuir a explicar los mayores precios observados en ciertas viviendas.

En conjunto, estos resultados sugieren que podría existir cierta tensión entre las características deseadas y el presupuesto disponible. En este contexto, una posible estrategia sería ajustar ligeramente algunos de los criterios de búsqueda —como el área construida o el estrato— o reconsiderar el presupuesto máximo, con el fin de ampliar el conjunto de opciones disponibles en el mercado.


25 Ofertas potenciales para la vivienda 1

Con el fin de identificar posibles ofertas que se ajusten a las condiciones establecidas por el cliente, se utilizan las predicciones generadas por el modelo de regresión lineal múltiple. Estas predicciones permiten estimar el valor esperado de las viviendas a partir de sus características estructurales y de ubicación.

El objetivo es identificar propiedades cuyas características se aproximen a las condiciones solicitadas y cuyo precio estimado no supere el presupuesto máximo de 350 millones de pesos, correspondiente al crédito preaprobado por la empresa.

A partir de esta información se selecciona un conjunto de viviendas potenciales, las cuales son analizadas con mayor detalle en términos de sus características principales, con el propósito de recomendar alternativas que puedan ajustarse de manera más adecuada a las necesidades y restricciones del cliente.

#Predicciones del modelo
base_modelo <- base1 %>%
  mutate(
    precio_estimado = predict(modelo, newdata = .),
    precio_real = preciom
  ) %>%
  select(
    zona,
    estrato,
    precio_real,
    precio_estimado,
    areaconst,
    parqueaderos,
    banios,
    habitaciones,
    tipo,
    barrio,
    longitud,
    latitud
  )

DT::datatable(
  head(base_modelo, 10),
  options = list(pageLength = 10, scrollX = TRUE),
  caption = "Base con precios reales y estimados según el modelo"
)
ofertas_v1 <- base_modelo %>%
  filter(
    tipo == "Casa",
    zona == "Zona Norte",
    estrato %in% c(4,5),
    areaconst >= 150,
    habitaciones >= 4,
    banios >= 2,
    parqueaderos >= 1,
    precio_real <= 350
  ) %>%
  arrange(precio_real) %>%
  head(5)

DT::datatable(
  ofertas_v1,
  caption = "Viviendas recomendadas según las condiciones del cliente"
)
#Mapa de ofertas
leaflet(ofertas_v1) %>%
  addProviderTiles(providers$CartoDB.Positron) %>%
  addCircleMarkers(
    lng = ~longitud,
    lat = ~latitud,
    radius = 6,
    color = "Blue",
    stroke = FALSE,
    fillOpacity = 0.8,
    popup = ~paste(
      "<b>Barrio:</b>", barrio,
      "<br><b>Precio real:</b>", precio_real, "millones",
      "<br><b>Precio estimado:</b>", round(precio_estimado,2),
      "<br><b>Área:</b>", areaconst,
      "<br><b>Habitaciones:</b>", habitaciones,
      "<br><b>Baños:</b>", banios,
      "<br><b>Parqueaderos:</b>", parqueaderos,
      "<br><b>Estrato:</b>", estrato
    )
  )

Para la selección de las viviendas recomendadas se consideró como restricción principal el presupuesto máximo disponible del cliente, equivalente a 350 millones de pesos. En consecuencia, el proceso de filtrado final se realizó sobre el precio real de mercado de las viviendas, con el fin de garantizar que todas las alternativas propuestas se encuentren dentro del límite establecido por el crédito preaprobado.

A partir de las predicciones generadas por el modelo de regresión y teniendo en cuenta las condiciones definidas por el cliente, se identificó un conjunto de viviendas que pueden considerarse ofertas potenciales dentro del mercado inmobiliario analizado. El proceso de filtrado permitió seleccionar propiedades tipo casa ubicadas en la zona norte de la ciudad, con características estructurales similares a las solicitadas, tales como el número de habitaciones, baños, parqueaderos y el estrato socioeconómico.

Adicionalmente, el análisis espacial mediante el mapa permite visualizar la distribución geográfica de las viviendas recomendadas, lo que facilita la identificación de posibles alternativas dentro de la zona de interés del cliente. Por otra parte, el uso del modelo de regresión permitió estimar el valor esperado de las propiedades a partir de sus características estructurales y comparar dichas estimaciones con el presupuesto máximo disponible.

En conjunto, las viviendas identificadas representan alternativas viables que podrían ser presentadas al cliente, considerando simultáneamente sus características estructurales, su ubicación dentro de la ciudad y su precio estimado. Este tipo de análisis evidencia cómo el uso de técnicas estadísticas y modelos predictivos puede apoyar los procesos de toma de decisiones dentro del mercado inmobiliario.


26 Conclusión final

El análisis realizado permitió examinar la relación entre el precio de las viviendas y diversas variables estructurales, como el área construida, el estrato socioeconómico, el número de habitaciones, el número de baños y los parqueaderos. A partir del análisis exploratorio de datos se evidenció que variables como el área construida y el estrato socioeconómico presentan una relación positiva con el precio de la vivienda, lo cual resulta consistente con el comportamiento esperado del mercado inmobiliario.

Posteriormente, mediante la estimación de un modelo de regresión lineal múltiple, fue posible cuantificar el efecto de estas variables sobre el precio de las viviendas. El modelo estimado permitió explicar una proporción relevante de la variabilidad observada en los precios y generar predicciones del valor esperado de las propiedades a partir de sus características estructurales.

Utilizando las predicciones del modelo y considerando el presupuesto máximo de 350 millones de pesos, se identificaron algunas viviendas potenciales que cumplen en gran medida con los requerimientos establecidos por el cliente. No obstante, el análisis también evidenció que ciertas combinaciones de características, como viviendas con mayor área construida o ubicadas en estratos socioeconómicos más altos, tienden a presentar precios superiores al presupuesto disponible.

En conjunto, los resultados muestran que el uso de técnicas de análisis exploratorio de datos y modelos de regresión constituye una herramienta valiosa para apoyar el proceso de toma de decisiones en el mercado inmobiliario. Estas metodologías permiten identificar ofertas potenciales, estimar el valor esperado de las propiedades y evaluar su viabilidad frente a las condiciones y restricciones establecidas por los clientes.


27 VIVIENDA 2

28 Filtrado de la base de datos para el segundo caso

Con el fin de analizar las posibles ofertas que cumplan con la solicitud correspondiente a la Vivienda 2, se realiza un proceso de filtrado sobre la base de datos vivienda. En este caso, se consideran únicamente aquellas propiedades cuyo tipo de vivienda corresponde a apartamentos y cuya ubicación se encuentra en la zona sur de la ciudad.

Este proceso permite construir una nueva base de datos denominada base2, la cual contiene exclusivamente las observaciones relevantes para el análisis del segundo caso. A partir de esta base filtrada se desarrollará el análisis exploratorio y la aplicación del modelo de regresión, con el objetivo de identificar posibles ofertas que se ajusten a las características solicitadas por el cliente.

base2 <- vivienda %>%
  filter(tipo == "Apartamento", zona == "Zona Sur")

DT::datatable(
  head(base2,3),
  options = list(pageLength = 10, scrollX = TRUE),
  caption = "Primeras 10 observaciones de la base filtrada (Apartamentos - Zona Sur)"
)

A continuación, se presentan los tres primeros registros de la base de datos filtrada, con el propósito de observar algunas de las características iniciales de los apartamentos ubicados en la Zona Sur de la ciudad. Asimismo, se incluyen algunas tablas de verificación que permiten confirmar que el proceso de filtrado se realizó correctamente.

DT::datatable(
  head(base2,3),
  options = list(pageLength = 3, scrollX = TRUE),
  caption = "Primeros 3 registros de los apartamentos ubicados en la Zona Sur"
)

Tabla para verificación del tipo de vivienda

ver_tipo2 <- base2 %>%
  count(tipo)

DT::datatable(
  ver_tipo2,
  options = list(dom = 't'),
  caption = "Verificación del filtro por tipo de vivienda"
)

Tabla para verificación de la zona

ver_zona2 <- base2 %>%
  count(zona)

DT::datatable(
  ver_zona2,
  options = list(dom = 't'),
  caption = "Verificación del filtro por zona"
)

Las tablas de verificación permiten confirmar que el proceso de filtrado de la base de datos se realizó correctamente. En particular, se observa que todas las observaciones incluidas en la base base2 corresponden a apartamentos ubicados en la Zona Sur de la ciudad, lo cual es consistente con los criterios establecidos en la solicitud correspondiente a la Vivienda 2. De esta manera, se garantiza que el conjunto de datos utilizado en el análisis posterior contiene únicamente aquellas ofertas que resultan relevantes para el caso de estudio.

29 Mapa de ubicación de las viviendas incluidas en la base filtrada.

leaflet(base2) %>%
  addProviderTiles(providers$CartoDB.Positron) %>%
  addCircleMarkers(
    lng = ~longitud,
    lat = ~latitud,
    radius = 4,
    color = "darkgreen",
    popup = ~paste(
      "Barrio:", barrio,
      "<br>Precio:", preciom,
      "<br>Área:", areaconst
    )
  )

El mapa muestra la distribución geográfica de las viviendas clasificadas como apartamentos en la Zona Sur, de acuerdo con la variable zona registrada en el conjunto de datos. En términos generales, se observa una concentración importante de puntos en sectores correspondientes al sur de la ciudad, lo cual sugiere una coherencia razonable entre el filtro aplicado y la ubicación geográfica de las propiedades.

No obstante, también se identifican algunos registros ubicados en sectores cercanos o ligeramente alejados de la zona esperada. Esta situación puede explicarse por el hecho de que la variable zona corresponde a una clasificación administrativa o comercial utilizada en el mercado inmobiliario, la cual no necesariamente coincide de manera exacta con las coordenadas geográficas registradas en la base de datos. Asimismo, es posible que existan pequeñas imprecisiones en la georreferenciación de las propiedades o inconsistencias en la clasificación de la variable zona.

En consecuencia, aunque el filtrado se realizó sobre apartamentos etiquetados como ubicados en la Zona Sur, el análisis espacial sugiere que la correspondencia entre la variable de clasificación territorial y las coordenadas geográficas no es completamente exacta para todos los registros.

30 Análisis exploratorio de datos (EDA)

En esta sección se desarrolla un análisis exploratorio de datos (EDA) con el propósito de examinar la relación entre la variable respuesta, correspondiente al precio de la vivienda, y un conjunto de variables explicativas relevantes dentro del mercado inmobiliario.

En particular, se analizará la relación entre el precio de los apartamentos ubicados en la Zona Sur y las siguientes variables estructurales:

  • Área construida

  • Estrato socioeconómico

  • Número de baños

  • Número de habitaciones

  • Número de parqueaderos

Para este análisis se utilizan gráficos interactivos implementados con el paquete plotly en R, lo cual permite explorar de forma dinámica la información disponible, identificar patrones en los datos y detectar posibles relaciones entre las variables consideradas.

31 Relación entre precio y área construida

graf_area2 <- plot_ly(
  data = base2,
  x = ~areaconst,
  y = ~preciom,
  type = "scatter",
  mode = "markers",
  color = ~estrato,
  colors = "Blues",
  marker = list(size = 6, opacity = 0.6)
) %>%
  layout(
    title = "Relación entre Precio y Área Construida (Apartamentos Zona Sur)",
    xaxis = list(title = "Área construida (m2)"),
    yaxis = list(title = "Precio del apartamento (millones)")
  )

graf_area2

El gráfico muestra una relación positiva entre el área construida y el precio del apartamento, ya que, en términos generales, los inmuebles de mayor tamaño tienden a presentar valores de mercado más elevados. La mayor parte de las observaciones se concentra en apartamentos con áreas construidas entre 80 y 200 m², cuyos precios se sitúan aproximadamente entre 200 y 700 millones de pesos.

A medida que aumenta el área construida, también se observa una mayor dispersión en los precios, lo cual sugiere que el valor de los inmuebles no depende únicamente del tamaño. Este comportamiento indica que otras variables, como el estrato socioeconómico, la ubicación específica dentro de la ciudad o las características internas de la vivienda, también influyen en la determinación del precio.

Asimismo, se observa que los apartamentos ubicados en estratos socioeconómicos más altos tienden a presentar precios más elevados, lo cual es consistente con la estructura del mercado inmobiliario urbano, donde las zonas con mejores condiciones de entorno, infraestructura y acceso a servicios suelen presentar mayores niveles de valorización inmobiliaria..

32 Precio vs Estrato

graf_estrato2 <- plot_ly(
  data = base2,
  x = ~estrato,
  y = ~preciom,
  type = "box",
  color = ~estrato
) %>%
  layout(
    title = "Distribución del Precio según Estrato (Zona Sur)",
    xaxis = list(title = "Estrato socioeconómico"),
    yaxis = list(title = "Precio del apartamento (millones)")
  )

graf_estrato2
## Warning: line.color doesn't (yet) support data arrays
## Warning: Only one fillcolor per trace allowed
## Warning: line.color doesn't (yet) support data arrays
## Warning: Only one fillcolor per trace allowed

El gráfico muestra que el precio de los apartamentos tiende a incrementarse a medida que aumenta el estrato socioeconómico. En particular, los apartamentos ubicados en estratos más altos presentan medianas de precio y rangos de valores superiores en comparación con aquellos localizados en estratos más bajos.

Este comportamiento es consistente con la dinámica del mercado inmobiliario urbano, donde el estrato socioeconómico suele reflejar diferencias en la calidad del entorno, el acceso a servicios urbanos, la infraestructura del sector y el nivel socioeconómico de las zonas residenciales. En consecuencia, los inmuebles ubicados en estratos más altos tienden a presentar mayores niveles de valorización y precios de mercado más elevados.

33 Relación entre el precio del apartamento y el número de baños

graf_banos2 <- plot_ly(
  data = base2,
  x = ~banios,
  y = ~preciom,
  type = "box",
  color = ~banios
) %>%
  layout(
    title = "Precio del Apartamento según Número de Baños",
    xaxis = list(title = "Número de baños"),
    yaxis = list(title = "Precio del apartamento (millones)")
  )

graf_banos2
## Warning: line.color doesn't (yet) support data arrays
## Warning: Only one fillcolor per trace allowed
## Warning: line.color doesn't (yet) support data arrays
## Warning: Only one fillcolor per trace allowed

El gráfico muestra que los apartamentos con un mayor número de baños tienden a presentar precios más elevados. Este comportamiento puede explicarse porque las viviendas con más baños suelen corresponder a inmuebles de mayor tamaño o con mejores características internas, lo cual incrementa su valor dentro del mercado inmobiliario.

No obstante, también se observa una dispersión considerable en los precios dentro de cada categoría de número de baños, lo que sugiere que esta variable, por sí sola, no explica completamente el valor del inmueble. En este sentido, otros factores como el área construida, el estrato socioeconómico, la ubicación específica y las características del entorno también influyen en la determinación del precio.

34 Relación entre el precio del apartamento y el número de habitaciones

graf_habit2 <- plot_ly(
  data = base2,
  x = ~habitaciones,
  y = ~preciom,
  type = "box",
  color = ~habitaciones
) %>%
  layout(
    title = "Precio del Apartamento según Número de Habitaciones",
    xaxis = list(title = "Número de habitaciones"),
    yaxis = list(title = "Precio del apartamento (millones)")
  )

graf_habit2
## Warning: line.color doesn't (yet) support data arrays
## Warning: Only one fillcolor per trace allowed
## Warning: line.color doesn't (yet) support data arrays
## Warning: Only one fillcolor per trace allowed

El gráfico muestra la relación entre el número de habitaciones y el precio de los apartamentos. En términos generales, se observa una tendencia creciente en la mediana de los precios a medida que aumenta el número de habitaciones, lo cual sugiere que los apartamentos con mayor cantidad de espacios habitacionales tienden a presentar valores de mercado más elevados.

No obstante, también se identifican algunos valores atípicos en apartamentos con 2 y 3 habitaciones, cuyos precios son considerablemente altos. Estos casos podrían estar asociados a inmuebles con características particulares del mercado inmobiliario, como mayor área construida, ubicaciones privilegiadas o propiedades de mayor nivel dentro del segmento residencial.

Asimismo, los apartamentos con 5 o 6 habitaciones presentan un menor número de observaciones en la base de datos, lo que podría explicar la ausencia de valores extremadamente altos en estas categorías. En conjunto, el gráfico sugiere que el número de habitaciones tiene una influencia positiva sobre el precio, aunque no constituye el único factor que determina el valor del inmueble.

35 Relación entre el precio del apartamento y la zona de la ciudad

graf_zona2 <- plot_ly(
  data = base2,
  x = ~zona,
  y = ~preciom,
  type = "box",
  color = ~zona
) %>%
  layout(
    title = "Distribución del Precio de Apartamentos en Zona Sur",
    xaxis = list(title = "Zona"),
    yaxis = list(title = "Precio del apartamento (millones)")
  )

graf_zona2

El gráfico muestra la distribución del precio de los apartamentos ubicados en la Zona Sur de la ciudad. Se observa una mediana de precios cercana a los 200–250 millones de pesos, junto con una dispersión considerable en los valores registrados. Asimismo, se identifican algunos valores atípicos, correspondientes a apartamentos con precios significativamente superiores al resto de la muestra.

Este comportamiento sugiere que, incluso dentro de una misma zona de la ciudad, el precio de los inmuebles puede variar de forma importante. Estas diferencias pueden estar asociadas a factores como el área construida, el estrato socioeconómico, la ubicación específica dentro del sector o las características particulares del inmueble, entre otros aspectos que influyen en la valoración del mercado inmobiliario.

36 Análisis general del EDA

El análisis exploratorio de datos permite identificar patrones relevantes en la relación entre el precio de los apartamentos y las variables explicativas consideradas. En términos generales, se observa que variables como el área construida, el número de habitaciones, el número de baños y el estrato socioeconómico presentan una relación positiva con el precio del inmueble. Esto sugiere que los apartamentos de mayor tamaño, con más espacios funcionales y ubicados en estratos socioeconómicos más altos tienden a presentar valores de mercado más elevados.

Asimismo, se evidencia una alta variabilidad en los precios dentro de cada categoría analizada, lo cual indica que el valor de los apartamentos no depende exclusivamente de una sola variable, sino de la interacción de múltiples características estructurales y del entorno urbano.

En conjunto, los resultados del análisis exploratorio proporcionan evidencia suficiente para justificar la estimación de un modelo de regresión lineal múltiple, el cual permitirá analizar de manera conjunta el efecto de varias variables explicativas sobre el precio de los apartamentos y cuantificar su influencia dentro del mercado inmobiliario analizado.

37 Estimación del modelo de regresión múltiple

En esta sección se estima un modelo de regresión lineal múltiple utilizando las variables analizadas previamente, con el objetivo de explicar el precio de los apartamentos en función de sus principales características estructurales.

El modelo planteado busca expresar el precio del apartamento como una función de variables relacionadas con el tamaño, la calidad y las características del inmueble:

\[ Precio = f(\text{Área construida, Estrato, Número de habitaciones, Número de parqueaderos, Número de baños}) \]

Posteriormente se evaluará si los coeficientes estimados del modelo son estadísticamente significativos, se interpretará el coeficiente de determinación \(R^2\) y se discutirá el ajuste del modelo junto con posibles estrategias para mejorar su capacidad explicativa.

En este caso, la variable respuesta corresponde al precio del apartamento (preciom), mientras que las variables explicativas consideradas son:

  • Área construida (areaconst)
  • Estrato socioeconómico (estrato)
  • Número de habitaciones (habitaciones)
  • Número de parqueaderos (parqueaderos)
  • Número de baños (banios)

De esta manera, el modelo de regresión lineal múltiple estimado se expresa de la siguiente forma:

\[ Precio = \beta_0 + \beta_1 Área + \beta_2 Estrato + \beta_3 Habitaciones + \beta_4 Parqueaderos + \beta_5 Baños + \varepsilon \]

Para comenzar el análisis, el modelo será estimado utilizando la base de datos filtrada de apartamentos ubicados en la Zona Sur de la ciudad, lo que permitirá analizar la relación entre las características de estos inmuebles y su precio dentro del mercado inmobiliario correspondiente a esta zona.

modelo_apto <- lm(
  preciom ~ areaconst + estrato + habitaciones + parqueaderos + banios,
  data = base2
)
knitr::kable(
  summary(modelo_apto)$coefficients,
  digits = 3,
  caption = "Resultados del modelo de regresión lineal múltiple (Apartamentos Zona Sur)"
)
Resultados del modelo de regresión lineal múltiple (Apartamentos Zona Sur)
Estimate Std. Error t value Pr(>|t|)
(Intercept) -261.625 15.632 -16.736 0
areaconst 1.285 0.054 23.785 0
estrato 60.897 3.084 19.746 0
habitaciones -24.837 3.892 -6.381 0
parqueaderos 72.915 3.958 18.422 0
banios 50.697 3.396 14.927 0

38 Interpretación de los coeficientes del modelo

A partir de los resultados del modelo de regresión lineal múltiple, se analizan los coeficientes estimados con el objetivo de identificar el efecto de cada variable explicativa sobre el precio de los apartamentos, manteniendo constantes las demás variables incluidas en el modelo.

Área construida

El coeficiente asociado a la variable área construida es positivo y estadísticamente significativo. Esto indica que, manteniendo constantes el estrato socioeconómico, el número de habitaciones, el número de parqueaderos y el número de baños, un incremento de un metro cuadrado en el área construida se asocia con un aumento en el precio del apartamento.

Este resultado es consistente con el comportamiento esperado del mercado inmobiliario, ya que los apartamentos con mayor área construida suelen presentar mayor valor comercial debido al mayor espacio habitable y a la mayor funcionalidad que ofrecen.

Estrato socioeconómico

El coeficiente estimado para la variable estrato socioeconómico también resulta positivo y estadísticamente significativo. Esto implica que, manteniendo constantes las demás variables del modelo, un aumento en el estrato se asocia con un incremento en el precio esperado del apartamento.

Este resultado es coherente con el contexto urbano colombiano, donde los estratos más altos suelen estar asociados con mejores condiciones del entorno urbano, mayor valorización del suelo y mayor demanda inmobiliaria.

Número de habitaciones

El coeficiente asociado al número de habitaciones puede presentar menor significancia estadística en comparación con otras variables del modelo. Esto sugiere que, una vez controlado el efecto de variables como el área construida y el estrato socioeconómico, el número de habitaciones no necesariamente aporta información adicional relevante para explicar las variaciones en el precio del apartamento.

Una posible explicación es que esta variable se encuentra altamente correlacionada con el área construida, ya que los apartamentos de mayor tamaño tienden a contar con un mayor número de habitaciones.

Número de parqueaderos

El coeficiente correspondiente al número de parqueaderos es positivo y estadísticamente significativo. Esto indica que, manteniendo constantes las demás variables del modelo, cada parqueadero adicional se asocia con un incremento en el precio esperado del apartamento.

Este resultado es consistente con la dinámica del mercado inmobiliario urbano, donde la disponibilidad de parqueaderos constituye una característica altamente valorada por los compradores, especialmente en zonas con alta densidad urbana.

Número de baños

El coeficiente asociado al número de baños también resulta positivo y significativo. Esto indica que los apartamentos con mayor número de baños tienden a presentar precios de mercado más elevados, ya que esta característica mejora la funcionalidad, comodidad y atractivo del inmueble para los potenciales compradores.

39 Tabla de ajuste del modelo (R² y métricas)

data.frame(
  Indicador = c(
    "R²",
    "R² ajustado",
    "Error estándar residual",
    "Estadístico F",
    "Valor p global"
  ),
  Valor = c(
    summary(modelo_apto)$r.squared,
    summary(modelo_apto)$adj.r.squared,
    summary(modelo_apto)$sigma,
    summary(modelo_apto)$fstatistic[1],
    pf(summary(modelo_apto)$fstatistic[1],
       summary(modelo_apto)$fstatistic[2],
       summary(modelo_apto)$fstatistic[3],
       lower.tail = FALSE)
  )
) |> knitr::kable(digits = 4,
caption = "Indicadores de ajuste del modelo")
Indicadores de ajuste del modelo
Indicador Valor
0.7485
R² ajustado 0.7480
Error estándar residual 98.0194
Estadístico F 1413.8018
Valor p global 0.0000

40 Interpretación del coeficiente de determinación \(R^2\)

El modelo estimado presenta un coeficiente de determinación \(R^2\), el cual indica la proporción de la variabilidad observada en el precio de los apartamentos ubicados en la zona sur de la ciudad que puede ser explicada por las variables incluidas en el modelo.

Esto implica que una parte importante de la variación en el precio de los apartamentos puede explicarse a partir de variables estructurales del inmueble, tales como el área construida, el estrato socioeconómico, el número de habitaciones, el número de parqueaderos y el número de baños.

Este nivel de explicación puede considerarse adecuado dentro del contexto del mercado inmobiliario, ya que el precio de los apartamentos depende también de múltiples factores adicionales que no están incluidos en la base de datos analizada. Entre estos factores se pueden mencionar:

  • El barrio específico donde se ubica el inmueble
  • La antigüedad del edificio
  • El estado de conservación del apartamento
  • La disponibilidad de zonas comunes o amenidades
  • La cercanía a servicios urbanos, transporte y vías principales

Por lo tanto, aunque el modelo logra explicar una proporción relevante de la variabilidad en el precio de los apartamentos, aún existen otros factores importantes que influyen en la determinación del valor de los inmuebles dentro del mercado inmobiliario.


41 Discusión del ajuste del modelo

En general, los resultados obtenidos son coherentes con el comportamiento esperado del mercado inmobiliario para apartamentos ubicados en la zona sur de la ciudad.

Las variables área construida, estrato socioeconómico, número de parqueaderos y número de baños presentan efectos positivos y estadísticamente significativos sobre el precio del apartamento. Este resultado es consistente con la lógica del mercado inmobiliario, donde las características que incrementan el tamaño, la funcionalidad del inmueble o la calidad del entorno urbano tienden a aumentar su valor de mercado.

Por otro lado, la variable número de habitaciones puede presentar un comportamiento diferente al esperado. Esto puede estar asociado a su relación con otras variables estructurales, particularmente con el área construida. En muchos casos, los apartamentos con mayor área tienden a contar con más habitaciones, por lo que parte del efecto de esta variable ya se encuentra capturado por el tamaño del inmueble dentro del modelo.

En este sentido, el número de habitaciones podría no aportar información adicional relevante una vez que el modelo ya controla por el área construida, lo cual es un resultado común en modelos de precios inmobiliarios.


42 Posibles mejoras del modelo

El modelo estimado podría mejorarse mediante diversas estrategias metodológicas orientadas a incrementar su capacidad explicativa y su precisión predictiva. Entre las posibles mejoras se pueden considerar:

  1. Incluir variables adicionales, tales como la ubicación específica del inmueble (por ejemplo, el barrio), la antigüedad del edificio o el estado de conservación del apartamento.

  2. Explorar transformaciones de variables, como el uso del logaritmo del precio o del área construida, con el fin de mejorar la linealidad del modelo.

  3. Evaluar posibles interacciones entre variables, por ejemplo entre el área construida y el estrato socioeconómico.

  4. Analizar la posible presencia de multicolinealidad entre variables como el área construida, el número de habitaciones y el número de baños.

  5. Verificar los supuestos del modelo de regresión, incluyendo normalidad de los residuos, homocedasticidad e independencia de los errores.

  6. Incorporar variables relacionadas con el entorno urbano, como la cercanía a servicios, transporte público o zonas comerciales.

  7. Aplicar técnicas de regresión robusta en caso de detectarse valores atípicos que puedan afectar la estabilidad de las estimaciones.


43 Diagnóstico y evaluación gráfica del modelo

Con el fin de evaluar el comportamiento del modelo de regresión estimado y analizar la calidad de sus predicciones, se realiza un conjunto de gráficos de diagnóstico. Estos gráficos permiten examinar visualmente aspectos importantes del modelo, como la relación entre los valores observados y los valores predichos, la distribución de los residuos y la posible presencia de patrones sistemáticos en los errores de predicción.

En particular, se presentan tres visualizaciones principales:

  1. Gráfico de valores reales vs valores predichos, que permite evaluar la capacidad del modelo para aproximar los datos observados.

  2. Gráfico de residuos frente a los valores predichos, útil para identificar posibles problemas de heterocedasticidad o patrones no capturados por el modelo.

  3. Histograma de los residuos, que permite analizar la forma de la distribución de los errores del modelo.

El análisis conjunto de estos gráficos proporciona información relevante sobre el ajuste del modelo y la validez de sus supuestos, permitiendo identificar posibles limitaciones y oportunidades de mejora en la especificación del modelo de regresión.

Precio real vs precio predicho

ggplot(base2_modelo, aes(x = predicho, y = preciom)) +
  geom_point(color="blue", alpha=0.6) +
  geom_abline(intercept=0, slope=1, color="red", linewidth=1) +
  labs(
    title="Precio real vs precio predicho",
    x="Precio predicho (millones)",
    y="Precio real (millones)"
  ) +
  theme_minimal()

El gráfico compara los precios observados de los apartamentos con los valores predichos por el modelo de regresión. Se observa que una proporción importante de los puntos se concentra alrededor de la línea diagonal de referencia, lo cual indica que el modelo logra aproximar de manera razonable el comportamiento del precio de los apartamentos.

No obstante, también se aprecia cierta dispersión en las observaciones, especialmente en los niveles de precio más altos. Este comportamiento sugiere que, aunque el modelo captura una parte importante de la variabilidad del precio, existen otros factores relevantes no incluidos en el modelo que también influyen en la determinación del valor de los inmuebles.

Análisis de residuos frente a valores predichos

ggplot(base2_modelo, aes(x = predicho, y = residuos)) +
  geom_point(color = "blue", alpha = 0.6) +
  geom_hline(yintercept = 0, color = "red", linewidth = 1) +
  labs(
    title = "Residuos vs valores predichos",
    x = "Precio predicho (millones)",
    y = "Residuos"
  ) +
  theme_minimal()

El gráfico muestra que los residuos se distribuyen alrededor de la línea horizontal en cero, lo que sugiere que el modelo no presenta un sesgo sistemático evidente en sus predicciones. En términos generales, los errores del modelo parecen dispersarse de manera relativamente equilibrada alrededor de este valor.

No obstante, se observa que la variabilidad de los residuos tiende a incrementarse a medida que aumentan los valores predichos del precio, lo cual podría indicar la posible presencia de heterocedasticidad. Este comportamiento sugiere que el modelo tiende a presentar mayores errores de predicción en apartamentos de mayor valor, lo cual es relativamente común en modelos aplicados al mercado inmobiliario, donde las propiedades de mayor precio suelen presentar mayor variabilidad.

Histograma de residuos

ggplot(base2_modelo, aes(x = residuos)) +
  geom_histogram(
    bins = 30,
    fill = "skyblue",
    color = "white"
  ) +
  labs(
    title = "Distribución de los residuos del modelo",
    x = "Residuos",
    y = "Frecuencia"
  ) +
  theme_minimal()

El histograma muestra la distribución de los residuos del modelo de regresión. Se observa que la mayoría de los errores se concentran alrededor de cero, lo cual es consistente con el supuesto de que los residuos presentan una media cercana a cero. Este comportamiento sugiere que, en términos generales, el modelo no presenta un sesgo sistemático en sus predicciones.

No obstante, también se identifican algunos valores extremos en la distribución de los residuos, lo que indica que existen ciertas observaciones para las cuales el modelo presenta errores de predicción más elevados. Estos casos pueden estar asociados a características particulares de algunos inmuebles que no están completamente capturadas por las variables incluidas en el modelo.

44 Diagnóstico del modelo

En términos generales, el modelo logra aproximar razonablemente el precio de las viviendas a partir de variables estructurales como el área construida, el estrato socioeconómico, el número de habitaciones, el número de baños y los parqueaderos. Esto se evidencia en el gráfico de precio real versus precio predicho, donde una proporción importante de los puntos se ubica cerca de la línea diagonal, lo que indica que las predicciones del modelo se encuentran relativamente próximas a los valores observados.

Asimismo, el coeficiente de determinación \(R^2\) sugiere que una proporción importante de la variabilidad del precio es explicada por las variables incluidas en el modelo. Sin embargo, la dispersión observada en algunos puntos y en los residuos indica que aún existen factores adicionales que influyen en la formación del precio de las viviendas y que no están incluidos en el modelo.

En consecuencia, el modelo proporciona una aproximación útil para estimar el precio de las viviendas, aunque su capacidad predictiva podría mejorarse mediante la incorporación de variables adicionales relacionadas con la ubicación específica del inmueble, el estado de conservación de la vivienda o ciertas características del entorno urbano.


45 Validación de supuestos del modelo

Para verificar la validez del modelo de regresión lineal múltiple estimado, es necesario evaluar si se cumplen los principales supuestos estadísticos sobre los cuales se basa este tipo de modelo. La verificación de estos supuestos permite garantizar que las estimaciones obtenidas sean confiables y que las inferencias realizadas a partir del modelo sean válidas.

En particular, se analizan los siguientes supuestos:

  • Linealidad entre las variables explicativas y la variable respuesta.
  • Normalidad de los residuos.
  • Homoscedasticidad, es decir, varianza constante de los errores.
  • Independencia de los errores.

A continuación, se presentan los gráficos de diagnóstico del modelo, los cuales permiten evaluar visualmente el cumplimiento de estos supuestos.

Gráficos de diagnóstico del modelo

par(mfrow = c(2,2))
plot(modelo_apto)

par(mfrow = c(1,1))

Este conjunto de gráficos corresponde a los diagnósticos estándar de un modelo de regresión lineal, los cuales permiten evaluar visualmente el cumplimiento de los principales supuestos del modelo.


1. Residuos vs Valores Ajustados (Linealidad)

El gráfico Residuals vs Fitted permite evaluar si la relación entre las variables explicativas y la variable respuesta puede considerarse aproximadamente lineal.

En este tipo de gráfico se espera que los residuos se distribuyan de forma aleatoria alrededor de la línea horizontal en cero, sin presentar patrones sistemáticos.

En el modelo estimado, los residuos se distribuyen en general alrededor de cero. No obstante, se observa una ligera tendencia y un aumento en la dispersión para valores predichos más altos, lo cual sugiere que, aunque el modelo lineal captura en gran medida la relación entre las variables, podrían existir efectos adicionales que no están completamente explicados por el modelo.


2. QQ-Plot de residuos (Normalidad)

El gráfico Normal Q-Q permite evaluar si los residuos siguen aproximadamente una distribución normal, lo cual es un supuesto importante para la validez de las inferencias estadísticas en modelos de regresión.

En el gráfico se observa que una gran parte de los puntos sigue la tendencia de la línea diagonal, lo que indica que la normalidad de los residuos se cumple de manera aproximada. Sin embargo, se presentan algunas desviaciones en los extremos de la distribución, lo que sugiere la presencia de ciertos valores atípicos o colas más pesadas de lo esperado bajo una distribución normal.


3. Scale-Location (Homoscedasticidad)

El supuesto de homocedasticidad establece que la varianza de los errores debe mantenerse aproximadamente constante a lo largo de los valores predichos del modelo.

En el gráfico Scale-Location se observa que la dispersión de los residuos aumenta ligeramente a medida que crecen los valores ajustados, lo cual sugiere la posible presencia de heterocedasticidad moderada. Este comportamiento indica que el error de predicción del modelo podría ser mayor para viviendas de mayor valor.


4. Residuals vs Leverage (Observaciones influyentes)

El gráfico Residuals vs Leverage permite identificar observaciones que puedan tener una influencia significativa sobre la estimación del modelo.

En este caso, la mayoría de las observaciones se encuentra dentro de los límites esperados de la distancia de Cook, lo que sugiere que no existen puntos extremadamente influyentes que distorsionen de manera significativa el ajuste del modelo. No obstante, algunas observaciones presentan valores de leverage relativamente altos, lo cual es común en datos inmobiliarios donde pueden existir propiedades con características particulares.


Conclusión

En conjunto, los gráficos de diagnóstico sugieren que el modelo de regresión lineal múltiple proporciona una aproximación razonable para explicar el precio de los apartamentos a partir de sus características estructurales. Sin embargo, la presencia de cierta heterocedasticidad, algunas desviaciones respecto a la normalidad de los residuos y ciertos valores atípicos indica que el modelo podría mejorarse mediante la incorporación de variables adicionales o la exploración de transformaciones en algunas variables del modelo.


46 Predicción del precio de viviendas

Una vez estimado y validado el modelo de regresión lineal múltiple, es posible utilizarlo para estimar el precio esperado de viviendas con características específicas. Esto permite apoyar el proceso de toma de decisiones de los clientes interesados en adquirir una propiedad que cumpla con determinadas condiciones estructurales y de ubicación.

A partir del modelo estimado se calcularán los precios predichos para las viviendas disponibles en la base filtrada, con el fin de identificar aquellas propiedades que se ajusten mejor a las características solicitadas por los clientes.

Estas predicciones permiten comparar el precio estimado por el modelo con el precio real observado en el mercado, lo cual facilita identificar viviendas que podrían representar buenas oportunidades de compra dentro del mercado inmobiliario analizado.

Visualización de algunas predicciones

base2$precio_estimado <- predict(modelo_apto, newdata = base2)
tabla_comparacion_v2 <- base2 %>%
  select(
    Precio_real = preciom,
    Precio_estimado = precio_estimado,
    Area = areaconst,
    Estrato = estrato,
    Habitaciones = habitaciones,
    Parqueaderos = parqueaderos,
    Banios = banios
  )

DT::datatable(
  head(tabla_comparacion_v2, 10),
  options = list(pageLength = 10, scrollX = TRUE),
  caption = "Tabla Comparación entre precio real y precio estimado"
)

La tabla anterior presenta una comparación entre el precio real observado en el mercado y el precio estimado por el modelo de regresión para los apartamentos incluidos en la base filtrada. Este contraste permite evaluar qué tan cercanas son las predicciones generadas por el modelo respecto a los valores reales de mercado.

Además, esta comparación facilita identificar posibles oportunidades dentro del mercado inmobiliario, es decir, viviendas cuyo precio observado sea inferior al valor esperado según sus características estructurales. En estos casos, el modelo sugiere que dichas propiedades podrían representar alternativas atractivas de compra, ya que su precio de mercado se encuentra por debajo del valor estimado a partir de variables como el área construida, el estrato socioeconómico y el número de espacios funcionales del inmueble.

Tabla de viviendas recomendadas según la solicitud del cliente

viviendas_estrictas_v2 <- base2 %>%
  filter(
    tipo == "Apartamento",
    zona == "Zona Sur",
    estrato %in% c(5,6),
    habitaciones >= 5,
    banios >= 3,
    parqueaderos >= 3,
    areaconst >= 250,
    preciom <= 850
  ) %>%
  mutate(
    precio_estimado = predict(modelo_apto, newdata = .)
  ) %>%
  select(
    Tipo_inmueble = tipo,
    Barrio = barrio,
    Precio_real = preciom,
    Precio_estimado = precio_estimado,
    Area = areaconst,
    Habitaciones = habitaciones,
    Banios = banios,
    Parqueaderos = parqueaderos,
    Estrato = estrato
  )

DT::datatable(
  viviendas_estrictas_v2,
  options = list(pageLength = 5, scrollX = TRUE),
  caption = "Tabla Viviendas que cumplen estrictamente con las condiciones del cliente"
)

Al aplicar estrictamente los criterios establecidos por el cliente, únicamente se identificaron tres apartamentos en la base de datos que cumplen con todas las condiciones definidas para la búsqueda.

viviendas_recomendadas_v2 <- base2 %>%
  filter(
    tipo == "Apartamento",
    zona == "Zona Sur",
    estrato %in% c(5, 6),
    habitaciones >= 4,
    banios >= 3,
    parqueaderos >= 2,
    areaconst >= 220,
    preciom <= 850
  ) %>%
  mutate(
    precio_estimado = predict(modelo_apto, newdata = .),
    diferencia = precio_estimado - preciom,
    cercania_area = abs(areaconst - 300),
    cercania_habitaciones = abs(habitaciones - 5),
    cercania_parqueaderos = abs(parqueaderos - 3)
  ) %>%
  arrange(cercania_area, cercania_habitaciones, cercania_parqueaderos, desc(diferencia)) %>%
  select(
    tipo,
    barrio,
    preciom,
    precio_estimado,
    areaconst,
    habitaciones,
    banios,
    parqueaderos,
    estrato
  ) %>%
  head(5)

DT::datatable(
  viviendas_recomendadas_v2,
  options = list(pageLength = 5, scrollX = TRUE),
  caption = "Tabla Viviendas recomendadas según las condiciones del cliente"
)

El análisis conjunto de ambas tablas permite examinar la relación entre la solicitud inicial del cliente y la oferta disponible dentro del mercado inmobiliario analizado.

Por un lado, al aplicar un filtrado estricto basado en todas las características definidas por el cliente, se identificaron únicamente tres viviendas que cumplen simultáneamente con todos los requisitos establecidos. Este resultado sugiere que el perfil de vivienda solicitado es relativamente poco frecuente dentro de la base de datos analizada, lo cual limita el número de alternativas disponibles bajo estas condiciones específicas.

Por otro lado, al realizar una flexibilización controlada de algunos criterios secundarios, fue posible identificar un conjunto más amplio de alternativas que se aproximan al perfil solicitado. Estas viviendas recomendadas conservan las condiciones más relevantes para el cliente —como el tipo de inmueble, la ubicación en la zona sur de la ciudad, el estrato socioeconómico y el presupuesto máximo— mientras que permiten ligeras variaciones en características como el área construida, el número de habitaciones o el número de parqueaderos.

En conjunto, este análisis sugiere que, aunque el mercado ofrece algunas opciones que cumplen completamente con los criterios establecidos, ampliar moderadamente los rangos de ciertas variables puede facilitar la identificación de un mayor número de alternativas potenciales de compra, permitiendo así una toma de decisiones más informada por parte del cliente.


47 Ofertas potenciales para la vivienda 2

Para identificar posibles ofertas que se ajusten a la solicitud del cliente, se utilizan las predicciones generadas por el modelo de regresión lineal múltiple. El objetivo es encontrar apartamentos cuyas características estructurales se aproximen a las condiciones solicitadas y cuyo precio estimado se encuentre dentro del presupuesto máximo de 850 millones de pesos.

A partir de estas predicciones se construye una base de datos con los precios estimados según el modelo, lo que permite comparar el valor esperado de los inmuebles con sus características estructurales. Posteriormente, se aplica un proceso de filtrado que permite identificar aquellas viviendas que mejor se ajustan al perfil requerido por el cliente, facilitando así la selección de posibles alternativas dentro del mercado analizado.

base_estimados_v2 <- base2 %>%
  mutate(
    precio_estimado = predict(modelo_apto, newdata = .),
    precio_real = preciom
  ) %>%
  select(
    zona,
    piso,
    estrato,
    precio_real,
    precio_estimado,
    areaconst,
    parqueaderos,
    banios,
    habitaciones,
    tipo,
    barrio,
    longitud,
    latitud
  )

DT::datatable(
  head(base_estimados_v2, 10),
  options = list(pageLength = 10, scrollX = TRUE),
  caption = "Base con precios reales y estimados según el modelo"
)

Durante el proceso de análisis se observó que algunos barrios clasificados en la base de datos dentro de una determinada zona no coinciden necesariamente con la división geográfica tradicional de la ciudad de Cali. Por ejemplo, barrios como Aguacatal, Alameda o Acopi aparecen asociados a ciertas zonas dentro del dataset, aunque en la clasificación urbana real pertenecen a otras áreas de la ciudad.

Esta situación puede deberse a que la variable zona responde a una clasificación interna o simplificada utilizada en la base de datos, posiblemente con fines comerciales o analíticos dentro del mercado inmobiliario. En consecuencia, la variable zona debe interpretarse únicamente dentro del contexto del conjunto de datos analizado, y no necesariamente como una representación exacta de la división geográfica oficial de la ciudad.

ofertas_v2 <- base2 %>%
  mutate(
    precio_estimado = predict(modelo_apto, newdata = .),
    precio_real = preciom
  ) %>%
  filter(
    tipo == "Apartamento",
    zona == "Zona Sur",
    estrato %in% c(5, 6),
    areaconst >= 250,
    habitaciones >= 5,
    banios >= 3,
    parqueaderos >= 3,
    precio_real <= 850
  ) %>%
  arrange(abs(areaconst - 300), precio_real) %>%
  select(
    zona,
    piso,
    estrato,
    precio_real,
    precio_estimado,
    areaconst,
    parqueaderos,
    banios,
    habitaciones,
    tipo,
    barrio,
    longitud,
    latitud
  ) %>%
  head(5)

DT::datatable(
  ofertas_v2,
  options = list(pageLength = 5, scrollX = TRUE),
  caption = "Viviendas recomendadas según las condiciones del cliente"
)
ofertas_v2 <- base2 %>%
  mutate(
    precio_estimado = predict(modelo_apto, newdata = .),
    precio_real = preciom,
    cercania_area = abs(areaconst - 300),
    cercania_habitaciones = abs(habitaciones - 5),
    cercania_parqueaderos = abs(parqueaderos - 3)
  ) %>%
  filter(
    tipo == "Apartamento",
    zona == "Zona Sur",
    estrato %in% c(5, 6),
    banios >= 3,
    habitaciones >= 4,
    parqueaderos >= 2,
    areaconst >= 220,
    precio_real <= 850
  ) %>%
  arrange(
    cercania_area,
    cercania_habitaciones,
    cercania_parqueaderos,
    precio_real
  ) %>%
  select(
    zona,
    piso,
    estrato,
    precio_real,
    precio_estimado,
    areaconst,
    parqueaderos,
    banios,
    habitaciones,
    tipo,
    barrio,
    longitud,
    latitud
  ) %>%
  head(5)

DT::datatable(
  ofertas_v2,
  options = list(pageLength = 5, scrollX = TRUE),
  caption = "Viviendas recomendadas según las condiciones del cliente"
)

Al aplicar de manera estricta todos los criterios definidos por el cliente para la Vivienda 2, se identificaron únicamente tres apartamentos dentro de la base de datos que cumplían simultáneamente con las condiciones de tipo de inmueble, zona, estrato socioeconómico, área construida, número de habitaciones, número de baños, parqueaderos y presupuesto máximo.

Dado que el ejercicio solicita presentar al menos cinco ofertas potenciales, se procedió a realizar una flexibilización controlada de algunos criterios secundarios, manteniendo constantes las condiciones consideradas más relevantes para el cliente, como el tipo de inmueble, la ubicación en la zona sur de la ciudad, el estrato socioeconómico y el presupuesto máximo disponible.

En particular, se amplió el rango del área construida para incluir viviendas con al menos 220 m², se permitió considerar apartamentos con mínimo cuatro habitaciones y mínimo dos parqueaderos, manteniendo como condición la presencia de al menos tres baños y el mismo rango de estrato socioeconómico.

Esta estrategia permitió identificar cinco alternativas que, aunque no cumplen de forma exacta con todos los requerimientos originales, representan opciones cercanas y plausibles dentro de la oferta disponible en el mercado inmobiliario analizado, ampliando así el conjunto de viviendas que podrían resultar de interés para el cliente.

leaflet(ofertas_v2) %>%
  addProviderTiles(providers$CartoDB.Positron) %>%
  addCircleMarkers(
    lng = ~longitud,
    lat = ~latitud,
    radius = 6,
    color = "blue",
    stroke = FALSE,
    fillOpacity = 0.9,
    popup = ~paste(
      "<b>Barrio:</b>", barrio,
      "<br><b>Precio real:</b>", precio_real, "millones",
      "<br><b>Precio estimado:</b>", round(precio_estimado,2), "millones",
      "<br><b>Área construida:</b>", areaconst, "m²",
      "<br><b>Habitaciones:</b>", habitaciones,
      "<br><b>Baños:</b>", banios,
      "<br><b>Parqueaderos:</b>", parqueaderos,
      "<br><b>Estrato:</b>", estrato
    )
  )

Durante la revisión de las viviendas seleccionadas se observó que algunos barrios clasificados dentro de la variable zona no coinciden exactamente con la división geográfica tradicional de la ciudad de Cali. Por ejemplo, barrios como Cuarto de Legua – Guadalupe aparecen asociados a la Zona Sur dentro de la base de datos utilizada, aunque desde una perspectiva geográfica suelen considerarse parte del corredor centro–sur de la ciudad.

Esta situación puede explicarse porque la variable zona corresponde a una clasificación propia del conjunto de datos inmobiliario, posiblemente utilizada con fines comerciales o analíticos. Por esta razón, dicha variable debe interpretarse dentro del contexto del dataset analizado, y no necesariamente como una representación exacta de la división geográfica oficial de la ciudad.


48 Conclusión final

A partir del modelo de regresión lineal múltiple fue posible estimar el precio de los apartamentos considerando variables estructurales del inmueble como el área construida, el estrato socioeconómico, el número de habitaciones, el número de baños y el número de parqueaderos. Estas estimaciones permitieron comparar el precio real observado en el mercado con el valor esperado según las características de cada inmueble.

Con base en estas predicciones se realizó un proceso de filtrado para identificar viviendas que se aproximaran a las condiciones solicitadas por el cliente para la Vivienda 2, especialmente en términos de tipo de inmueble, ubicación, estrato socioeconómico y presupuesto máximo de 850 millones de pesos. Debido a que pocas viviendas cumplían estrictamente con todos los criterios definidos, se aplicó una flexibilización moderada de algunas variables secundarias, lo que permitió identificar al menos cinco alternativas potenciales dentro de la oferta disponible.

En conjunto, el análisis permitió identificar opciones de apartamentos que se aproximan al perfil requerido por el cliente, evidenciando cómo el uso de modelos estadísticos y herramientas de análisis de datos puede contribuir de manera significativa a apoyar los procesos de toma de decisiones dentro del mercado inmobiliario.