We compared accuracy and speed against pmdarima, Rob Hyndman's forecast package and Facebook's Prophet. We used the Daily
, Hourly
and Weekly
data from the M4 competition.
The following table summarizes the results. As can be seen, our auto_arima
is the best model in accuracy (measured by the MASE
loss) and time, even compared with the original implementation in R.
dataset | metric | auto_arima_nixtla | auto_arima_pmdarima [1] | auto_arima_r | prophet |
---|---|---|---|---|---|
Daily | MASE | 3.26 | 3.35 | 4.46 | 14.26 |
Daily | time | 1.41 | 27.61 | 1.81 | 514.33 |
Hourly | MASE | 0.92 | --- | 1.02 | 1.78 |
Hourly | time | 12.92 | --- | 23.95 | 17.27 |
Weekly | MASE | 2.34 | 2.47 | 2.58 | 7.29 |
Weekly | time | 0.42 | 2.92 | 0.22 | 19.82 |
[1] The model auto_arima
from pmdarima
had a problem with Hourly data. An issue was opened.
The following table summarizes the data details.
group | n_series | mean_length | std_length | min_length | max_length |
---|---|---|---|---|---|
Daily | 4,227 | 2,371 | 1,756 | 107 | 9,933 |
Hourly | 414 | 901 | 127 | 748 | 1,008 |
Weekly | 359 | 1,035 | 707 | 93 | 2,610 |
We measured the computational time against the number of time series. The following graph shows the results. As we can see, the fastest model is our auto_arima
.
You can reproduce the results here.
Results with external regressors are qualitatively similar to the ones reported before. You can find the complete experiments here.
To reproduce the main results you have:
- Execute
make init
to create a Docker image with the required dependencies. - Run the experiments using
make run_module module="python -m src.[model] --dataset M4 --group [group]"
where[model]
can bestatsforecast
,pmdarima
andprophet
, and[group]
can beDaily
,Hourly
andWeekly
. - To run R experiments you have to prepare the data using
make run_module module="python -m src.data --dataset M4 --group [group]"
for each[group]
. Once it is done, just runmake run_module module="Rscript src/arima_r.R [group]"
. - Finally, you can evaluate the forecasts using
make run_module module ="python -m src.evaluation"
.