Регрессия Пуассона и квазипуассона для предсказания счётных данных

Обучение с учителем в 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$ используем квазипуассон

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

model <- glm(fmla, data = bikesJan, family = quasipoisson)
Обучение с учителем в R: регрессия

Проверка качества модели

$$ pseudo 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...