Forecast demand on baseline models
The baseline is the honest bar. If a causal model cannot beat a model that only looks at the demand series itself, the drivers are not earning their place.
Blue is actual demand, green is the forward forecast with its 95% interval. Each horizon is tuned and judged separately. MASE below 1 beats a seasonal-naive forecast.
Ten runs per fuel: five training windows, two horizons, SARIMAX against ETS on every one. The winner per horizon is the benchmark the causal model is scored against.
p=3 d=1 q=1 K=6 trend=n log=False| Window | Horizon | Model | MASE | MAPE | |
|---|---|---|---|---|---|
| 2000 | 12w | SARIMAX | 0.836 | 3.27% | |
| 2000 | 12w | ETS | 0.889 | 3.49% | |
| 2005 | 12w | SARIMAX | 0.848 | 3.31% | |
| 2005 | 12w | ETS | 0.919 | 3.61% | |
| 2010 | 12w | SARIMAX | 0.818 | 3.20% | winner |
| 2010 | 12w | ETS | 0.949 | 3.72% | |
| 2015 | 12w | SARIMAX | 0.839 | 3.29% | |
| 2015 | 12w | ETS | 1.001 | 3.92% | |
| 2020 | 12w | SARIMAX | 1.154 | 4.51% | |
| 2020 | 12w | ETS | 1.067 | 4.21% |
Drag to zoom, double-click to reset, click legend entries to hide series.
Bars split each week's forecast change against the last actual week into a seasonal part and an underlying level/trend part; the line is the net change.
| Component | Fitted values | What it explains |
|---|---|---|
| AR - autoregressive | p=3 (coef +0.41, +0.14, +0.07) | Momentum: this week's forecast leans on the previous 3 weeks of demand with these weights. |
| I - integrated / trend | d=1 | The model forecasts week-over-week changes, so the latest level is the baseline. |
| MA - moving average | q=1 (coef -0.94) | Shock smoothing: forecast errors from the last 1 week adjust this week's forecast, so one-off surprises fade instead of propagating. |
| S - seasonality (via X) | K=6 Fourier pairs, 947 kbd peak-to-trough | Repeating yearly cycle - the calendar's contribution to demand (summer driving, winter heating, holiday travel). |
| X - exogenous drivers | seasonal curves only | In this benchmark the only external inputs are the seasonal curves above. Price, activity and weather drivers enter in the causal model. |
p=0 d=1 q=2 K=6 trend=n log=False
err=add trend=add damped=True seas=mul log=False
p=1 d=1 q=1 K=6 trend=n log=False
err=add trend=add damped=False seas=mul log=False
err=add trend=add damped=False seas=mul log=False
p=1 d=1 q=2 K=6 trend=n log=False
err=add trend=add damped=False seas=mul log=False
p=0 d=1 q=3 K=6 trend=n log=False
err=add trend=add damped=False seas=None log=False
p=3 d=1 q=1 K=6 trend=c log=True| Window | Horizon | Model | MASE | MAPE | |
|---|---|---|---|---|---|
| 2000 | 24w | SARIMAX | 0.717 | 2.91% | winner |
| 2000 | 24w | ETS | 0.932 | 3.79% | |
| 2005 | 24w | SARIMAX | 0.722 | 2.93% | |
| 2005 | 24w | ETS | 0.843 | 3.43% | |
| 2010 | 24w | SARIMAX | 0.743 | 3.01% | |
| 2010 | 24w | ETS | 0.873 | 3.55% | |
| 2015 | 24w | SARIMAX | 0.794 | 3.20% | |
| 2015 | 24w | ETS | 0.921 | 3.75% | |
| 2020 | 24w | SARIMAX | 0.789 | 3.21% | |
| 2020 | 24w | ETS | 1.166 | 4.76% |
Drag to zoom, double-click to reset, click legend entries to hide series.
Bars split each week's forecast change against the last actual week into a seasonal part and an underlying level/trend part; the line is the net change.
| Component | Fitted values | What it explains |
|---|---|---|
| AR - autoregressive | p=3 (coef +0.48, +0.10, +0.10) | Momentum: this week's forecast leans on the previous 3 weeks of demand with these weights. |
| I - integrated / trend | d=1, intercept +4.78e-06 | The model forecasts week-over-week changes, so the latest level is the baseline. A fitted baseline trend is added on top. |
| MA - moving average | q=1 (coef -0.96) | Shock smoothing: forecast errors from the last 1 week adjust this week's forecast, so one-off surprises fade instead of propagating. |
| S - seasonality (via X) | K=6 Fourier pairs, 10.7% peak-to-trough | Repeating yearly cycle - the calendar's contribution to demand (summer driving, winter heating, holiday travel). |
| X - exogenous drivers | seasonal curves only | In this benchmark the only external inputs are the seasonal curves above. Price, activity and weather drivers enter in the causal model. |
err=mul trend=add damped=False seas=add log=False
p=3 d=1 q=1 K=6 trend=n log=True
err=mul trend=None damped=False seas=mul log=False
p=2 d=1 q=1 K=6 trend=n log=True
err=mul trend=None damped=False seas=mul log=False
p=3 d=1 q=3 K=6 trend=c log=True
err=mul trend=None damped=False seas=mul log=False
p=1 d=1 q=1 K=1 trend=n log=False
err=mul trend=add damped=True seas=mul log=False
p=2 d=0 q=0 K=3 trend=c log=False| Window | Horizon | Model | MASE | MAPE | |
|---|---|---|---|---|---|
| 2000 | 12w | SARIMAX | 0.863 | 7.00% | |
| 2000 | 12w | ETS | 0.908 | 7.30% | |
| 2005 | 12w | SARIMAX | 0.840 | 6.78% | winner |
| 2005 | 12w | ETS | 0.905 | 7.26% | |
| 2010 | 12w | SARIMAX | 0.882 | 7.03% | |
| 2010 | 12w | ETS | 0.903 | 7.24% | |
| 2015 | 12w | SARIMAX | 0.867 | 6.91% | |
| 2015 | 12w | ETS | 0.891 | 7.13% | |
| 2020 | 12w | SARIMAX | 0.844 | 6.71% | |
| 2020 | 12w | ETS | 0.878 | 6.95% |
Drag to zoom, double-click to reset, click legend entries to hide series.
Bars split each week's forecast change against the last actual week into a seasonal part and an underlying level/trend part; the line is the net change.
| Component | Fitted values | What it explains |
|---|---|---|
| AR - autoregressive | p=2 (coef +0.37, +0.18) | Momentum: this week's forecast leans on the previous 2 weeks of demand with these weights. |
| I - integrated / trend | d=0, intercept +1747 kbd | The model forecasts demand levels directly. A fitted baseline trend is added on top. |
| MA - moving average | q=0 | Not used: past forecast errors are not fed back in. |
| S - seasonality (via X) | K=3 Fourier pairs, 345 kbd peak-to-trough | Repeating yearly cycle - the calendar's contribution to demand (summer driving, winter heating, holiday travel). |
| X - exogenous drivers | seasonal curves only | In this benchmark the only external inputs are the seasonal curves above. Price, activity and weather drivers enter in the causal model. |
p=3 d=0 q=2 K=3 trend=c log=True
err=mul trend=add damped=False seas=add log=False
err=mul trend=add damped=False seas=add log=False
p=1 d=1 q=2 K=3 trend=n log=True
err=mul trend=add damped=False seas=add log=False
p=0 d=1 q=1 K=3 trend=n log=True
err=mul trend=add damped=False seas=add log=False
p=1 d=1 q=2 K=3 trend=c log=True
err=mul trend=None damped=False seas=mul log=False
p=1 d=0 q=0 K=5 trend=c log=False| Window | Horizon | Model | MASE | MAPE | |
|---|---|---|---|---|---|
| 2000 | 24w | SARIMAX | 0.819 | 6.75% | winner |
| 2000 | 24w | ETS | 0.893 | 7.28% | |
| 2005 | 24w | SARIMAX | 0.836 | 6.86% | |
| 2005 | 24w | ETS | 0.883 | 7.17% | |
| 2010 | 24w | SARIMAX | 0.857 | 7.00% | |
| 2010 | 24w | ETS | 0.894 | 7.27% | |
| 2015 | 24w | SARIMAX | 0.984 | 7.97% | |
| 2015 | 24w | ETS | 0.891 | 7.23% | |
| 2020 | 24w | SARIMAX | 0.836 | 6.78% | |
| 2020 | 24w | ETS | 0.841 | 6.73% |
Drag to zoom, double-click to reset, click legend entries to hide series.
Bars split each week's forecast change against the last actual week into a seasonal part and an underlying level/trend part; the line is the net change.
| Component | Fitted values | What it explains |
|---|---|---|
| AR - autoregressive | p=1 (coef +0.43) | Momentum: this week's forecast leans on the previous 1 week of demand with these weights. |
| I - integrated / trend | d=0, intercept +2203 kbd | The model forecasts demand levels directly. A fitted baseline trend is added on top. |
| MA - moving average | q=0 | Not used: past forecast errors are not fed back in. |
| S - seasonality (via X) | K=5 Fourier pairs, 410 kbd peak-to-trough | Repeating yearly cycle - the calendar's contribution to demand (summer driving, winter heating, holiday travel). |
| X - exogenous drivers | seasonal curves only | In this benchmark the only external inputs are the seasonal curves above. Price, activity and weather drivers enter in the causal model. |
err=mul trend=add damped=False seas=add log=False
p=3 d=0 q=0 K=5 trend=c log=False
err=mul trend=add damped=False seas=add log=False
p=1 d=0 q=1 K=3 trend=c log=True
err=mul trend=add damped=False seas=add log=False
p=3 d=1 q=0 K=3 trend=n log=True
err=mul trend=add damped=False seas=add log=False
p=1 d=0 q=2 K=3 trend=c log=True
err=mul trend=None damped=False seas=mul log=False
p=0 d=1 q=1 K=4 trend=n log=False| Window | Horizon | Model | MASE | MAPE | |
|---|---|---|---|---|---|
| 2000 | 12w | SARIMAX | 0.783 | 6.79% | |
| 2000 | 12w | ETS | 0.786 | 6.86% | |
| 2005 | 12w | SARIMAX | 0.773 | 6.71% | winner |
| 2005 | 12w | ETS | 0.782 | 6.82% | |
| 2010 | 12w | SARIMAX | 0.910 | 7.76% | |
| 2010 | 12w | ETS | 0.792 | 6.90% | |
| 2015 | 12w | SARIMAX | 1.050 | 8.97% | |
| 2015 | 12w | ETS | 0.845 | 7.35% | |
| 2020 | 12w | SARIMAX | 1.390 | 11.89% | |
| 2020 | 12w | ETS | 0.825 | 7.12% |
Drag to zoom, double-click to reset, click legend entries to hide series.
Bars split each week's forecast change against the last actual week into a seasonal part and an underlying level/trend part; the line is the net change.
| Component | Fitted values | What it explains |
|---|---|---|
| AR - autoregressive | p=0 | Not used: no direct carry-over from recent weeks. |
| I - integrated / trend | d=1 | The model forecasts week-over-week changes, so the latest level is the baseline. |
| MA - moving average | q=1 (coef -0.79) | Shock smoothing: forecast errors from the last 1 week adjust this week's forecast, so one-off surprises fade instead of propagating. |
| S - seasonality (via X) | K=4 Fourier pairs, 159 kbd peak-to-trough | Repeating yearly cycle - the calendar's contribution to demand (summer driving, winter heating, holiday travel). |
| X - exogenous drivers | seasonal curves only | In this benchmark the only external inputs are the seasonal curves above. Price, activity and weather drivers enter in the causal model. |
p=0 d=1 q=3 K=4 trend=c log=False
err=mul trend=None damped=False seas=add log=False
err=add trend=add damped=False seas=add log=False
p=2 d=0 q=1 K=6 trend=t log=False
err=mul trend=add damped=True seas=mul log=False
p=1 d=0 q=3 K=5 trend=n log=False
err=add trend=None damped=False seas=mul log=False
p=1 d=0 q=3 K=5 trend=n log=False
err=add trend=add damped=True seas=None log=False
err=mul trend=add damped=False seas=add log=False| Window | Horizon | Model | MASE | MAPE | |
|---|---|---|---|---|---|
| 2000 | 24w | SARIMAX | 0.816 | 7.16% | |
| 2000 | 24w | ETS | 0.779 | 6.94% | |
| 2005 | 24w | SARIMAX | 0.816 | 7.16% | |
| 2005 | 24w | ETS | 0.764 | 6.80% | winner |
| 2010 | 24w | SARIMAX | 0.799 | 7.01% | |
| 2010 | 24w | ETS | 0.768 | 6.75% | |
| 2015 | 24w | SARIMAX | 0.827 | 7.25% | |
| 2015 | 24w | ETS | 0.840 | 7.38% | |
| 2020 | 24w | SARIMAX | 0.944 | 8.30% | |
| 2020 | 24w | ETS | 1.031 | 9.18% |
Drag to zoom, double-click to reset, click legend entries to hide series.
Bars split each week's forecast change against the last actual week into a seasonal part and an underlying level/trend part; the line is the net change.
| Component | Fitted values | What it explains |
|---|---|---|
| Level (baseline) | current level 1,694 kbd, alpha=0.20 | The de-seasonalized baseline. Alpha 0.20 means 20% of each new week's surprise is absorbed into the baseline. |
| T - trend | +1.40 kbd/week | Current direction of travel of the baseline. |
| S - seasonality | add, 276 kbd peak-to-trough | Repeating yearly cycle - the calendar's contribution to demand. |
| E - error | multiplicative | How week-to-week noise is treated: a wobble proportional to the demand level. |
| X - exogenous drivers | none | ETS uses the demand history only. Price, activity and weather drivers enter in the causal model. |
p=3 d=1 q=0 K=4 trend=n log=True
err=mul trend=add damped=False seas=add log=False
p=3 d=1 q=2 K=4 trend=n log=True
p=0 d=1 q=3 K=2 trend=n log=False
err=mul trend=add damped=True seas=mul log=False
p=2 d=1 q=2 K=2 trend=n log=False
err=mul trend=add damped=True seas=mul log=False
p=0 d=1 q=3 K=2 trend=n log=False
err=mul trend=add damped=False seas=add log=False
What goes into this stage, what happens, and what comes out.