uace-azmet / azmet-forecast-qa

Developing QA/QC routines for AZMet
0 stars 1 forks source link

Improve timeseries models #30

Closed Aariq closed 1 year ago

Aariq commented 1 year ago

The seasonal naive model is equivalent to ARIMA(0,0,0)(0,1,0) and is not a very good fit for a lot of the variables where autoregressive terms are probably important. One option is to use auto ARIMA to find the best ARIMA model for each variable once, then update that model with new data (using refit() or stream()) daily. Doing the initial auto ARIMA is super slow, however, likely because the seasonality with daily data is 365 days (actually it should be a non-integer value because of leap years).

Rob Hyndman discusses alternatives here:

In both blog posts he suggests two options: 1) Using a non-seasonal ARIMA model (i.e. ARIMA(?,?,?)(0,0,0)) with Fourier terms to handle the seasonality. The value of K for the Fourier term gets chosen in a for-loop by minimizing AICc 2) A model that does this automatically called TBATS.

TBATS is not implemented in the fable package because they are recommending FASSTER instead (https://github.com/tidyverts/fable/issues/41#issuecomment-537242121) for time series with multiple seasonalities. fasster isn't on CRAN, is currently failing build checks, and is marked as "experimental". So, I think I'll try to implement the Fourier term idea.