Evaluación del mercado inmobiliario urbano

Una empresa inmobiliaria líder en una gran ciudad está buscando comprender en profundidad el mercado de viviendas urbanas para tomar decisiones estratégicas más informadas. La empresa posee una base de datos extensa que contiene información detallada sobre diversas propiedades residenciales disponibles en el mercado. Se requiere realizar un análisis holístico de estos datos para identificar patrones, relaciones y segmentaciones relevantes que permitan mejorar la toma de decisiones en cuanto a la compra, venta y valoración de propiedades.

Desarrollo de la actividad

La empresa inmobiliaria Multivariados S.A actualmente cuenta 8322 inmuebles clasificados de la siguiente manera 6659 apartamentos y 1663 casas, donde se relaciona diferentes variables como lo son zona, piso, estrato, precio, areaconst, parqueaderos, banios, habitaciones, tipo, barrio, longitud y latitud de cada uno de los inmuebles.

## 'data.frame':    8322 obs. of  13 variables:
##  $ id       : int  8312 8311 8307 8296 8297 8298 8299 8300 8286 8287 ...
##  $ zona     : chr  "Zona Oeste" "Zona Oeste" "Zona Oeste" "Zona Sur" ...
##  $ piso     : int  4 1 NA 2 NA NA 2 NA NA 2 ...
##  $ estrato  : int  6 6 5 3 5 5 6 5 5 5 ...
##  $ preciom  : int  1300 480 1200 220 330 1350 305 480 275 285 ...
##  $ areaconst: num  318 300 800 150 112 390 125 280 74 120 ...
##  $ parquea  : int  2 1 4 1 2 8 2 4 1 2 ...
##  $ banios   : int  4 4 7 2 4 10 3 4 2 4 ...
##  $ habitac  : int  2 4 5 4 3 10 3 4 3 3 ...
##  $ tipo     : chr  "Apartamento" "Casa" "Casa" "Casa" ...
##  $ barrio   : chr  "arboleda" "normandía" "miraflores" "el guabal" ...
##  $ longitud : num  -76576 -76571 -76568 -76565 -76565 ...
##  $ latitud  : num  3454 3454 3455 3417 3408 ...

Para garantizar la integridad de los datos se revisa si existen datos faltantes, identificando que las columnas piso y parqueadero cumple con estas caracterisiticas y por lo cual, se excluyen de los datos para el desarrollo y se crea uno nuevo dataframe con las variables restantes.

## 
## Attaching package: 'mice'
## The following object is masked from 'package:stats':
## 
##     filter
## The following objects are masked from 'package:base':
## 
##     cbind, rbind

##      preciom id zona estrato areaconst banios habitac tipo barrio longitud
## 4808       1  1    1       1         1      1       1    1      1        1
## 1909       1  1    1       1         1      1       1    1      1        1
## 876        1  1    1       1         1      1       1    1      1        1
## 726        1  1    1       1         1      1       1    1      1        1
## 1          1  0    0       0         0      0       0    0      0        0
## 2          0  0    0       0         0      0       0    0      0        0
##            2  3    3       3         3      3       3    3      3        3
##      latitud parquea piso     
## 4808       1       1    1    0
## 1909       1       1    0    1
## 876        1       0    1    1
## 726        1       0    0    2
## 1          0       0    0   12
## 2          0       0    0   13
##            3    1605 2638 4275
## 'data.frame':    8322 obs. of  11 variables:
##  $ id       : int  8312 8311 8307 8296 8297 8298 8299 8300 8286 8287 ...
##  $ zona     : chr  "Zona Oeste" "Zona Oeste" "Zona Oeste" "Zona Sur" ...
##  $ estrato  : int  6 6 5 3 5 5 6 5 5 5 ...
##  $ preciom  : int  1300 480 1200 220 330 1350 305 480 275 285 ...
##  $ areaconst: num  318 300 800 150 112 390 125 280 74 120 ...
##  $ banios   : int  4 4 7 2 4 10 3 4 2 4 ...
##  $ habitac  : int  2 4 5 4 3 10 3 4 3 3 ...
##  $ tipo     : chr  "Apartamento" "Casa" "Casa" "Casa" ...
##  $ barrio   : chr  "arboleda" "normandía" "miraflores" "el guabal" ...
##  $ longitud : num  -76576 -76571 -76568 -76565 -76565 ...
##  $ latitud  : num  3454 3454 3455 3417 3408 ...

Posteriormente, para garantizar la integridad total de los datos haciendo uso de la función complete.cases se procede a remover los valores faltante en cada una de las variables que comforman el nuevo dataframe.

Una vez creado el nuevo dataframe, haciendo uso de la función unique se procede a realizar una revisión sobre los campos alfanumericos esto con el fin de si existe alguna diferencia al momento de diligenciar, esta pueda ser estandarizada dentro de la base de información.

## [1] "Apartamento" "Casa"        "APARTAMENTO" "casa"        "CASA"       
## [6] "apto"        NA
## [1] "Zona Oeste"   "Zona Sur"     "Zona Norte"   "Zona Oriente" "Zona Centro" 
## [6] NA
## [1] "Apartamento" "Casa"        NA

Posterior a la revisión realizada en los datos iniciales, se garantiza que la cantidad de inmuebles registrados (8319) con la diferencia que no presetan datos faltantes y se trabaja sobre 11 variables.

##  /\     /\
## {  `---'  }
## {  O   O  }
## ==>  V <==  No need for mice. This data set is completely observed.
##  \  \|/  /
##   `-----'

##      id zona estrato preciom areaconst banios habitac tipo barrio longitud
## 8319  1    1       1       1         1      1       1    1      1        1
##       0    0       0       0         0      0       0    0      0        0
##      latitud  
## 8319       1 0
##            0 0

Para iniciar con un análisis exploratorio de los datos, se presenta un el comportamiento de cada una de la variables.

##        id           zona              estrato         preciom      
##  Min.   :   1   Length:8319        Min.   :3.000   Min.   :  58.0  
##  1st Qu.:2080   Class :character   1st Qu.:4.000   1st Qu.: 220.0  
##  Median :4160   Mode  :character   Median :5.000   Median : 330.0  
##  Mean   :4160                      Mean   :4.634   Mean   : 433.9  
##  3rd Qu.:6240                      3rd Qu.:5.000   3rd Qu.: 540.0  
##  Max.   :8319                      Max.   :6.000   Max.   :1999.0  
##    areaconst          banios          habitac           tipo          
##  Min.   :  30.0   Min.   : 0.000   Min.   : 0.000   Length:8319       
##  1st Qu.:  80.0   1st Qu.: 2.000   1st Qu.: 3.000   Class :character  
##  Median : 123.0   Median : 3.000   Median : 3.000   Mode  :character  
##  Mean   : 174.9   Mean   : 3.111   Mean   : 3.605                     
##  3rd Qu.: 229.0   3rd Qu.: 4.000   3rd Qu.: 4.000                     
##  Max.   :1745.0   Max.   :10.000   Max.   :10.000                     
##     barrio             longitud            latitud        
##  Length:8319        Min.   :-76576.00   Min.   :   3.333  
##  Class :character   1st Qu.:-76507.00   1st Qu.:   3.390  
##  Mode  :character   Median :   -76.54   Median :   3.449  
##                     Mean   :-21866.06   Mean   : 971.300  
##                     3rd Qu.:   -76.52   3rd Qu.:3367.000  
##                     Max.   :   -76.46   Max.   :3497.000

Validando el comportamiento de datos se observa que No son simétricos, ya que, la mayoría de valores se agrupan hacía la derecha y el valor de la medía y mediana es mayor a la moda.

Posteriormente, se identifica que existen datos registrados de manera erronea (datos atípicos), los cuales puede afectar al momento que se este realizando alguna representación gráfica o en la interpretación de resultados.

Dando continuidad al análisis de la variables, se procede a revisar la matriz de correlación e identificar la relación que existe entre los datos y el cual se presenta a continuación:

## corrplot 0.92 loaded

A continuación, se detallan las correlaciones de acuerdo con el resultado obtenido en la matriz anterior.

1. Preciom - areaconst: Presentan una correlación positiva (0.7) lo que quiere decir que a mayor área construida esto presenta un incremento en la vivienda. 2. Preciom - banios: Al igual que en caso anterior, se presenta una correlación positiva (0.7) indicando que las viviendas con mayor cantidad de baños, su precio es superior. 3. Preciom - estrato: Con una correlación menor que en los escenarios previos (0.6), lo que representa que a medida que el estrato es mayor el costo del inmueble aumenta. 4. Baños - areaconst: Presenta una correlación positiva del 0.6, haciendo referencia a que la cantidad de baños disponibles en la vivienda depende del área construida. 5. Baños - habitac: Tambien con una correlación positiva del 0.6, esto quiere decir que mientras la vivienda cuente con varias habitaciones la cantiad de baño tambien aumenta. 6. Habitac - areaconst: La correlación es positiva (0.5) lo que quiere decir que en la mayoría de los casos, la cantidad de habitaciones depende del área construida.

Análisis de Componentes Principales (ACP)

Para llevar a cabo el ACP se hace uso de las siguientes variables estrato, preciom, areaconst, banios y habitac. Con el fin, de evitar sesgo en la información a analizar se procede a estandarizar.

## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
## ✔ ggplot2 3.4.3     ✔ purrr   1.0.2
## ✔ tibble  3.2.1     ✔ dplyr   1.1.3
## ✔ tidyr   1.3.0     ✔ stringr 1.5.0
## ✔ readr   2.1.3     ✔ forcats 1.0.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ ggplot2::%+%()   masks psych::%+%()
## ✖ ggplot2::alpha() masks psych::alpha()
## ✖ dplyr::filter()  masks mice::filter(), stats::filter()
## ✖ dplyr::lag()     masks stats::lag()
##      estrato    preciom  areaconst     banios    habitac
## 1  1.3275950  2.6351924  1.0007060  0.6222393 -1.0999114
## 2  1.3275950  0.1402509  0.8748003  0.6222393  0.2703863
## 3  0.3559875  2.3309312  4.3721812  2.7227705  0.9555352
## 4 -1.5872276 -0.6508281 -0.1744140 -0.7781148  0.2703863
## 5  0.3559875 -0.3161408 -0.4402149  0.6222393 -0.4147626
## 6  0.3559875  2.7873229  1.5043289  4.8233017  4.3812795

Una vez estandarizdos los datos, se procede a realizar la estimación de los Componentes Principales.

## Standard deviations (1, .., p=5):
## [1] 1.7126464 1.0901014 0.6673458 0.4916079 0.4375986
## 
## Rotation (n x k) = (5 x 5):
##                  PC1        PC2        PC3        PC4        PC5
## estrato   -0.3300032  0.6744363  0.4208934  0.4795545 -0.1706159
## preciom   -0.5068715  0.2807656 -0.3015468 -0.2213868  0.7240921
## areaconst -0.4940473 -0.1638135 -0.6525373  0.2984641 -0.4628138
## banios    -0.5189619 -0.1092831  0.3767649 -0.6647648 -0.3672488
## habitac   -0.3475270 -0.6538568  0.4051685  0.4359154  0.3122700

Como se observa en el siguiente la primera componente explica el 58.7% de la variación que tienen los datos y junto a la segunda componente responden el 82.5%. Obteniendo como resultado que con una sola variable se logra identificar la variabilidad que contiene la información.

## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa

Posteriormente, se procede a observar la contribución que tiene cada una de las variables originales en el análisis, donde se observa que en el primer componente principal se relacionan las variables de estrato precio, mientras que en el segundo se asocian las variables que hacen referencia a la infraestructura del inmueble.

# Análisis de Conglomerados

Con el fin de agrupar las variables de acuerdo a sus propiedades y características similares, se realiza el análisis de conglomerados donde se hace uso de las variables implementadas en el punto anterior.

A continuación, se realiza una estimación del número de cluster esto con el fin de disminuir la variación en los cluster, evidenciando la disminución en la suma de cuadrados a medida que K aumenta, en este caso se hará uso solo de 2 Clusters.

Como paso a seguir y para comparar los resultados obtenidos en el caso anterior, se realiza el método Jerarquico donde se hará uso de las distancias euclidianas y se toma como modelo el método ward.

En la imagen anterior se presenta la cantidad de datos correspondientes a cada uno de los clusters.

Análisis de Correspondencia

Se inicia construyendo una tabla cruzada con las vairiables de Estado y Zona

##               
##                   3    4    5    6
##   Zona Centro   105   14    4    1
##   Zona Norte    572  407  769  172
##   Zona Oeste     54   84  290  770
##   Zona Oriente  340    8    2    1
##   Zona Sur      382 1616 1685 1043

A partir del resultado obtenido se puede decir que la hispotesis es nula y existen un grado de relación entre las variables.

## 
##  Pearson's Chi-squared test
## 
## data:  tablaVV
## X-squared = 3830.4, df = 12, p-value < 2.2e-16

Aplicando el análisis por correspondencia se puede concluir que:

1. Los inmuebles de estrato 4 y 5 se encuentran ubicados en la Zona Sur de la ciudad. 2. Las viviendas de estrato 6 se encuentran ubicadas en la zona Oeste 3. La mayoría de viviendas de Estrato 3 se encuentran ubicadas en la Zona Oriente y Centro.

## 
## Attaching package: 'gridExtra'
## The following object is masked from 'package:dplyr':
## 
##     combine

A partir del modelo se determina que la primera compone detalla el 70% de la varianza total de los datos y la segunda el 27.7% . De acuerdo con eso, se puede decir que la primera componente es la que mayor información maneja.

{r. echo=FALSE} fviz_screeplot(resultados_ac, addlabels = TRUE, ylim = c(0, 80))+ggtitle("")+ ylab("Porcentaje de varianza explicado") + xlab("Ejes")

Conclusión

Inicialmente se evidencia problemas con la información a usa, lo cual puede afectar el proceso al momento de realizar un análisis o presentar alguna alteración sobre los resutlados del modelo. Adicionalmente, se evidencio la existencia de valores atipicos los cuales se pueden presentar al momento de realizar el resgistro en la plataforma.

A partir del la matriz de correlacción, se identifica los factores que más afectan el costo de la vivienda depende de escenarios como la cantidad de habitaciones que tiene la vivienda, el número de baños, zona donde se encuentra ubicados y la relación directa con la zona.

Poder identinficar patrones permite clasificar de maner más eficiente los clientes objetivo, ya que, se pueden implementar estegias de mecardo a clentes objetivo especificos y así reducir tiempos de respuesta frente a la competencia