Регресія Пуассона та квазипуассона для передбачення лічильників

Кероване навчання в R: регресія

Nina Zumel and John Mount

Win-Vector, LLC

Передбачення лічильників

  • Лінійна регресія: передбачає значення в $[-\infty, \infty]$
  • Лічильники: цілі числа в діапазоні $[0,\infty]$
Кероване навчання в R: регресія

Регресія Пуассона/квазипуассона

glm(formula, data, family)
  • family: poisson або quasipoisson
  • вхідні змінні адитивні та лінійні в log(count)
Кероване навчання в R: регресія

Регресія Пуассона/квазипуассона

glm(formula, data, family)
  • family: poisson або quasipoisson
  • вхідні змінні адитивні та лінійні в log(count)
  • ціль: ціле число
    • лічильники: напр., кількість штрафів водія
    • частоти: напр., кількість хітів сайту/день
  • передбачення: очікувана частота або інтенсивність (не ціле)
    • очікувана кількість штрафів; очікувані хіти/день
Кероване навчання в R: регресія

Пуассон vs. квазипуассон

  • Пуассон припускає, що mean(y) = var(y)
  • Якщо var(y) значно відрізняється від mean(y) — квазипуассон
  • Зазвичай потребує великої вибірки
  • Якщо частоти/лічильники >> 0 — звичайна регресія підходить
Кероване навчання в R: регресія

Приклад: передбачення прокатів велосипедів

Кероване навчання в R: регресія

Навчання моделі

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

Оскільки var(cnt) >> mean(cnt) $\rightarrow$ використайте quasipoisson

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

model <- glm(fmla, data = bikesJan, family = quasipoisson)
Кероване навчання в R: регресія

Перевірка якості моделі

$$ псевдо R^2 = 1 - \frac{deviance}{null.deviance} $$

glance(model) %>%
  summarize(pseudoR2 = 1 - deviance/null.deviance)
   pseudoR2
1 0.7654358
Кероване навчання в R: регресія

Передбачення за моделлю

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

Кероване навчання в R: регресія

Оцініть модель

Моделі лічильників можна оцінювати за RMSE

bikesFeb %>%
  mutate(residual = cnt - pred) %>%
  summarize(rmse = sqrt(mean(residual^2))) 
      rmse
1 69.32869
sd(bikesFeb$cnt)
134.2865
Кероване навчання в R: регресія

Порівняйте передбачення та фактичні значення

Кероване навчання в R: регресія

Давайте потренуємось!

Кероване навчання в R: регресія

Preparing Video For Download...