Regresión Poisson y quasipoisson para predecir recuentos

Aprendizaje supervisado en R: Regresión

Nina Zumel and John Mount

Win-Vector, LLC

Predicción de recuentos

  • Regresión lineal: predice valores en $[-\infty, \infty]$
  • Recuentos: enteros en $[0,\infty]$
Aprendizaje supervisado en R: Regresión

Regresión Poisson/Quasipoisson

glm(formula, data, family)
  • family: poisson o quasipoisson
  • entradas aditivas y lineales en log(count)
Aprendizaje supervisado en R: Regresión

Regresión Poisson/Quasipoisson

glm(formula, data, family)
  • family: poisson o quasipoisson
  • entradas aditivas y lineales en log(count)
  • variable objetivo: entera
    • recuentos: p. ej., número de multas de tráfico de una persona
    • tasas: p. ej., visitas web/día
  • predicción: tasa o intensidad esperada (no entera)
    • nº esperado de multas; visitas/día esperadas
Aprendizaje supervisado en R: Regresión

Poisson vs. Quasipoisson

  • Poisson asume que mean(y) = var(y)
  • Si var(y) difiere mucho de mean(y), usa quasipoisson
  • Suele requerir un tamaño muestral grande
  • Si las tasas/recuentos >> 0, la regresión normal vale
Aprendizaje supervisado en R: Regresión

Ejemplo: predecir alquileres de bicis

Aprendizaje supervisado en R: Regresión

Ajusta el modelo

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

Como var(cnt) >> mean(cnt) $\rightarrow$ usa quasipoisson

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

model <- glm(fmla, data = bikesJan, family = quasipoisson)
Aprendizaje supervisado en R: Regresión

Comprueba el ajuste

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

glance(model) %>%
  summarize(pseudoR2 = 1 - deviance/null.deviance)
   pseudoR2
1 0.7654358
Aprendizaje supervisado en R: Regresión

Predecir con el modelo

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

Aprendizaje supervisado en R: Regresión

Evalúa el modelo

Puedes evaluar modelos de recuento con RMSE

bikesFeb %>%
  mutate(residual = cnt - pred) %>%
  summarize(rmse = sqrt(mean(residual^2))) 
      rmse
1 69.32869
sd(bikesFeb$cnt)
134.2865
Aprendizaje supervisado en R: Regresión

Compara predicciones y valores reales

Aprendizaje supervisado en R: Regresión

¡Vamos a practicar!

Aprendizaje supervisado en R: Regresión

Preparing Video For Download...