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.
Retos:
El reto principal consisten en realizar un análisis integral y multidimensional de la base de datos para obtener una comprensión del mercado inmobiliario urbano. Se requiere aplicar diversas técnicas de análisis de datos, incluyendo:
Análisis de Componentes Principales: Reducir la dimensionalidad del conjunto de datos y visualizar la estructura de las variables en componentes principales para identificar características clave que influyen en la variación de precios y preferencias del mercado.
Análisis de Conglomerados: Agrupar las propiedades residenciales en segmentos homogéneos con características similares para entender las dinámicas y demandas específicas en diferentes partes de la ciudad y en diferentes estratos socioeconómicos.
Análisis de Correspondencia : Examinar la relación entre las variables categóricas (tipo de vivienda, zona y barrio) y las variables numéricas (precio, área construida, número de parqueaderos, baños, habitaciones) para identificar patrones de comportamiento del mercado inmobiliario.
Visualización de resultados: Presentar gráficos, mapas y otros recursos visuales para comunicar los hallazgos de manera clara y efectiva a la dirección de la empresa.
El informe final debe incluir análisis detallados de los resultados obtenidos, las conclusiones clave y las recomendaciones específicas para guiar las decisiones estratégicas de la empresa inmobiliaria. Se espera que este análisis de datos proporcione ventajas competitivas en el mercado, optimizando la inversión y maximizando los beneficios en un entorno altamente competitivo y en constante cambio.
head(vivienda)
El conjunto de datos de ofertas de viviendas en OLX presenta una estructura compuesta por 3 variables categóricas (zona, piso, tipo, barrio) y 7 variables numéricas. En este análisis, optaremos por descartar la variable “id”. La exclusión de esta variable se justifica en virtud de la naturaleza del análisis propuesto, que se enfocará en la identificación de patrones mediante un enfoque no supervisado. En este contexto, la variable “id” carece de significado semántico y contribución al análisis.
set.seed(42) # universe answer
housing = paqueteDAT::vivienda
housing = housing[rowSums(is.na(housing)) < ncol(housing) - 1, ] # remove rows with all NA features
housing = housing %>% mutate(piso = ifelse(is.na(piso), NA, as.numeric(housing$piso)))
percentage_na = nrow(housing[apply(is.na(housing), 1, any), ]) / nrow(housing) * 100
pie_na_data = data.frame(
Status = c("NA", "Complete"),
Percentage = c(percentage_na, 100 - percentage_na)
)
plot = ggplot(pie_na_data, aes(x = "", y = Percentage, fill = Status)) +
geom_bar(stat = "identity", width = 1) +
coord_polar(theta = "y") +
labs(x = NULL, y = NULL, fill = "Status") +
theme_void() +
geom_text(aes(label = sprintf("%.1f%%", Percentage)), position = position_stack(vjust = 0.5))
print(plot)
El diagrama de pastel ilustra cómo cerca del 50% de los datos presentan al menos una característica con valores faltantes (NA), lo que introduce una capa adicional de complejidad en la implementación de los algoritmos. Es importante señalar que gran parte de los valores faltantes se concentran en la variable “Piso”. Esta variable reviste una gran relevancia, ya que desde una perspectiva de negocio, se reconoce su impacto significativo en el precio de las propiedades. Un ejemplo concreto es la variación en el valor de un apartamento idéntico, pero ubicado en pisos diferentes, que puede traducirse en diferencias de millones de pesos.
Dado este contexto, se tomará la decisión de abordar la imputación de estos valores faltantes en la variable “Piso”. Esta elección se fundamenta en la importancia de la variable en términos de influencia en los resultados de negocio. La corrección de estos valores faltantes se convierte en una prioridad, ya que su integridad mejorará la calidad y confiabilidad de los análisis posteriores y de los algoritmos que se implementarán. Este proceso de imputación se llevará a cabo con la finalidad de evitar distorsiones en los resultados y asegurar una representación más precisa de la relación entre las características y los precios de las propiedades.
| Variable | Stats / Values | Freqs (% of Valid) | Graph | Missing | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| id [numeric] |
|
8319 distinct values | 0 (0.0%) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| zona [factor] |
|
|
0 (0.0%) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| piso [numeric] |
|
12 distinct values | 2635 (31.7%) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| estrato [numeric] |
|
|
0 (0.0%) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| preciom [numeric] |
|
539 distinct values | 0 (0.0%) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| areaconst [numeric] |
|
652 distinct values | 0 (0.0%) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| parqueaderos [numeric] |
|
|
1602 (19.3%) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| banios [numeric] |
|
11 distinct values | 0 (0.0%) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| habitaciones [numeric] |
|
11 distinct values | 0 (0.0%) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| tipo [factor] |
|
|
0 (0.0%) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| barrio [factor] |
|
|
0 (0.0%) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| longitud [numeric] |
|
2928 distinct values | 0 (0.0%) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| latitud [numeric] |
|
3679 distinct values | 0 (0.0%) |
Generated by summarytools 1.0.1 (R version 4.2.2)
2023-08-13
Es evidente que las variables numéricas no exhiben una distribución exhaustivamente normal en la mayoría de las instancias. Esta observación sugiere que no es factible inferir conclusiones semánticas con respecto a la totalidad de la población, ya que la representación gráfica indica que no se ajusta al teorema del límite central. Dicha falta de normalidad en la distribución de los datos es un aspecto crucial que debe ser considerado al interpretar tanto el análisis como los resultados subsiguientes. Esta circunstancia puede influir en las estrategias de modelado y en las técnicas estadísticas que se empleen, ya que las suposiciones asociadas a la distribución normal pueden no ser válidas en este contexto.
En el conjunto de datos, hemos identificado la presencia de registros con valores igual a 0 en las variables correspondientes a “habitaciones” y “baños”. Una revisión de los estratos nos ha permitido observar que estos valores solo abarcan el rango de 3 a 6. Dado que los tipos de propiedades registradas son viviendas y apartamentos, resulta poco razonable que una propiedad carezca de al menos una habitación o un baño.
Por lo tanto, abordaremos estas discrepancias considerándolas como valores faltantes (missing values). Esto nos permitirá incluirlas en el proceso de imputación de datos faltantes, con el propósito de lograr una corrección más completa y precisa.
Optaremos por la imputación de los valores faltantes utilizando el algoritmo KNN, en vista de que los datos exhiben un comportamiento no lineal que no se ajusta al enfoque de la regresión lineal. Es esencial destacar que, a pesar de la viabilidad de la regresión, su aplicación sin cumplir los supuestos podría introducir distorsiones en las interpretaciones resultantes. Si bien alternativas más avanzadas, como el Deep Learning, y opciones más sencillas, como el cálculo del promedio global, están disponibles, hemos optado por el empleo de KNN.
La selección de KNN se respalda en la perspectiva de obtener resultados más efectivos en comparación con la mera estimación promedio. Esta elección encuentra sustento en diversos elementos, entre los cuales destaca la Ley 675 del 2001, que aboga por la homogeneidad de las propiedades en régimen de propiedad horizontal y en los entornos residenciales. Es crucial mantener presente que esta determinación implica un supuesto que abordaremos en el curso del proceso.
En el gráfico que relaciona el área con el precio, es evidente que para un valor de área pueden existir múltiples precios. Esta observación demuestra que no existe una relación funcional clara entre estas dos dimensiones. Para una evaluación más completa del enfoque de regresión lineal, podemos realizar una rápida revisión utilizando el test RESET, considerando un análisis más profundo con múltiples dimensiones.
linear_model <- lm(preciom ~ areaconst + estrato + banios + habitaciones + latitud + longitud, data = housing)
print(resettest(linear_model, power = 2), method = 'render')
##
## RESET test
##
## data: linear_model
## RESET = 54.196, df1 = 1, df2 = 8311, p-value = 1.988e-13
Como habíamos previsto, el enfoque de regresión no demuestra ser efectivo. Dado que el valor p se acerca a cero, rechazamos la hipótesis nula que sostiene que los datos están adecuadamente modelados mediante regresión. Esta observación fortalece aún más la sugerencia de considerar la adopción del algoritmo KNN.
housing = housing %>%
mutate(banios = ifelse(banios == 0, NA, banios)) %>%
mutate(habitaciones = ifelse(habitaciones == 0, NA, habitaciones))
housing = kNN(housing, variable = c("piso", "banios", "parqueaderos", "habitaciones"))
any(is.na(housing))
## [1] FALSE
map = leaflet() %>%
addTiles() %>%
addHeatmap(data = housing, lng = ~longitud, lat = ~latitud, blur = 5, max = 5, radius = 5)
map
Resulta curioso observar que existe una amplia cobertura en la zona de Cali; sin embargo, esta cobertura solo abarca los estratos 3 al 6. Resulta evidente la presencia de áreas pertenecientes a los estratos 1 y 2 en distintas zonas, lo que sugiere la existencia de posibles inconsistencias en los datos recolectados.
Dado que planeamos emplear algoritmos sensibles a la escala de unidades, los cuales operan a través de funciones de distancia y comparaciones susceptibles a ser influenciadas por rangos extensos, resulta necesario llevar a cabo una normalización de los datos. Este procedimiento será aplicado exclusivamente a las variables numéricas.
housing_num = housing[, c("piso","estrato","preciom","areaconst","parqueaderos","habitaciones","longitud","latitud")]
housing_scaled = scale(housing_num)
print(cor(housing_scaled[, c("piso","estrato","areaconst","parqueaderos","habitaciones","longitud","latitud")], housing_scaled[, c("preciom")]), method = "render")
## [,1]
## piso -0.02428561
## estrato 0.60980664
## areaconst 0.68735196
## parqueaderos 0.69892075
## habitaciones 0.27510149
## longitud -0.34358822
## latitud -0.11566757
Al analizar las correlaciones entre las variables, se evidencia una fuerte asociación en todos los casos, exceptuando la variable que hace referencia al tipo de piso, la cual muestra una correlación menos significativa con respecto al precio. Estos hallazgos nos permiten llegar a las siguientes conclusiones:
La alta correlación observada entre la mayoría de las variables y el precio indica que estas desempeñan un papel crucial en la determinación de los valores de las propiedades. Específicamente, factores como el tamaño del inmueble, la ubicación y la cantidad de habitaciones presentan una influencia directa en el precio.
La baja correlación entre el tipo de piso y el precio, que puede haber sido influenciada por el hecho de que esta variable contenía casi un 50% de valores faltantes, sugiere que este atributo podría tener un impacto menos decisivo en la valoración de las propiedades. La presencia de un gran número de valores faltantes puede haber distorsionado la relación real entre el tipo de piso y el precio, lo que contribuyó a este resultado.
Dado que no disponemos de un conocimiento intrínseco de las agrupaciones presentes, es imperativo explorar diversos enfoques de agrupamiento. Por lo tanto, procederemos a generar resultados de agrupamientos en un rango de 1 a 10 grupos. Posteriormente, emplearemos el método del codo para identificar una cantidad de grupos sensata que permita iniciar un análisis semántico de los patrones presentes en los datos.
Este proceso nos permitirá obtener una comprensión más profunda de la estructura subyacente de los datos y facilitará la identificación de relaciones y tendencias significativas entre las observaciones. La elección del número óptimo de grupos a través del método del codo contribuirá a una segmentación más precisa y significativa de los datos, lo que a su vez facilitará la interpretación y aplicación de los resultados obtenidos.
Es evidente que a partir de K=2, la variabilidad entre los grupos disminuye de manera significativa. A medida que el valor de K continúa aumentando, la reducción en la variabilidad se vuelve marginal. Por lo tanto, tenemos la opción de seleccionar un valor de K en el rango de 2 a 6 para una representación adecuada de los grupos. En este contexto, optaremos por el valor intermedio de 4, que se encuentra equidistante dentro de este intervalo. Esta elección nos permite alcanzar un compromiso óptimo entre la simplicidad de la segmentación y la captura de la estructura latente en los datos.
## [1] "#FF0000" "#80FF00" "#00FFFF" "#8000FF"
Al observar los clústeres y ubicarlos en el mapa, se identifica que no existe una relación semántica consistente entre los grupos generados y su ubicación geográfica. Aunque se pueden percibir ciertos indicios de agrupación por zona, al repetir el proceso sin considerar las variables de latitud y longitud, los grupos en términos de ubicación se vuelven más ambiguos. Esto nos lleva a identificar la ausencia de un patrón directo con respecto a la zona geográfica. Por consiguiente, estos resultados sugieren que otros factores podrían estar influyendo en la formación de los clústeres.
housing_pca <- prcomp(housing_scaled, scale = TRUE)
housing_pca_df <- data.frame(housing_pca$x, cluster = housing_cluster$cluster)
ggplot(housing_pca_df, aes(x = PC1, y = PC2, color = factor(cluster))) + geom_point() + labs(x = "PC1", y = "PC2")
tsne = Rtsne(housing_scaled, perplexity = 30, check_duplicates = FALSE)
plot(tsne$Y, col = "black", bg= housing_cluster$cluster, pch = 21, cex = 1)
A través del gráfico de Análisis de Componentes Principales (PCA), es posible distinguir claramente las cuatro agrupaciones, lo cual coincide con el objetivo de K-Means de minimizar la varianza entre los grupos generados. Sin embargo, es importante resaltar que estos grupos carecen de significado semántico y son más bien constructos matemáticos o abstractos. Esto se debe a que no se puede establecer una asociación contextual que permita etiquetar o categorizar adecuadamente dichos grupos según el dominio de estudio.
Podemos observar que en el gráfico de Análisis de Componentes Principales (PCA) no se presenta una relación lineal clara entre los datos, lo cual concuerda con las observaciones iniciales acerca de la falta de linealidad en el conjunto de datos. Por esta razón, hemos decidido examinar la estructura de los datos utilizando Rtsne, una técnica que permite, al igual que PCA, mapear los datos en un espacio de menor dimensión mientras intenta preservar las relaciones de vecindad entre ellos. Sin embargo, resulta evidente que incluso esta herramienta no logra discriminar los grupos de manera precisa. Este hecho comienza a sugerir la posible insuficiencia de características (features) para lograr una discriminación más efectiva entre los grupos, lo que a su vez afecta la identificación de patrones dentro de estos mismos grupos.
Este hallazgo subraya la necesidad de considerar una exploración más exhaustiva de las características utilizadas en el análisis y la posibilidad de incorporar elementos adicionales que puedan capturar de manera más precisa las diferencias y relaciones entre los grupos. Este enfoque más completo podría ayudar a revelar patrones y relaciones que actualmente no están siendo detectados debido a la limitación de las características utilizadas hasta ahora.
Esta percepción se refuerza al examinar los resultados del resumen del cluster 1 en relación con el rango de valores presentes en las variables que conforman este grupo. Una vez más, esta observación subraya la falta de un patrón semántico discernible. En este sentido, es fundamental reconocer que la interpretación y aplicación de estos grupos requieren un enfoque más profundo y contextual para comprender si existen factores subyacentes que puedan aportar sentido a estos agrupamientos desde una perspectiva más allá de lo meramente modelado.
summary(housing[housing$cluster == 1,])
## id zona piso estrato
## Min. : 4 Zona Centro : 2 Min. : 1.000 Min. :3.000
## 1st Qu.:4761 Zona Norte :134 1st Qu.: 2.000 1st Qu.:6.000
## Median :5876 Zona Oeste :373 Median : 2.000 Median :6.000
## Mean :5727 Zona Oriente: 2 Mean : 3.325 Mean :5.751
## 3rd Qu.:7024 Zona Sur :698 3rd Qu.: 4.000 3rd Qu.:6.000
## Max. :8319 Max. :12.000 Max. :6.000
##
## preciom areaconst parqueaderos banios
## Min. : 190 Min. : 50.0 Min. : 1.000 Min. : 1.000
## 1st Qu.: 800 1st Qu.: 250.0 1st Qu.: 2.000 1st Qu.: 4.000
## Median : 980 Median : 320.0 Median : 3.000 Median : 5.000
## Mean :1055 Mean : 376.5 Mean : 3.493 Mean : 4.868
## 3rd Qu.:1280 3rd Qu.: 450.0 3rd Qu.: 4.000 3rd Qu.: 6.000
## Max. :1999 Max. :1745.0 Max. :10.000 Max. :10.000
##
## habitaciones tipo barrio longitud
## Min. : 1.000 Apartamento:437 ciudad jardín :239 Min. :-76.59
## 1st Qu.: 3.000 Casa :772 pance :214 1st Qu.:-76.55
## Median : 4.000 santa teresita :122 Median :-76.54
## Mean : 4.185 normandía : 60 Mean :-76.54
## 3rd Qu.: 5.000 aguacatal : 46 3rd Qu.:-76.53
## Max. :10.000 parcelaciones pance: 45 Max. :-76.46
## (Other) :483
## latitud piso_imp banios_imp parqueaderos_imp
## Min. :3.333 Mode :logical Mode :logical Mode :logical
## 1st Qu.:3.359 FALSE:777 FALSE:1200 FALSE:1121
## Median :3.404 TRUE :432 TRUE :9 TRUE :88
## Mean :3.404
## 3rd Qu.:3.451
## Max. :3.493
##
## habitaciones_imp cluster
## Mode :logical Min. :1
## FALSE:1201 1st Qu.:1
## TRUE :8 Median :1
## Mean :1
## 3rd Qu.:1
## Max. :1
##
summary(housing[housing$cluster == 2,])
## id zona piso estrato
## Min. : 2 Zona Centro : 64 Min. : 1.000 Min. :3.00
## 1st Qu.:1852 Zona Norte :309 1st Qu.: 2.000 1st Qu.:3.00
## Median :3884 Zona Oeste : 72 Median : 2.000 Median :4.00
## Mean :3915 Zona Oriente:152 Mean : 2.151 Mean :4.04
## 3rd Qu.:5854 Zona Sur :555 3rd Qu.: 3.000 3rd Qu.:5.00
## Max. :8318 Max. :11.000 Max. :6.00
##
## preciom areaconst parqueaderos banios
## Min. : 127.0 Min. : 70.0 Min. :1.000 Min. : 1.000
## 1st Qu.: 330.0 1st Qu.: 214.0 1st Qu.:1.000 1st Qu.: 3.000
## Median : 425.0 Median : 280.0 Median :2.000 Median : 4.000
## Mean : 453.3 Mean : 297.1 Mean :1.708 Mean : 4.217
## 3rd Qu.: 550.0 3rd Qu.: 360.0 3rd Qu.:2.000 3rd Qu.: 5.000
## Max. :1800.0 Max. :1440.0 Max. :6.000 Max. :10.000
##
## habitaciones tipo barrio longitud
## Min. : 3.000 Apartamento: 36 la flora : 55 Min. :-76.59
## 1st Qu.: 5.000 Casa :1116 el limonar : 41 1st Qu.:-76.54
## Median : 6.000 acopi : 35 Median :-76.53
## Mean : 6.094 el caney : 32 Mean :-76.53
## 3rd Qu.: 7.000 ciudad 2000 : 26 3rd Qu.:-76.52
## Max. :10.000 san fernando: 26 Max. :-76.46
## (Other) :937
## latitud piso_imp banios_imp parqueaderos_imp
## Min. :3.338 Mode :logical Mode :logical Mode :logical
## 1st Qu.:3.404 FALSE:683 FALSE:1132 FALSE:840
## Median :3.431 TRUE :469 TRUE :20 TRUE :312
## Mean :3.430
## 3rd Qu.:3.451
## Max. :3.494
##
## habitaciones_imp cluster
## Mode :logical Min. :2
## FALSE:1123 1st Qu.:2
## TRUE :29 Median :2
## Mean :2
## 3rd Qu.:2
## Max. :2
##
summary(housing[housing$cluster == 3,])
## id zona piso estrato
## Min. : 640 Zona Centro : 8 Min. : 1.000 Min. :3.000
## 1st Qu.:2979 Zona Norte : 307 1st Qu.: 2.000 1st Qu.:4.000
## Median :4907 Zona Oeste : 720 Median : 3.000 Median :5.000
## Mean :4855 Zona Oriente: 7 Mean : 4.066 Mean :4.838
## 3rd Qu.:6783 Zona Sur :3083 3rd Qu.: 5.000 3rd Qu.:5.000
## Max. :8316 Max. :12.000 Max. :6.000
##
## preciom areaconst parqueaderos banios
## Min. : 78.0 Min. : 40.0 Min. :1.000 Min. :1.000
## 1st Qu.: 220.0 1st Qu.: 75.0 1st Qu.:1.000 1st Qu.:2.000
## Median : 300.0 Median :101.0 Median :1.000 Median :3.000
## Mean : 339.7 Mean :115.6 Mean :1.466 Mean :2.747
## 3rd Qu.: 430.0 3rd Qu.:141.0 3rd Qu.:2.000 3rd Qu.:3.000
## Max. :1100.0 Max. :605.0 Max. :4.000 Max. :7.000
##
## habitaciones tipo barrio longitud
## Min. :1.00 Apartamento:3336 valle del lili: 873 Min. :-76.59
## 1st Qu.:3.00 Casa : 789 ciudad jardín : 263 1st Qu.:-76.54
## Median :3.00 pance : 181 Median :-76.53
## Mean :3.05 el caney : 157 Mean :-76.53
## 3rd Qu.:3.00 la hacienda : 153 3rd Qu.:-76.52
## Max. :6.00 el ingenio : 151 Max. :-76.50
## (Other) :2347
## latitud piso_imp banios_imp parqueaderos_imp
## Min. :3.333 Mode :logical Mode :logical Mode :logical
## 1st Qu.:3.371 FALSE:3004 FALSE:4113 FALSE:3588
## Median :3.391 TRUE :1121 TRUE :12 TRUE :537
## Mean :3.399
## 3rd Qu.:3.425
## Max. :3.493
##
## habitaciones_imp cluster
## Mode :logical Min. :3
## FALSE:4109 1st Qu.:3
## TRUE :16 Median :3
## Mean :3
## 3rd Qu.:3
## Max. :3
##
summary(housing[housing$cluster == 4,])
## id zona piso estrato
## Min. : 1 Zona Centro : 50 Min. : 1.000 Min. :3.000
## 1st Qu.: 540 Zona Norte :1170 1st Qu.: 2.000 1st Qu.:3.000
## Median :1137 Zona Oeste : 33 Median : 3.000 Median :4.000
## Mean :1716 Zona Oriente: 190 Mean : 3.829 Mean :3.809
## 3rd Qu.:2767 Zona Sur : 390 3rd Qu.: 5.000 3rd Qu.:5.000
## Max. :7108 Max. :12.000 Max. :6.000
##
## preciom areaconst parqueaderos banios
## Min. : 58.0 Min. : 30.00 Min. :1.000 Min. : 1.000
## 1st Qu.:135.0 1st Qu.: 62.00 1st Qu.:1.000 1st Qu.: 2.000
## Median :198.0 Median : 83.00 Median :1.000 Median : 2.000
## Mean :223.7 Mean : 98.79 Mean :1.191 Mean : 2.169
## 3rd Qu.:290.0 3rd Qu.:120.00 3rd Qu.:1.000 3rd Qu.: 3.000
## Max. :880.0 Max. :550.00 Max. :5.000 Max. :10.000
##
## habitaciones tipo barrio
## Min. :1.000 Apartamento:1291 la flora : 271
## 1st Qu.:3.000 Casa : 542 valle del lili : 113
## Median :3.000 prados del norte : 101
## Mean :3.066 brisas de los : 76
## 3rd Qu.:3.000 urbanización la flora: 62
## Max. :6.000 torres de comfandi : 54
## (Other) :1156
## longitud latitud piso_imp banios_imp
## Min. :-76.55 Min. :3.380 Mode :logical Mode :logical
## 1st Qu.:-76.52 1st Qu.:3.445 FALSE:1220 FALSE:1829
## Median :-76.51 Median :3.469 TRUE :613 TRUE :4
## Mean :-76.51 Mean :3.462
## 3rd Qu.:-76.50 3rd Qu.:3.484
## Max. :-76.46 Max. :3.498
##
## parqueaderos_imp habitaciones_imp cluster
## Mode :logical Mode :logical Min. :4
## FALSE:1168 FALSE:1820 1st Qu.:4
## TRUE :665 TRUE :13 Median :4
## Mean :4
## 3rd Qu.:4
## Max. :4
##
Ahora procederemos a analizar las posibles relaciones y contribuciones de las variables mediante un Análisis de Correspondencia utilizando FAMD (Análisis de Factores Múltiples de Correspondencia), el cual abarca tanto variables numéricas como categóricas. Esta técnica nos permitirá explorar de manera integral cómo las diferentes variables interactúan y contribuyen en el conjunto de datos, revelando patrones de asociación que podrían no ser evidentes en análisis anteriores.
housing_scaled = as.data.frame(housing_scaled)
housing_scaled$tipo = housing$tipo
housing_scaled$zona = housing$zona
housing_scaled$barrio = housing$barrio
res.famd <- FAMD(housing[,c("zona","piso","estrato","preciom","areaconst","parqueaderos","banios","habitaciones","tipo","barrio","longitud","latitud")], graph = FALSE)
fviz_screeplot(res.famd)
Se puede evidenciar que en 2 dimensiones las variables tanto categoricas como númericas representa el 1.075% de los datos, lo cual equivale a un valor muy inferior.
fviz_famd_var(res.famd, repel = TRUE)
Las variables barrio, area, parqueaderos, baño y precio son las mejores para discriminar siendo muy aparte barrio que explica muy bien la varianza en las dos dimensiones que más explican la varianza de los datos.
fviz_famd_var(res.famd, "quanti.var", col.var = "contrib",
gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"),
repel = TRUE)
Las variables que tienen un vinculo proporcional son habitaciones areaconst baños y parqueaderos, y la correlacion inversa se puede observar en piso vs habitaciones y estrato vs ubicación (longitud y latitud).
fviz_contrib(res.famd, "var", axes = 1)
Dentro de la dimension 1 se evidencia que las variables que tienen mas influencia en los datos son las que representan entre 10 a 15 % de contribución (precio, baños, barrio, parqueaderos, area, estrato).
fviz_contrib(res.famd, "var", axes = 2)
Dentro de la dimension 2 se evidencia que las variables que tienen mas influencia en los datos son las que representan entre 10 a 25 % de contribución (barrio, zona, tipo, habitaciones).
Según el análisis del ejercicio propuesto se esperaba encontrar patrones que ayudaran a identificar la agrupación de los datos mediante la tecnica de Cluster, PCA, y Correspondencia, pero durante el desarrollo del caso se identificó que aunque se evidencien 4 clusters a nivel matemático según la varianza de los datos en el diagrama de PCA, no se detallan patrones a nivel semántico o de dominio que permitan dar conclusiones para el mercado inmobiliario, lo que indica que al conjunto de datos podrían adicionar multiples variables para determinar a nivel de negocio los patrones de agrupamiento como por ejemplo (nivel de ruído, seguridad, clima, accesabilidad al servicio) y demás variables que puedan considerarse dentro del mercado inmobiliario y que puedan mostrar un porcentaje mas alto de representatividad, lo anterior puede deberse a la gran cantidad de missing values presentes en las variables representativas en el dataset.
No Obstante fue posible observar según la correspondencia una fuerte influencia en la variable barrio por ser la que mejor representa a nivel de varianza de los datos, adicional que dentro de las variables numéricas se evidencia una buena correlacion entre habitaciones, area construida, baños y parqueaderos.
Para el desarrollo del ejercicio se utilizó la imputación por el método KNN para datos nulos, concluyendo que fue una buena implementación ya que para intentar aumentar significativamente el % de representatividad se analizó la correspondencia con el dataset completo excluyendo los datos faltantes dando como resultado un porcentaje similar de representatividad al anterior, por lo tanto, el método KNN fue una estrategia clave para complementar los datos faltantes.