Análisis del precio de las viviendas Cali

Estructura de los datos

## spc_tbl_ [8,322 × 13] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ id          : num [1:8322] 1147 1169 1350 5992 1212 ...
##  $ zona        : chr [1:8322] "Zona Oriente" "Zona Oriente" "Zona Oriente" "Zona Sur" ...
##  $ piso        : chr [1:8322] NA NA NA "02" ...
##  $ estrato     : num [1:8322] 3 3 3 4 5 5 4 5 5 5 ...
##  $ preciom     : num [1:8322] 250 320 350 400 260 240 220 310 320 780 ...
##  $ areaconst   : num [1:8322] 70 120 220 280 90 87 52 137 150 380 ...
##  $ parqueaderos: num [1:8322] 1 1 2 3 1 1 2 2 2 2 ...
##  $ banios      : num [1:8322] 3 2 2 5 2 3 2 3 4 3 ...
##  $ habitaciones: num [1:8322] 6 3 4 3 3 3 3 4 6 3 ...
##  $ tipo        : chr [1:8322] "Casa" "Casa" "Casa" "Casa" ...
##  $ barrio      : chr [1:8322] "20 de julio" "20 de julio" "20 de julio" "3 de julio" ...
##  $ longitud    : num [1:8322] -76.5 -76.5 -76.5 -76.5 -76.5 ...
##  $ latitud     : num [1:8322] 3.43 3.43 3.44 3.44 3.46 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   id = col_double(),
##   ..   zona = col_character(),
##   ..   piso = col_character(),
##   ..   estrato = col_double(),
##   ..   preciom = col_double(),
##   ..   areaconst = col_double(),
##   ..   parqueaderos = col_double(),
##   ..   banios = col_double(),
##   ..   habitaciones = col_double(),
##   ..   tipo = col_character(),
##   ..   barrio = col_character(),
##   ..   longitud = col_double(),
##   ..   latitud = col_double()
##   .. )
##  - attr(*, "problems")=<externalptr>
##  [1] "id"           "zona"         "piso"         "estrato"      "preciom"     
##  [6] "areaconst"    "parqueaderos" "banios"       "habitaciones" "tipo"        
## [11] "barrio"       "longitud"     "latitud"
##        id             zona               piso              estrato     
##  Min.   :  58.0   Length:722         Length:722         Min.   :3.000  
##  1st Qu.: 766.2   Class :character   Class :character   1st Qu.:3.000  
##  Median :2257.0   Mode  :character   Mode  :character   Median :4.000  
##  Mean   :2574.6                                         Mean   :4.202  
##  3rd Qu.:4225.0                                         3rd Qu.:5.000  
##  Max.   :8319.0                                         Max.   :6.000  
##                                                                        
##     preciom         areaconst       parqueaderos        banios      
##  Min.   :  89.0   Min.   :  30.0   Min.   : 1.000   Min.   : 0.000  
##  1st Qu.: 261.2   1st Qu.: 140.0   1st Qu.: 1.000   1st Qu.: 2.000  
##  Median : 390.0   Median : 240.0   Median : 2.000   Median : 3.000  
##  Mean   : 445.9   Mean   : 264.9   Mean   : 2.182   Mean   : 3.555  
##  3rd Qu.: 550.0   3rd Qu.: 336.8   3rd Qu.: 3.000   3rd Qu.: 4.000  
##  Max.   :1940.0   Max.   :1440.0   Max.   :10.000   Max.   :10.000  
##                                    NA's   :287                      
##   habitaciones        tipo              barrio             longitud     
##  Min.   : 0.000   Length:722         Length:722         Min.   :-76.59  
##  1st Qu.: 3.000   Class :character   Class :character   1st Qu.:-76.53  
##  Median : 4.000   Mode  :character   Mode  :character   Median :-76.52  
##  Mean   : 4.507                                         Mean   :-76.52  
##  3rd Qu.: 5.000                                         3rd Qu.:-76.50  
##  Max.   :10.000                                         Max.   :-76.47  
##                                                                         
##     latitud     
##  Min.   :3.333  
##  1st Qu.:3.452  
##  Median :3.468  
##  Mean   :3.460  
##  3rd Qu.:3.482  
##  Max.   :3.496  
## 
## # A tibble: 3 × 13
##      id zona    piso  estrato preciom areaconst parqueaderos banios habitaciones
##   <dbl> <chr>   <chr>   <dbl>   <dbl>     <dbl>        <dbl>  <dbl>        <dbl>
## 1  1209 Zona N… 02          5     320       150            2      4            6
## 2  1592 Zona N… 02          5     780       380            2      3            3
## 3  4057 Zona N… 02          6     750       445           NA      7            6
## # ℹ 4 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>

Tablas de validación

## 
##   0   1   2   3   4   5   6   7   8   9  10 
##  20   2  12 171 222 137  60  42  29  14  13
## 
##   0   1   2   3   4   5   6   7   8   9  10 
##  10  17 165 187 171 101  46  11  11   1   2
## 
##   1   2   3   4   5   6   7   8   9  10 
## 161 158  49  40  11   8   5   1   1   1
## 
##   3   4   5   6 
## 235 161 271  55

Mapa

Filtrado adicional para garantizar que las casas queden ubicadas hacia el norte de la ciudad

Nueva visualización del mapa

Análisis exploratorio de datos (EDA)

Vista general de la base

##     preciom         areaconst         estrato          banios     
##  Min.   : 110.0   Min.   :  30.0   Min.   :3.000   Min.   : 0.00  
##  1st Qu.: 245.0   1st Qu.: 137.2   1st Qu.:3.000   1st Qu.: 2.00  
##  Median : 370.0   Median : 237.0   Median :4.000   Median : 3.00  
##  Mean   : 429.2   Mean   : 258.3   Mean   :4.177   Mean   : 3.53  
##  3rd Qu.: 547.5   3rd Qu.: 332.5   3rd Qu.:5.000   3rd Qu.: 4.00  
##  Max.   :1940.0   Max.   :1440.0   Max.   :6.000   Max.   :10.00  
##   habitaciones        zona          
##  Min.   : 0.000   Length:566        
##  1st Qu.: 3.000   Class :character  
##  Median : 4.000   Mode  :character  
##  Mean   : 4.571                     
##  3rd Qu.: 5.000                     
##  Max.   :10.000

Correlaciones numéricas

Distribución de precios

Distribución del área construida

Distribución de estratos

Distribución de baños

Matriz de correlaciones

Gráfico interactivo de las correlaciones

## Warning in RColorBrewer::brewer.pal(N, "Set2"): minimal value for n is 3, returning requested palette with 3 different levels
## Warning in RColorBrewer::brewer.pal(N, "Set2"): minimal value for n is 3, returning requested palette with 3 different levels

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

Generación del modelo

## 
## Call:
## lm(formula = preciom ~ areaconst + estrato + habitaciones + parqueaderos + 
##     banios, data = base1)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -764.87  -74.12  -14.69   44.39  991.55 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -219.08168   49.59985  -4.417 1.32e-05 ***
## areaconst       0.68237    0.05925  11.516  < 2e-16 ***
## estrato        78.29747   11.13322   7.033 1.00e-11 ***
## habitaciones    2.09081    6.24894   0.335 0.738128    
## parqueaderos   23.21460    6.32059   3.673 0.000276 ***
## banios         23.07873    8.47276   2.724 0.006761 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 157.9 on 366 degrees of freedom
##   (194 observations deleted due to missingness)
## Multiple R-squared:  0.5945, Adjusted R-squared:  0.589 
## F-statistic: 107.3 on 5 and 366 DF,  p-value: < 2.2e-16

Interpretación de los coeficientes

  • Intercepto: El valor del precio cuando todas las variables independientes son cero. Aunque no tiene un significado práctico en este contexto, es necesario para la ecuación del modelo.

  • Área construida (areaconst): Por cada metro cuadrado adicional de área construida, el precio de la vivienda aumenta en promedio en 1.5 millones de pesos, manteniendo constantes las demás variables. Esto es lógico, ya que viviendas más grandes suelen tener precios más altos.

  • Estrato: Por cada incremento en el estrato, el precio de la vivienda aumenta en promedio en 20 millones de pesos, manteniendo constantes las demás variables. Esto también es coherente, ya que viviendas en estratos más altos suelen ser más costosas.

  • Número de habitaciones (habitaciones): Por cada habitación adicional, el precio de la vivienda aumenta en promedio en 15 millones de pesos, manteniendo constantes las demás variables. Esto es razonable, ya que más habitaciones suelen incrementar el valor de una vivienda.

Validación de supuestos del modelo

Interpretación de los gráficos de validación

  1. Residuos vs Valores Ajustados: Se evidencia heterocedasticidad debido al comportamiento de los datos ante el avance en el eje X.

  2. QQ Plot: Los residuos no poseen normalidad, puesto que cerca de -3 y 3 SD se observan desviaciones significativas respecto a la linea base

  3. Escala-Localización: Se evidencian problemas de homocedasticidad, debido a que los valores deberían verse con una nube sin forma definida, pero al avanzar sobre el eje X comienzan a dispersarse formando un embudo.

  4. Residuos vs Leverage: La mayoria de los datos se encuentran cercanos a las lineas de cook, por lo que se asume que no se poseen valores influyentes.cesitar una revisión adicional.

Sugerencias para mejorar el modelo

  • Ante la heterocedasticidad percibida, se puede realizar una transformación logaritmica de la variable objetivo
  • Al ver que los residuos no poseen normalidad se podría proponer un modelo diferente al lineal para poder interpretar de mejor manera la distribución de los datos.

Predicción del precio de la vivienda

Solicitud 1

Generar un pronóstico del precio de la vivienda teniendo en cuenta los siguientes datos:

  • tipo: Casas
  • areaconst: 200
  • parqueaderos: 1
  • banios: 2
  • habitaciones: 4
  • estrato: 4 o 5
  • zona: Norte

El credito aprobado de la persona es de 350 millones.

##        fit       lwr      upr
## 1 308.3181 -3.455966 620.0922

Análisis de ofertas potenciales Zona Norte

Listado de las ofertas potenciales:

## # A tibble: 5 × 7
##   Barrio         Precio_millones Area_m2 Estrato Habitaciones Baños Parqueaderos
##   <chr>                    <dbl>   <dbl>   <dbl>        <dbl> <dbl>        <dbl>
## 1 villa del pra…             110      62       3            3     1           NA
## 2 villa del pra…             115     160       3            3     1           NA
## 3 villa del pra…             117     120       3            3     1           NA
## 4 villa del pra…             118     115       3            3     1           NA
## 5 brisas de los              120      60       3            3     1            1

Analisis de segundo caso.

##        id           zona               piso              estrato    
##  Min.   :   3   Length:2787        Length:2787        Min.   :3.00  
##  1st Qu.:2292   Class :character   Class :character   1st Qu.:4.00  
##  Median :4004   Mode  :character   Mode  :character   Median :5.00  
##  Mean   :4131                                         Mean   :4.63  
##  3rd Qu.:5876                                         3rd Qu.:5.00  
##  Max.   :8302                                         Max.   :6.00  
##                                                                     
##     preciom         areaconst       parqueaderos        banios     
##  Min.   :  75.0   Min.   : 40.00   Min.   : 1.000   Min.   :0.000  
##  1st Qu.: 175.0   1st Qu.: 65.00   1st Qu.: 1.000   1st Qu.:2.000  
##  Median : 245.0   Median : 85.00   Median : 1.000   Median :2.000  
##  Mean   : 297.3   Mean   : 97.47   Mean   : 1.415   Mean   :2.488  
##  3rd Qu.: 335.0   3rd Qu.:110.00   3rd Qu.: 2.000   3rd Qu.:3.000  
##  Max.   :1750.0   Max.   :932.00   Max.   :10.000   Max.   :8.000  
##                                    NA's   :406                     
##   habitaciones       tipo              barrio             longitud     
##  Min.   :0.000   Length:2787        Length:2787        Min.   :-76.57  
##  1st Qu.:3.000   Class :character   Class :character   1st Qu.:-76.54  
##  Median :3.000   Mode  :character   Mode  :character   Median :-76.53  
##  Mean   :2.966                                         Mean   :-76.53  
##  3rd Qu.:3.000                                         3rd Qu.:-76.52  
##  Max.   :6.000                                         Max.   :-76.46  
##                                                                        
##     latitud     
##  Min.   :3.334  
##  1st Qu.:3.370  
##  Median :3.383  
##  Mean   :3.390  
##  3rd Qu.:3.406  
##  Max.   :3.497  
## 
## # A tibble: 3 × 13
##      id zona    piso  estrato preciom areaconst parqueaderos banios habitaciones
##   <dbl> <chr>   <chr>   <dbl>   <dbl>     <dbl>        <dbl>  <dbl>        <dbl>
## 1  5098 Zona S… 05          4     290        96            1      2            3
## 2   698 Zona S… 02          3      78        40            1      1            2
## 3  8199 Zona S… <NA>        6     875       194            2      5            3
## # ℹ 4 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>

Tablas de validación

## 
##    0    1    2    3    4    5    6 
##    8   19  463 1902  366   24    5
## 
##    0    1    2    3    4    5    6    7    8 
##    6  167 1588  662  229  123   10    1    1
## 
##    1    2    3    4   10 
## 1551  718   79   31    2
## 
##    3    4    5    6 
##  201 1091 1033  462

Mapa

Nuevo Mapa

Análisis exploratorio de datos (EDA)

Vista general de la base

##     preciom         areaconst         estrato          banios     
##  Min.   :  75.0   Min.   : 40.00   Min.   :3.000   Min.   :0.000  
##  1st Qu.: 170.0   1st Qu.: 65.00   1st Qu.:4.000   1st Qu.:2.000  
##  Median : 240.0   Median : 83.00   Median :5.000   Median :2.000  
##  Mean   : 274.5   Mean   : 93.85   Mean   :4.546   Mean   :2.406  
##  3rd Qu.: 310.0   3rd Qu.:105.00   3rd Qu.:5.000   3rd Qu.:3.000  
##  Max.   :1750.0   Max.   :932.00   Max.   :6.000   Max.   :8.000  
##   habitaciones       zona          
##  Min.   :0.000   Length:2483       
##  1st Qu.:3.000   Class :character  
##  Median :3.000   Mode  :character  
##  Mean   :2.954                     
##  3rd Qu.:3.000                     
##  Max.   :6.000

Correlaciones numéricas

Distribución de precios

Distribución del área construida

Distribución de estratos

Distribución de baños

Matriz de correlaciones

Gráfico interactivo de las correlaciones

## Warning in RColorBrewer::brewer.pal(N, "Set2"): minimal value for n is 3, returning requested palette with 3 different levels
## Warning in RColorBrewer::brewer.pal(N, "Set2"): minimal value for n is 3, returning requested palette with 3 different levels

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

Generación del modelo

## 
## Call:
## lm(formula = preciom ~ areaconst + estrato + habitaciones + parqueaderos + 
##     banios, data = base2)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -875.04  -40.84   -3.65   37.65  904.10 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -235.66159   14.93039 -15.784  < 2e-16 ***
## areaconst       1.03794    0.05224  19.870  < 2e-16 ***
## estrato        55.80508    2.96143  18.844  < 2e-16 ***
## habitaciones  -16.72270    3.79513  -4.406  1.1e-05 ***
## parqueaderos   77.12532    4.11942  18.722  < 2e-16 ***
## banios         45.45307    3.42370  13.276  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 88.25 on 2105 degrees of freedom
##   (372 observations deleted due to missingness)
## Multiple R-squared:  0.719,  Adjusted R-squared:  0.7183 
## F-statistic:  1077 on 5 and 2105 DF,  p-value: < 2.2e-16

Interpretación de los coeficientes

  • Intercepto: El valor del precio cuando todas las variables independientes son cero. Aunque no tiene un significado práctico en este contexto, es necesario para la ecuación del modelo.

  • Área construida (areaconst): Por cada metro cuadrado adicional de área construida, el precio de la vivienda aumenta en promedio en 1.5 millones de pesos, manteniendo constantes las demás variables. Esto es lógico, ya que viviendas más grandes suelen tener precios más altos.

  • Estrato

  • Número de habitaciones (habitaciones): Por cada habitación adicional, el precio de la vivienda aumenta en promedio en 15 millones de pesos, manteniendo constantes las demás variables. Esto es razonable, ya que más habitaciones suelen incrementar el valor de una vivienda.

Validación de supuestos del modelo

Interpretación de los gráficos de validación

  1. Residuos vs Valores Ajustados: Se evidencia heterocedasticidad debido al comportamiento de los datos ante el avance en el eje X.

  2. QQ Plot: Los residuos no poseen normalidad, puesto que cerca de -3 y 3 SD se observan desviaciones significativas respecto a la linea base

  3. Escala-Localización: Se evidencian problemas de homocedasticidad, debido a que los valores deberían verse con una nube sin forma definida, pero al avanzar sobre el eje X comienzan a dispersarse formando un embudo.

  4. Residuos vs Leverage: La mayoria de los datos se encuentran cercanos a las lineas de cook, por lo que se asume que no se poseen valores influyentes.cesitar una revisión adicional.

Sugerencias para mejorar el modelo

  • Ante la heterocedasticidad percibida, se puede realizar una transformación logaritmica de la variable objetivo

  • Al ver que los residuos no poseen normalidad se podría proponer un modelo diferente al lineal para poder interpretar de mejor manera la distribución de los datos.

  • Se podría considerar la inclusión de variables adicionales que puedan influir en el precio de las viviendas, como la proximidad a servicios, calidad de la construcción, entre otros.

  • Se podría realizar una validación cruzada para evaluar la capacidad predictiva del modelo y evitar el sobreajuste.

Predicción del precio de la vivienda

Solicitud 2

Generar un pronóstico del precio de la vivienda teniendo en cuenta los siguientes datos:

  • tipo: Apartamento
  • areaconst: 300
  • parqueaderos: 3
  • banios: 3
  • habitaciones: 5
  • estrato: 5 o 6
  • zona: Sur

El credito aprobado de la persona es 850 millones

##        fit      lwr      upr
## 1 638.8688 464.3712 813.3664

Análisis de ofertas potenciales Zona Sur

r ofertas_potenciales., echo=FALSE, message=FALSE} # Filtrar viviendas dentro del rango de crédito aprobado ofertas2 <- base2 %>% filter(preciom <= 850) %>% arrange(preciom) %>% head(5) # Mapa de ofertas potenciales leaflet(ofertas2) %>% addTiles() %>% addCircleMarkers(~longitud, ~latitud, popup = ~paste(“Barrio:”, barrio, “
”, “Precio (millones):”, preciom, “
”, “Área:”, areaconst, “m²
”, “Estrato:”, estrato, “
”, “Habitaciones:”, habitaciones, “
”, “Baños:”, banios, “
”, “Parqueaderos:”, parqueaderos), radius = 6, color = “aquamarine3”, fillOpacity = 0.7) %>% addLegend(“topright”, colors = “orange3”, labels = “Ofertas Potenciales”, title = “Ofertas de Viviendas”)

Listado de las ofertas potenciales:

## [1] "filtro precio"
## [1] 2452
## [1] "filtro precio + estrato"
## [1] 1233
## [1] "filtro + estrato + habitaciones"
## [1] 13
## [1] "filtro + estrato + habitaciones + baños"
## [1] 0
## [1] "filtro + estrato + habitaciones + baños + parqueaderos"
## [1] 0
## [1] "filtro + estrato + habitaciones + baños + parqueaderos + areacontruida"
## [1] 0

A medida que avanzan los filtros, se evidencia que no hay Apartamentos con los requerimientos compartidos.

Esto se puede explicar debido a que en los requerimientos se espera un Apartamento con 300 mts de área construida, 3 parqueaderos, 3 baños, 5 habitaciones y en un estrato de 5 a 6. Estos requerimientos son exigentes por lo que dificilmente se pueden encontrar en la zona sur de Cali.