Poisson- och quasipoisson-regression för att förutsäga antal

Övervakad inlärning i R: Regression

Nina Zumel and John Mount

Win-Vector, LLC

Förutsäga antal

  • Linjär regression: förutsäger värden i $[-\infty, \infty]$
  • Antal: heltal i intervallet $[0,\infty]$
Övervakad inlärning i R: Regression

Poisson/Quasipoisson-regression

glm(formula, data, family)
  • family: antingen poisson eller quasipoisson
  • indata additivt och linjärt i log(antal)
Övervakad inlärning i R: Regression

Poisson/Quasipoisson-regression

glm(formula, data, family)
  • family: antingen poisson eller quasipoisson
  • indata additivt och linjärt i log(antal)
  • utfall: heltal
    • antal: t.ex. antal trafikböter en förare får
    • frekvenser: t.ex. antal webbplatsbesök/dag
  • förutsägelse: förväntad frekvens eller intensitet (inte heltal)
    • förväntat antal trafikböter; förväntade besök/dag
Övervakad inlärning i R: Regression

Poisson vs. Quasipoisson

  • Poisson antar att mean(y) = var(y)
  • Om var(y) skiljer sig mycket från mean(y) – använd quasipoisson
  • Kräver generellt ett stort urval
  • Om frekvenser/antal >> 0 – fungerar vanlig regression bra
Övervakad inlärning i R: Regression

Exempel: Förutsäga cykeluthyrningar

Övervakad inlärning i R: Regression

Anpassa modellen

bikesJan %>% 
  summarize(mean = mean(cnt), var = var(cnt))
      mean      var
1 130.5587 14351.25

Eftersom var(cnt) >> mean(cnt) $\rightarrow$ använd quasipoisson

fmla <- cnt ~ hr + holiday + workingday + 
  weathersit + temp + atemp + hum + windspeed

model <- glm(fmla, data = bikesJan, family = quasipoisson)
Övervakad inlärning i R: Regression

Kontrollera modellanpassningen

$$ pseudo R^2 = 1 - \frac{deviance}{null.deviance} $$

glance(model) %>%
  summarize(pseudoR2 = 1 - deviance/null.deviance)
   pseudoR2
1 0.7654358
Övervakad inlärning i R: Regression

Förutsäga med modellen

predict(model, newdata = bikesFeb, type = "response")

Övervakad inlärning i R: Regression

Utvärdera modellen

Antalsmodeller kan utvärderas med RMSE

bikesFeb %>%
  mutate(residual = cnt - pred) %>%
  summarize(rmse = sqrt(mean(residual^2))) 
      rmse
1 69.32869
sd(bikesFeb$cnt)
134.2865
Övervakad inlärning i R: Regression

Jämför förutsägelser och faktiska utfall

Övervakad inlärning i R: Regression

Nu kör vi en övning!

Övervakad inlärning i R: Regression

Preparing Video For Download...