El negocio de los bienes inmobiliarios se compone por 3 ejes fundamentales, Propietario – Agente de venta – Comprador, esta actividad comercial también comprende parámetros específicos de los inmuebles, sobre los cuales se hará una posible inversión. Es ahí donde los agentes inmobiliarios juegan un papel primordial para captar clientes; pues conocen el mercado, su oferta y demanda, que son de vital importancia para realizar un trato comercial.
La empresa B&C con una experiencia de 10 años en el campo de los bienes raíces, y la cual en sus últimos periodos del 2021 y 2022 ha alcanzando alrededor de los 6000 millones de pesos en ventas, ha decidido recolectar información vital con ciertas características que se entregarán a un científico de datos para que realice un análisis descriptivo, y a partir de ello generar estrategias que aumenten la utilidad en este nicho de negocio.
En el sector productivo se encuentran inmersas varías áreas tales como organizaciones públicas, privadas, medianas y pequeñas empresas (MiPymes), independientes, fundaciones entre otros que ofrecen servicios tecnológicos, financieros, producción, comercio, innovación y más; de tal manera que hay una gama amplia donde aportar mediante la ciencia de datos. Las empresas existen desde muchos años atrás, muchas de ellas persisten en el tiempo, otras se transforman, otras se asocian y bastantes desaparecen. Es aquí donde las innovaciones tecnológicas y estar a la vanguardia de las ciencias permiten mejores avances industriales y de desarrollo.
Por tal motivo la Ciencia de datos nos permite que la actividad comercial a la que se dedica la empresa B&C se transforme, se adapte a nuevas estrategias de estudio de su información para satisfacer las necesidades de los clientes, el alma de un negocio. Partiendo de la recolección de datos de las viviendas disponibles para la venta en la ciudad de Cali, podemos usar las diferentes variables como precio, estrato, área de construcción, barrio de ubicación, inconstantes que durante la ejecución de un análisis descriptivo se puede conseguir resultados que aporten a la empresa y su nómina para alcanzar las metas.
Mediante la aplicación de técnicas estadísticas y de programación se indagará sobre la base de datos entregada la cual se denomina “VIVIENDA_FALTANTES”, la cual se debe organizar, limpiar, filtrar, describir, entre otros aspectos que nos arrojen información crucial para la toma de decisiones.
Incrementar las ventas para el año 2023 en la empresa B&C, pues se logró ver una perdida del 8 % aproximadamente en relación con las ganancias del 2021 al 2022
Aplicar la ciencia de datos como factor de vital aporte para el estudio financiero y de marketing de la empresa B&C
Facilitar las ventas a los agentes inmobiliarios pues con el análisis descriptivo pueden conocer información del mercado de los bienes raíces en la ciudad de Cali
Reducir la cantidad de viviendas disponibles para la venta en la ciudad de Cali, pues la empresa B&C generará estrategias que ayuden a consolidar inversiones
calcular el mejor perfil de venta de los apartamentos y casas de la ciudad de Cali, de acuerdo a variables estudiadas en la base de datos
Mejorar la utilidad y las ganancias
Evaluar alcance de la nomina si los 8 agentes de venta son suficientes o se requiere más talento humano
Recuperar cartera de clientes que buscan otros intermediarios de bienes raíces
En primera instancia el proyecto inicia con la argumentación e investigación de la línea de negocio, en este caso el sector financiero de bienes inmuebles, después de adquirir la base de datos vivienda_faltantes mediante una etapa de recolección, se proyecta una planeación del proyecto para el cual se da un tiempo estimado de duración del análisis exploratorio de los datos, como será el manejo, sus fuentes, la limpieza, la clasificación y la manipulación de dicha información.
También hay que tener en cuenta a futuro si la base de datos va a interactuar con otros sistemas para lo cual se debe tener en cuenta la compatibilidad en la estructura, por lo pronto la metodología de ordenamiento, limpieza, imputación de datos y el análisis descriptivo permite encontrar valores y resultados interesantes que ayudan a generar estrategias para no decaer en la venta de apartamentos y casas de la ciudad de Cali.
La base de datos se denomina vivienda_faltantes, se ha decidido ordenarla en forma ascendente con referencia a la columna id, y también se filtran las variables baños, habitaciones, zona, longitud y latitud, quedando así un total de 8 columnas de las 13 iniciales.
# muestra la base de datos vivienda_faltantes con las columnas seleccionadas
df1 <- df_ordenado [, c(1, 3, 4, 5, 6, 7, 10, 11)] En el dataframe df1 se encuentran datos en forma de texto, que contienen mayúsculas o abreviaciones de las palabras, por tanto se decide cambiar todo a la opción minúsculas, para que los resultados no muestren distintas formas de un mismo dato, ejemplo:
Apartamento, apto, APARTAMENTO.
# Convertir todos los datos en minúsculas, para Mayúsculas usa toupper en vez de tolower
df1 <- mutate_if(df1, is.character, tolower)
df2 <- df1| Name | df1 |
| Number of rows | 8330 |
| Number of columns | 8 |
| _______________________ | |
| Column type frequency: | |
| character | 2 |
| numeric | 6 |
| ________________________ | |
| Group variables | None |
Variable type: character
| skim_variable | n_missing | complete_rate | min | max | empty | n_unique | whitespace |
|---|---|---|---|---|---|---|---|
| tipo | 3 | 1 | 4 | 11 | 0 | 3 | 0 |
| barrio | 3 | 1 | 4 | 29 | 0 | 407 | 0 |
Variable type: numeric
| skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
|---|---|---|---|---|---|---|---|---|---|---|
| id | 3 | 1.00 | 4163.99 | 2403.93 | 1 | 2082.5 | 4164 | 6245.5 | 8319 | ▇▇▇▇▇ |
| piso | 2641 | 0.68 | 3.77 | 2.62 | 1 | 2.0 | 3 | 5.0 | 12 | ▇▃▁▁▁ |
| estrato | 3 | 1.00 | 4.63 | 1.03 | 3 | 4.0 | 5 | 5.0 | 6 | ▅▆▁▇▆ |
| preciom | 2 | 1.00 | 434.24 | 329.02 | 58 | 220.0 | 330 | 540.0 | 1999 | ▇▂▁▁▁ |
| areaconst | 3 | 1.00 | 174.99 | 142.95 | 30 | 80.0 | 123 | 229.0 | 1745 | ▇▁▁▁▁ |
| parquea | 1606 | 0.81 | 1.84 | 1.13 | 1 | 1.0 | 2 | 2.0 | 10 | ▇▁▁▁▁ |
En el resumen del marco de datos, se puede observar la identificación de variables de la siguiente manera:
Existen 6 de valor numérico, las cuales son: id, piso, estrato, preciom, areaconst, parquea
Existen 2 de texto, las cuales son: tipo y barrio ambas de carácter nominal
Seguidamente se calcula la existencia y el total de datos faltantes en la data VIVIENDA_FALTANTES la cual ha sido asignada anteriormente al dataframe df1
## [1] 4264
se puede osbervar que hay un total de datos perdidos de: (4264) _____________________________________________________________________________________________________________
Se observa el porcentaje de datos perdidos que tiene cada variable en relación al total de 8330 observaciones que posee cada columna.
La variable piso tiene un 31.70% de datos faltantes, que equivale a 2641 missing
La variable parquea tiene 19.30% de datos faltantes, que equivale a 1606 missing
de lo anterior se concluye que para ambas variables la imputación resulta dudosa, debería analizarse en conjunto con el equipo de expertos de la línea de negocio de venta de bienes inmuebles, para saber que tan conveniente es trabajar con ese porcentaje de datos faltantes.
##
## Variables sorted by number of missings:
## Variable Count
## piso 0.3170468187
## parquea 0.1927971188
## id 0.0003601441
## estrato 0.0003601441
## areaconst 0.0003601441
## tipo 0.0003601441
## barrio 0.0003601441
## preciom 0.0002400960
Existen varios métodos para la imputación de datos, en primera instancia debemos clasificarlos ya sea en datos faltantes completamente al azar (MCAR), datos faltantes al azar (MAR) o datos faltantes no aleatorios, luego de la clasificación se decide si se omiten dichos datos porque su porcentaje con respecto al total es muy mínimo o se decide aplicar técnicas como: imputación por la media, por la moda, por la mediana, por regresión, por regresión estocastica, por LOCF, o por regresión multiple.
Para nuestro caso se ha decido trabajar con la forma de imputación por media para las variables cuantitativas, y por moda para las variables cualitativas
Para poder visualizar y comparar los dataframe con los datos perdidos anteriormente se había asignado una copia de df1 <- df2 lo cual me permite seguir trabajando sin alterar información antes de la imputación
datos_faltantes_1 <-is.na(df2$piso)
datos_faltantes_2 <-is.na(df2$parquea)
datos_faltantes_3 <-is.na(df2$tipo)
datos_faltantes_4 <-is.na(df2$barrio)A los 2641 datos faltantes de la variable piso se le asignará el valor de la media 3.772368 A los 1606 datos faltantes de la variable parque se le asginará el valor de la media 1.835961
df2$piso[datos_faltantes_1]<-mean(df2$piso,na.rm = T)
df2$parquea[datos_faltantes_2]<-mean(df2$parquea,na.rm = T)Para las variables cuantitativas piso y parqueadero se puede observar como el total de datos faltantes disminuyó en su totalidad es decir que del 30 y 20 % respectivamente no existen en el dataframe df2 ningún NA
Para las demás variables cuantitativas se ha optado por no tener en cuenta los NA pues ni siquiera alcanzan el 1 % de datos faltantes
Aunque los datos NA´s con las variables categóricas tipo y barrio corresponden a 3 valores faltantes no sería necesario hacer imputación, sin embargo para el ejercicio se realiza de la siguiente manera:
df2$tipo[datos_faltantes_3]<-mfv(df2$tipo[!datos_faltantes_3])
df2$barrio[datos_faltantes_4]<-mfv(df2$barrio[!datos_faltantes_4])A continuación se muestra un dataframe de los valores NA´s de las variables, piso, parqueadero, tipo y barrio los cuales podemos observar la comparación con registros disminuidos a cero datos_faltantes
Podemos observar como se han reemplazado los datos NA´s por la media para variables númericas y por la moda para las variables categóricas
## [1] NA
## [1] 3.772368
## [1] NA
## [1] 1.835961
tabla1 <- table(df1$id)
tabla2 <- table(df1$piso)
tabla3 <- table(df1$estrato)
tabla4 <- table(df1$preciom)
tabla5 <- table(df1$areaconst)
tabla6 <- table(df1$parquea)
tabla7 <- table(df1$tipo)
tabla8 <- table(df1$barrio)# variable cualitativa con 2 opciones apartamento o casa
color <- brewer.pal(length(tabla7), "Set2")
etiquetas7 <- paste0(tabla7, " = ", round(100 * tabla7/sum(tabla7), 2), "%")
pie(tabla7, labels = etiquetas7, main = "Tipos de viviendas a la venta", col = color)
legend("topright", legend = c("apto", "apartamento", "casa"),
fill = c("lightgreen", "lightgreen", "lightblue"))# variable cuantitativa estrato
color3 <- brewer.pal(length(tabla3), "Set2")
etiquetas3 <- paste0(tabla7, " = ", round(100 * tabla3/sum(tabla3), 2), "%")
pie(tabla3, labels = etiquetas3, main = "Estratos de viviendas ofertadas", col = color3)
legend("left", legend = c("estrato 3","estrato 4", "estrato 5", "estrato 6"),
fill = c("lightgreen", "pink", "lightblue","orange"))hist(x = df1$piso, main = "Ubicacion de vivienda por piso ",
xlab = "Piso", ylab = "Frecuencia",col = 4)hist(x = df1$preciom, main = "Precio de viviendas ofertadas ",
xlab = "Precio", ylab = "Frecuencia",col = 2)En cuanto a las medidas de tendencia central se calcula la media solo para las variables cuantitativas, así como la mediana permite calcular sin importar el tipo de variable, y para la moda solo la variable id evitaría realizar el cálculo pues sus datos corresponden a un dato de indentificación único _________________________________________________________________________________________________________
md1 <- mean(df1$id, na.rm = TRUE)
#md2 <- mean(df1$piso, na.rm = TRUE), comando a usar antes de la imputación df1
md2 <- mean(df2$piso) # comando a usar después de la imputación df2
md3 <- mean(df1$estrato, na.rm = TRUE)
md4 <- mean(df1$preciom, na.rm = TRUE)
md5 <- mean(df1$areaconst, na.rm = TRUE)
#md6 <- mean(df1$parquea, na.rm = TRUE)
md6 <- mean(df2$parquea)
media <- c(md1,md2,md3,md4,md5,md6)
media## [1] 4163.990873 3.772368 4.634322 434.240634 174.987601 1.835961
Media:
El promedio de ubicación por piso, está entre el tercer y cuarto piso de las viviendas ofertadas en la ciudad de Cali.
El estrato 4 es donde más encontramos los apartamentos y casas por vender.
Las viviendas que se encuentran disponibles para la venta en la ciudad de Cali tienen un promedio en el precio de $434 millones con un promedio de área por constuir de 174 metros cuadrados.
el promedio de parqueaderos es aproximadamente de 2 puestos para las viviendas faltantes
m1 <- median(df1$id, na.rm = TRUE)
m2 <- median(df2$piso)
m3 <- median(df1$estrato, na.rm = TRUE)
m4 <- median(df1$preciom, na.rm = TRUE)
m5 <- median(df1$areaconst, na.rm = TRUE)
m6 <- median(df2$parquea)
m7 <- median(df1$tipo, na.rm = TRUE)
m8 <- median(df1$barrio, na.rm = TRUE)
mediana <- c(m1,m2,m3,m4,m5,m6,m7,m8)
mediana## [1] "4164" "3.77236772719283" "5" "330"
## [5] "123" "1.83596073765616" "apartamento" "los andes"
Mediana:
El 50% de las viviendas ofertadas se encuentran entre el piso 3 y 4
El 50% de las viviendas que faltan por vender en la ciudad de Cali es menor o igual a un area de construcción de 123 metros cuadrados
#mo1 es el código id es único por tanto no se puede calcular la moda
mo2 <- mfv(df2$piso)
mo3 <- mfv(df1$estrato, na_rm = TRUE)
mo4 <- mfv(df1$preciom, na_rm = TRUE)
mo5 <- mfv(df1$areaconst, na_rm = TRUE)
mo6 <- mfv(df2$parquea)
mo7 <- mfv(df1$tipo, na_rm = TRUE)
mo8 <- mfv(df1$barrio, na_rm = TRUE)
moda <- c(mo2,mo3,mo4,mo5,mo6,mo7,mo8)
moda## [1] "3.77236772719283" "5" "350" "60"
## [5] "1" "apartamento" "valle del lili"
Moda:
Las viviendas disponibles para la venta en la ciudad de cali son más que todo apartamentos y tienen un precio con más frecuencia de 350 millones, así como el área de construcción que más se repite es de 60 m2, con opción para 1 parqueadero y en el barrio con mayor disponibilidad Valle de Lilí.
Teniendo en cuenta que algunas variables cuantitativas como piso y parquea fueron realizadas imputación de datos entonces no necesitan de la instrucción na.rm = TRUE la cual permite calcular sin tener en cuenta los datos faltantes de dicha variable ____________________________________________________________________________________________________
# Cálculo cuartiles
q1 <- quantile(df1$id, prob=seq(0, 1, 1/4), na.rm = TRUE)
q2 <- quantile(df2$piso, prob=seq(0, 1, 1/4))
q3 <- quantile(df1$estrato, prob=seq(0, 1, 1/4), na.rm = TRUE)
q4 <- quantile(df1$preciom, prob=seq(0, 1, 1/4), na.rm = TRUE)
q5 <- quantile(df1$areaconst, prob=seq(0, 1, 1/4), na.rm = TRUE)
q6 <- quantile(df2$parquea, prob=seq(0, 1, 1/4))
q2## 0% 25% 50% 75% 100%
## 1.000000 2.000000 3.772368 4.000000 12.000000
Quartil No.4 de la variable piso (Q75%=4)
el 75% de las viviendas ofertadas se encuentran como máximo en el cuarto o menos del cuarto piso, y el 25% de las viviendas ofertadas se encuentran como mínimo en el cuarto piso o mayor a este.
# Cálculo deciles
d3 <- quantile(df1$estrato, prob=seq(0, 1, length = 11), na.rm = TRUE)
d4 <- quantile(df1$preciom, prob=seq(0, 1, length = 11), na.rm = TRUE)
d3## 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%
## 3 3 4 4 4 5 5 5 6 6 6
## 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%
## 58 145 190 240 285 330 390 475 610 870 1999
Decil No.2 de la variable estrato (D10%=3)
el 10% de las viviendas faltantes se encuentra como máximo en el estrato 3 o menos que el estrato 3 y el 90% de las viviendas faltantes se encuentran como mínimo en el estrato 3 o mayor a este.
Decil No.9 de la variable precio (D90%=870)
el 90% de las viviendas faltantes tiene como máximo un precio menor o igual 870 millones y el 10% de las viviendas faltantes tiene como mínimo un precio de 870 millones ____________________________________________________________________________________________________________
# Cálculo percentiles
pc5 <- quantile(df1$areaconst, c(0.2, 0.40, 0.50, 0.60, 0.80), type = 6, na.rm = TRUE)
pc6 <- quantile(df2$parquea, c(0.2, 0.40, 0.50, 0.60, 0.80), type = 6)
pc5## 20% 40% 50% 60% 80%
## 73 102 123 153 258
## 20% 40% 50% 60% 80%
## 1.000000 1.835961 1.835961 2.000000 2.000000
Percentil No.40 de la variable areaconst (P40%=102)
el 40% de las viviendas faltantes consta de un area de construcción como máximo menor o igual a 102 metros cuadrados y el 60% de las viviendas faltantes consta de un area de construción como mínimo de 102 metros cuadrados
Percentil No.80 de la variable parqueadero (P80%=2)
el 80% de las viviendas faltantes tiene como máximo la opción de dos o un puesto de parqueadero y el 20% de las viviendas faltantes tiene como mínimo la opción de 2 puestos de parqueadero _________________________________________________________________________________________________________
# Rango Mínimo y Máximo
Rgm7 <- min(df2$tipo)
Rgx7 <- max(df2$tipo)
Rgm8 <- min(df2$barrio)
Rgx8 <- max(df2$barrio)
Rgm7## [1] "apartamento"
## [1] "20 de julio"
El valor mínimo de las viviendas faltantes de las variables tipo y barrio, corresponden respectivamente a un apartamento que se encuentra ubicado en el barrio 20 de Julio de la ciudad de Calí
Para realizar el siguiente cálculo se debe tener en cuenta las variables númericas, sobre las cuales se encontrará la varianza y la desviación estandar aquella para interpretar que tan factible es el cambio entre dato y dato de la base vivienda_faltantes
# varianza
v1 <- var(df1$id, na.rm = TRUE)
v2 <- var(df2$piso)
v3 <- var(df1$estrato, na.rm = TRUE)
v4 <- var(df1$preciom, na.rm = TRUE)
v5 <- var(df1$areaconst, na.rm = TRUE)
v6 <- var(df2$parquea)
varianza <- c(v1,v2,v3,v4,v5,v6)
varianza## [1] 5778862.154132 4.669974 1.059514 108251.333226 20434.659175
## [6] 1.021739
Desde el punto de vista comercial la variable precio puede ser el aspecto más fundamental cuando un cliente busca un bien raíz que pretenda adquirir, por tal motivo se ve la necesidad de complementar los datos encontrados con las medidas de tendencia central.
sabiendo que, El promedio del precio de las viviendas que se encuentran disponibles para la venta en la ciudad de Cali es de $434 millones, el resultado de la varianza para dicho parámetro es de 108251.333226 apartir de lo cual se aplica una raiz cuadrada (√ 108521), que ofrece como resultado la desviación estandar con un valor de 329.015704 _________________________________________________________________________________________________________
# desviación estandar
dv1 <- sd(df1$id, na.rm = TRUE)
dv2 <- sd(df2$piso)
dv3 <- sd(df1$estrato, na.rm = TRUE)
dv4 <- sd(df1$preciom, na.rm = TRUE)
dv5 <- sd(df1$areaconst, na.rm = TRUE)
dv6 <- sd(df2$parquea)
desv_estandar <- c(dv1,dv2,dv3,dv4,dv5,dv6)
desv_estandar## [1] 2403.926404 2.161012 1.029327 329.015704 142.949848 1.010811
# md4 = media de la variable precio
# dv4 = desviación estándar de la variable precio
# Para 1 desviación estándar que comprendería el 68% de los datos
intervalo_1 <- md4+dv4
intervalo_1 # 68% de los datos## [1] 763.2563
## [1] 105.2249
## [1] 105.2249 434.2406 763.2563
Si la desviación estandar para la variable estandar es de 329 aproximadamente, entonces este valor lo sumamos y restamos de la media generando un intervalo que comprendería el 68% de los datos, es decir:
Media: 434 millones Media + desv_estandar_precio = 434 + 329 = 763 Media - desv_estandar_precio = 434 - 329 = 105
tendriamos que el intervalo para la desviación de estandar donde se cubriria un 68% de los registros de la base de datos de viviendas faltantes en Cali es: [ 105.2249 - 434.2406 - 763.2563]
# para 2 desviaciones estándar que comprenderían el 95% de los datos
dos_dv4 <- c ((md4-(dv4*2)),md4,(md4+(dv4*2)))
dos_dv4 ## [1] -223.7908 434.2406 1092.2720
Como se puede observar se obtiene un intervalo con valores negativos si calculamos 2 desviaciones estándar por tanto creo que solo se alcanzaría a cubrir el 68% de los datos para la variable precio ____________________________________________________________________________________________________
Los agentes de ventas de bienes raíces pueden observar que hay más apartamentos que casas disponibles para la venta en la ciudad de Cali
Los estratos 3 y 4 son aquellos donde hay mayor disponibilidad de bienes ofertados
En comparación con otras ciudades que incluso son más pequeñas, el precio de venta de las propiedades es más bajo
Los datos faltantes de las variables piso y parqueadero son demasiados, pero desde mi punto de vista no afectan la verdadera esencia de la línea de negocio
Un resultado inquietante en las medidas de dispersión sobre la desviación estándar es que no permite cubrir más del 68%, pues aplicar una segunda desviación incurre en valores negativos
La cantidad de observaciones de las viviendas que faltan por vender en la ciudad de Cali es un valor que amerita identificar si el personal de agentes de ventas con el que se cuenta actualmente en la empresa B&C es el necesario para cubrir el mercado, se podría buscar talento humano que apoye esta actividad los fines de semana
Conociendo que los estratos 3 y 4 son donde existe mayor disponibilidad de viviendas para adquirir, la empresa B&C debe generar estrategias de marketing que den a conocer estos bienes materiales bajo ese estándar, lo cual indica que tienen un precio cómodo de adquisición
De los resultados del análisis descriptivo se obtuvo que los apartamentos y casas ofertados en la ciudad de Cali se encuentran más que todo en el barrio Valle de Lilí, para lo cual se debería crear una vitrina de ventas en un centro comercial de la zona que permita captar la curiosidad de los clientes
La empresa B&C conoce de mano del científico de datos el alcance y análisis de las características de una vivienda para lo cual los agentes de venta deben calcular el mejor perfil de venta de los apartamentos y casas de la ciudad de Cali, y así interpretar el gusto y necesidades de los compradores.
[1] Vicente Coll Serrano. Facultad de Economía. Universidad de Valencia.] (2016-2017). “Curso de introducción a R” (1 ed.) [Online]. Available: https://www.uv.es/vcoll/data-wrangling.html
[2] Andrew Zieffler (2018 abr 12). “R Markdown Theme Gallery” (1 ed.) [Online]. Available: https://www.datadreaming.org/post/r-markdown-theme-gallery/
[3] R CODER (2023) “Gráfico de sectores en R” (1 ed.) [Online]. Available: https://r-coder.com/grafico-sectores-r/
[4] Workshop, Reproducible Research. (2016). “Writing Publications with R.” [Online]. Available: http://www.geo.uzh.ch/microsite/reproducible_research/post/rr-r-publication/
[5] Andrés (2019) “Imputación de datos” (1 ed.) [Online]. Available: https://rstudio-pubs-static.s3.amazonaws.com/786524_0e9fd3f69b2a49b79c8a4ff21b2585b3.html