Baseline Forecasting

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.

Winning benchmark per fuel

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.

Gasoline SARIMAX0.818 MASE
Next 12 weeks: average 8,696 kb/d↓ 0.1% vs last actual
Gasoline SARIMAX0.717 MASE
Next 24 weeks: average 8,607 kb/d↓ 5.3% vs last actual
All runs for gasoline →
Distillate (diesel) SARIMAX0.840 MASE
Next 12 weeks: average 3,827 kb/d↓ 2.3% vs last actual
Distillate (diesel) SARIMAX0.819 MASE
Next 24 weeks: average 3,853 kb/d↑ 3.2% vs last actual
All runs for distillate (diesel) →
Jet fuel SARIMAX0.773 MASE
Next 12 weeks: average 1,735 kb/d↑ 8.0% vs last actual
Jet fuel ETS0.764 MASE
Next 24 weeks: average 1,725 kb/d↑ 5.6% vs last actual
All runs for jet fuel →

All runs per fuel

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.

SARIMAX, trained from 2010, 12-week horizon: test MASE 0.818. Beats seasonal-naive by 18%. This is the bar the causal model has to clear.
p=3 d=1 q=1 K=6 trend=n log=False

All runs, 12 weeks

WindowHorizonModelMASEMAPE
200012wSARIMAX0.8363.27%
200012wETS0.8893.49%
200512wSARIMAX0.8483.31%
200512wETS0.9193.61%
201012wSARIMAX0.8183.20%winner
201012wETS0.9493.72%
201512wSARIMAX0.8393.29%
201512wETS1.0013.92%
202012wSARIMAX1.1544.51%
202012wETS1.0674.21%

Best run: 2010, 12 weeks

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.

What each model component contributes

ComponentFitted valuesWhat it explains
AR - autoregressivep=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 / trendd=1The model forecasts week-over-week changes, so the latest level is the baseline.
MA - moving averageq=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-troughRepeating yearly cycle - the calendar's contribution to demand (summer driving, winter heating, holiday travel).
X - exogenous driversseasonal curves onlyIn this benchmark the only external inputs are the seasonal curves above. Price, activity and weather drivers enter in the causal model.

Other runs

2000 · SARIMAX · MASE 0.836

p=0 d=1 q=2 K=6 trend=n log=False

2000 · ETS · MASE 0.889

err=add trend=add damped=True seas=mul log=False

2005 · SARIMAX · MASE 0.848

p=1 d=1 q=1 K=6 trend=n log=False

2005 · ETS · MASE 0.919

err=add trend=add damped=False seas=mul log=False

2010 · ETS · MASE 0.949

err=add trend=add damped=False seas=mul log=False

2015 · SARIMAX · MASE 0.839

p=1 d=1 q=2 K=6 trend=n log=False

2015 · ETS · MASE 1.001

err=add trend=add damped=False seas=mul log=False

2020 · SARIMAX · MASE 1.154

p=0 d=1 q=3 K=6 trend=n log=False

2020 · ETS · MASE 1.067

err=add trend=add damped=False seas=None log=False

SARIMAX, trained from 2000, 24-week horizon: test MASE 0.717. Beats seasonal-naive by 28%. This is the bar the causal model has to clear.
p=3 d=1 q=1 K=6 trend=c log=True

All runs, 24 weeks

WindowHorizonModelMASEMAPE
200024wSARIMAX0.7172.91%winner
200024wETS0.9323.79%
200524wSARIMAX0.7222.93%
200524wETS0.8433.43%
201024wSARIMAX0.7433.01%
201024wETS0.8733.55%
201524wSARIMAX0.7943.20%
201524wETS0.9213.75%
202024wSARIMAX0.7893.21%
202024wETS1.1664.76%

Best run: 2000, 24 weeks

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.

What each model component contributes

ComponentFitted valuesWhat it explains
AR - autoregressivep=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 / trendd=1, intercept +4.78e-06The model forecasts week-over-week changes, so the latest level is the baseline. A fitted baseline trend is added on top.
MA - moving averageq=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-troughRepeating yearly cycle - the calendar's contribution to demand (summer driving, winter heating, holiday travel).
X - exogenous driversseasonal curves onlyIn this benchmark the only external inputs are the seasonal curves above. Price, activity and weather drivers enter in the causal model.

Other runs

2000 · ETS · MASE 0.932

err=mul trend=add damped=False seas=add log=False

2005 · SARIMAX · MASE 0.722

p=3 d=1 q=1 K=6 trend=n log=True

2005 · ETS · MASE 0.843

err=mul trend=None damped=False seas=mul log=False

2010 · SARIMAX · MASE 0.743

p=2 d=1 q=1 K=6 trend=n log=True

2010 · ETS · MASE 0.873

err=mul trend=None damped=False seas=mul log=False

2015 · SARIMAX · MASE 0.794

p=3 d=1 q=3 K=6 trend=c log=True

2015 · ETS · MASE 0.921

err=mul trend=None damped=False seas=mul log=False

2020 · SARIMAX · MASE 0.789

p=1 d=1 q=1 K=1 trend=n log=False

2020 · ETS · MASE 1.166

err=mul trend=add damped=True seas=mul log=False

SARIMAX, trained from 2005, 12-week horizon: test MASE 0.840. Beats seasonal-naive by 16%. This is the bar the causal model has to clear.
p=2 d=0 q=0 K=3 trend=c log=False

All runs, 12 weeks

WindowHorizonModelMASEMAPE
200012wSARIMAX0.8637.00%
200012wETS0.9087.30%
200512wSARIMAX0.8406.78%winner
200512wETS0.9057.26%
201012wSARIMAX0.8827.03%
201012wETS0.9037.24%
201512wSARIMAX0.8676.91%
201512wETS0.8917.13%
202012wSARIMAX0.8446.71%
202012wETS0.8786.95%

Best run: 2005, 12 weeks

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.

What each model component contributes

ComponentFitted valuesWhat it explains
AR - autoregressivep=2 (coef +0.37, +0.18)Momentum: this week's forecast leans on the previous 2 weeks of demand with these weights.
I - integrated / trendd=0, intercept +1747 kbdThe model forecasts demand levels directly. A fitted baseline trend is added on top.
MA - moving averageq=0Not used: past forecast errors are not fed back in.
S - seasonality (via X)K=3 Fourier pairs, 345 kbd peak-to-troughRepeating yearly cycle - the calendar's contribution to demand (summer driving, winter heating, holiday travel).
X - exogenous driversseasonal curves onlyIn this benchmark the only external inputs are the seasonal curves above. Price, activity and weather drivers enter in the causal model.

Other runs

2000 · SARIMAX · MASE 0.863

p=3 d=0 q=2 K=3 trend=c log=True

2000 · ETS · MASE 0.908

err=mul trend=add damped=False seas=add log=False

2005 · ETS · MASE 0.905

err=mul trend=add damped=False seas=add log=False

2010 · SARIMAX · MASE 0.882

p=1 d=1 q=2 K=3 trend=n log=True

2010 · ETS · MASE 0.903

err=mul trend=add damped=False seas=add log=False

2015 · SARIMAX · MASE 0.867

p=0 d=1 q=1 K=3 trend=n log=True

2015 · ETS · MASE 0.891

err=mul trend=add damped=False seas=add log=False

2020 · SARIMAX · MASE 0.844

p=1 d=1 q=2 K=3 trend=c log=True

2020 · ETS · MASE 0.878

err=mul trend=None damped=False seas=mul log=False

SARIMAX, trained from 2000, 24-week horizon: test MASE 0.819. Beats seasonal-naive by 18%. This is the bar the causal model has to clear.
p=1 d=0 q=0 K=5 trend=c log=False

All runs, 24 weeks

WindowHorizonModelMASEMAPE
200024wSARIMAX0.8196.75%winner
200024wETS0.8937.28%
200524wSARIMAX0.8366.86%
200524wETS0.8837.17%
201024wSARIMAX0.8577.00%
201024wETS0.8947.27%
201524wSARIMAX0.9847.97%
201524wETS0.8917.23%
202024wSARIMAX0.8366.78%
202024wETS0.8416.73%

Best run: 2000, 24 weeks

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.

What each model component contributes

ComponentFitted valuesWhat it explains
AR - autoregressivep=1 (coef +0.43)Momentum: this week's forecast leans on the previous 1 week of demand with these weights.
I - integrated / trendd=0, intercept +2203 kbdThe model forecasts demand levels directly. A fitted baseline trend is added on top.
MA - moving averageq=0Not used: past forecast errors are not fed back in.
S - seasonality (via X)K=5 Fourier pairs, 410 kbd peak-to-troughRepeating yearly cycle - the calendar's contribution to demand (summer driving, winter heating, holiday travel).
X - exogenous driversseasonal curves onlyIn this benchmark the only external inputs are the seasonal curves above. Price, activity and weather drivers enter in the causal model.

Other runs

2000 · ETS · MASE 0.893

err=mul trend=add damped=False seas=add log=False

2005 · SARIMAX · MASE 0.836

p=3 d=0 q=0 K=5 trend=c log=False

2005 · ETS · MASE 0.883

err=mul trend=add damped=False seas=add log=False

2010 · SARIMAX · MASE 0.857

p=1 d=0 q=1 K=3 trend=c log=True

2010 · ETS · MASE 0.894

err=mul trend=add damped=False seas=add log=False

2015 · SARIMAX · MASE 0.984

p=3 d=1 q=0 K=3 trend=n log=True

2015 · ETS · MASE 0.891

err=mul trend=add damped=False seas=add log=False

2020 · SARIMAX · MASE 0.836

p=1 d=0 q=2 K=3 trend=c log=True

2020 · ETS · MASE 0.841

err=mul trend=None damped=False seas=mul log=False

SARIMAX, trained from 2005, 12-week horizon: test MASE 0.773. Beats seasonal-naive by 23%. This is the bar the causal model has to clear.
p=0 d=1 q=1 K=4 trend=n log=False

All runs, 12 weeks

WindowHorizonModelMASEMAPE
200012wSARIMAX0.7836.79%
200012wETS0.7866.86%
200512wSARIMAX0.7736.71%winner
200512wETS0.7826.82%
201012wSARIMAX0.9107.76%
201012wETS0.7926.90%
201512wSARIMAX1.0508.97%
201512wETS0.8457.35%
202012wSARIMAX1.39011.89%
202012wETS0.8257.12%

Best run: 2005, 12 weeks

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.

What each model component contributes

ComponentFitted valuesWhat it explains
AR - autoregressivep=0Not used: no direct carry-over from recent weeks.
I - integrated / trendd=1The model forecasts week-over-week changes, so the latest level is the baseline.
MA - moving averageq=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-troughRepeating yearly cycle - the calendar's contribution to demand (summer driving, winter heating, holiday travel).
X - exogenous driversseasonal curves onlyIn this benchmark the only external inputs are the seasonal curves above. Price, activity and weather drivers enter in the causal model.

Other runs

2000 · SARIMAX · MASE 0.783

p=0 d=1 q=3 K=4 trend=c log=False

2000 · ETS · MASE 0.786

err=mul trend=None damped=False seas=add log=False

2005 · ETS · MASE 0.782

err=add trend=add damped=False seas=add log=False

2010 · SARIMAX · MASE 0.910

p=2 d=0 q=1 K=6 trend=t log=False

2010 · ETS · MASE 0.792

err=mul trend=add damped=True seas=mul log=False

2015 · SARIMAX · MASE 1.050

p=1 d=0 q=3 K=5 trend=n log=False

2015 · ETS · MASE 0.845

err=add trend=None damped=False seas=mul log=False

2020 · SARIMAX · MASE 1.390

p=1 d=0 q=3 K=5 trend=n log=False

2020 · ETS · MASE 0.825

err=add trend=add damped=True seas=None log=False

ETS, trained from 2005, 24-week horizon: test MASE 0.764. Beats seasonal-naive by 24%. This is the bar the causal model has to clear.
err=mul trend=add damped=False seas=add log=False

All runs, 24 weeks

WindowHorizonModelMASEMAPE
200024wSARIMAX0.8167.16%
200024wETS0.7796.94%
200524wSARIMAX0.8167.16%
200524wETS0.7646.80%winner
201024wSARIMAX0.7997.01%
201024wETS0.7686.75%
201524wSARIMAX0.8277.25%
201524wETS0.8407.38%
202024wSARIMAX0.9448.30%
202024wETS1.0319.18%

Best run: 2005, 24 weeks

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.

What each model component contributes

ComponentFitted valuesWhat it explains
Level (baseline)current level 1,694 kbd, alpha=0.20The de-seasonalized baseline. Alpha 0.20 means 20% of each new week's surprise is absorbed into the baseline.
T - trend+1.40 kbd/weekCurrent direction of travel of the baseline.
S - seasonalityadd, 276 kbd peak-to-troughRepeating yearly cycle - the calendar's contribution to demand.
E - errormultiplicativeHow week-to-week noise is treated: a wobble proportional to the demand level.
X - exogenous driversnoneETS uses the demand history only. Price, activity and weather drivers enter in the causal model.

Other runs

2000 · SARIMAX · MASE 0.816

p=3 d=1 q=0 K=4 trend=n log=True

2000 · ETS · MASE 0.779

err=mul trend=add damped=False seas=add log=False

2005 · SARIMAX · MASE 0.816

p=3 d=1 q=2 K=4 trend=n log=True

2010 · SARIMAX · MASE 0.799

p=0 d=1 q=3 K=2 trend=n log=False

2010 · ETS · MASE 0.768

err=mul trend=add damped=True seas=mul log=False

2015 · SARIMAX · MASE 0.827

p=2 d=1 q=2 K=2 trend=n log=False

2015 · ETS · MASE 0.840

err=mul trend=add damped=True seas=mul log=False

2020 · SARIMAX · MASE 0.944

p=0 d=1 q=3 K=2 trend=n log=False

2020 · ETS · MASE 1.031

err=mul trend=add damped=False seas=add log=False

Stage 02Forecast demand on baseline models

What goes into this stage, what happens, and what comes out.

What goes in

  • Weekly product supplied for gasoline, distillate and jet fuel
  • Nothing else: no drivers, no exogenous inputs

What happens

  • Fit SARIMAX and ETS per fuel on rolling training windows
  • Tune each model on the same windows the causal model will face
  • Produce point forecasts and prediction intervals per horizon

What comes out

  • The accuracy floor per fuel, window and horizon
  • Interval coverage to compare calibration later
statsmodelsSARIMAXETSRolling originSee all four stages on the home page →