1

I've got time series 3 years long, there is seasonal uplift during December - but it's not so clear. Seasonal test fails.

I train model twice without setting any parameter:

auto.arima(tsData, trace = TRUE)

ARIMA(2,1,2)(0,0,1)[52] : 2294.794 Best model: ARIMA(2,1,2)(0,0,1)[52]

and with capital D set to one:

auto.arima(tsData, D=1, trace = TRUE)
ARIMA(1,1,1)(1,1,0)[52]                    : 1710.966
Best model: ARIMA(1,1,1)(1,1,0)[52]   

Model has much lower AIC, and it generally looks better - it reflects seasonal drop.

What is explanation behind this results? Why doesn't auto.arima find this model? Is there any technique to use this effect besides always training two models and picking the one with smaller AIC?

Richard Hardy
  • 67,272

1 Answers1

1

Setting D=1 forces seasonality: https://stackoverflow.com/q/37046275/452096 If you do not force it, auto.arima() decides whether to use seasonality or not through an OSCB test: Seasonality not taken account of in `auto.arima()`

Here is the important detail: auto.arima() does not look for smaller AIC in this decision, as it does when comparing ARMA orders. That is because you cannot compare AIC values between models with different orders of differencing (whether seasonal or not), because after differencing the series is on a completely different scale.

auto.arima() is typically quite good at dealing with seasonality, so if it decides not to use seasonal differencing, then any seasonal signal is likely very weak, possibly so weak as to be useless for forecasting. So I would only force seasonality in very special cases.

As Richard Hardy notes, seasonal ARIMA is usually not a very good choice for "long" seasonality. The blog post from Rob Hyndman is very helpful; you may also find this useful.

Alternatively, you could run a regression on Christmas dummies and model the residuals from that using auto.arima().

Stephan Kolassa
  • 123,354