Instale el paquete de data.table, ggplot2 y caret y abra la base de datos que contiene la información de arriendos de airbnb de New York para el año 2019.
install.packages("ggplot2")
install.packages("data.table")
install.packages("caret")
install.packages("jtools")
library(ggplot2)
library(data.table)
library(caret)
## Loading required package: lattice
library(jtools)
NYC <- fread("AB_NYC_2019.csv")
Muestre en un gráfico de barras la oferta de arriendos para cada grupo de vecindario, es decir, cuántos departamentos/casas se arriendan por grupo de vecindario.
ggplot(NYC,aes(x= neighbourhood_group)) + geom_bar()
Muestre con un scatter plot la relación entre el precio (eje x) y el número de visitas (eje y) según el tipo de habitación que se está arrendando. Pista: Recuerde la función facet_wrap.
ggplot(NYC,aes(x=price, y=number_of_reviews)) + geom_point()+ facet_wrap(facets = "room_type")+labs(x="Precio", y="Número de visitas", title = "Relacion Precio y Numero de Visitas segun el tipo de habitación", caption = "Fuente: Airbnb 2019")
Nuestro primer modelo de predicción será una regresión lineal simple que explique el precio de los arriendos de airbnb según el tipo de habitación. Pista: Recuerde que para las regresiones hay que transformar las variables character en variables categóricas.
NYC[,roomt:=as.factor(room_type)]
reg1 <- lm(data = NYC, formula = price~roomt)
Interprete los coeficientes de su regresión anterior. ¿Son estadísticamente significativos?
summ(reg1)
## MODEL INFO:
## Observations: 48895
## Dependent Variable: price
## Type: OLS linear regression
##
## MODEL FIT:
## F(2,48892) = 1716.63, p = 0.00
## R² = 0.07
## Adj. R² = 0.07
##
## Standard errors: OLS
## --------------------------------------------------------
## Est. S.E. t val. p
## ----------------------- --------- ------ -------- ------
## (Intercept) 211.79 1.46 145.43 0.00
## roomtPrivate room -122.01 2.13 -57.30 0.00
## roomtShared room -141.67 6.97 -20.33 0.00
## --------------------------------------------------------
El intercepto b0 (contastnte), es 211.79. Este significa que cuando no hay ningun tipo de habitacion, es decir, es la casa completa (Entire home/apt), el precio sera de U$ 211.79.
El intercepto B1 (roomtPrivate room), es -122.01. Esto seginfica que cuando el tipo de habitacion es privada, el precio disminuye en -U$ 122.01.
El intercepto B2 (), es -141.67. Esto significa que cuando el tipo de habitacion es compartida (shared), el precio cae disminuye -U$ 141.67.
Dado que los 3 coeficientes presetna un P =0.00, podemos decir que son significativos en todos los niveles (1%,5%, 10%).
Cabe mencionar que el R2 nos indica que las variables del modelo explican solo en un 0.07 (7%) el precio. Por lo que no es un modelo que se ajuste tanto a la realidad.
Calcule el precio predicho para todas las observaciones de la muestra. E inclúyalo en la base original.
NYC[,pred1:=predict(reg1, na.action = na.exclude)]
Calcule los errores de predicción (RMSE y MAE) de nuestro modelo. Muestre sus resultados.
predicciones<- data.table(RMSE=RMSE(NYC[,pred1],NYC[,price]),
MAE=MAE(NYC[,pred1],NYC[,price]))
Nuestro segundo modelo de predicción será una regresión lineal múltiple que explique el precio de los arriendos de airbnb según el tipo de habitación, el número de visitas, la cantidad mínima de noches y el grupo de vecindario en el que se encuentra. No olvide mostrar los resultados Pista: Recuerde que para las regresiones hay que transformar las variables character en variables categóricas.
NYC[,nbhg:=as.factor(neighbourhood_group)]
reg2<-lm(data=NYC,formula =price~roomt+number_of_reviews+minimum_nights+nbhg)
Calcule el precio predicho para todas las observaciones de la muestra. E inclúyalo en la base original.
NYC[,pred2:=predict(reg2,na.action = na.exclude)]
Calcule los errores de predicción (RMSE y MAE) de nuestro modelo. Muestre sus resultados.
predicciones2<-data.table(RMSE=RMSE(NYC[,pred2],NYC[,price]),
MAE=MAE(NYC[,pred2],NYC[,price]))
Interprete la diferencia en los errores de predicción entre el Modelo 1 y el Modelo 2.
Existe una diferencia entre los errores del modelo 1 y el modelo 2, debido a que el error del modelo 2 es más pequeño que el error del modelo 1, podemos concluír que el segundo modelo se ajusta mejor a la realidad y puede precedir de manera más exacta el precio de un departamento o habitación de airbnb.
Proponga un modelo de predicción (distinto a los anteriores) que le permita predecir el precio de los arriendos de airbnb y calcule precio predicho para todas las observaciones.
reg3<-lm(data=NYC,formula =price~roomt+number_of_reviews+availability_365+minimum_nights+calculated_host_listings_count)
NYC[,pred3:=predict(reg3, na.action = na.exclude)]
Ahora realice k folds CV para comparar su modelo con el de la pregunta 5. Muestre los resultados de errores en la predicción y determine cuál modelo es más conveniente en base al error de predicción. Utilice k=9 y set.seed(12345)
set.seed(12345)
setupKCV <- trainControl(method = "cv" , number = 9)
predkfolds0<-train(price~roomt+number_of_reviews+availability_365+minimum_nights+calculated_host_listings_count,data=NYC,method="lm",trControl= setupKCV)
predkfolds5<-train(price~roomt+number_of_reviews+minimum_nights+nbhg,data=NYC,method="lm",trControl= setupKCV)
print(predkfolds0)
## Linear Regression
##
## 48895 samples
## 5 predictor
##
## No pre-processing
## Resampling: Cross-Validated (9 fold)
## Summary of sample sizes: 43462, 43463, 43462, 43462, 43462, 43463, ...
## Resampling results:
##
## RMSE Rsquared MAE
## 227.6159 0.08281063 76.50176
##
## Tuning parameter 'intercept' was held constant at a value of TRUE
print(predkfolds5)
## Linear Regression
##
## 48895 samples
## 4 predictor
##
## No pre-processing
## Resampling: Cross-Validated (9 fold)
## Summary of sample sizes: 43462, 43462, 43461, 43462, 43461, 43464, ...
## Resampling results:
##
## RMSE Rsquared MAE
## 227.8123 0.08766953 73.70391
##
## Tuning parameter 'intercept' was held constant at a value of TRUE
Si bien, el RSME de nuestro modelo es un poco más pequeño, el MAE es sustancialmente más grande que el arrojado por el modelo de la pregunta 5, por lo tanto concluímos que el modelo más conveniente para precedir el precio de un departamento o habitación en airbnb es el modelo de la pregunta 5.