Poisson- und Quasi-Poisson-Regression zur Vorhersage von Zählwerten

Überwachtes Lernen in R: Regression

Nina Zumel and John Mount

Win-Vector, LLC

Zählwerte vorhersagen

  • Lineare Regression: sagt Werte in $[-\infty, \infty]$ voraus
  • Zählwerte: ganze Zahlen im Bereich $[0,\infty]$
Überwachtes Lernen in R: Regression

Poisson-/Quasi-Poisson-Regression

glm(formula, data, family)
  • family: entweder poisson oder quasipoisson
  • Eingaben additiv und linear in log(count)
Überwachtes Lernen in R: Regression

Poisson-/Quasi-Poisson-Regression

glm(formula, data, family)
  • family: entweder poisson oder quasipoisson
  • Eingaben additiv und linear in log(count)
  • Zielvariable: integer
    • Zählungen: z. B. Anzahl der Strafzettel pro Fahrer
    • Raten: z. B. Website-Hits/Tag
  • Vorhersage: erwartete Rate oder Intensität (nicht ganzzahlig)
    • erwartete # Strafzettel; erwartete Hits/Tag
Überwachtes Lernen in R: Regression

Poisson vs. Quasi-Poisson

  • Poisson nimmt an, dass mean(y) = var(y)
  • Wenn var(y) stark von mean(y) abweicht → quasipoisson
  • Benötigt in der Regel eine große Stichprobe
  • Wenn Raten/Zählungen >> 0, ist normale Regression ok
Überwachtes Lernen in R: Regression

Beispiel: Fahrradverleih vorhersagen

Überwachtes Lernen in R: Regression

Modell fitten

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

Da var(cnt) >> mean(cnt) $\rightarrow$ quasipoisson verwenden

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

model <- glm(fmla, data = bikesJan, family = quasipoisson)
Überwachtes Lernen in R: Regression

Modellgüte prüfen

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

glance(model) %>%
  summarize(pseudoR2 = 1 - deviance/null.deviance)
   pseudoR2
1 0.7654358
Überwachtes Lernen in R: Regression

Aus dem Modell vorhersagen

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

Überwachtes Lernen in R: Regression

Modell bewerten

Du kannst Zählmodelle mit der RMSE bewerten

bikesFeb %>%
  mutate(residual = cnt - pred) %>%
  summarize(rmse = sqrt(mean(residual^2))) 
      rmse
1 69.32869
sd(bikesFeb$cnt)
134.2865
Überwachtes Lernen in R: Regression

Vorhersagen mit Istwerten vergleichen

Überwachtes Lernen in R: Regression

Lass uns üben!

Überwachtes Lernen in R: Regression

Preparing Video For Download...