Problema planteado

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.

Instalación e importación de librerias Cargue de la data planteada para el ejercicio

Descripción del dataset

A continuacion se presentan las principales caracteristicas encontradas en la data registrada

Por tipo

conteo_viviendas <- table(vivienda$tipo)
df_conteo <- data.frame(tipo = names(conteo_viviendas), conteo = as.numeric(conteo_viviendas))

# Calcular los porcentajes
df_conteo$porcentaje <- df_conteo$conteo / sum(df_conteo$conteo) * 100

# Crear el gráfico de pastel con etiquetas de porcentaje
ggplot(df_conteo, aes(x = "", y = conteo, fill = tipo)) +
  geom_bar(stat = "identity", width = 1) +
  geom_text(aes(label = paste0(round(porcentaje), "%")), 
            position = position_stack(vjust = 0.5)) +  # Colocar porcentajes en el medio de cada segmento
  coord_polar("y", start = 0) +  # Convertir a gráfico de pastel
  labs(title = "Distribucion por tipo de vivienda") +  # Título del gráfico
  scale_fill_manual(values = c("blue", "grey")) +  # Personalizar los colores de las secciones
  theme_minimal() +  # Aplicar un tema minimalista
  theme(axis.text.x = element_blank())  # Quitar etiquetas del eje X

Por Zona

conteo_viviendas <- table(vivienda$zona)
df_conteo <- data.frame(tipo = names(conteo_viviendas), conteo = as.numeric(conteo_viviendas))

# Calcular los porcentajes
df_conteo$porcentaje <- df_conteo$conteo / sum(df_conteo$conteo) * 100

# Crear el gráfico de pastel con etiquetas de porcentaje
ggplot(df_conteo, aes(x = "", y = conteo, fill = tipo)) +
  geom_bar(stat = "identity", width = 1) +
  geom_text(aes(label = paste0(round(porcentaje), "%")), position = position_stack(vjust = 0.5)) +
  coord_polar("y", start = 0) +
  labs(title = "Distribución por zona donde se encuentra la vivienda") +
  scale_fill_manual(values = c("blue", "grey", "#ffd733", "#ff8a33", "#4db822")) +
  theme_minimal()

Por Piso

conteo_viviendas <- table(vivienda$piso)
df_conteo <- data.frame(tipo = names(conteo_viviendas), conteo = as.numeric(conteo_viviendas))

# Calcular los porcentajes
df_conteo$porcentaje <- df_conteo$conteo / sum(df_conteo$conteo) * 100

# Crear el gráfico de pastel con etiquetas de porcentaje
ggplot(df_conteo, aes(x = "", y = conteo, fill = tipo)) +
  geom_bar(stat = "identity", width = 1) +
  geom_text(aes(label = paste0(round(porcentaje), "%")), position = position_stack(vjust = 0.5)) +
  coord_polar("y", start = 0) +
  labs(title = "Distribución por numero de pisos") +

  theme_minimal()

Por Estrato

conteo_viviendas <- table(vivienda$estrato)
df_conteo <- data.frame(tipo = names(conteo_viviendas), conteo = as.numeric(conteo_viviendas))

# Calcular los porcentajes
df_conteo$porcentaje <- df_conteo$conteo / sum(df_conteo$conteo) * 100

# Crear el gráfico de pastel con etiquetas de porcentaje
ggplot(df_conteo, aes(x = "", y = conteo, fill = tipo)) +
  geom_bar(stat = "identity", width = 1) +
  geom_text(aes(label = paste0(round(porcentaje), "%")), position = position_stack(vjust = 0.5)) +
  coord_polar("y", start = 0) +
  labs(title = "Distribución por estrato de la vivienda") +
  scale_fill_manual(values = c("blue", "grey", "#ffd733", "#ff8a33", "#4db822", "#c41e73")) +
  theme_minimal()

Por Parqueadero

conteo_viviendas <- table(vivienda$parqueaderos)
df_conteo <- data.frame(tipo = names(conteo_viviendas), conteo = as.numeric(conteo_viviendas))

# Calcular los porcentajes
df_conteo$porcentaje <- df_conteo$conteo / sum(df_conteo$conteo) * 100

# Crear el gráfico de pastel con etiquetas de porcentaje
ggplot(df_conteo, aes(x = "", y = conteo, fill = tipo)) +
  geom_bar(stat = "identity", width = 1) +
  geom_text(aes(label = paste0(round(porcentaje), "%")), position = position_stack(vjust = 0.5)) +
  coord_polar("y", start = 0) +
  labs(title = "Distribucion por Numero de parqueaderos") +
  
  theme_minimal()

Por Barrios

# Contar las viviendas por barrio
conteo_viviendas <- table(vivienda$barrio)
df_conteo <- data.frame(tipo = names(conteo_viviendas), conteo = as.numeric(conteo_viviendas))

# Calcular los porcentajes
df_conteo$porcentaje <- df_conteo$conteo / sum(df_conteo$conteo) * 100

# Agrupar en "Otros" los barrios con menos de 5%
df_conteo <- df_conteo %>%
  mutate(tipo = ifelse(porcentaje < 2, "Otros", tipo)) %>%
  group_by(tipo) %>%
  summarise(conteo = sum(conteo), porcentaje = sum(porcentaje), .groups = 'drop')

# Crear el gráfico de barras agrupadas
p <- ggplot(df_conteo, aes(x = tipo, y = conteo, fill = tipo)) +
  geom_bar(stat = "identity", position = "dodge") +
  labs(title = "Distribucion Resumida por Barrio", x = "Barrio", y = "Numero de Viviendas", fill = "Barrio") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 0.5, vjust = 1))  # Ajusta la posición vertical de las etiquetas

# Mostrar el gráfico
print(p)

print('Se muestran los barrios cuya repetición es igual o  superior al 2%')
[1] "Se muestran los barrios cuya repetición es igual o  superior al 2%"
# Crear el gráfico usando un mapa base
#ggplot() +
#  borders("world") +  # Añadir fronteras del mapa mundial
#  geom_point(data = data, aes(x = longitude, y = latitud, color = descripcion), size = 4) +
#  geom_text(data = data, aes(x = longitude, y = latitud, label = descripcion), vjust = -1, hjust = 0.5) +
#  coord_fixed(1.3) +  # Mantener el aspecto fijo
#  labs(title = "Puntos de Interés en el Mapa", x = "Longitud", y = "Latitud") +
#  theme_minimal()

COMPONENTES PRINCIPALES

PREPARACION DE LOS DATOS

vivienda_num <- vivienda[sapply(vivienda, is.numeric)]
viviendaZ <- scale(vivienda_num) # datos estandarizados


summary(vivienda)
       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      
print('-----------------------------------------------------------------------')
[1] "-----------------------------------------------------------------------"
summary(viviendaZ)
       id             estrato           preciom          areaconst      
 Min.   :-1.7317   Min.   :-1.5872   Min.   :-1.1438   Min.   :-1.0138  
 1st Qu.:-0.8659   1st Qu.:-0.6156   1st Qu.:-0.6508   1st Qu.:-0.6640  
 Median : 0.0000   Median : 0.3560   Median :-0.3161   Median :-0.3633  
 Mean   : 0.0000   Mean   : 0.0000   Mean   : 0.0000   Mean   : 0.0000  
 3rd Qu.: 0.8659   3rd Qu.: 0.3560   3rd Qu.: 0.3229   3rd Qu.: 0.3782  
 Max.   : 1.7317   Max.   : 1.3276   Max.   : 4.7623   Max.   :10.9822  
 NA's   :3         NA's   :3         NA's   :2         NA's   :3        
  parqueaderos         banios          habitaciones        longitud       
 Min.   :-0.7425   Min.   :-2.17847   Min.   :-2.4702   Min.   :-3.47989  
 1st Qu.:-0.7425   1st Qu.:-0.77812   1st Qu.:-0.4148   1st Qu.:-0.74572  
 Median : 0.1465   Median :-0.07794   Median :-0.4148   Median :-0.08013  
 Mean   : 0.0000   Mean   : 0.00000   Mean   : 0.0000   Mean   : 0.00000  
 3rd Qu.: 0.1465   3rd Qu.: 0.62224   3rd Qu.: 0.2704   3rd Qu.: 0.55844  
 Max.   : 7.2582   Max.   : 4.82330   Max.   : 4.3813   Max.   : 3.77083  
 NA's   :1605      NA's   :3          NA's   :3         NA's   :3         
    latitud        
 Min.   :-1.98516  
 1st Qu.:-0.86422  
 Median :-0.03856  
 Mean   : 0.00000  
 3rd Qu.: 0.80575  
 Max.   : 1.87755  
 NA's   :3         

Ahora se validan los datos faltantes Se crea un Dataset para la revision de compomentes principales Se eliminan columnas no necesarias

#vivienda_componentes  <- subset(vivienda, select = -c("zona", "piso", "estrato", "preciom", "areaconst", "parqueaderos", "banios",
#"habitaciones","tipo"))

vivienda_componentes  <- subset(vivienda, select = -c(id, barrio, latitud, longitud))
#Creo un dataset alterno para el trabajo con los clusters
vivienda_cluster <- subset(vivienda, select = -c(id))

md.pattern(vivienda_componentes)

     preciom zona estrato areaconst banios habitaciones tipo parqueaderos piso
4808       1    1       1         1      1            1    1            1    1
1909       1    1       1         1      1            1    1            1    0
876        1    1       1         1      1            1    1            0    1
726        1    1       1         1      1            1    1            0    0
1          1    0       0         0      0            0    0            0    0
2          0    0       0         0      0            0    0            0    0
           2    3       3         3      3            3    3         1605 2638
         
4808    0
1909    1
876     1
726     2
1       8
2       9
     4263

Se hace el proceso de imputacion en las variables objetivo

Primero se hace la imputacion al estrato

#para estrato
moda <- names(which.max(table(vivienda_componentes$estrato)))
vivienda_componentes <- vivienda_componentes %>%
  mutate(estrato = ifelse(is.na(estrato), moda, estrato))

vivienda_cluster <- vivienda_cluster %>%
  mutate(estrato = ifelse(is.na(estrato), moda, estrato))

Para imputar el precio por metro, se hará con la media, pero de cada uno de los estratos por separado. Esto se logra con agrupamiento

Tambien se hace el proceso para el área construida

# Calcular la media de 'preciom' por cada estrato
medias_precio <- vivienda_componentes %>%
  group_by(estrato) %>%
  summarize(media_precio = mean(preciom, na.rm = TRUE))

vivienda_componentes <- vivienda_componentes %>%
  left_join(medias_precio, by = "estrato") %>%
  mutate(preciom = ifelse(is.na(preciom), media_precio, preciom)) 

vivienda_cluster <- vivienda_cluster %>%
  left_join(medias_precio, by = "estrato") %>%
  mutate(preciom = ifelse(is.na(preciom), media_precio, preciom)) %>%
  select(-media_precio)  # Eliminar columna temporal de medias

# Calcular la media de 'areaconst' por cada estrato
medias_areaconst <- vivienda_componentes %>%
  group_by(estrato) %>%
  summarize(media_areaconst = mean(areaconst, na.rm = TRUE))

vivienda_componentes <- vivienda_componentes %>%
  left_join(medias_areaconst, by = "estrato") %>%
  mutate(areaconst = ifelse(is.na(areaconst), media_areaconst, areaconst))

vivienda_cluster <- vivienda_cluster %>%
  left_join(medias_areaconst, by = "estrato") %>%
  mutate(areaconst = ifelse(is.na(areaconst), media_areaconst, areaconst)) %>%
  select(-media_areaconst)  # Eliminar columna temporal de medias

print(vivienda_componentes)
# A tibble: 8,322 × 11
   zona   piso  estrato preciom areaconst parqueaderos banios habitaciones tipo 
   <chr>  <chr> <chr>     <dbl>     <dbl>        <dbl>  <dbl>        <dbl> <chr>
 1 Zona … <NA>  3           250        70            1      3            6 Casa 
 2 Zona … <NA>  3           320       120            1      2            3 Casa 
 3 Zona … <NA>  3           350       220            2      2            4 Casa 
 4 Zona … 02    4           400       280            3      5            3 Casa 
 5 Zona … 01    5           260        90            1      2            3 Apar…
 6 Zona … 01    5           240        87            1      3            3 Apar…
 7 Zona … 01    4           220        52            2      2            3 Apar…
 8 Zona … 01    5           310       137            2      3            4 Apar…
 9 Zona … 02    5           320       150            2      4            6 Casa 
10 Zona … 02    5           780       380            2      3            3 Casa 
# ℹ 8,312 more rows
# ℹ 2 more variables: media_precio <dbl>, media_areaconst <dbl>

De igual manera el numero de habitaciones por estrato

# Calcular la media de 'preciom' por cada estrato
medias_habitaciones <- vivienda_componentes %>%
  group_by(estrato) %>%
  summarize(media_habitaciones = mean(habitaciones, na.rm = TRUE))

vivienda_componentes <- vivienda_componentes %>%
  left_join(medias_habitaciones, by = "estrato") %>%
  mutate(habitaciones = ifelse(is.na(habitaciones), media_habitaciones, habitaciones)) 

vivienda_cluster <- vivienda_cluster %>%
  left_join(medias_habitaciones, by = "estrato") %>%
  mutate(habitaciones = ifelse(is.na(habitaciones), media_habitaciones, habitaciones)) %>%
  select(-media_habitaciones)  # Eliminar columna temporal de medias

Ahora la zona

moda <- names(which.max(table(vivienda_componentes$zona)))

vivienda_componentes <- vivienda_componentes %>%
  mutate(zona = ifelse(is.na(zona), moda, zona))

vivienda_cluster <- vivienda_cluster %>%
  mutate(zona = ifelse(is.na(zona), moda, zona))


print(vivienda_componentes)
# A tibble: 8,322 × 12
   zona   piso  estrato preciom areaconst parqueaderos banios habitaciones tipo 
   <chr>  <chr> <chr>     <dbl>     <dbl>        <dbl>  <dbl>        <dbl> <chr>
 1 Zona … <NA>  3           250        70            1      3            6 Casa 
 2 Zona … <NA>  3           320       120            1      2            3 Casa 
 3 Zona … <NA>  3           350       220            2      2            4 Casa 
 4 Zona … 02    4           400       280            3      5            3 Casa 
 5 Zona … 01    5           260        90            1      2            3 Apar…
 6 Zona … 01    5           240        87            1      3            3 Apar…
 7 Zona … 01    4           220        52            2      2            3 Apar…
 8 Zona … 01    5           310       137            2      3            4 Apar…
 9 Zona … 02    5           320       150            2      4            6 Casa 
10 Zona … 02    5           780       380            2      3            3 Casa 
# ℹ 8,312 more rows
# ℹ 3 more variables: media_precio <dbl>, media_areaconst <dbl>,
#   media_habitaciones <dbl>

El procedimiento de imputacion se continúa con: banios parqueaderos piso tipo

#para banios
moda <- names(which.max(table(vivienda_componentes$banios)))
vivienda_componentes <- vivienda_componentes %>%
  mutate(banios = ifelse(is.na(banios), moda, banios))

vivienda_cluster <- vivienda_cluster %>%
  mutate(banios = ifelse(is.na(banios), moda, banios))

#para parqueaderos
moda <- names(which.max(table(vivienda_componentes$parqueaderos)))
vivienda_componentes <- vivienda_componentes %>%
  mutate(parqueaderos = ifelse(is.na(parqueaderos), moda, parqueaderos))

vivienda_cluster <- vivienda_cluster %>%
  mutate(parqueaderos = ifelse(is.na(parqueaderos), moda, parqueaderos))

#para piso
moda <- names(which.max(table(vivienda_componentes$piso)))
vivienda_componentes <- vivienda_componentes %>%
  mutate(piso = ifelse(is.na(piso), moda, piso))

vivienda_cluster <- vivienda_cluster %>%
  mutate(piso = ifelse(is.na(piso), moda, piso))


#para tipo
moda <- names(which.max(table(vivienda_componentes$tipo)))
vivienda_componentes <- vivienda_componentes %>%
  mutate(tipo = ifelse(is.na(tipo), moda, tipo))

vivienda_cluster <- vivienda_cluster %>%
  mutate(tipo = ifelse(is.na(tipo), moda, tipo))

print(vivienda_componentes)
# A tibble: 8,322 × 12
   zona   piso  estrato preciom areaconst parqueaderos banios habitaciones tipo 
   <chr>  <chr> <chr>     <dbl>     <dbl> <chr>        <chr>         <dbl> <chr>
 1 Zona … 02    3           250        70 1            3                 6 Casa 
 2 Zona … 02    3           320       120 1            2                 3 Casa 
 3 Zona … 02    3           350       220 2            2                 4 Casa 
 4 Zona … 02    4           400       280 3            5                 3 Casa 
 5 Zona … 01    5           260        90 1            2                 3 Apar…
 6 Zona … 01    5           240        87 1            3                 3 Apar…
 7 Zona … 01    4           220        52 2            2                 3 Apar…
 8 Zona … 01    5           310       137 2            3                 4 Apar…
 9 Zona … 02    5           320       150 2            4                 6 Casa 
10 Zona … 02    5           780       380 2            3                 3 Casa 
# ℹ 8,312 more rows
# ℹ 3 more variables: media_precio <dbl>, media_areaconst <dbl>,
#   media_habitaciones <dbl>

Volvemos a revisar los faltantes

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

     zona piso estrato preciom areaconst parqueaderos banios habitaciones tipo
8322    1    1       1       1         1            1      1            1    1
        0    0       0       0         0            0      0            0    0
     media_precio media_areaconst media_habitaciones  
8322            1               1                  1 0
                0               0                  0 0

Validamos el estado de las variables en este momento para el dataSet organizado. Antes de la presentacion, se hace la conversión de los tipos de columnas de categoricos a numéricos Iniciamos con la conversion de “piso” para volverla cuantitativa De igual manera el numero de parqueaderos y baños tambien

vivienda_componentes$piso <- as.numeric(vivienda_componentes$piso)
vivienda_componentes$parqueaderos <- as.numeric(vivienda_componentes$parqueaderos)
vivienda_componentes$banios <- as.numeric(vivienda_componentes$banios)


# Configurar el diseño del gráfico
par(mfrow = c(3, 3))  

# Histogramas de frecuencia para la variable preciom
hist(vivienda_componentes$preciom, main = "Precios", xlab = "preciom", ylab = "Cantidad",col = "#c4441e")
# Histogramas de frecuencia para la variable areaconst
hist(vivienda_componentes$areaconst, main = "Área_construida", xlab = "areaconst", ylab = "Mts2",col = "#e0e616")
# Histogramas de frecuencia para la variable parqueaderos
hist(vivienda_componentes$parqueaderos, main = "Parqueaderos", xlab = "parqueaderos", ylab = "Cantidad",col = "#87d228")
# Histogramas de frecuencia para la variable banios
hist(vivienda_componentes$banios, main = "Baños", xlab = "banios", ylab = "cantidad",col = "#1298db")
# Histogramas de frecuencia para la variable habitaciones
hist(vivienda_componentes$habitaciones, main = "Habitaciones", xlab = "habitaciones", ylab = "Cantidad",col = "#8122c8")
# Histogramas de frecuencia para la variable piso
hist(vivienda_componentes$piso, main = "Piso", xlab = "piso", ylab = "Cantidad",col = "#f5093f")

Análisis de Componentes Principales (PCA) 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 oferta del mercado.

Iniciamos seleccionando las variables que se van a trabajar en el ejercicio Estan son: Precio por metro area construida Parqueaderos Baños Habitaciones piso

Una vez seleccionadaas se procede a estandarizarlas

Y Finalmente sobre las variables estandarizadas, se realiza el proceso de PCA

#Seleccion de las variables
variables_pca <- vivienda_componentes %>%
  select(preciom, areaconst, parqueaderos, banios, habitaciones, piso)

#Proceso de estandarizacion
variables_pca <- scale(variables_pca)

# Se realiza el proceso de PCA
variables_pca <- PCA(variables_pca, graph = FALSE)

summary(variables_pca)

Call:
PCA(X = variables_pca, graph = FALSE) 


Eigenvalues
                       Dim.1   Dim.2   Dim.3   Dim.4   Dim.5   Dim.6
Variance               3.196   1.087   0.801   0.399   0.325   0.192
% of var.             53.259  18.115  13.352   6.650   5.417   3.207
Cumulative % of var.  53.259  71.374  84.725  91.376  96.793 100.000

Individuals (the 10 first)
                 Dist    Dim.1    ctr   cos2    Dim.2    ctr   cos2    Dim.3
1            |  2.056 | -0.287  0.000  0.020 | -1.424  0.022  0.480 |  1.114
2            |  1.312 | -1.085  0.004  0.684 | -0.509  0.003  0.151 | -0.414
3            |  1.100 | -0.069  0.000  0.004 | -0.530  0.003  0.232 | -0.362
4            |  2.074 |  1.377  0.007  0.441 |  0.058  0.000  0.001 | -0.713
5            |  1.651 | -1.228  0.006  0.553 | -0.895  0.009  0.294 | -0.616
6            |  1.490 | -0.926  0.003  0.386 | -0.914  0.009  0.376 | -0.439
7            |  1.717 | -1.021  0.004  0.354 | -0.628  0.004  0.134 | -0.944
8            |  1.140 | -0.023  0.000  0.000 | -0.878  0.009  0.594 | -0.416
9            |  1.897 |  0.816  0.003  0.185 | -1.113  0.014  0.344 |  0.860
10           |  1.927 |  1.185  0.005  0.378 |  0.067  0.000  0.001 | -0.970
                ctr   cos2  
1             0.019  0.293 |
2             0.003  0.100 |
3             0.002  0.108 |
4             0.008  0.118 |
5             0.006  0.139 |
6             0.003  0.087 |
7             0.013  0.303 |
8             0.003  0.133 |
9             0.011  0.206 |
10            0.014  0.253 |

Variables
                Dim.1    ctr   cos2    Dim.2    ctr   cos2    Dim.3    ctr
preciom      |  0.840 22.092  0.706 |  0.300  8.298  0.090 | -0.225  6.317
areaconst    |  0.864 23.343  0.746 | -0.064  0.373  0.004 | -0.003  0.001
parqueaderos |  0.746 17.404  0.556 |  0.317  9.264  0.101 | -0.342 14.611
banios       |  0.869 23.651  0.756 | -0.003  0.001  0.000 |  0.207  5.334
habitaciones |  0.631 12.476  0.399 | -0.442 18.014  0.196 |  0.571 40.694
piso         | -0.182  1.035  0.033 |  0.834 64.049  0.696 |  0.514 33.042
               cos2  
preciom       0.051 |
areaconst     0.000 |
parqueaderos  0.117 |
banios        0.043 |
habitaciones  0.326 |
piso          0.265 |

Ahora, se procede a realizar la visualización de los componentes, con el fin de poder determinar cuantas dimensiones se van a utilizar en el proceso

fviz_eig(variables_pca, addlabels = TRUE)

Del anterior gráfico se puede observar: 1. El componente CP1 contiene información relevante del 53.3% 2. El componente CP2 contiene información relevante del 18.1% en este caso, solamente tomando estos dos compnentes, se logra superar el 71.4% que es un valos bastante importante que explica el comportamiento de los atributos del sistema

fviz_pca_var(variables_pca,
col.var = "contrib", # Color by contributions to the PC
gradient.cols = c("#FF7F00",  "#034D94"),
repel = TRUE     # Avoid text overlapping
)

Del anterior gráfico de correlaciones, se pueden determinar las siguientes conclusiones:

  1. La variable “parqueadero”habitaciones” tiene una influencia en las dos dimensiones, pero por el color, se puede apreciar que su contribucion no es muy significativa

  2. “piso” es una variable que tiene afectación importante en la Dim2, pero no asi en la Dim1. Su afectacion a la correlación no es impactacte.

  3. Las variables “paqrqueaderos” y “preciom” tienen una correlacion fuerte con las variables de “areaconst” y “habitaciones” (en menor magnitu)

A continuación se va a realizar una representación gráfica de las variables analizando la contribución que realizan a las dos primeras componentes

fviz_contrib(variables_pca, choice = "var", axes = 1:2)

Confirmando la información anterior, se evidencia claramente que la variable “preciom” principalmente; al igual que las variables “banios”, “areacont” y “piso tien”piso” tienen un peso fuerte en la determinacion de las dimensiones 1 y 2.

Análisis de Conglomerados

Agrupar las propiedades residenciales en segmentos homogéneos con características similares para entender las dinámicas de las ofertas específicas en diferentes partes de la ciudad y en diferentes estratos socioeconómicos.

Primero determinamos cuales van a ser las variables que se van a utilizar en este análisis de conglomerados y de la misma manera que en el punto anterior, se debe hacer un proceso de normalizacion de los datos que se van a trabajar

#Seleccion de las variables
variables_conglo <- vivienda_componentes %>%
  select(preciom, areaconst, parqueaderos, banios, habitaciones, piso)

#Proceso de estandarizacion
variables_conglo <- scale(variables_conglo)

summary(variables_conglo)
    preciom          areaconst        parqueaderos         banios        
 Min.   :-1.1439   Min.   :-1.0140   Min.   :-0.6342   Min.   :-2.17834  
 1st Qu.:-0.6509   1st Qu.:-0.6642   1st Qu.:-0.6342   1st Qu.:-0.77789  
 Median :-0.3161   Median :-0.3633   Median :-0.6342   Median :-0.07766  
 Mean   : 0.0000   Mean   : 0.0000   Mean   : 0.0000   Mean   : 0.00000  
 3rd Qu.: 0.3229   3rd Qu.: 0.3782   3rd Qu.: 0.3066   3rd Qu.: 0.62256  
 Max.   : 4.7629   Max.   :10.9842   Max.   : 7.8326   Max.   : 4.82393  
  habitaciones          piso        
 Min.   :-2.4706   Min.   :-0.9554  
 1st Qu.:-0.4148   1st Qu.:-0.5230  
 Median :-0.4148   Median :-0.5230  
 Mean   : 0.0000   Mean   : 0.0000  
 3rd Qu.: 0.2704   3rd Qu.: 0.3418  
 Max.   : 4.3821   Max.   : 3.8009  

Ahora se procede a determinar el numero de CLUSTER que se van a trabajar

# Creamos una función para calcular la suma de los cuadrados internos (WCSS) para diferentes números de clústeres
calcular_wcss <- function(data, k_max) {
  wcss <- vector("numeric", length = k_max)
  for (k in 1:k_max) {
    model <- kmeans(data, centers = k, nstart = 10)
    wcss[k] <- model$tot.withinss
  }
  return(wcss)
}

# Aplicamos la función para diferentes números de clústeres
k_max <- 6
wcss_valores <- calcular_wcss(variables_conglo, k_max)

# Graficamos la curva del codo para identificar el número óptimo de clústeres
plot(1:k_max, wcss_valores, type = "b", pch = 19, frame = FALSE, xlab = "Número de clústeres", ylab = "Suma de cuadrados internos",col = "#5586B3")

Con este método, se puede evaluar de manera visual cuantos cluster se deben utilizar, teniendo en cuanta el codo que se presenta en la caida de la gráfica. Se evidencia que se presenta un cambio significativo en el 2 y/o 3

Ya teniendo en cuenta el nuemero de cluster a trabajar, se va a proceder a trabajar con K-Means tomando como base 3 clusters.

# El numero de cluster es 3
num_clusters <- 3

# Aplicamos el algoritmo K-Means
modelo_kmeans <- kmeans(variables_conglo, centers = num_clusters, nstart = 10)

# Agregamos los resultados del clustering al conjunto de datos original
vivienda_cluster$cluster <- as.factor(modelo_kmeans$cluster)

summary(vivienda_cluster)
     zona               piso             estrato             preciom      
 Length:8322        Length:8322        Length:8322        Min.   :  58.0  
 Class :character   Class :character   Class :character   1st Qu.: 220.0  
 Mode  :character   Mode  :character   Mode  :character   Median : 330.0  
                                                          Mean   : 433.9  
                                                          3rd Qu.: 540.0  
                                                          Max.   :1999.0  
                                                                          
   areaconst      parqueaderos          banios           habitaciones   
 Min.   :  30.0   Length:8322        Length:8322        Min.   : 0.000  
 1st Qu.:  80.0   Class :character   Class :character   1st Qu.: 3.000  
 Median : 123.0   Mode  :character   Mode  :character   Median : 3.000  
 Mean   : 174.9                                         Mean   : 3.605  
 3rd Qu.: 229.0                                         3rd Qu.: 4.000  
 Max.   :1745.0                                         Max.   :10.000  
                                                                        
     tipo              barrio             longitud         latitud     
 Length:8322        Length:8322        Min.   :-76.59   Min.   :3.333  
 Class :character   Class :character   1st Qu.:-76.54   1st Qu.:3.381  
 Mode  :character   Mode  :character   Median :-76.53   Median :3.416  
                                       Mean   :-76.53   Mean   :3.418  
                                       3rd Qu.:-76.52   3rd Qu.:3.452  
                                       Max.   :-76.46   Max.   :3.498  
                                       NA's   :3        NA's   :3      
 cluster 
 1:2498  
 2: 931  
 3:4893  
         
         
         
         
print('Cantidad de elementos en cada uno de los clusters creados')
[1] "Cantidad de elementos en cada uno de los clusters creados"
table(vivienda_cluster$cluster)

   1    2    3 
2498  931 4893 

Ya se encuentra en el dataset principal, la clasificacion por cluster que se generó con el método de k-means.

A continuacion se hace una representación gráfica de dichos clusters

# Paleta de colores personalizada
colores_personalizados <- c("#084575", "#e6eb3d", "#3b9b48")

# Gráfico de barras para mostrar la distribución de viviendas en cada clúster
ggplot(vivienda_cluster, aes(x = factor(cluster))) +
  geom_bar(fill = colores_personalizados) +  
  labs(title = "Distribución de viviendas por clúster",
       x = "Clúster",
       y = "Cantidad de viviendas") +
  theme_minimal() +
  geom_text(stat='count', aes(label=..count..), vjust=-0.5)
Warning: The dot-dot notation (`..count..`) was deprecated in ggplot2 3.4.0.
ℹ Please use `after_stat(count)` instead.
This warning is displayed once every 8 hours.
Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
generated.

En este ejercicio se puede apreciar que el cluster 1 con 4893 posee mayor número de registros (viviendas), seguido por el cluster 3 con 2498 y finalmente el número 2 con 931.

Ya teniendo esta información y con el fin de poder evidenciar como se encuntran estructurados los cluster, se va a representar a continuación los datos de las viviendas. Se van a mantener los colores definidos anteriormente para poder ubicar más fácil la información.

# Mapa con colores para representar cada clúster
ggplot(vivienda_cluster, aes(x = longitud, y = latitud, color = factor(cluster))) +
  geom_point() +
  labs(title = "Clústeres de propiedades residenciales",
       x = "Longitud",
       y = "Latitud",
       color = "Clúster") +
  theme_minimal() +
  theme(legend.position = "bottom")
Warning: Removed 3 rows containing missing values or values outside the scale range
(`geom_point()`).

Esta grafica, representa la ubicacion de las propidades coloreadas por el cluster al que pertenecen. Se pueden evidenciar los diferentes grupos.

Es claro, que la segmentacion de los mismos no se realizó por su ubicacion geográfica, sino por las demas características que son las que se definieron para el ejercicio, como son: preciom, areaconst, parqueaderos, banios, habitaciones y piso.

Para poder determinar las caracteristicas de las propiedades, se va a realizar una tabla resumen, donde se evidencian las principales características de los cluster. Esto teniendo en cuenta que tenemos el dataset con la información original sin el id ni el barrio; pero aumentando el cluster al que pertenecen.

#Convierte los datos categoricos a numeros para poder tomar la media
vivienda_cluster$estrato <- as.numeric(vivienda_cluster$estrato)
vivienda_cluster$parqueaderos <- as.numeric(vivienda_cluster$parqueaderos)
vivienda_cluster$banios <- as.numeric(vivienda_cluster$banios)
vivienda_cluster$piso <- as.numeric(vivienda_cluster$piso)


moda <- function(x) {
  uniq_x <- unique(x)                     # Valores únicos
  uniq_x[which.max(tabulate(match(x, uniq_x)))]  # Calcular la moda
}


# Tabla resumen de características promedio por clúster
tabla_resumen <- vivienda_cluster %>%
  group_by(cluster) %>%
  summarise(promedio_estrato = mean(estrato),
            promedio_preciom = mean(preciom),
            promedio_areaconst = mean(areaconst),
            promedio_parqueaderos = mean(parqueaderos),
            promedio_banios = mean(banios),
            promedio_habitaciones = mean(habitaciones), 
            promedio_tipo = moda(tipo), 
            promedio_piso = mean(piso))

# Mostrar tabla resumen
print(tabla_resumen)
# A tibble: 3 × 9
  cluster promedio_estrato promedio_preciom promedio_areaconst
  <fct>              <dbl>            <dbl>              <dbl>
1 1                   4.80             519.              239. 
2 2                   5.64            1120.              419. 
3 3                   4.36             260.               96.1
# ℹ 5 more variables: promedio_parqueaderos <dbl>, promedio_banios <dbl>,
#   promedio_habitaciones <dbl>, promedio_tipo <chr>, promedio_piso <dbl>

Esta presentación, muestra muy claramente como se crearon los clusters para este ejecicio.

En el cluster 1 se tienen propiedades de estrato 3, 4 principalmente, cuyo precio promedio del metro cuadrado es de 260.000 y tienen una área de 96 metros cuadrados. Estos tienen 2 baños, 3 habitaciones y son tipo apartamento.

En el grupo 2 tenemos propiedades de estrato 5, 6 con un valor por metro de 1.120.000. Las áreas son mas ámplias, llegando a un promedio de 420 metros cuadrados. 5 baños ente 4 y 5 habitaciones y son tipo casa. Este es el grupo mas reducido teniendo en cuenta las características que poseen.

Y finalmente se encuentra el cluster 3, que son estrato 4 y 5 principalmente, con un precio promedio por metro de 520.000 y una area de 240 metros cuadrados. 4 baños, entre 4 y 5 habitaciones y son casas principalmente.

A continuación se presenta el diagrama de dispersion para evidenciar la relacione entre las variables de preciom y areaconst

ggplot(vivienda_cluster, aes(x = preciom, y = areaconst, color = factor(cluster))) +
  geom_point() +
  labs(title = "Relación entre precio y area  por clúster",
       x = "Precio",
       y = "Área construida",
       color = "Clúster") +
  theme_minimal() +
  theme(legend.position = "bottom")

En esta representación gráfica se puede apreciar la distribución que tienen los cluster creados en relacion con el precio y el área. Se evidencia que en el primer cluster se encuentran las propiedades de menor valor y menor tamaño. En el cluster azul, se cuentran la propiedades de valor medio y han aumentado el tamaño Finalmente, en el cluster verde se evidencia el aumento significativo de los precios y tamaños, y es en este cluster donde tenermos un mayor y más pronunciado número de Outliers. En los otros dos grupos los casos de estos eran muy pocos.

Análisis de Correspondencia

Examinar la relación entre las variables categóricas (tipo de vivienda, zona y barrio), para identificar patrones de comportamiento de la oferta en mercado inmobilia

Se van a revisar entronces, las variables categóricas, para identificar patrones que se presenten con los inmuebles.

Iniciamos tomando únicamente las variables categóricas Se va a evidenciar el analisis de correspondencia múltiple (MCA) con las variables categóricas

vivienda_categorica <- vivienda_cluster[, c("tipo", "zona", "barrio")]

mca_result <- MCA(vivienda_categorica)

Se evidencia una correlación muy fuerte entre la zona y el barrio. Por el contrario, el tipo esta muy distante de generar una correspondencia con las nombradas anteriormente.

fviz_mca_ind(mca_result,
              geom.ind = "point", 
              pointsize = 3, 
              repel = TRUE, 
              title = "Individuos en el MCA") +
  scale_color_brewer(palette = "Set1") +  # Cambiar colores
  theme_minimal() + 
  theme(plot.title = element_text(hjust = 0.5),
        axis.text = element_text(size = 12),
        axis.title = element_text(size = 14),
        legend.position = "bottom") +  
  coord_fixed()

Análisis de Correspondencia múltiple (MCA)

# Se evidencian los resultados del analisis
summary(mca_result)

Call:
MCA(X = vivienda_categorica) 


Eigenvalues
                       Dim.1   Dim.2   Dim.3   Dim.4   Dim.5   Dim.6   Dim.7
Variance               0.711   0.660   0.651   0.623   0.444   0.333   0.333
% of var.              0.484   0.449   0.443   0.424   0.302   0.227   0.227
Cumulative % of var.   0.484   0.933   1.376   1.799   2.102   2.328   2.555
                       Dim.8   Dim.9  Dim.10  Dim.11  Dim.12  Dim.13  Dim.14
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.   2.782   3.009   3.236   3.462   3.689   3.916   4.143
                      Dim.15  Dim.16  Dim.17  Dim.18  Dim.19  Dim.20  Dim.21
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.   4.369   4.596   4.823   5.050   5.276   5.503   5.730
                      Dim.22  Dim.23  Dim.24  Dim.25  Dim.26  Dim.27  Dim.28
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.   5.957   6.183   6.410   6.637   6.864   7.090   7.317
                      Dim.29  Dim.30  Dim.31  Dim.32  Dim.33  Dim.34  Dim.35
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.   7.544   7.771   7.997   8.224   8.451   8.678   8.904
                      Dim.36  Dim.37  Dim.38  Dim.39  Dim.40  Dim.41  Dim.42
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.   9.131   9.358   9.585   9.811  10.038  10.265  10.492
                      Dim.43  Dim.44  Dim.45  Dim.46  Dim.47  Dim.48  Dim.49
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  10.719  10.945  11.172  11.399  11.626  11.852  12.079
                      Dim.50  Dim.51  Dim.52  Dim.53  Dim.54  Dim.55  Dim.56
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  12.306  12.533  12.759  12.986  13.213  13.440  13.666
                      Dim.57  Dim.58  Dim.59  Dim.60  Dim.61  Dim.62  Dim.63
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  13.893  14.120  14.347  14.573  14.800  15.027  15.254
                      Dim.64  Dim.65  Dim.66  Dim.67  Dim.68  Dim.69  Dim.70
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  15.480  15.707  15.934  16.161  16.387  16.614  16.841
                      Dim.71  Dim.72  Dim.73  Dim.74  Dim.75  Dim.76  Dim.77
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  17.068  17.294  17.521  17.748  17.975  18.202  18.428
                      Dim.78  Dim.79  Dim.80  Dim.81  Dim.82  Dim.83  Dim.84
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  18.655  18.882  19.109  19.335  19.562  19.789  20.016
                      Dim.85  Dim.86  Dim.87  Dim.88  Dim.89  Dim.90  Dim.91
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  20.242  20.469  20.696  20.923  21.149  21.376  21.603
                      Dim.92  Dim.93  Dim.94  Dim.95  Dim.96  Dim.97  Dim.98
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  21.830  22.056  22.283  22.510  22.737  22.963  23.190
                      Dim.99 Dim.100 Dim.101 Dim.102 Dim.103 Dim.104 Dim.105
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  23.417  23.644  23.870  24.097  24.324  24.551  24.777
                     Dim.106 Dim.107 Dim.108 Dim.109 Dim.110 Dim.111 Dim.112
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  25.004  25.231  25.458  25.684  25.911  26.138  26.365
                     Dim.113 Dim.114 Dim.115 Dim.116 Dim.117 Dim.118 Dim.119
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  26.592  26.818  27.045  27.272  27.499  27.725  27.952
                     Dim.120 Dim.121 Dim.122 Dim.123 Dim.124 Dim.125 Dim.126
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  28.179  28.406  28.632  28.859  29.086  29.313  29.539
                     Dim.127 Dim.128 Dim.129 Dim.130 Dim.131 Dim.132 Dim.133
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  29.766  29.993  30.220  30.446  30.673  30.900  31.127
                     Dim.134 Dim.135 Dim.136 Dim.137 Dim.138 Dim.139 Dim.140
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  31.353  31.580  31.807  32.034  32.260  32.487  32.714
                     Dim.141 Dim.142 Dim.143 Dim.144 Dim.145 Dim.146 Dim.147
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  32.941  33.167  33.394  33.621  33.848  34.075  34.301
                     Dim.148 Dim.149 Dim.150 Dim.151 Dim.152 Dim.153 Dim.154
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  34.528  34.755  34.982  35.208  35.435  35.662  35.889
                     Dim.155 Dim.156 Dim.157 Dim.158 Dim.159 Dim.160 Dim.161
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  36.115  36.342  36.569  36.796  37.022  37.249  37.476
                     Dim.162 Dim.163 Dim.164 Dim.165 Dim.166 Dim.167 Dim.168
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  37.703  37.929  38.156  38.383  38.610  38.836  39.063
                     Dim.169 Dim.170 Dim.171 Dim.172 Dim.173 Dim.174 Dim.175
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  39.290  39.517  39.743  39.970  40.197  40.424  40.650
                     Dim.176 Dim.177 Dim.178 Dim.179 Dim.180 Dim.181 Dim.182
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  40.877  41.104  41.331  41.558  41.784  42.011  42.238
                     Dim.183 Dim.184 Dim.185 Dim.186 Dim.187 Dim.188 Dim.189
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  42.465  42.691  42.918  43.145  43.372  43.598  43.825
                     Dim.190 Dim.191 Dim.192 Dim.193 Dim.194 Dim.195 Dim.196
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  44.052  44.279  44.505  44.732  44.959  45.186  45.412
                     Dim.197 Dim.198 Dim.199 Dim.200 Dim.201 Dim.202 Dim.203
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  45.639  45.866  46.093  46.319  46.546  46.773  47.000
                     Dim.204 Dim.205 Dim.206 Dim.207 Dim.208 Dim.209 Dim.210
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  47.226  47.453  47.680  47.907  48.133  48.360  48.587
                     Dim.211 Dim.212 Dim.213 Dim.214 Dim.215 Dim.216 Dim.217
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  48.814  49.041  49.267  49.494  49.721  49.948  50.174
                     Dim.218 Dim.219 Dim.220 Dim.221 Dim.222 Dim.223 Dim.224
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  50.401  50.628  50.855  51.081  51.308  51.535  51.762
                     Dim.225 Dim.226 Dim.227 Dim.228 Dim.229 Dim.230 Dim.231
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  51.988  52.215  52.442  52.669  52.895  53.122  53.349
                     Dim.232 Dim.233 Dim.234 Dim.235 Dim.236 Dim.237 Dim.238
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  53.576  53.802  54.029  54.256  54.483  54.709  54.936
                     Dim.239 Dim.240 Dim.241 Dim.242 Dim.243 Dim.244 Dim.245
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  55.163  55.390  55.616  55.843  56.070  56.297  56.523
                     Dim.246 Dim.247 Dim.248 Dim.249 Dim.250 Dim.251 Dim.252
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  56.750  56.977  57.204  57.431  57.657  57.884  58.111
                     Dim.253 Dim.254 Dim.255 Dim.256 Dim.257 Dim.258 Dim.259
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  58.338  58.564  58.791  59.018  59.245  59.471  59.698
                     Dim.260 Dim.261 Dim.262 Dim.263 Dim.264 Dim.265 Dim.266
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  59.925  60.152  60.378  60.605  60.832  61.059  61.285
                     Dim.267 Dim.268 Dim.269 Dim.270 Dim.271 Dim.272 Dim.273
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  61.512  61.739  61.966  62.192  62.419  62.646  62.873
                     Dim.274 Dim.275 Dim.276 Dim.277 Dim.278 Dim.279 Dim.280
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  63.099  63.326  63.553  63.780  64.006  64.233  64.460
                     Dim.281 Dim.282 Dim.283 Dim.284 Dim.285 Dim.286 Dim.287
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  64.687  64.914  65.140  65.367  65.594  65.821  66.047
                     Dim.288 Dim.289 Dim.290 Dim.291 Dim.292 Dim.293 Dim.294
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  66.274  66.501  66.728  66.954  67.181  67.408  67.635
                     Dim.295 Dim.296 Dim.297 Dim.298 Dim.299 Dim.300 Dim.301
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  67.861  68.088  68.315  68.542  68.768  68.995  69.222
                     Dim.302 Dim.303 Dim.304 Dim.305 Dim.306 Dim.307 Dim.308
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  69.449  69.675  69.902  70.129  70.356  70.582  70.809
                     Dim.309 Dim.310 Dim.311 Dim.312 Dim.313 Dim.314 Dim.315
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  71.036  71.263  71.489  71.716  71.943  72.170  72.397
                     Dim.316 Dim.317 Dim.318 Dim.319 Dim.320 Dim.321 Dim.322
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  72.623  72.850  73.077  73.304  73.530  73.757  73.984
                     Dim.323 Dim.324 Dim.325 Dim.326 Dim.327 Dim.328 Dim.329
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  74.211  74.437  74.664  74.891  75.118  75.344  75.571
                     Dim.330 Dim.331 Dim.332 Dim.333 Dim.334 Dim.335 Dim.336
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  75.798  76.025  76.251  76.478  76.705  76.932  77.158
                     Dim.337 Dim.338 Dim.339 Dim.340 Dim.341 Dim.342 Dim.343
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  77.385  77.612  77.839  78.065  78.292  78.519  78.746
                     Dim.344 Dim.345 Dim.346 Dim.347 Dim.348 Dim.349 Dim.350
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  78.972  79.199  79.426  79.653  79.880  80.106  80.333
                     Dim.351 Dim.352 Dim.353 Dim.354 Dim.355 Dim.356 Dim.357
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  80.560  80.787  81.013  81.240  81.467  81.694  81.920
                     Dim.358 Dim.359 Dim.360 Dim.361 Dim.362 Dim.363 Dim.364
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  82.147  82.374  82.601  82.827  83.054  83.281  83.508
                     Dim.365 Dim.366 Dim.367 Dim.368 Dim.369 Dim.370 Dim.371
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  83.734  83.961  84.188  84.415  84.641  84.868  85.095
                     Dim.372 Dim.373 Dim.374 Dim.375 Dim.376 Dim.377 Dim.378
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  85.322  85.548  85.775  86.002  86.229  86.455  86.682
                     Dim.379 Dim.380 Dim.381 Dim.382 Dim.383 Dim.384 Dim.385
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  86.909  87.136  87.362  87.589  87.816  88.043  88.270
                     Dim.386 Dim.387 Dim.388 Dim.389 Dim.390 Dim.391 Dim.392
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  88.496  88.723  88.950  89.177  89.403  89.630  89.857
                     Dim.393 Dim.394 Dim.395 Dim.396 Dim.397 Dim.398 Dim.399
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  90.084  90.310  90.537  90.764  90.991  91.217  91.444
                     Dim.400 Dim.401 Dim.402 Dim.403 Dim.404 Dim.405 Dim.406
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  91.671  91.898  92.124  92.351  92.578  92.805  93.031
                     Dim.407 Dim.408 Dim.409 Dim.410 Dim.411 Dim.412 Dim.413
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  93.258  93.485  93.712  93.938  94.165  94.392  94.619
                     Dim.414 Dim.415 Dim.416 Dim.417 Dim.418 Dim.419 Dim.420
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  94.845  95.072  95.299  95.526  95.753  95.979  96.206
                     Dim.421 Dim.422 Dim.423 Dim.424 Dim.425 Dim.426 Dim.427
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  96.433  96.660  96.886  97.113  97.340  97.567  97.793
                     Dim.428 Dim.429 Dim.430 Dim.431 Dim.432 Dim.433 Dim.434
Variance               0.333   0.333   0.333   0.333   0.333   0.333   0.333
% of var.              0.227   0.227   0.227   0.227   0.227   0.227   0.227
Cumulative % of var.  98.020  98.247  98.474  98.700  98.927  99.154  99.381
                     Dim.435 Dim.436 Dim.437 Dim.438 Dim.439 Dim.440 Dim.441
Variance               0.333   0.333   0.161   0.046   0.018   0.012   0.006
% of var.              0.227   0.227   0.110   0.032   0.012   0.008   0.004
Cumulative % of var.  99.607  99.834  99.944  99.975  99.988  99.996 100.000

Individuals (the 10 first)
                Dim.1    ctr   cos2    Dim.2    ctr   cos2    Dim.3    ctr
1            |  2.720  0.125  0.008 |  0.908  0.015  0.001 |  2.620  0.127
2            |  2.720  0.125  0.008 |  0.908  0.015  0.001 |  2.620  0.127
3            |  2.720  0.125  0.008 |  0.908  0.015  0.001 |  2.620  0.127
4            |  0.680  0.008  0.000 | -0.637  0.007  0.000 | -0.223  0.001
5            | -0.198  0.001  0.002 |  1.319  0.032  0.094 | -0.723  0.010
6            | -0.198  0.001  0.002 |  1.319  0.032  0.094 | -0.723  0.010
7            | -0.198  0.001  0.002 |  1.319  0.032  0.094 | -0.723  0.010
8            | -0.198  0.001  0.002 |  1.319  0.032  0.094 | -0.723  0.010
9            |  0.268  0.001  0.004 |  1.325  0.032  0.093 | -0.697  0.009
10           |  0.268  0.001  0.004 |  1.325  0.032  0.093 | -0.697  0.009
               cos2  
1             0.007 |
2             0.007 |
3             0.007 |
4             0.000 |
5             0.028 |
6             0.028 |
7             0.028 |
8             0.028 |
9             0.026 |
10            0.026 |

Categories (the 10 first)
                 Dim.1     ctr    cos2  v.test     Dim.2     ctr    cos2
Apartamento  |  -0.457   5.993   0.330 -52.439 |  -0.006   0.001   0.000
Casa         |   0.724   9.500   0.330  52.439 |   0.009   0.002   0.000
Zona Centro  |   2.007   2.813   0.061  22.512 |   0.239   0.043   0.001
Zona Norte   |  -0.056   0.033   0.001  -2.775 |   1.602  29.903   0.770
Zona Oeste   |  -1.725  20.081   0.500 -64.524 |   0.159   0.184   0.004
Zona Oriente |   2.930  16.982   0.378  56.095 |   1.087   2.515   0.052
Zona Sur     |   0.189   0.956   0.047  19.821 |  -0.778  17.354   0.796
20 de julio  |   3.225   0.176   0.004   5.587 |   1.117   0.023   0.000
3 de julio   |   0.806   0.004   0.000   0.806 |  -0.784   0.004   0.000
acopi        |   0.011   0.000   0.000   0.139 |   1.619   2.514   0.051
              v.test     Dim.3     ctr    cos2  v.test  
Apartamento   -0.644 |  -0.024   0.019   0.001  -2.808 |
Casa           0.644 |   0.039   0.030   0.001   2.808 |
Zona Centro    2.684 |   0.773   0.456   0.009   8.673 |
Zona Norte    80.039 |  -0.845   8.445   0.214 -42.232 |
Zona Oeste     5.948 |   1.573  18.251   0.416  58.855 |
Zona Oriente  20.802 |   3.054  20.151   0.411  58.465 |
Zona Sur     -81.390 |  -0.302   2.660   0.120 -31.637 |
20 de julio    1.935 |   3.247   0.195   0.004   5.625 |
3 de julio    -0.784 |  -0.277   0.000   0.000  -0.277 |
acopi         20.550 |  -0.880   0.753   0.015 -11.170 |

Categorical variables (eta2)
               Dim.1 Dim.2 Dim.3  
tipo         | 0.330 0.000 0.001 |
zona         | 0.872 0.990 0.976 |
barrio       | 0.931 0.990 0.976 |

Al revisar los datos, se evidencia que el valor para Dim1 es de 0.711 y para Dim2 es de 0.660. Esto significa que en estas dos dimensiones representan un alto nivel de informacion; ya que es la representacion de las varianzas, Estos son los valores propios

Los valores de η² son herramientas poderosas en el análisis de correspondencias, ya que proporcionan información sobre qué variables son las más influyentes. En tu caso, las variables “zona” y “barrio” son claves, mientras que “tipo” presenta un impacto limitado.

A continuación, se crea otro dataframe con las variables numéricas y realizamos el anaálisis PCA de estas variables (presentado anteriormente)

vivienda_numericas <- vivienda_cluster[, c("preciom", "areaconst", "parqueaderos", "banios", "habitaciones")]
#PCA para las variables numéricas
pca_numericas <- PCA(vivienda_numericas)

Se aprecia que existe una correlación fuerte entre las columnas “banios” y “areaconst”. Estas estan aportando a la definicion del Dim2. Muentras que habitaciones aporta en la misma Dim2 pero no expresa una correlacion con las otras dos variables. El Dim1 esta influenciado principalmente por el preciom que tiene una alta correlacion con parqueaderos.

CONCLUSIONES

Este proceso de naálisis se realiza con el objetivo de dar herramientas sobre el valor de las propiedades en Cali, tomando una data entregada. Para lograr este objetivo, se va a trabajar haciendo una descripcion inicial de los datos. Posteriormente se hace un análisis de componentes, análisis de conglomerados y un análisis de correspondencia.

Con estos procesos se busca dar lineamientos sobre las mejores alternativas que se presentan para el proceso de compra y venta de inmuebles en la ciudad de Cali.

En el análisis de componentes principales (PCA)

Analizando las varianzas presentadas se evidenció qu la Dim1 logró un 53.3% y la Dim 2 tiene un indicador de 18.1%, logrando un 71.4%. Esto indica que para el ejercicio es mas que suficiente tener solamente estas dos varianzas

Estas diomensiones estan siendo afectadas principalmente por los datos: preciom, banios, areaconst y piso. Estos son los factores determinantes del comportamiento de las dimensiones.

En el gráfico de correlaciones, se evidencia que el preciom y los parqueaderos tienen una correlacion muy alta. Este comportamiento es similar a la relacion de banios y areaconst.

La variable piso, aunque influye significativamente en la Dim2, es independiente de las demás variables.

Con esto concluimos que: 1. Aplicando la reducción de variables que se realiza con PCA, se logra la interpretación del estado de los inmuebles en la ciudad de Cali. 2. Los factores que más influyen son en su orden preciom, banios, areaconst y piso

En el análisis de clúster

La idea principal de este análisis, es crear grupos para la informacion recibida, donde se encuentran agrupados por características en su similitud. En este proceso se detectaron TRES grupos principalmente.

A continuación hago un resumen de las caracterísiticas de los grupos presentados:

Clúster Estrato Precio por metro Área Construida Otros datos Num. registros
Clúster 1 Entre 3 y 4 260.000 96 Son apartamentos con 2 baños y 3 habitaciones 4893
Clúster 2 Entre 5 y 6 1.120.000 420 en su mayoría son casas con 5 baños y entre 4 y 5 habitaciones 931
Clúster 3 Algunos 3, muchos 4 y algunos 5 520.000 240 Son casas y apartamentos con 4 baños y entre 4 y 5 habitaciones 2498

En el análisis de correspondencia

En el proceso de reducción de componentes, se evidencia que el proceso logró dejar las Dim1 con 71.1% y Dim2 con 6.6%. Es decir, un valor conjugado del 77.7%

Este análisis revela que existen relaciones significativas entre las variables categóricas y numéricas, lo que evidencia que factores como el tipo de propiedad y la zona se relacionan con características numéricas como el precio y el tamaño.

RECOMENDACIONES

  1. Se debe enfocar la estratégia de ventas, teniendo en cuenta las características de precio por metro, pero soportado por el numero de banios que posee la propiedad.

  2. Se evidencia an el análisis de clústers que la gran mayoria de inmuebles que se encuentran en venta, corresponden al cluster No.1. Esto indica que el movimiento real del mercado se encuentra en los apartamentos que se encuentran en los estratos 3 y 4 y cuyo tamaño es de alrededor de 96 metros cuadrados. Es en este rango donde se estan haciendo los principales negocios y donde se debe enfocar la empresa para maximizar sus rendimientos financieros.

  3. En el análisis de correspondencia, se evidencian unos grupos en cuanto a la ubicacion de los predios, relacionados con el precio y el tamaño.

  4. Se recomienda realizar este ejecicio de manera periodica para poder determinar el mejor comportamiento del mercado en el paso del tiempo y así, lograr ajustar las estrategias dependiendo de las características del mismo.