preds_chosen <-
c("id", "budget", "popularity", "runtime")tmdb07
Aufgabe
Melden Sie sich an für die Kaggle Competition TMDB Box Office Prediction - Can you predict a movie’s worldwide box office revenue?.
Sie benötigen dazu ein Konto; es ist auch möglich, sich mit seinem Google-Konto anzumelden.
Bei diesem Prognosewettbewerb geht es darum, vorherzusagen, wieviel Umsatz wohl einige Filme machen werden. Als Prädiktoren stehen einige Infos wie Budget, Genre, Titel etc. zur Verfügung. Eine klassische “predictive Competition” also :-) Allerdings können immer ein paar Schwierigkeiten auftreten ;-)
Aufgabe
Erstellen Sie ein Lineares-Modell mit Regularisierung mit Tidymodels!
Hinweise
- Verzichten Sie auf Vorverarbeitung.
- Tunen Sie die typischen Parameter.
- Reichen Sie das Modell ein und berichten Sie Ihren Score.
- Begrenzen Sie sich auf folgende Prädiktoren.
Lösung
Pakete starten
library(tidyverse)
library(tidymodels)
library(finetune)
library(doParallel)
library(tictoc)Daten importieren
d_train_path <- "https://raw.githubusercontent.com/sebastiansauer/Lehre/main/data/tmdb-box-office-prediction/train.csv"
d_test_path <- "https://raw.githubusercontent.com/sebastiansauer/Lehre/main/data/tmdb-box-office-prediction/test.csv"
d_train <- read_csv(d_train_path)
d_test <- read_csv(d_test_path)Werfen wir einen Blick in die Daten:
glimpse(d_train)
glimpse(d_test)Resampling / Cross-Validation-Scheme
cv_scheme <- vfold_cv(d_train)Kleine Werte für \(v\) wie \(v=3\) kann man wählen, um Rechenzeit zu sparen. Das ist gerade fürs Debuggen nützlich. Für die “Wirklichkeit” ist ein höherer Wert besser, z.B. \(v=10\) (der Defaultwert)
Rezept
rec1 <-
recipe(revenue ~ budget + popularity + runtime, data = d_train) %>%
step_impute_bag(all_predictors()) %>%
step_naomit(all_predictors())
rec1Modell
model_lm <- linear_reg(penalty = tune(),
engine = "glmnet")Workflow
wf1 <-
workflow() %>%
add_model(model_lm) %>%
add_recipe(rec1)Modell fitten (und tunen)
Parallele Verarbeitung starten:
cl <- makePSOCKcluster(4) # Create 4 clusters
registerDoParallel(cl)tic()
lm_fit1 <-
wf1 %>%
tune_race_anova(resamples = cv_scheme)
toc()lm_fit1 %>% show_best()Finalisieren
wf1_final <-
wf1 %>%
finalize_workflow(select_best(lm_fit1, metric = "rmse"))Final Fit
fit1_final <-
wf1_final %>%
fit(d_train)
fit1_finalpreds <-
fit1_final %>%
predict(d_test)Submission df
submission_df <-
d_test %>%
select(id) %>%
bind_cols(preds) %>%
rename(revenue = .pred)
head(submission_df)Abspeichern und einreichen:
#write_csv(submission_df, file = "submission.csv")Kaggle Score
Diese Submission erzielte einen Score von Score: 6.14787 (RMSLE).
sol <- 6.14787Categories:
- ds1
- tidymodels
- statlearning
- tmdb
- num