nyc_casestudy

ds1
tidymodels
statlearning
string
Published

May 17, 2023

Aufgabe

Fallstudie

Eine Analystin untersucht Verspätungen der New Yorker Flüge. Sie gibt folgenden Code ein und erhält unten stehendes Ergebnis.

library(sjmisc)
library(tidyverse)
library(caret)
data(flights, package = "nycflights13")

my_crossval <- trainControl(method = "cv",
                            number = 5,
                            allowParallel = TRUE,
                            verboseIter = FALSE)

doMC::registerDoMC(cores = 2)


flights2 <- flights %>%
  select_if(is.numeric) %>% 
  drop_na() %>% 
  select(-c(year, dep_delay)) %>% 
  std(suffix = "")  

n_uebung <- round(.8 * nrow(flights2), digits = 0)

uebung_index <- sample(1:nrow(flights2), size = n_uebung)

uebung_df <- filter(flights2, row_number() %in% uebung_index)
test_df <- filter(flights2, !(row_number() %in% uebung_index))

lm_fit1 <- train(arr_delay ~ .,
                 data = uebung_df,
                 method = "lm",
                 trControl = my_crossval)

summary(lm_fit1)

Call:
lm(formula = .outcome ~ ., data = dat)

Residuals:
    Min      1Q  Median      3Q     Max 
-2.1233 -0.4714 -0.2037  0.1607 29.2360 

Coefficients: (1 not defined because of singularities)
                 Estimate Std. Error  t value Pr(>|t|)    
(Intercept)    -0.0001968  0.0017957   -0.110   0.9127    
month          -0.0029446  0.0018005   -1.635   0.1020    
day             0.0003989  0.0017964    0.222   0.8243    
dep_time        0.8217620  0.0061960  132.627   <2e-16 ***
sched_dep_time -0.6018870  0.0441828  -13.623   <2e-16 ***
arr_time       -0.2867776  0.0029510  -97.179   <2e-16 ***
sched_arr_time  0.0979923  0.0036413   26.911   <2e-16 ***
flight          0.0372636  0.0020564   18.121   <2e-16 ***
air_time        1.4256039  0.0132562  107.542   <2e-16 ***
distance       -1.4444033  0.0133051 -108.561   <2e-16 ***
hour            0.1019498  0.0436140    2.338   0.0194 *  
minute                 NA         NA       NA       NA    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.919 on 261866 degrees of freedom
Multiple R-squared:  0.1533,    Adjusted R-squared:  0.1533 
F-statistic:  4742 on 10 and 261866 DF,  p-value: < 2.2e-16

Im Folgenden untersucht sie die prädiktive Güte am Testdatensatz.

lm1_pred <- predict(lm_fit1, newdata = test_df)
Warning in predict.lm(modelFit, newdata): prediction from a rank-deficient fit
may be misleading
lm1_pred_fit <- postResample(pred = lm1_pred, obs = test_df$arr_delay)
lm1_pred_fit
     RMSE  Rsquared       MAE 
0.9298718 0.1443675 0.5492924 

Schließlich berechnet sie noch ein Random-Forest-Modell. Um Zeit zu sparen, verringert sie den Datensatz in dieser ersten Analyse.

rf_grid <- data.frame(
  .mtry = c(4, 5, 6, 7),
  .splitrule = "variance",
  .min.node.size = 5)

uebung_df_small <- sample_n(uebung_df, size = 1000)

rf_fit1 <- train(arr_delay ~ .,
                 data = uebung_df_small,
                 method = "ranger",
                 trControl = my_crossval)

Auch hier lässt sie sich wieder die Gütekoeffizienten ausgeben.

rf1_pred <- predict(rf_fit1, newdata = test_df)
rf1_pred_fit <- postResample(pred = rf1_pred, obs = test_df$arr_delay)
rf1_pred_fit
     RMSE  Rsquared       MAE 
0.5536435 0.7294604 0.3300325 
  1. Interpretieren Sie die Koeffizienten des Prädiktors sched_dep_time des Modells lm1 (s. Spalten Estimate bis Pr(>|t|))!
  2. Welcher Prädiktor des Modells lm1 ist am wichtigsten? Begründen Sie Ihre Antwort!
  3. Interpretieren Sie die Ausgabe des Objekts lm1_pred_fit!
  4. Welche Gefahren bzw. Probleme können damit verbunden sein, dass die Analystin die Stichprobe auf \(n=1000\) verkleinert?
  5. Vergleichen Sie die Gütekoeffizienten der beiden Modelle im Test-Datensatz!
  6. Diskutieren Sie einen (möglichen) Grund für die Unterschiede in den Gütekriterien zwischen den beiden Modellen!











Lösung

Interpretieren Sie die Koeffizienten des Prädiktors sched_dep_time des Modells lm1!

  • Estimate: Punktschätzer des Einflussgewichts
  • Std. Err: Standardfehler, ein Koeffizient zur Beurteilung der (Un-)Genauigkeit des Punktschätzers
  • t value: Estimate geteilt durch Std. Error, Signal-Noise-Ratio, z-Wert
  • Pr: p-Wert

Welcher Prädiktor des Modells lm1 ist am wichtigsten? Begründen Sie Ihre Antwort!

  • Eine Möglichkeit zur Bestimmung der Prädiktorenrelevanz besteht darin, den Prädiktor mit höchstem Absolutwert in der Spalte t value heranzuziehen.
  • In diesem Fall ist das dep_time.

Interpretieren Sie die Ausgabe des Objekts lm1_pred_fit!

  • Es werden drei Gütekriterien berichtet: R-Quadrat, MSE und MAE. MSE gibt den mittleren Quadratfehler der vorhersage an; MAE den mittleren Absolutfehler.
  • Je höher \(R^2\) und je geringer MAE bzw. MSE sind, desto besser ist das Modell.

Welche Gefahren bzw. Probleme können damit verbunden sein, dass die Analystin die Stichprobe auf \(n=1000\) verkleinert?

  • Kleinere Stichproben schätzen die Population ungenauer.
  • Durch die Stichprobenziehung könnten sich die Verteilungen verändern, was wiederum einen Einfluss auf die Vorhersagen haben kann.

Vergleichen Sie die Gütekoeffizienten der beiden Modelle im Test-Datensatz!

  • Das Random-Forest-Modell hat deutlich besser abgeschnitten als das lineare Modell.

Diskutieren Sie einen (möglichen) Grund für die Unterschiede in den Gütekriterien zwischen den beiden Modellen!

  • Ein lineares Modell wird dort gute Vorhersagen leisten, wo seine Voraussetzungen erfüllt sind. Eine wichtige Vorausssetzung sind lineare Beziehungen der Prädiktoren zum Kriterium.
  • Hier könnte der Fall vorliegen, dass die Beziehungen nicht linear sind, so dass ein Modell - wie das Random-Forest-Modell - das nicht auf lineare Beziehungen abzielt, bessere Vorhersagen treffen kann.
sol <- "s. text"

Categories:

  • ds1
  • tidymodels
  • statlearning
  • string