Predecir el precio óptimo a la hora de colgar un nuevo inmueble o actualizar el actual.
Las variables minimas a utilizar serán: el tipo de inmueble (room_type), su localización (Km_empire,neighbourhood_group,neighbourhood) y su disponibilidad (availability-365).
El tipo de inmueble (room_type) es la variable más predictora con mucha diferencia. Una vez fijada esta variable el resto del valor del inmueble se incrementa atendiendo a su distancia a sitios históricos y la cantida de noches minimas de reserva, el resto de variables estudiadas no afectan sustancialmente.
Para conseguir una mejor predicción del modelo sería aconsejable la inclusión de alguna variable más.
Hemos valorado diferentes algoritmos de dos tipos principalmente: árboles de decisión y regresión lineal múltiple.En los dos casos hemos buscado diferentes optimizaciones de los modelos probando diferentes opciones.
En las regresiones lineales múltiples hemos creado 6 escenarios diferentes:
1. Regresión Lineal múltiple con todas las variables posibles y mínima eliminación de atípicos.Reducción de registros en 1%. RLM
2. Regresión Lineal Múltiple pero segregada por tipo de inmueble (Private room) RLM Private Room
3. Regresión Lineal Múltiple pero segregada por tipo de inmueble (Entire home/apt) RLM Home
4. Regresión Lineal Múltiple pero segregada por tipo de inmueble (Shared room) RLM Shared
5. Regresión Lineal Múltiple pero con mayores cortes en las variables para evitar el desbalanceo de las mismas.Se reducen los registros originales en un 30% RLM Cortada
6. Regresión Lineal Múltiple con Cross Validation y todas las variables. RLM Cross-Va
7. Regresión Lineal múltiple polinómica. RLM Poli
8. Regresión Lineal Múltiple con solo la variable room_type RLM room_type
Para los del tipo árbol, hemos optimizado los parámetros del árbol y su poda y hemos utilizado Random Forest buscando sus parámetros optimizados.
9. Árboles de Regresión con parámetros optimizados. Arboles Regresión
10. Random Forest con parámetros optimizados. RandomForest
En el siguiente gráfico se puede ver la comparación del MSE (Pérdida de Error Cuadrático Medio/Mean Square Error Loss ) de todos los modelos. Cuanto menor sea este valor menos errores tiene nuestro modelo.
Siendo el algortimo de RandomForest el que nos da mejores resultados, al tener el menor error la explicación del 59.12% de las variables.
Se ha trabajado sobre un histórico de inmuebles alquilados durante el 2019 y se ha obtenido un modelo predictivo con un acierto del 55%, alto para el tipo de predicción y las variables utilizadas.
El modelo es estable y se observa que el tipo de inmueble es la variable más importante para su predicción como hemos comentado,para conseguir un mayor acierto se aconseja incluir más variables que puedan predecir de forma más precisa el valor del alquiler.
Una vez analizados los datos nos hemos encontrado con una cantidad significativa de valores nulos en varios campos como Last_review y reviews_per_month por lo que hemos rellenado los valores nulos con valores medios de dichas variables para no perder cerca del 25% de los registros. Además de algunos ceros en la variable price que se han eliminado.
Vemos los Nulos originales
## sort.colSums.is.na.df00...
## id 0
## neighbourhood_group 0
## neighbourhood 0
## room_type 0
## number_of_reviews 0
## availability_365 0
## longitude 1
## calculated_host_listings_count 1
## minimum_nights 2
## price 5
## latitude 6
## Km_empire 6
## reviews_per_month 10057
## last_review 10058
Calculamos las medias de las dos variable con mucho atípicos para sustituirlos y no pder der su información
## [1] "La media de reviews_per_month es: 1.37"
## [1] "La media de Last_review es: 2019-05-19"
Sustituimos por dichas medias reduciendo drásticamente los nulos
## colSums.is.na.df00..
## id 0
## neighbourhood_group 0
## neighbourhood 0
## latitude 6
## longitude 1
## room_type 0
## price 5
## minimum_nights 2
## number_of_reviews 0
## last_review 0
## reviews_per_month 0
## calculated_host_listings_count 1
## availability_365 0
## Km_empire 6
Hemos creado una variable sintética que sería la distancia en Kilómetros al Empire State Building para poder así aprovechar los datos de latitud y longitud presentes en los datos. Además, ha salido predictiva
Analizamos los datos por tipo de inmueble que como se aprecián están muy desbalanceados a tres tipos , el resto agruparemos en otros.
Analizamos los datos por localización y como se parecia hay 5 grupos muy domiantes, agruparemos los grupos menos significativos.
Analizamos los datos por sub-localización, hay una gran cantidad de niveles por lo que algún algoritmo como el Randomforest no se podría ejecutar, aguparemos hasta un máximo de 19.
Es muy apreciable un desbalanceo de la variable precio por lo que aplicaremos la función logaritmo para poder conseguir una distribución normalizada
Corte de niveles de varias variables para aquellas con gran cantidad
La primera la dejamos en 19 para que Random Forest pueda funcionar.
Corte de niveles de la variable Última revisión para que Random forest pueda funcionar.
Por último quitamos niveles en Tipo de habitación que eran claros errores de los datos.
Así mismo hemos tenido que eliminar varios atípicos que, aunque tenían explicación por negocio, la cantidad de registros era mínimo distorsionando así la predicción del modelo.
Gráficos antes de eliminar atípicos
Gráficos porteriores a la eliminación de atipicos hemos perdido un 1% de los registros orginales
Este df cortado sólo se utilizará en un modelo RLM cortado para ver si mejoramos la predicción.
Para la elección de las variables predictivas, hemos utilizado RF y RLM. Obteniendo los mismos resultados.
## %IncMSE IncNodePurity
## neighbourhood_group 30.59354 934.2186
## neighbourhood 32.18443 1171.3430
## room_type 379.24634 4683.9709
## minimum_nights 65.75121 452.2679
## number_of_reviews 48.81924 413.6001
## last_review 31.66879 282.5852
## reviews_per_month 50.08066 504.6215
## calculated_host_listings_count 50.61553 344.7998
## availability_365 108.41160 780.4316
## Km_empire 35.94912 1229.7091
Para poder combinar las dos métricas hemos realizado un ranking eligiendo las mejores de cada una, dando un ranking total que podemos ver en la siguiente salida.
## variable R_IncMSE R_IncNodeP R_TOTAL
## 1 last_review 9 10 19
## 2 neighbourhood_group 10 4 14
## 3 number_of_reviews 6 8 14
## 4 calculated_host_listings_count 4 9 13
## 5 neighbourhood 8 3 11
## 6 reviews_per_month 5 6 11
## 7 minimum_nights 3 7 10
## 8 Km_empire 7 2 9
## 9 availability_365 2 5 7
## 10 room_type 1 1 2
En el caso de RF para conseguir los mejores resultados hemos optimizado el algoritmo reduciendo al máximo los errores teniendo en cuenta:
ntree = Número de árboles. mtry = Número de variables a la vez en cada árbol. nodesize = mínimo de los nodos terminales.
En las gráficas vemos los valores óptimos para nuestro proyecto.
## n_predictores oob_mse
## 1 3 0.1922614
## 2 4 0.1926919
## 3 6 0.1936916
## 4 5 0.1941719
## 5 2 0.1942488
## 6 7 0.1950377
## size oob_mse
## 1 15 0.1882745
## 2 18 0.1885856
## 3 19 0.1887515
## 4 11 0.1887834
## 5 17 0.1888400
## 6 6 0.1888541
Los valores optimos son : mtry =3, nodesize = 15 , ntree= 200
Ahora visualizamos los residuos entre los valores reales y los predichos tanto para RF como para RLM viendo una menor dispersión en el caso de RF como era de esperar
La linea nos marca la distribución perfecta en donde Real = Predicción
Vemos que tanto para valores muy bajos como para valores altos el modelo de RLM se separa de la normalidad, mientras que para el resto se comporta muy bien.
Además en los residuos se observan valores influyentes y algunos atípicos.
Hemos hecho el estudio de correlación para ver si teníamos que eliminar alguna de las variables
NO se aprecian valores muy altos que implique correlación, room_type es el másalto que como vimos era muy predictiva.
## [1] "La correlación entre los metodos es de 0.95 muy alta como se esperaba"