Actividad

Esta actividad se realiza con datos proporcionados por la universidad, los cuales son relacionados a la oferta inmobiliaria urbana en la ciudad de Santiago de Cali. La forma como se han obtenido los datos y que se han conformado los conjuntos ha sidco con /webscrapping/ en el sitio web de OLX.

Ahora bien, la necesidad que se plantea es que una empresa inmobiliaria requiere ayuda para comprender mejor el mercado y tomar decisiones informadas, la cual lo toma desde datos recolectados por ellos mismos. Por esta razón, se plantea un análisis holístico para identificar patrones, relaciones y segmentaciones relevantes para tomar mejores decisiones ante el escenario de compra, venta y valoración de las propiedades.

Carga de datos y EDA

El primer paso es cargar los datos para realizar las primeras exploraciones, al igual que las librerías, las cuales son cruciales para el desarrollo de estas actividades.

## utf8   (1.2.4  -> 1.2.6) [CRAN]
## tibble (3.2.1  -> 3.3.0) [CRAN]
## rlang  (1.1.4  -> 1.1.6) [CRAN]
## purrr  (1.0.4  -> 1.1.0) [CRAN]
## cli    (3.6.3  -> 3.6.5) [CRAN]
## Rcpp   (1.0.14 -> 1.1.0) [CRAN]
## curl   (6.2.2  -> 6.4.0) [CRAN]
## magick (2.8.6  -> 2.8.7) [CRAN]
## 
##   There are binary versions available but the source versions are later:
##        binary source needs_compilation
## utf8    1.2.4  1.2.6              TRUE
## tibble  3.2.1  3.3.0              TRUE
## rlang   1.1.5  1.1.6              TRUE
## purrr   1.0.4  1.1.0              TRUE
## cli     3.6.4  3.6.5              TRUE
## Rcpp   1.0.14  1.1.0              TRUE
## curl    6.2.2  6.4.0              TRUE
## magick  2.8.6  2.8.7              TRUE
## 
##   Binaries will be installed
## package 'utf8' successfully unpacked and MD5 sums checked
## package 'tibble' successfully unpacked and MD5 sums checked
## package 'rlang' successfully unpacked and MD5 sums checked
## package 'purrr' successfully unpacked and MD5 sums checked
## package 'cli' successfully unpacked and MD5 sums checked
## package 'Rcpp' successfully unpacked and MD5 sums checked
## package 'curl' successfully unpacked and MD5 sums checked
## package 'magick' successfully unpacked and MD5 sums checked
## 
## The downloaded binary packages are in
##  C:\Users\melos\AppData\Local\Temp\Rtmpw9Wfde\downloaded_packages
## ── R CMD build ─────────────────────────────────────────────────────────────────
##       ✔  checking for file 'C:\Users\melos\AppData\Local\Temp\Rtmpw9Wfde\remotes55e426a67702\Centromagis-paqueteMODELOS-3b06257/DESCRIPTION'
##       ─  preparing 'paqueteMODELOS': (4.3s)
##    checking DESCRIPTION meta-information ...  ✔  checking DESCRIPTION meta-information
##       ─  checking for LF line-endings in source and make files and shell scripts
##       ─  checking for empty or unneeded directories
##       ─  building 'paqueteMODELOS_0.1.0.tar.gz'
##      
## 

Una vez se realiza el paso anterior, se ‘llama’ el conjunto de datos en una variable para poder usar el conjunto de datos de manera más sencilla en los códigos siguientes.

## 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")=List of 3
##   ..$ cols   :List of 13
##   .. ..$ id          : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ zona        : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
##   .. ..$ piso        : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
##   .. ..$ estrato     : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ preciom     : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ areaconst   : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ parqueaderos: list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ banios      : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ habitaciones: list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ tipo        : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
##   .. ..$ barrio      : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_character" "collector"
##   .. ..$ longitud    : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   .. ..$ latitud     : list()
##   .. .. ..- attr(*, "class")= chr [1:2] "collector_double" "collector"
##   ..$ default: list()
##   .. ..- attr(*, "class")= chr [1:2] "collector_guess" "collector"
##   ..$ delim  : chr ";"
##   ..- attr(*, "class")= chr "col_spec"
##  - attr(*, "problems")=<externalptr>

Como se puede observar, de manera general el conjunto de datos tiene datps que son reconocidos como categóricos y como numéricos. Dentro de estos últimos, todas las columnas de este tipo de datos tienen faltantes. Esto puede deberse a un sinnúmero de razones, como que estos datos son ausentes en la fuente que se usó para la recolección. Esto es un punto que hace sentido, puesto que los usuarios de las plataformas no están necesariamente obligados a registrar o llenar todos los campos que solicita la plataforma, por desconocimiento o voluntad.

Ahora bien, es necesario advertir que la ausencia de un dato no quiere decir necesariamente que no existe determinada características, sino que no se registró. Esto quiere decir, por ejemplo, que no se documenta que las propiedades tengan parqueaderos, lo que no debe significar que no los tenga; ocurre lo mismo en baños, habitaciones y estrato.

Dependiendo del analista se puede argumentar que las propiedades que se presentan son grandes en su mayoría. Esta afirmación puede tener asidero en la información disponible sobre el área, ya que parten de los 30 metros cuadrados y va hasta los 1745, siendo la mediana, el dato que está en la mitad del conjunto, de 123 metros. Esto quiere decir que la mitad de las propiedades obtenidas mide menos de eso y la otra mitad, más. Esto puede tener explicación en el estrato, que aunque es una variable clasificatoria de los hogares según ingresos o condición de vida de los hogares, el mínimo es 3 y el máximo es 6. Lo anterior es igual que decir que los sectores que se representa en este ejercicio son clases media-baja y media en adelante, si se quiere ver en un contexto distinto al numérico.

##        id           zona               piso              estrato     
##  Min.   :   1   Length:8322        Length:8322        Min.   :3.000  
##  1st Qu.:2080   Class :character   Class :character   1st Qu.:4.000  
##  Median :4160   Mode  :character   Mode  :character   Median :5.000  
##  Mean   :4160                                         Mean   :4.634  
##  3rd Qu.:6240                                         3rd Qu.:5.000  
##  Max.   :8319                                         Max.   :6.000  
##  NA's   :3                                            NA's   :3      
##     preciom         areaconst       parqueaderos        banios      
##  Min.   :  58.0   Min.   :  30.0   Min.   : 1.000   Min.   : 0.000  
##  1st Qu.: 220.0   1st Qu.:  80.0   1st Qu.: 1.000   1st Qu.: 2.000  
##  Median : 330.0   Median : 123.0   Median : 2.000   Median : 3.000  
##  Mean   : 433.9   Mean   : 174.9   Mean   : 1.835   Mean   : 3.111  
##  3rd Qu.: 540.0   3rd Qu.: 229.0   3rd Qu.: 2.000   3rd Qu.: 4.000  
##  Max.   :1999.0   Max.   :1745.0   Max.   :10.000   Max.   :10.000  
##  NA's   :2        NA's   :3        NA's   :1605     NA's   :3       
##   habitaciones        tipo              barrio             longitud     
##  Min.   : 0.000   Length:8322        Length:8322        Min.   :-76.59  
##  1st Qu.: 3.000   Class :character   Class :character   1st Qu.:-76.54  
##  Median : 3.000   Mode  :character   Mode  :character   Median :-76.53  
##  Mean   : 3.605                                         Mean   :-76.53  
##  3rd Qu.: 4.000                                         3rd Qu.:-76.52  
##  Max.   :10.000                                         Max.   :-76.46  
##  NA's   :3                                              NA's   :3       
##     latitud     
##  Min.   :3.333  
##  1st Qu.:3.381  
##  Median :3.416  
##  Mean   :3.418  
##  3rd Qu.:3.452  
##  Max.   :3.498  
##  NA's   :3

Preparación de los datos

## # A tibble: 6 × 13
##      id zona    piso  estrato preciom areaconst parqueaderos banios habitaciones
##   <dbl> <chr>   <chr>   <dbl>   <dbl>     <dbl>        <dbl>  <dbl>        <dbl>
## 1  1147 Zona O… <NA>        3     250        70            1      3            6
## 2  1169 Zona O… <NA>        3     320       120            1      2            3
## 3  1350 Zona O… <NA>        3     350       220            2      2            4
## 4  5992 Zona S… 02          4     400       280            3      5            3
## 5  1212 Zona N… 01          5     260        90            1      2            3
## 6  1724 Zona N… 01          5     240        87            1      3            3
## # ℹ 4 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>

En el cuadro anterior se pueden ver las primeras seis filas del conjunto de datos, el cual muestra que algunas variables, desde los primeros datos, contiene datos faltantes. Sin embargo, la columna “Piso” tiene de formato que es caracter, a pesar de ser numérico. Por ello, es necesario cambiarlo para poder imputar más adelante. El motivo central de imputar es porque omitir estos datos vacíos es similar a quitar el 31,7 % de todo el conjunto. Este es el principal motivo para pretender cambiar por la media esta variable.

Lo anterior tiene como punto de partida el entendimiento de que la zona es determinante de algunos puntos en la ciudad, puesto que Cali tiene una separación demográfica bastante clara, de tal forma que se sabe que determinados sectores concentran determinadas características sociales en su conjunto (socioeconómico, sociodemográfico, etc.). En este orden de ideas, la imputación se hace teniendo en cuenta que la zona, de tal manera que los datos faltantes de la zona norte están imputados con la media de esta zona, al igual que en el resto de las zonas en la ciudad, según el algoritmo usado.

## # A tibble: 6 × 13
##      id zona     piso estrato preciom areaconst parqueaderos banios habitaciones
##   <dbl> <chr>   <dbl>   <dbl>   <dbl>     <dbl>        <dbl>  <dbl>        <dbl>
## 1  1147 Zona O…    NA       3     250        70            1      3            6
## 2  1169 Zona O…    NA       3     320       120            1      2            3
## 3  1350 Zona O…    NA       3     350       220            2      2            4
## 4  5992 Zona S…     2       4     400       280            3      5            3
## 5  1212 Zona N…     1       5     260        90            1      2            3
## 6  1724 Zona N…     1       5     240        87            1      3            3
## # ℹ 4 more variables: tipo <chr>, barrio <chr>, longitud <dbl>, latitud <dbl>
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##   1.000   2.000   3.000   3.771   5.000  12.000    2638

Dada la gran cantidad de datos faltantes en esta variable, se decide imputar con la media de cada categoría, ya que las zonas pueden determinar aspectos de la vivienda, lo que implica que la zona puede determinar aspectos

En el siguiente cuadro, que es un resumen de la variable, se hacen evidentes algunos cambios dentro del conjunto. Por ejemplo, se modifican medidas de tendencia central, ya que se incrementa el promedio y la mediana (3,771 a 8843 y de 3 a 4, respectivamente), mientras que el tercer cuartil se disminuye (baja de 5 a 4). Aunque se deben entender los sesgos que se puedan gestar con la imputación, finalmente es información que en su conjunto se puede perder si se eliminan estos registros. Por ende, es preferible hacer la imputación condicional que perder casi un tercio de los datos en general, ya que estos son fundamentales en la elaboración de los modelos y en las decisiones finales.

##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##   1.000   2.000   4.000   3.843   4.000  12.000       3

Análisis PCA

Este análisis, como última fase, se hace una vez se han preparado los datos. Para hacer este se han seleccionado variables numéricas de número de pisos, el área construida, los parqueaderos y el número de baño. Con estas características se ha construido el círculo de correlaciones, en el cual se ven flechas largas y cortas. Las primeras, que suelen ser Dim1 y Dim2, que es lo mismo que decir que es bien explicada. La segunda, son variables que no pueden estar bien explicadas por los dos ojos, que quiere decir que puede depender de otros componentes. Lo segundo que se ve es la dirección, algunas son positivas, negativas o perpendiculares (que no tienen correlación).

Ahora bien, en este caso se puede ver que parqueaderos, el área construida y el número de baños apuntan a la misma dirección, que es positiva. Es decir, las viviendas con más área construida, o más grandes, tienden a tener mayor cantidad de parqueaderos y número de baños. Por otra parte, el número de pisos es no posee correlación con estos puntos.

En el segundo gráfico se pueden ver varias cosas. Por un lado, la dimensión 1, que el primer componente principal, explica más de la mitad de variabilidad en el total de los datos, mientras que la segunda dimensión, que es el segundo componente principal, añade otro 24,4 % de explicación. Es decir, la variabilidad junta suma un 80,6 %, que es alto. De este elemento gráfico hay que explicar que cada punto es una vivienda y el color representa el grado de representación, siendo rojo el más alto y azul el más bajo.

Ahora bien, los puntos rojos alejados del centro tienen características más extremas en algunas variables y las que están en el centro, en azul, son más promedio y no destacan en componente. Es decir, como en el gráfico anterior, hay una fuerte dependencia entre el tamaño del inmueble, el número de parqueaderos, precio y de baños (las flechas más a la derecha), pues la mayoría están hacia la derecha y hacia abajo, ya que la dimensión 2, que está en el eje y, es el número de pisos.

Análisis de correspondencia

Ahora vamos a ver el análisis de correspondencia. En este caso vemos el MCA, el primer gráfico, que casa, que es tipo de vivienda, está más hacia arriba y cerca a Ciudad 2000, Ciudad Jardín, San Antonio, Ciudad Córdoba y Villa del Prado. Esto nos quiere decir que en esos dos barrios hay mayoritariamente casas, mientras que en Valle del Lili, Los Cristales, Santa Teresita, Aguacatal y Normandía hay más apartamentos.

Para facilitar la legibilidad no se incluyen las variables de zonas, sin embargo, hacia el oriente hay más casas y hacia el oeste hay más apartamentos.

Ahora, en el segundo gráfico, dado que seleccionamos casas y apartamentos como variables, se puede ver que la mayoría de datos son de estos, que son tipos de vivienda. El resto de barrios se puede ver la cantidad de registros que hay y lo que representan, con el ‘engaño’ de que al gran total se le está sumando una característica de las viviendas que están en estos mismos barrios.

Sin embargo, se puede ver que Valle del Lili, Normandía y Ciudad Jardín tienen mayor cantidad de viviendas, que ya se vio a qué tipo hacen referencia. Lo mismo sucede con Santa Teresita, Ciudad 2000 y el Aguacatal.

#Clústering

El #clústering# es el análisis de agrupamiento, el cual es una técnica de aprendizaje no supervisado que busca hacer grupos de observaciones que se pueden considerar similares dentro de un mismo conjunto de datos sin que haya necesidad de etiquetas. Lo anterior se logra con distancia entre los números, como la distancia Euclidiana, y en datos categóricos se hace con medidas como la distancia de Hamming o el coeficiente de Jaccard.

Hay que tener en cuenta que las dimensiones en este caso son las mismas que en los puntos anteriores. En ese orden de ideas se pude ver que estos dos clústeres, que se superponen poco, demuestran que el primer clúster, el de azul, se agrupa más hacia abajo e izquierda, lo que sugiere que son viviendas con menor área, menos parqueaderos, menor precio y número de baños, generalmente en pisos bajos. En este contexto, también pueden representar viviendas de menores estratos socioecónmicos, dadas las lógicas locales y estos datos. Por su parte, el clúster amarillo, el de la derecha, se ubica más hacia el lado superior del gráfico, tienen más área constuida, mayor cantidad de parqueaderos, precio y número de baños. Este grupo puede representar una clasificación más alta en la escala socioeconómica. En resumen, en azul vemos viviendas más compactas y económicas, y en las amarillas, más amplias y costosas.

Conclusiones

Para finalizar, este documento demuestra algunos puntos interesantes para la inmobiliaria en la ciudad de Cali. Por un lado, las dos dimensiones, que se obtienen del análisis de componentes principales, concentran la mayor parte de la viabilidad que se exolica en el #dataset#, lo que quiere decir que la reducción aplicada de las dimensiones ha sido positiva. Además, las variables en el gráfico de MCA demuestra que sí hay correlación positiva entre las características y que hay correlaciones enegaticas. Como tercer punto se pueden observar patrones en los datos, especialmente relacionados con las dimensiones escogidas, especialmente vistas en el último gráfico.

Por ende, se puede decir que hay agrupamientos claros y que las variables que más influyen en este conjunto de datos se han identificado bien en el PCA, lo que es útil para disminuir la complejidad del análisis, sintetizar la información en pocos ejes y ver las relaciones existentes entre los datos.

Ahora bien, como recomendación, luego de conocer las relaciones y patrones de los datos que tiene el presente conjunto, se tiene que la inmobiliaria debe focalizar sus esfuerzos de promoción y captación en las zonas y características de inmuebles que tienen, según este ejercicio, mayor disponibilidad en la ciudad, visto esto como la distribución de las casas y apartamentos, y en función de su precio, ya que está relacionado con el los puntos ya planteados. En otras palabras, si se quiere focalizar en inmuebles altos, de mayor tamaño y valor, se tienen nombres de barrios donde estas condiciones se cumplen, que están más a la derecha del último gráfico.

Se recomienda, por tanto, que con estos datos se formulen distintas estrategias focalizadas y diferenciadas de mercadotecnia según los intereses de la inmobiliaria, a los cuales contribuye el presente documento.