Introducción

La ciencia de datos es una herramienta muy poderosa actualmente, con una base de datos podemos llegar a descubrir patrones, tendencias, modas y a su vez, tomar decisiones basadas en ese análisis hecho previamente. La realización de este reporte le va a permitir a la empresa B&C (Bines y Casas) que es una agencia de bienes raíces que opera en la ciudad de Cali, tener información basada en los datos de tipo de vivienda más ofertada, diferentes precios de vivienda y otras características relevantes en el negocio, además este informe incluirá un análisis estadístico que le servirá a la empresa para la toma de decisiones sobre su negocio con el fin de desarrollar nuevas estrategias, mejorar el servicio y poder aumentar su nicho de mercado.

En este contexto, el presente documento se propone mostrar detalladamente el cómo se realizó el informe estadístico incorporando la minerìıa de datos y diferentes metodos para un análisis completo de los datos registrados que sea de interés para la empresa B&C, destacando la aplicación práctica de estas herramientas para identificar patrones y otorgar un valor significativo a los datos en distintos escenarios industriales.

Contamos con la información recopilada por la empresa B&C sobre viviendas en Cali, el dataframe contine 13 columnas que son las siguientes: id. zona del ciudad, piso, estrato, precio metro cuadrado, area construida, numero de parqueaderos, número de baños, número de habitaciones, tipo de vivienda, barrio, longitud, latitud.

head(vivienda_faltantes)
##     id       zona piso estrato preciom areaconst parquea banios habitac
## 1 8312 Zona Oeste    4       6    1300       318       2      4       2
## 2 8311 Zona Oeste    1       6     480       300       1      4       4
## 3 8307 Zona Oeste   NA       5    1200       800       4      7       5
## 4 8296   Zona Sur    2       3     220       150       1      2       4
## 5 8297 Zona Oeste   NA       5     330       112       2      4       3
## 6 8298   Zona Sur   NA       5    1350       390       8     10      10
##          tipo           barrio longitud latitud
## 1 Apartamento         arboleda   -76576    3454
## 2        Casa        normandía   -76571    3454
## 3        Casa       miraflores   -76568    3455
## 4        Casa        el guabal   -76565    3417
## 5        Casa bella suiza alta   -76565    3408
## 6        Casa bella suiza alta   -76565    3409

Análisis descriptivo

En este punto, podemos hacer un análisis descriptivo de los datos hasta el momento, para poder comprender un poco más sobre la distribucion y los patrones de los datos. Por ejemplo:

hist(vivienda_faltantes$precio, main = "Histograma de Precio")

Gráfico de frecuencia por zona

barplot(table(vivienda_faltantes$zona), main = "Frecuencia de Zonas")

table(vivienda_faltantes$zona)
## 
##  Zona Centro   Zona Norte   Zona Oeste Zona Oriente     Zona Sur 
##          124         1922         1204          351         4726

Diagrama de dispersion de precio por área construida

plot(vivienda_faltantes$precio, vivienda_faltantes$areacontruida, 
     xlab = "Precio", ylab = "Área Construida", 
     main = "Precio vs. Área Construida")

Objetivos

Objetivo general

El objetivo de este informe es realizar un análisis descriptivo en base a los datos recolectados por La empresa B&C, identificando el comportamiento de la venta de las viviendas en Cali.

Objetivos específicos

  • Crear un informe estadístico sobre los datos recolectados para identificar factores clave que le permita tomar decisiones de negocio a la empresa B&C tales como establecer precios de venta, servicios personalizados, hasta estrategias de marketing.
  • Hacer uso de las herramientas de análisis de datos y crear gráficos que contengan información que permita a los directivos de la empresa tomar decisiones.

Métodos

La metodología usada fue CRISP-DM (CRoss Industry Standard Process for Data Mining: Procedimiento Industrial Estándar para realizar Minería de Datos) en donde se realizan los siguientes pasos:

En cada etapa del proceso se explicará que paso fue realizado pues dado los datos recolectados no fue necesario realizar algunos pasos en nuestro informe como fusión de datos o normalización.

Después de realizar la importación y visualización de los datos mostrado anteriormente, el siguiente paso fue realizar un análisis sobre las variables de la información, es por esto que se realizó una exploración sobre las columnas con datos vacios en el dataframe.

colSums(is.na(vivienda_faltantes))
##        id      zona      piso   estrato   preciom areaconst   parquea    banios 
##         3         3      2641         3         2         3      1606         3 
##   habitac      tipo    barrio  longitud   latitud 
##         3         3         3         3         3

Luego, por la naturaleza del problema eliminamos las filas donde las columnas id, zona, estrato, preciom, areaconst, banios, habitac, tipo, barrio, longitud y latitud estuvieran vacios ya que a diferencia de las variables piso o parquea que pueden ir vacios, es importante que estas variables tomen un valor pues en caso contrario no aportarían al análisis y si crea un sesgo en los resultados.

columnas_interes <- c("id", "zona", "estrato", "preciom", "areaconst", "banios", "habitac", "tipo", "barrio", "longitud", "latitud")
datos_filtrados <- vivienda_faltantes[complete.cases(vivienda_faltantes[columnas_interes]), ]
colSums(is.na(datos_filtrados))
##        id      zona      piso   estrato   preciom areaconst   parquea    banios 
##         0         0      2638         0         0         0      1603         0 
##   habitac      tipo    barrio  longitud   latitud 
##         0         0         0         0         0

Con los datos limpios y elimanado los valores nulos, procedemos a hacer un análisis de las columnas de los datos que nos pueda dar más información sobre la media, mediana, moda, valores minimos y máximos.

summary(datos_filtrados)
##        id           zona                piso           estrato     
##  Min.   :   1   Length:8327        Min.   : 1.000   Min.   :3.000  
##  1st Qu.:2082   Class :character   1st Qu.: 2.000   1st Qu.:4.000  
##  Median :4164   Mode  :character   Median : 3.000   Median :5.000  
##  Mean   :4164                      Mean   : 3.772   Mean   :4.634  
##  3rd Qu.:6246                      3rd Qu.: 5.000   3rd Qu.:5.000  
##  Max.   :8319                      Max.   :12.000   Max.   :6.000  
##                                    NA's   :2638                    
##     preciom         areaconst       parquea           banios      
##  Min.   :  58.0   Min.   :  30   Min.   : 1.000   Min.   : 0.000  
##  1st Qu.: 220.0   1st Qu.:  80   1st Qu.: 1.000   1st Qu.: 2.000  
##  Median : 330.0   Median : 123   Median : 2.000   Median : 3.000  
##  Mean   : 434.3   Mean   : 175   Mean   : 1.836   Mean   : 3.112  
##  3rd Qu.: 540.0   3rd Qu.: 229   3rd Qu.: 2.000   3rd Qu.: 4.000  
##  Max.   :1999.0   Max.   :1745   Max.   :10.000   Max.   :10.000  
##                                  NA's   :1603                     
##     habitac           tipo              barrio             longitud        
##  Min.   : 0.000   Length:8327        Length:8327        Min.   :-76576.00  
##  1st Qu.: 3.000   Class :character   Class :character   1st Qu.:-76506.00  
##  Median : 3.000   Mode  :character   Mode  :character   Median :   -76.54  
##  Mean   : 3.605                                         Mean   :-21845.13  
##  3rd Qu.: 4.000                                         3rd Qu.:   -76.52  
##  Max.   :10.000                                         Max.   :   -76.46  
##                                                                            
##     latitud        
##  Min.   :   3.333  
##  1st Qu.:   3.390  
##  Median :   3.450  
##  Mean   : 970.370  
##  3rd Qu.:3367.000  
##  Max.   :3497.000  
## 

Con esta información podemos analizar en algunos campos de interés tendencias muy marcadas, como por ejemplo ¿Cuál es el estrato mas común en las viviendas de Cali?

frecuencia_estratos <- table(datos_filtrados$estrato)
barplot(frecuencia_estratos, 
        main = "Distribución del número de viviendas por estrato",
        xlab = "Estrato",
        ylab = "Número de viviendas")

¿Por cada sector cuantas viviendas de cada estrato hay?

frecuencia_estrato_sector <- table(datos_filtrados$estrato, datos_filtrados$zona)
barplot(frecuencia_estrato_sector, 
        beside = TRUE, 
        legend.text = TRUE, 
        col = rainbow(nrow(frecuencia_estrato_sector)),
        main = "Cantidad de viviendas por estrato y sector",
        xlab = "Sector",
        ylab = "Cantidad de viviendas")

legend("topright", 
       legend = rownames(frecuencia_estrato_sector), 
       fill = rainbow(nrow(frecuencia_estrato_sector)))

¿Cuantas habitaciones, parqueaderos y banios tienen en promedio tiene una vivienda en cada estrato en Cali?

promedios_por_estrato <- aggregate(cbind(habitac, banios, parquea) ~ estrato, data = datos_filtrados, FUN = mean)
barplot(t(as.matrix(promedios_por_estrato[, -1])), 
        beside = TRUE, 
        col = c("blue", "green", "red"),
        legend.text = c("Habitaciones", "Baños", "Parqueaderos"),
        args.legend = list(title = "Características"),
        main = "Promedio de Habitaciones, Baños y Parqueaderos por Estrato",
        xlab = "Estrato", 
        ylab = "Promedio",
        names.arg = promedios_por_estrato$estrato)

¿Cuál es el promedio del área construida de una vivienda por estrato?

promedio_m2_por_estrato <- aggregate(areaconst ~ estrato, data = datos_filtrados, FUN = mean)
barplot(promedio_m2_por_estrato$areaconst, 
        names.arg = promedio_m2_por_estrato$estrato,
        col = "lightgreen",
        main = "Promedio de metros cuadrados por vivienda en cada estrato",
        xlab = "Estrato",
        ylab = "Promedio de metros cuadrados por vivienda")

¿Cuál es el valor promedio del área construida de una vivienda por estrato?

precio_medio_m2_estrato <- aggregate(preciom / areaconst ~ estrato, data = datos_filtrados, FUN = mean)
barplot(precio_medio_m2_estrato[, 2], 
        names.arg = precio_medio_m2_estrato[, 1],
        col = "skyblue",
        main = "Precio medio del metro cuadrado por estrato",
        xlab = "Estrato",
        ylab = "Precio medio del metro cuadrado en millones(COP)")

¿Cuál es tipo de apartamento más frecuente por estrato?

frecuencia_tipo_apartamento <- table(datos_filtrados$tipo, datos_filtrados$estrato)
tipo_apartamento_mas_frecuente <- apply(frecuencia_tipo_apartamento, 2, function(x) names(which.max(x)))
barplot(frecuencia_tipo_apartamento, 
        beside = TRUE, 
        legend.text = TRUE, 
        col = rainbow(nrow(frecuencia_tipo_apartamento)),
        main = "Tipo de apartamento más frecuente por estrato",
        xlab = "Estrato",
        ylab = "Frecuencia")

legend("topright", 
       legend = rownames(frecuencia_tipo_apartamento), 
       fill = rainbow(nrow(frecuencia_tipo_apartamento)))

Resultados

- Precio de las viviendas en diferentes zonas de Cali.

library(ggplot2)
ggplot(datos_filtrados, aes(x = zona, y = preciom)) +
  geom_boxplot() +
  labs(title = "Precio de viviendas por zona en Cali")

- Tipo de viviendas más ofertadas en Cali.

tipo_ofertas <- table(datos_filtrados$tipo)
barplot(tipo_ofertas, main = "Tipo de viviendas más ofertadas en Cali")

Aquí nos damos cuenta que los datos tienen un sesgo, pues Apartamento, APARTAMENTO o apto es el mismo tipo de vivienda, igual sucede con Casa, CASA o casa. Por lo que para tener datos reales homologamos estos tipos de zonas como valores equivalentes.

datos_filtrados$tipo <- tolower(datos_filtrados$tipo)
datos_filtrados$tipo[datos_filtrados$tipo %in% c("apartamento", "apto")] <- "apartamento"
datos_filtrados$tipo[datos_filtrados$tipo %in% c("casa")] <- "casa"
tipo_ofertas <- table(datos_filtrados$tipo)
barplot(tipo_ofertas, main = "Tipo de viviendas más ofertadas en Cali")

Para un total de 5106 apartamentos y 3221 casas.

conteo_tipos <- table(datos_filtrados$tipo)
print(conteo_tipos)
## 
## apartamento        casa 
##        5106        3221

- Características más relevantes de la oferta de vivienda en Cali.

Los factores más determinantes a la hora de adquirir una vivienda o vendarla son los beneficios con las que esta cuenta, por ejemplo, el zona, estrato, el area construida, el precio del metro cuadrado, el numero de parqueaderos y de habitaciones. Por lo que, analizar estas variables a detalle nos darian más informacion relevante sobre las tendencias y patrones de interés para la empresa B&C.

summary(datos_filtrados$zona)
##    Length     Class      Mode 
##      8327 character character
summary(datos_filtrados$estrato)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   3.000   4.000   5.000   4.634   5.000   6.000
summary(datos_filtrados$areaconst)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##      30      80     123     175     229    1745
summary(datos_filtrados$preciom)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    58.0   220.0   330.0   434.3   540.0  1999.0
summary(datos_filtrados$paquea)
## Length  Class   Mode 
##      0   NULL   NULL
summary(datos_filtrados$habitac)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.000   3.000   3.000   3.605   4.000  10.000

Discusión

Durante todo el análisis nos centramos en responder preguntas de interés para la empresa que giren entorno a las variables más importantes para la venta de un inmueble en la ciudad de Cali para poder centrar los esfuerzos de la compañia en adquirir propiedades que sean más sencillas de vender según los patrones encontrados en la información recopilada. Es por esto que, la zona, estrato, precio metro cuadrado, área construida, número de parqueaderos, número habitaciones y baños, asi como el sector son fundamentales en la toma de decisiones para la compra o venta de un inmueble. Por lo que, la compañia deberia centrarse más en los inmuebles que tengan las características más comunes y rentables para que de esta manera puedan diseñar mejores campañas de marketing, asi como servicios personalizados, definir nicho y sectores de inversión y establecer precios de venta según cada propiedad y servicios ofrecidos.

Conclusiones

En conclusion, teniendo en cuenta la distribución por zonas, los servicios ofrecidos por cada inmueble, el precio por metro cuadrado y el estrato. La compañia B&C debería centrarse en las zona sur y norte. En propiedades de estrato 5 y 4, con un área construida de 120 a 160 mts y un precio promedio de 2.7 millones. Dada la densidad en estas zonas dirigir sus esfuerzos a este nicho, las campañas de marketing y los servicios personalizados conociendo de antemano por cada estrato cuales son los servicios más comunes en cada tipo de vivienda.

Anexos

ModernDive

Authoring Books and Technical Documents with R Markdown

R for Data Science