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.
# devtools::install_github("centromagis/paqueteMODELOS", force = TRUE)
library(paqueteMODELOS)
library(FactoMineR)
library(factoextra)
library(cluster)
library(tidyverse)
library(mice)
library(fpc)
library(corrplot)
library(gridExtra)
library(pander)
library(ggdendro)
library(skimr)
Se procede a cargar los datos
data("vivienda")
head(vivienda)
## # 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>
Se inicia con un resumen descriptivo de los datos contenidos en el dataframe de vivienda
skim(vivienda)
Name | vivienda |
Number of rows | 8322 |
Number of columns | 13 |
_______________________ | |
Column type frequency: | |
character | 4 |
numeric | 9 |
________________________ | |
Group variables | None |
Variable type: character
skim_variable | n_missing | complete_rate | min | max | empty | n_unique | whitespace |
---|---|---|---|---|---|---|---|
zona | 3 | 1.00 | 8 | 12 | 0 | 5 | 0 |
piso | 2638 | 0.68 | 2 | 2 | 0 | 12 | 0 |
tipo | 3 | 1.00 | 4 | 11 | 0 | 2 | 0 |
barrio | 3 | 1.00 | 4 | 29 | 0 | 436 | 0 |
Variable type: numeric
skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
---|---|---|---|---|---|---|---|---|---|---|
id | 3 | 1.00 | 4160.00 | 2401.63 | 1.00 | 2080.50 | 4160.00 | 6239.50 | 8319.00 | ▇▇▇▇▇ |
estrato | 3 | 1.00 | 4.63 | 1.03 | 3.00 | 4.00 | 5.00 | 5.00 | 6.00 | ▅▆▁▇▆ |
preciom | 2 | 1.00 | 433.89 | 328.65 | 58.00 | 220.00 | 330.00 | 540.00 | 1999.00 | ▇▂▁▁▁ |
areaconst | 3 | 1.00 | 174.93 | 142.96 | 30.00 | 80.00 | 123.00 | 229.00 | 1745.00 | ▇▁▁▁▁ |
parqueaderos | 1605 | 0.81 | 1.84 | 1.12 | 1.00 | 1.00 | 2.00 | 2.00 | 10.00 | ▇▁▁▁▁ |
banios | 3 | 1.00 | 3.11 | 1.43 | 0.00 | 2.00 | 3.00 | 4.00 | 10.00 | ▇▇▃▁▁ |
habitaciones | 3 | 1.00 | 3.61 | 1.46 | 0.00 | 3.00 | 3.00 | 4.00 | 10.00 | ▂▇▂▁▁ |
longitud | 3 | 1.00 | -76.53 | 0.02 | -76.59 | -76.54 | -76.53 | -76.52 | -76.46 | ▁▅▇▂▁ |
latitud | 3 | 1.00 | 3.42 | 0.04 | 3.33 | 3.38 | 3.42 | 3.45 | 3.50 | ▃▇▅▇▅ |
El precio promedio de las viviendas es de 433.89 millones de COP, con una desviación estándar de 328.65 millones, lo que indica una gran variabilidad en los precios. Por el histograma generado se observa que la distribución de precios tiene un sesgo positivo, con algunos precios muy altos que elevan la media en comparación con la mediana. Por otra parte la variable de estrato solo incluye datos de viviendas clasificadas entre 3 y 6. Los precios de las viviendas consideradas varían de 58 a 1999 millones de COP, y las áreas construidas van desde 30 hasta 1745 metros cuadrados. Se observa que 1605 viviendas no especifican si tienen parqueaderos, aunque algunas registran hasta 10. También se ha notado que hay viviendas sin información sobre baños ni habitaciones, lo que podría indicar la necesidad de limpiar los datos, ya que estos registros podrían no ser relevantes para el análisis. Finalmente, se aclarará que el análisis se llevará a cabo sobre 8322 viviendas urbanas en una ciudad específica.
Para analizar las variables de tipo “character” se realizara lo siguiente:
vivienda %>%
group_by(zona) %>%
summarise(n = n(), .groups = "drop") %>%
mutate(total = sum(n),
porcentaje = (n / total) * 100) %>%
arrange(desc(n))
## # A tibble: 6 × 4
## zona n total porcentaje
## <chr> <int> <int> <dbl>
## 1 Zona Sur 4726 8322 56.8
## 2 Zona Norte 1920 8322 23.1
## 3 Zona Oeste 1198 8322 14.4
## 4 Zona Oriente 351 8322 4.22
## 5 Zona Centro 124 8322 1.49
## 6 <NA> 3 8322 0.0360
vivienda %>%
group_by(tipo) %>%
summarise(n = n(), .groups = "drop") %>%
mutate(total = sum(n),
porcentaje = (n / total) * 100) %>%
arrange(desc(n))
## # A tibble: 3 × 4
## tipo n total porcentaje
## <chr> <int> <int> <dbl>
## 1 Apartamento 5100 8322 61.3
## 2 Casa 3219 8322 38.7
## 3 <NA> 3 8322 0.0360
Se nota que la mayoría de las viviendas están situadas en las zonas Sur, Norte y Oeste de la ciudad, con aproximadamente el 57% de ellas ubicadas en la zona Sur. Además, la base de datos tiene más registros de apartamentos que de casas.
vivienda %>%
group_by(piso) %>%
summarise(n = n(), .groups = "drop") %>%
mutate(total = sum(n),
porcentaje = (n / total) * 100) %>%
arrange(desc(n))
## # A tibble: 13 × 4
## piso n total porcentaje
## <chr> <int> <int> <dbl>
## 1 <NA> 2638 8322 31.7
## 2 02 1450 8322 17.4
## 3 03 1097 8322 13.2
## 4 01 860 8322 10.3
## 5 04 607 8322 7.29
## 6 05 567 8322 6.81
## 7 06 245 8322 2.94
## 8 08 211 8322 2.54
## 9 07 204 8322 2.45
## 10 09 146 8322 1.75
## 11 10 130 8322 1.56
## 12 11 84 8322 1.01
## 13 12 83 8322 0.997
vivienda %>%
group_by(barrio) %>%
summarise(n = n(), .groups = "drop") %>%
mutate(total = sum(n),
porcentaje = (n / total) * 100) %>%
arrange(desc(n))
## # A tibble: 437 × 4
## barrio n total porcentaje
## <chr> <int> <int> <dbl>
## 1 valle del lili 1008 8322 12.1
## 2 ciudad jardín 516 8322 6.20
## 3 pance 409 8322 4.91
## 4 la flora 366 8322 4.40
## 5 santa teresita 262 8322 3.15
## 6 el caney 208 8322 2.50
## 7 el ingenio 202 8322 2.43
## 8 la hacienda 164 8322 1.97
## 9 acopi 158 8322 1.90
## 10 los cristales 154 8322 1.85
## # ℹ 427 more rows
Se observa que los pisos 2 y 3 son los más comunes en las ofertas, aunque la información sobre el piso no siempre está incluida en los anuncios de las viviendas. Ademas, que el barrio Valle del Lili tiene la mayor cantidad de viviendas disponibles en el mercado.
Aunque se podrían realizar varios cruces de variables para el análisis, se propone comenzar con un análisis de componentes principales. Este método reducirá la cantidad de variables manteniendo la información esencial, facilitando la interpretación de los resultados y ayudando a identificar las variables más influyentes en la variabilidad de los datos. También ofrecerá una visión más clara de las posibles correlaciones entre las variables.
Primero se llevará a cabo una selección de las variables numéricas, seguido de un análisis de datos faltantes, dado que esta metodología requiere únicamente valores numéricos y no admite la presencia de datos faltantes.
vivienda_new = vivienda[,c(4:9)]
md.pattern(vivienda_new, rotate.names = TRUE)
## preciom estrato areaconst banios habitaciones parqueaderos
## 6717 1 1 1 1 1 1 0
## 1602 1 1 1 1 1 0 1
## 1 1 0 0 0 0 0 5
## 2 0 0 0 0 0 0 6
## 2 3 3 3 3 1605 1619
En resumen, se puede concluir lo siguiente:
La variable “parqueaderos” tiene datos faltantes en el 19% de los registros. Dado que se considera crucial para determinar el precio de las viviendas, se decide eliminar los registros con datos incompletos. Esto permitirá crear un conjunto de datos sin valores ausentes.
# Elimina las filas con datos faltantes
vivienda_new <- na.omit(vivienda_new)
# Ahora 'vivienda_new' no tiene filas con datos faltantes
md.pattern(vivienda_new, rotate.names = TRUE)
## /\ /\
## { `---' }
## { O O }
## ==> V <== No need for mice. This data set is completely observed.
## \ \|/ /
## `-----'
## estrato preciom areaconst parqueaderos banios habitaciones
## 6717 1 1 1 1 1 1 0
## 0 0 0 0 0 0 0
Para evitar que las variables con escalas de valores más grandes influyan de manera desproporcionada en las estimaciones, se estandarizan las variables antes de iniciar el proceso de estimación de los componentes principales. Este paso garantiza que todas las variables aporten de manera equilibrada al análisis, independientemente de su escala original.
viviendaZ = vivienda_new %>%
scale()
head(viviendaZ)
## estrato preciom areaconst parqueaderos banios habitaciones
## [1,] -1.9279348 -0.6532909 -0.7712458 -0.7424551 -0.1850976 1.7511897
## [2,] -1.9279348 -0.4443626 -0.4242642 -0.7424551 -0.9096316 -0.4477275
## [3,] -1.9279348 -0.3548218 0.2696991 0.1465058 -0.9096316 0.2852449
## [4,] -0.8746661 -0.2055873 0.6860770 1.0354668 1.2639704 -0.4477275
## [5,] 0.1786025 -0.6234440 -0.6324532 -0.7424551 -0.9096316 -0.4477275
## [6,] 0.1786025 -0.6831378 -0.6532721 -0.7424551 -0.1850976 -0.4477275
Ahora se procede a realizar la estimación de las componentes principales
prcomp(viviendaZ)
## Standard deviations (1, .., p=6):
## [1] 1.8664857 1.1059274 0.7067478 0.5996120 0.4943519 0.4355974
##
## Rotation (n x k) = (6 x 6):
## PC1 PC2 PC3 PC4 PC5 PC6
## estrato 0.2953982 -0.6377404 0.5431029 0.07074563 0.4349440 -0.1299429
## preciom 0.4704788 -0.2394751 -0.1081038 -0.29100096 -0.2659341 0.7444545
## areaconst 0.4502724 0.2044012 -0.2594726 -0.65721148 0.3038390 -0.4048503
## parqueaderos 0.4278010 -0.1513045 -0.6161907 0.62045124 0.1192404 -0.1233864
## banios 0.4652553 0.1598972 0.3695544 0.14075513 -0.6782753 -0.3762054
## habitaciones 0.2986104 0.6676068 0.3313085 0.27132051 0.4165440 0.3290044
res.pca <- prcomp(viviendaZ)
fviz_eig(res.pca, addlabels = TRUE)
En este caso, el primer componente principal captura el 58.1% de la variabilidad en la base de datos, y al considerar los dos primeros componentes, se explica el 78.5% de la variabilidad total. Esto sugiere que gran parte de la variabilidad de los datos puede resumirse utilizando solo una variable (PC1), que se obtiene a través de una combinación lineal de las variables originales.
fviz_pca_var(res.pca,
col.var = "contrib", # Color by contributions to the PC
gradient.cols = c("#FF7F00", "#034D94"),
repel = TRUE # Avoid text overlapping
)
El círculo de correlaciones en el primer plano factorial revela varias relaciones significativas entre las variables. Se observa una alta correlación entre el precio de las viviendas y el número de parqueaderos, lo que indica que las viviendas con más parqueaderos tienden a tener precios más elevados.
De manera similar, el área construida y el número de baños también están altamente correlacionados, sugiriendo que las viviendas con mayor área construida suelen tener más baños.
En contraste, las variables “habitaciones” y “estrato” presentan una baja correlación, casi formando un ángulo recto en el círculo de correlaciones. No obstante, a pesar de esta baja correlación, ambas variables tienen una alta contribución al primer componente principal. Esto indica que, aunque no estén fuertemente relacionadas entre sí, son importantes para explicar la variabilidad en los datos y también están significativamente asociadas con el segundo componente principal.
Cabe destacar que, entre todas las variables, “parqueaderos” es la que menos contribuye al primer componente principal.
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.
cor(vivienda_new)
## estrato preciom areaconst parqueaderos banios
## estrato 1.00000000 0.5876109 0.2591140 0.4226084 0.3950842
## preciom 0.58761094 1.0000000 0.6839831 0.6886785 0.6719967
## areaconst 0.25911395 0.6839831 1.0000000 0.5848290 0.6671746
## parqueaderos 0.42260837 0.6886785 0.5848290 1.0000000 0.5705065
## banios 0.39508418 0.6719967 0.6671746 0.5705065 1.0000000
## habitaciones -0.08049567 0.2670210 0.5339207 0.2844808 0.5969167
## habitaciones
## estrato -0.08049567
## preciom 0.26702104
## areaconst 0.53392073
## parqueaderos 0.28448076
## banios 0.59691671
## habitaciones 1.00000000
corrplot(cor(vivienda_new))
Antes de comenzar la construcción de clústeres, es importante verificar que la matriz de correlación sea consistente con lo mostrado en el círculo de correlaciones. En particular, se observa que el número de habitaciones tiene la menor correlación con el precio, un aspecto que merece un análisis más detallado en relación con las variables que determinan el precio de una vivienda. La hipótesis es que la variable “habitaciones” podría estar mal especificada en los datos o que, en realidad, el número de habitaciones no influye en el precio de la vivienda. Esto se debe a que, en todos los estratos y tipos de viviendas, el número de habitaciones tiende a ser similar.
Ahora se construyen los clústers.
# PCA
res.pca <- PCA(vivienda_new, graph = FALSE, scale.unit = TRUE )
# Calculamos la distancia euclidiana
distancia <- dist(res.pca$ind$coord, method = "euclidean")
# Cluster
res.HCPC <- HCPC(res.pca, nb.clust=4)
Para validar si k=4 es el mejor número de clústers a seleccionar se
utiliza el siguiente gráfico
# Método del codo
wss <- sapply(1:10, function(k){kmeans(res.pca$ind$coord, k)$tot.withinss})
plot(1:10, wss, type="b", pch = 19, frame = FALSE,
xlab="Número de clusters K", ylab="Total within-clusters sum of squares")
# Realizamos el clustering jerárquico
res.hclust <- hclust(distancia, method = "ward.D2")
# Calculamos el índice de Calinski-Harabasz para diferentes números de clusters
ch <- c()
for (k in 2:10) {
cluster_assignments <- cutree(res.hclust, k)
ch[k] <- cluster.stats(distancia, cluster_assignments)$ch
}
# Graficamos el índice de Calinski-Harabasz
plot(2:10, ch[2:10], type = "b", xlab = "Número de clusters", ylab = "Índice de Calinski-Harabasz")
Tanto el método del codo como el índice de Calinski-Harabasz indican que seleccionar k=4 es adecuado para determinar el número óptimo de clústeres.
A continuación, se procederá a analizar las características de cada clúster.
# Caracteristicas de las viviendas
res.HCPC$desc.var
##
## Link between the cluster variable and the quantitative variables
## ================================================================
## Eta2 P-value
## estrato 0.5115513 0
## preciom 0.7088112 0
## areaconst 0.5796944 0
## parqueaderos 0.5840964 0
## banios 0.5968006 0
## habitaciones 0.5470108 0
##
## Description of each cluster by quantitative variables
## =====================================================
## $`1`
## v.test Mean in category Overall mean sd in category Overall sd
## habitaciones -37.39526 2.938025 3.610838 0.6547489 1.3642062
## estrato -43.74113 4.282763 4.830430 0.7338314 0.9493547
## areaconst -45.10955 95.413289 181.136408 44.9919667 144.0891185
## parqueaderos -45.22423 1.164300 1.835194 0.3884100 1.1248251
## preciom -50.47409 245.865074 468.880601 84.1922536 335.0181418
## banios -56.29631 2.230794 3.255471 0.6171589 1.3800948
## p.value
## habitaciones 4.666398e-306
## estrato 0.000000e+00
## areaconst 0.000000e+00
## parqueaderos 0.000000e+00
## preciom 0.000000e+00
## banios 0.000000e+00
##
## $`2`
## v.test Mean in category Overall mean sd in category Overall sd
## estrato 42.077915 5.566683 4.830430 0.5205347 0.9493547
## banios 13.176047 3.590620 3.255471 0.8522908 1.3800948
## preciom 12.042189 543.236932 468.880601 198.1223143 335.0181418
## parqueaderos 9.764005 2.037616 1.835194 0.5468315 1.1248251
## areaconst -3.555174 171.695012 181.136408 68.3998397 144.0891185
## habitaciones -9.294717 3.377137 3.610838 0.7061908 1.3642062
## p.value
## estrato 0.000000e+00
## banios 1.205430e-39
## preciom 2.132208e-33
## parqueaderos 1.606820e-22
## areaconst 3.777294e-04
## habitaciones 1.475982e-20
##
## $`3`
## v.test Mean in category Overall mean sd in category Overall sd
## habitaciones 53.97947 6.119110 3.610838 1.5927523 1.3642062
## banios 25.61148 4.459424 3.255471 1.2962603 1.3800948
## areaconst 23.70205 297.464071 181.136408 116.3119806 144.0891185
## estrato -22.07833 4.116492 4.830430 0.8207328 0.9493547
## p.value
## habitaciones 0.000000e+00
## banios 1.136501e-144
## areaconst 3.434430e-124
## estrato 5.106609e-108
##
## $`4`
## v.test Mean in category Overall mean sd in category Overall sd
## preciom 61.12031 1144.574257 468.880601 350.4752529 335.0181418
## parqueaderos 55.95538 3.912129 1.835194 1.5199829 1.1248251
## areaconst 51.02315 423.738416 181.136408 200.3409117 144.0891185
## banios 42.62754 5.196782 3.255471 1.2225762 1.3800948
## estrato 29.03747 5.740099 4.830430 0.5211146 0.9493547
## habitaciones 17.77226 4.410891 3.610838 1.3047818 1.3642062
## p.value
## preciom 0.000000e+00
## parqueaderos 0.000000e+00
## areaconst 0.000000e+00
## banios 0.000000e+00
## estrato 2.215129e-185
## habitaciones 1.159203e-70
Para interpretar los clústeres, es crucial comprender los signos positivos o negativos que cada valor muestra en el v.test.
Interpretar y analizar los clústeres de esta manera es la forma más efectiva de segmentar las viviendas. Esto permite tomar decisiones informadas que impactan la compra y venta de propiedades, y facilita la construcción de un catálogo inmobiliario que, según la metodología de negocio utilizada, permitirá seleccionar el nicho más adecuado para trabajar.
Examinar la relación entre las variables categóricas (tipo de vivienda, zona y estrato), para identificar patrones de comportamiento de la oferta en mercado inmobiliario.
# Datos categoricos
vivienda_new_2 = vivienda[,c(10,2,4)]
vivienda_new_2 <- vivienda %>%
select(c(10,2,4)) %>%
mutate(across(everything(), as.factor))
head(vivienda_new_2)
## # A tibble: 6 × 3
## tipo zona estrato
## <fct> <fct> <fct>
## 1 Casa Zona Oriente 3
## 2 Casa Zona Oriente 3
## 3 Casa Zona Oriente 3
## 4 Casa Zona Sur 4
## 5 Apartamento Zona Norte 5
## 6 Apartamento Zona Norte 5
Se revisan datos faltantes
md.pattern(vivienda_new_2, rotate.names = TRUE)
## tipo zona estrato
## 8319 1 1 1 0
## 3 0 0 0 3
## 3 3 3 9
Se observa que:
Dado que la cantidad de datos faltantes es mínima, se opta por eliminarlos.
vivienda_new_2 <- na.omit(vivienda_new_2)
# Ahora 'vivienda_new_2' no tiene filas con datos faltantes
md.pattern(vivienda_new_2, rotate.names = TRUE)
## /\ /\
## { `---' }
## { O O }
## ==> V <== No need for mice. This data set is completely observed.
## \ \|/ /
## `-----'
## tipo zona estrato
## 8319 1 1 1 0
## 0 0 0 0
tabla <- table(vivienda_new_2$tipo, vivienda_new_2$zona)
tabla
##
## Zona Centro Zona Norte Zona Oeste Zona Oriente Zona Sur
## Apartamento 24 1198 1029 62 2787
## Casa 100 722 169 289 1939
chisq.test(tabla)
##
## Pearson's Chi-squared test
##
## data: tabla
## X-squared = 690.93, df = 4, p-value < 2.2e-16
El resultado indica que se rechaza la hipótesis de independencia de las variables (p-value: 0.0000), indicando grado tipo de relación entre ellas.
tabla2 <- table(vivienda_new_2$tipo, vivienda_new_2$estrato)
tabla2
##
## 3 4 5 6
## Apartamento 639 1404 1766 1291
## Casa 814 725 984 696
chisq.test(tabla2)
##
## Pearson's Chi-squared test
##
## data: tabla2
## X-squared = 224.33, df = 3, p-value < 2.2e-16
El resultado indica que se rechaza la hipótesis de independencia de las variables (p-value: 0.0000), indicando grado tipo de relación entre ellas.
tabla3 <- table(vivienda_new_2$zona, vivienda_new_2$estrato)
tabla3
##
## 3 4 5 6
## Zona Centro 105 14 4 1
## Zona Norte 572 407 769 172
## Zona Oeste 54 84 290 770
## Zona Oriente 340 8 2 1
## Zona Sur 382 1616 1685 1043
chisq.test(tabla3)
##
## Pearson's Chi-squared test
##
## data: tabla3
## X-squared = 3830.4, df = 12, p-value < 2.2e-16
El resultado indica que se rechaza la hipótesis de independencia de las variables (p-value: 0.0000), indicando grado tipo de relación entre ellas.
resultados_ac_ZE <- CA(tabla3)
El gráfico permite establecer relaciones y validarlas como son:
fviz_screeplot(resultados_ac_ZE, addlabels = TRUE, ylim = c(0, 80))+ggtitle("")+
ylab("Porcentaje de varianza explicado") + xlab("Ejes")
Las variables se representan en los 2 primeros ejes, siendo la suma de ambas el 100% de la variabilidad.
El análisis de componentes principales es un método que proporciona una excelente visión general del estado de las viviendas. En este caso, se utilizan diversas variables numéricas para identificar correlaciones entre ellas, especialmente en relación con la variación de los precios. Esto nos permite determinar cuáles son las variables más estrechamente vinculadas al valor de las viviendas y en qué medida influyen.
El análisis de conglomerados complementa el análisis de componentes principales al permitir la formación de grupos de viviendas con características similares. Estos grupos facilitan a la empresa la identificación de nichos de mercado, la definición de objetivos, y el enfoque en aspectos específicos de la venta de viviendas. Aunque se podría profundizar más en este análisis, la versión presentada en este informe ya ofrece una visión clara sobre las viviendas disponibles y sus características más destacadas.
Por último, el análisis de correspondencias, aunque sencillo, tiene algunas limitaciones cuando se trabaja con solo dos variables y puede ser menos útil si el número de categorías es muy grande. Sin embargo, es efectivo para identificar relaciones entre variables categóricas que no siempre son evidentes, lo cual es útil para responder preguntas específicas sobre las viviendas en función de estas variables.
El análisis facilita la identificación rápida de viviendas tanto en ubicaciones céntricas como en áreas periféricas. Por lo tanto, dirigir una estrategia bien definida hacia un nicho de mercado específico puede tener un impacto significativo en los resultados de venta.
Hay viviendas con características únicas, como un número reducido de habitaciones o baños, entre otros factores. Es importante considerar si el objetivo es vender a personas solteras, parejas casadas o dueños de mascotas para definir correctamente el nicho de mercado. De este modo, se pueden ofrecer viviendas que cumplan con un conjunto general de requisitos, tanto en cuanto a infraestructura como a ubicación.
Por último, hay viviendas de estrato medio con muy buena infraestructura que pueden ofrecer una alta rentabilidad. Estas propiedades pueden adquirirse a un precio razonable y venderse posteriormente a un valor más alto. Sin embargo, es esencial visitar estas viviendas, ya que es posible que el espacio no esté completamente terminado, lo que podría implicar costos adicionales.