포아송 및 준포아송 회귀를 이용한 카운트 예측

R로 하는 Supervised Learning: 회귀

Nina Zumel and John Mount

Win-Vector, LLC

카운트 예측

  • 선형 회귀: $[-\infty, \infty]$ 범위의 값 예측
  • 카운트: $[0,\infty]$ 범위의 정수
R로 하는 Supervised Learning: 회귀

포아송/준포아송 회귀

glm(formula, data, family)
  • family: poisson 또는 quasipoisson
  • 입력값은 log(카운트)에 대해 가산적·선형적
R로 하는 Supervised Learning: 회귀

포아송/준포아송 회귀

glm(formula, data, family)
  • family: poisson 또는 quasipoisson
  • 입력값은 log(카운트)에 대해 가산적·선형적
  • 결과: _정수_
    • 카운트: 예) 운전자의 교통 위반 횟수
    • 비율: 예) 일별 웹사이트 방문 수
  • 예측: 기대 _비율_ 또는 _강도_ (정수 아님)
    • 예상 교통 위반 횟수, 예상 일별 방문 수
R로 하는 Supervised Learning: 회귀

포아송 vs. 준포아송

  • 포아송은 mean(y) = var(y)를 가정
  • var(y)mean(y)와 크게 다를 경우 - 준포아송 사용
  • 일반적으로 대용량 샘플이 필요
  • 비율/카운트 >> 0인 경우 - 일반 회귀도 적합
R로 하는 Supervised Learning: 회귀

예제: 자전거 대여 수요 예측

R로 하는 Supervised Learning: 회귀

모델 적합

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로 하는 Supervised Learning: 회귀

모델 적합도 확인

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

glance(model) %>%
  summarize(pseudoR2 = 1 - deviance/null.deviance)
   pseudoR2
1 0.7654358
R로 하는 Supervised Learning: 회귀

모델로 예측하기

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

R로 하는 Supervised Learning: 회귀

모델 평가

카운트 모델은 RMSE로 평가할 수 있습니다

bikesFeb %>%
  mutate(residual = cnt - pred) %>%
  summarize(rmse = sqrt(mean(residual^2))) 
      rmse
1 69.32869
sd(bikesFeb$cnt)
134.2865
R로 하는 Supervised Learning: 회귀

예측값과 실제값 비교

R로 하는 Supervised Learning: 회귀

연습해 봅시다!

R로 하는 Supervised Learning: 회귀

Preparing Video For Download...