Causal forecast, drivers and benchmarking
A causal SARIMAX per fuel takes the DAG-selected drivers as regressors and is scored against the baseline on identical rolling-origin backtests, ten training-window and horizon combinations per fuel.
Blue is actual demand, green is the baseline forecast (drivers held at their last value) with its 95% interval. Scenario percentages are each branch's largest deviation from the baseline inside its horizon.
Same ten windows and horizons as the benchmark. MASE is scored with drivers held at their last value, so it is directly comparable with the benchmark; the known-drivers score is the upper bound.
p=1 d=1 q=1 K=6 trend=n log=True · drivers: p_gas_l8, vmt_l0, ev_demand_l0, ev_supply_l0| Window | Horizon | MASE (held) | MASE (known) | MASE (blend) | MAPE (held) | Benchmark MASE | vs benchmark | |
|---|---|---|---|---|---|---|---|---|
| 2000 | 12w | 0.785 | 0.776 | 0.778 | 3.07% | 0.836 (SARIMAX) | +6.1% | |
| 2005 | 12w | 0.783 | 0.720 | 0.780 | 3.10% | 0.848 (SARIMAX) | +7.6% | best |
| 2010 | 12w | 0.787 | 0.745 | 0.775 | 3.11% | 0.818 (SARIMAX) | +3.7% | |
| 2015 | 12w | 0.854 | 0.842 | 0.839 | 3.33% | 0.839 (SARIMAX) | -1.8% | |
| 2020 | 12w | 0.850 | 0.856 | 0.863 | 3.37% | 1.067 (ETS) | +20.3% |
Drag to zoom, double-click to reset, click legend entries to hide series. Solid test line: future drivers held at their last value (honest). Dashed: actual future drivers fed in (upper bound).
Bars split each week's forecast change against the last actual week into seasonality, each driver family and the underlying level/trend; the line is the net change.
| Driver | Fitted coefficient | What it means |
|---|---|---|
| X - Prices: retail gasoline price (8-week lag) | elasticity -0.028 (not significant) | A 10% rise in retail gasoline price (8-week lag) moves demand -0.3%. |
| X - Activity: vehicle miles travelled (mobility) (same week) | elasticity +0.449 (significant) | A 10% rise in vehicle miles travelled (mobility) (same week) moves demand +4.5%. |
| X - Events: demand-shock weeks (9/11, GFC, COVID) (same week) | -4.9% in flagged weeks (significant) | Demand in demand-shock weeks (9/11, GFC, COVID) runs -4.9% vs a normal week. |
| X - Events: supply-disruption weeks (hurricanes, freezes, outages) (same week) | -0.0% in flagged weeks (not significant) | Demand in supply-disruption weeks (hurricanes, freezes, outages) runs -0.0% vs a normal week. |
| Component | Fitted values | What it explains |
|---|---|---|
| AR - autoregressive | p=1 (coef +0.31) | Momentum: this week's forecast leans on the previous 1 week 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.90) | Shock smoothing: forecast errors from the last 1 week adjust this week's forecast. |
| S - seasonality (via X) | K=6 Fourier pairs, 5.0% peak-to-trough | Repeating yearly cycle - the calendar's contribution to demand. |
| X - Prices: retail gasoline price (8-week lag) | elasticity -0.028 (not significant) | A 10% rise in retail gasoline price (8-week lag) moves demand -0.3%. |
| X - Activity: vehicle miles travelled (mobility) (same week) | elasticity +0.449 (significant) | A 10% rise in vehicle miles travelled (mobility) (same week) moves demand +4.5%. |
| X - Events: demand-shock weeks (9/11, GFC, COVID) (same week) | -4.9% in flagged weeks (significant) | Demand in demand-shock weeks (9/11, GFC, COVID) runs -4.9% vs a normal week. |
| X - Events: supply-disruption weeks (hurricanes, freezes, outages) (same week) | -0.0% in flagged weeks (not significant) | Demand in supply-disruption weeks (hurricanes, freezes, outages) runs -0.0% vs a normal week. |
| Estimand | Adjust for (backdoor) | Coefficient | Effect of the scenario shock | Refutations (should be near 0 / unchanged) | Sensitivity |
|---|---|---|---|---|---|
| WTI +25% -> gasoline demand (8-week lag) | crude_prod, crude_stk, macro | -0.0162 (p=0.003) | -0.36% | placebo +0.000 · subset -0.017 · +cause -0.016 | [-0.154, -0.018] · 5 valid sets: [-0.016, -0.016] |
| IPI -5% -> gasoline demand (4-week lag) | ev_demand | -0.1721 (p=0.668) | +0.89% | placebo +0.000 · subset -0.169 · +cause -0.173 | [-1.133, -0.225] · 3 valid sets: [-0.172, -0.172] |
| utilization -10 pts -> gasoline output | (none needed) | +0.0034 (p=0.000) | -3.37% | placebo -0.000 · subset +0.003 · +cause +0.003 | [+0.003, +0.004] · 10 valid sets: [+0.003, +0.003] |
Coefficients are elasticities on year-on-year log changes (utilization in points), COVID window excluded. Placebo should be near 0; subset and random-cause should stay close to the estimate; the sweep shows the estimate's range under small unobserved confounders.
Same fitted model, four driver paths. Only the drivers change along each scenario's DAG chain.
| Branch | What changes | Peak effect vs baseline | Week 12: forecast → effect |
|---|---|---|---|
| Oil Shock | WTI +25% -> gasoline demand (8-week lag): DoWhy effect -0.36% (adjusted for crude_prod, crude_stk, macro), phased in over 8 weeks | -32 (-0.36%) in week 11 | 8,421 → -30 (-0.36%) |
| Refinery Down | utilization -10 pts -> supply-event flag on for 2 weeks, crack -3.4 $/bbl, p_gas -2.9%, p_dsl -3.6%, p_jet -5.6% | +7 (+0.08%) in week 9 | 8,451 → +0 (+0.00%) |
| Slowdown | IPI -5% -> gasoline demand (4-week lag): DoWhy effect +0.89% (adjusted for ev_demand), phased in over 4 weeks | +78 (+0.89%) in week 11 | 8,526 → +75 (+0.89%) |
p=3 d=1 q=2 K=6 trend=n log=False
p=2 d=1 q=2 K=4 trend=n log=True
p=3 d=1 q=2 K=6 trend=n log=False
p=2 d=1 q=2 K=1 trend=t log=False
p=3 d=1 q=2 K=6 trend=n log=False · drivers: p_gas_l8, vmt_l0, ev_demand_l0, ev_supply_l0| Window | Horizon | MASE (held) | MASE (known) | MASE (blend) | MAPE (held) | Benchmark MASE | vs benchmark | |
|---|---|---|---|---|---|---|---|---|
| 2000 | 24w | 0.686 | 0.701 | 0.692 | 2.79% | 0.717 (SARIMAX) | +4.3% | best |
| 2005 | 24w | 0.759 | 0.710 | 0.728 | 3.08% | 0.722 (SARIMAX) | -5.1% | |
| 2010 | 24w | 0.743 | 0.698 | 0.722 | 3.01% | 0.743 (SARIMAX) | -0.1% | |
| 2015 | 24w | 0.784 | 0.705 | 0.741 | 3.17% | 0.794 (SARIMAX) | +1.2% | |
| 2020 | 24w | 0.765 | 0.749 | 0.818 | 3.10% | 0.789 (SARIMAX) | +3.0% |
Drag to zoom, double-click to reset, click legend entries to hide series. Solid test line: future drivers held at their last value (honest). Dashed: actual future drivers fed in (upper bound).
Bars split each week's forecast change against the last actual week into seasonality, each driver family and the underlying level/trend; the line is the net change.
| Driver | Fitted coefficient | What it means |
|---|---|---|
| X - Prices: retail gasoline price (8-week lag) | +401.4 kbd per log-unit (significant) | A 10% rise in retail gasoline price (8-week lag) moves demand +38 kbd. |
| X - Activity: vehicle miles travelled (mobility) (same week) | +1539.7 kbd per log-unit (significant) | A 10% rise in vehicle miles travelled (mobility) (same week) moves demand +147 kbd. |
| X - Events: demand-shock weeks (9/11, GFC, COVID) (same week) | +8 kbd in flagged weeks (not significant) | Demand in demand-shock weeks (9/11, GFC, COVID) runs +8 kbd vs a normal week. |
| X - Events: supply-disruption weeks (hurricanes, freezes, outages) (same week) | +98 kbd in flagged weeks (not significant) | Demand in supply-disruption weeks (hurricanes, freezes, outages) runs +98 kbd vs a normal week. |
| Component | Fitted values | What it explains |
|---|---|---|
| AR - autoregressive | p=3 (coef +0.98, -0.10, +0.01) | 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=2 (coef -1.60, +0.61) | Shock smoothing: forecast errors from the last 2 weeks adjust this week's forecast. |
| S - seasonality (via X) | K=6 Fourier pairs, 563 kbd peak-to-trough | Repeating yearly cycle - the calendar's contribution to demand. |
| X - Prices: retail gasoline price (8-week lag) | +401.4 kbd per log-unit (significant) | A 10% rise in retail gasoline price (8-week lag) moves demand +38 kbd. |
| X - Activity: vehicle miles travelled (mobility) (same week) | +1539.7 kbd per log-unit (significant) | A 10% rise in vehicle miles travelled (mobility) (same week) moves demand +147 kbd. |
| X - Events: demand-shock weeks (9/11, GFC, COVID) (same week) | +8 kbd in flagged weeks (not significant) | Demand in demand-shock weeks (9/11, GFC, COVID) runs +8 kbd vs a normal week. |
| X - Events: supply-disruption weeks (hurricanes, freezes, outages) (same week) | +98 kbd in flagged weeks (not significant) | Demand in supply-disruption weeks (hurricanes, freezes, outages) runs +98 kbd vs a normal week. |
| Estimand | Adjust for (backdoor) | Coefficient | Effect of the scenario shock | Refutations (should be near 0 / unchanged) | Sensitivity |
|---|---|---|---|---|---|
| WTI +25% -> gasoline demand (8-week lag) | crude_prod, crude_stk, macro | -0.0162 (p=0.003) | -0.36% | placebo +0.000 · subset -0.017 · +cause -0.016 | [-0.154, -0.018] · 5 valid sets: [-0.016, -0.016] |
| IPI -5% -> gasoline demand (4-week lag) | ev_demand | -0.1721 (p=0.668) | +0.89% | placebo +0.000 · subset -0.169 · +cause -0.173 | [-1.133, -0.225] · 3 valid sets: [-0.172, -0.172] |
| utilization -10 pts -> gasoline output | (none needed) | +0.0034 (p=0.000) | -3.37% | placebo -0.000 · subset +0.003 · +cause +0.003 | [+0.003, +0.004] · 10 valid sets: [+0.003, +0.003] |
Coefficients are elasticities on year-on-year log changes (utilization in points), COVID window excluded. Placebo should be near 0; subset and random-cause should stay close to the estimate; the sweep shows the estimate's range under small unobserved confounders.
Same fitted model, four driver paths. Only the drivers change along each scenario's DAG chain.
| Branch | What changes | Peak effect vs baseline | Week 24: forecast → effect |
|---|---|---|---|
| Oil Shock | WTI +25% -> gasoline demand (8-week lag): DoWhy effect -0.36% (adjusted for crude_prod, crude_stk, macro), phased in over 8 weeks | -32 (-0.36%) in week 11 | 8,286 → -30 (-0.36%) |
| Refinery Down | utilization -10 pts -> supply-event flag on for 2 weeks, crack -3.4 $/bbl, p_gas -2.9%, p_dsl -3.6%, p_jet -5.6% | +98 (+1.10%) in week 1 | 8,316 → +0 (+0.00%) |
| Slowdown | IPI -5% -> gasoline demand (4-week lag): DoWhy effect +0.89% (adjusted for ev_demand), phased in over 4 weeks | +78 (+0.89%) in week 11 | 8,390 → +74 (+0.89%) |
p=2 d=1 q=2 K=4 trend=c log=True
p=2 d=1 q=2 K=4 trend=c log=True
p=3 d=1 q=3 K=4 trend=c log=True
p=3 d=1 q=3 K=2 trend=c log=True
p=2 d=1 q=3 K=3 trend=c log=True · drivers: hdd_anom_l0, ev_demand_l0, ev_supply_l0, pmi_l13| Window | Horizon | MASE (held) | MASE (known) | MASE (blend) | MAPE (held) | Benchmark MASE | vs benchmark | |
|---|---|---|---|---|---|---|---|---|
| 2000 | 12w | 0.872 | 0.884 | 0.871 | 6.97% | 0.863 (SARIMAX) | -1.1% | |
| 2005 | 12w | 0.931 | 0.938 | 0.928 | 7.44% | 0.840 (SARIMAX) | -10.8% | |
| 2010 | 12w | 0.933 | 0.947 | 0.922 | 7.45% | 0.882 (SARIMAX) | -5.8% | |
| 2015 | 12w | 0.897 | 0.908 | 0.884 | 7.16% | 0.867 (SARIMAX) | -3.5% | |
| 2020 | 12w | 0.829 | 0.841 | 0.843 | 6.59% | 0.844 (SARIMAX) | +1.9% | best |
Drag to zoom, double-click to reset, click legend entries to hide series. Solid test line: future drivers held at their last value (honest). Dashed: actual future drivers fed in (upper bound).
Bars split each week's forecast change against the last actual week into seasonality, each driver family and the underlying level/trend; the line is the net change.
| Driver | Fitted coefficient | What it means |
|---|---|---|
| X - Weather: heating-degree-day anomaly (same week) | +0.0413% per unit (not significant) | Each unit of heating-degree-day anomaly (same week) moves demand +0.041%. |
| X - Events: demand-shock weeks (9/11, GFC, COVID) (same week) | -8.3% in flagged weeks (significant) | Demand in demand-shock weeks (9/11, GFC, COVID) runs -8.3% vs a normal week. |
| X - Events: supply-disruption weeks (hurricanes, freezes, outages) (same week) | -3.4% in flagged weeks (not significant) | Demand in supply-disruption weeks (hurricanes, freezes, outages) runs -3.4% vs a normal week. |
| X - Activity: manufacturing PMI (leading) (13-week lag) | elasticity +0.256 (significant) | A 10% rise in manufacturing PMI (leading) (13-week lag) moves demand +2.6%. |
| Component | Fitted values | What it explains |
|---|---|---|
| AR - autoregressive | p=2 (coef -0.09, -0.73) | Momentum: this week's forecast leans on the previous 2 weeks of demand with these weights. |
| I - integrated / trend | d=1, intercept -4.45e-07 | 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=3 (coef -0.81, +0.56, -0.74) | Shock smoothing: forecast errors from the last 3 weeks adjust this week's forecast. |
| S - seasonality (via X) | K=3 Fourier pairs, 11.1% peak-to-trough | Repeating yearly cycle - the calendar's contribution to demand. |
| X - Weather: heating-degree-day anomaly (same week) | +0.0413% per unit (not significant) | Each unit of heating-degree-day anomaly (same week) moves demand +0.041%. |
| X - Events: demand-shock weeks (9/11, GFC, COVID) (same week) | -8.3% in flagged weeks (significant) | Demand in demand-shock weeks (9/11, GFC, COVID) runs -8.3% vs a normal week. |
| X - Events: supply-disruption weeks (hurricanes, freezes, outages) (same week) | -3.4% in flagged weeks (not significant) | Demand in supply-disruption weeks (hurricanes, freezes, outages) runs -3.4% vs a normal week. |
| X - Activity: manufacturing PMI (leading) (13-week lag) | elasticity +0.256 (significant) | A 10% rise in manufacturing PMI (leading) (13-week lag) moves demand +2.6%. |
| Estimand | Adjust for (backdoor) | Coefficient | Effect of the scenario shock | Refutations (should be near 0 / unchanged) | Sensitivity |
|---|---|---|---|---|---|
| WTI +25% -> distillate demand (8-week lag) | crude_prod, crude_stk, macro | +0.0106 (p=0.560) | +0.24% | placebo +0.002 · subset +0.012 · +cause +0.011 | [-0.103, +0.006] · 5 valid sets: [+0.011, +0.011] |
| IPI -5% -> distillate demand (4-week lag) | (none needed) | +0.6295 (p=0.012) | -3.18% | placebo +0.011 · subset +0.632 · +cause +0.628 | [-0.853, +0.220] · 24 valid sets: [+0.629, +0.629] |
| utilization -10 pts -> distillate output | (none needed) | +0.0098 (p=0.000) | -9.31% | placebo +0.000 · subset +0.010 · +cause +0.010 | [+0.009, +0.010] · 10 valid sets: [+0.010, +0.010] |
Coefficients are elasticities on year-on-year log changes (utilization in points), COVID window excluded. Placebo should be near 0; subset and random-cause should stay close to the estimate; the sweep shows the estimate's range under small unobserved confounders.
Same fitted model, four driver paths. Only the drivers change along each scenario's DAG chain.
| Branch | What changes | Peak effect vs baseline | Week 12: forecast → effect |
|---|---|---|---|
| Oil Shock | WTI +25% -> distillate demand (8-week lag): DoWhy effect +0.24% (adjusted for crude_prod, crude_stk, macro), phased in over 8 weeks | +10 (+0.24%) in week 9 | 4,007 → +10 (+0.24%) |
| Refinery Down | utilization -10 pts -> supply-event flag on for 2 weeks, crack -3.4 $/bbl, p_gas -2.9%, p_dsl -3.6%, p_jet -5.6% | -132 (-3.42%) in week 2 | 3,998 → +0 (+0.00%) |
| Slowdown | IPI -5% -> distillate demand (4-week lag): DoWhy effect -3.18% (adjusted for (none needed)), phased in over 4 weeks | -130 (-3.18%) in week 9 | 3,871 → -127 (-3.18%) |
p=2 d=1 q=3 K=3 trend=c log=True
p=2 d=1 q=3 K=4 trend=n log=False
p=2 d=1 q=3 K=3 trend=n log=False
p=2 d=1 q=3 K=4 trend=n log=False
p=0 d=1 q=1 K=3 trend=n log=True · drivers: hdd_anom_l0, ev_demand_l0, ev_supply_l0, pmi_l13| Window | Horizon | MASE (held) | MASE (known) | MASE (blend) | MAPE (held) | Benchmark MASE | vs benchmark | |
|---|---|---|---|---|---|---|---|---|
| 2000 | 24w | 0.847 | 0.855 | 0.849 | 6.85% | 0.819 (SARIMAX) | -3.4% | |
| 2005 | 24w | 0.883 | 0.890 | 0.883 | 7.17% | 0.836 (SARIMAX) | -5.6% | |
| 2010 | 24w | 0.896 | 0.907 | 0.893 | 7.27% | 0.857 (SARIMAX) | -4.6% | |
| 2015 | 24w | 0.871 | 0.881 | 0.863 | 7.06% | 0.891 (ETS) | +2.3% | |
| 2020 | 24w | 0.833 | 0.843 | 0.839 | 6.73% | 0.836 (SARIMAX) | +0.3% | best |
Drag to zoom, double-click to reset, click legend entries to hide series. Solid test line: future drivers held at their last value (honest). Dashed: actual future drivers fed in (upper bound).
Bars split each week's forecast change against the last actual week into seasonality, each driver family and the underlying level/trend; the line is the net change.
| Driver | Fitted coefficient | What it means |
|---|---|---|
| X - Weather: heating-degree-day anomaly (same week) | +0.0451% per unit (not significant) | Each unit of heating-degree-day anomaly (same week) moves demand +0.045%. |
| X - Events: demand-shock weeks (9/11, GFC, COVID) (same week) | -8.3% in flagged weeks (significant) | Demand in demand-shock weeks (9/11, GFC, COVID) runs -8.3% vs a normal week. |
| X - Events: supply-disruption weeks (hurricanes, freezes, outages) (same week) | -2.7% in flagged weeks (not significant) | Demand in supply-disruption weeks (hurricanes, freezes, outages) runs -2.7% vs a normal week. |
| X - Activity: manufacturing PMI (leading) (13-week lag) | elasticity +0.260 (significant) | A 10% rise in manufacturing PMI (leading) (13-week lag) moves demand +2.6%. |
| 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 -1.00) | Shock smoothing: forecast errors from the last 1 week adjust this week's forecast. |
| S - seasonality (via X) | K=3 Fourier pairs, 11.0% peak-to-trough | Repeating yearly cycle - the calendar's contribution to demand. |
| X - Weather: heating-degree-day anomaly (same week) | +0.0451% per unit (not significant) | Each unit of heating-degree-day anomaly (same week) moves demand +0.045%. |
| X - Events: demand-shock weeks (9/11, GFC, COVID) (same week) | -8.3% in flagged weeks (significant) | Demand in demand-shock weeks (9/11, GFC, COVID) runs -8.3% vs a normal week. |
| X - Events: supply-disruption weeks (hurricanes, freezes, outages) (same week) | -2.7% in flagged weeks (not significant) | Demand in supply-disruption weeks (hurricanes, freezes, outages) runs -2.7% vs a normal week. |
| X - Activity: manufacturing PMI (leading) (13-week lag) | elasticity +0.260 (significant) | A 10% rise in manufacturing PMI (leading) (13-week lag) moves demand +2.6%. |
| Estimand | Adjust for (backdoor) | Coefficient | Effect of the scenario shock | Refutations (should be near 0 / unchanged) | Sensitivity |
|---|---|---|---|---|---|
| WTI +25% -> distillate demand (8-week lag) | crude_prod, crude_stk, macro | +0.0106 (p=0.560) | +0.24% | placebo +0.002 · subset +0.012 · +cause +0.011 | [-0.103, +0.006] · 5 valid sets: [+0.011, +0.011] |
| IPI -5% -> distillate demand (4-week lag) | (none needed) | +0.6295 (p=0.012) | -3.18% | placebo +0.011 · subset +0.632 · +cause +0.628 | [-0.853, +0.220] · 24 valid sets: [+0.629, +0.629] |
| utilization -10 pts -> distillate output | (none needed) | +0.0098 (p=0.000) | -9.31% | placebo +0.000 · subset +0.010 · +cause +0.010 | [+0.009, +0.010] · 10 valid sets: [+0.010, +0.010] |
Coefficients are elasticities on year-on-year log changes (utilization in points), COVID window excluded. Placebo should be near 0; subset and random-cause should stay close to the estimate; the sweep shows the estimate's range under small unobserved confounders.
Same fitted model, four driver paths. Only the drivers change along each scenario's DAG chain.
| Branch | What changes | Peak effect vs baseline | Week 24: forecast → effect |
|---|---|---|---|
| Oil Shock | WTI +25% -> distillate demand (8-week lag): DoWhy effect +0.24% (adjusted for crude_prod, crude_stk, macro), phased in over 8 weeks | +10 (+0.24%) in week 8 | 4,076 → +10 (+0.24%) |
| Refinery Down | utilization -10 pts -> supply-event flag on for 2 weeks, crack -3.4 $/bbl, p_gas -2.9%, p_dsl -3.6%, p_jet -5.6% | -104 (-2.73%) in week 2 | 4,067 → +0 (+0.00%) |
| Slowdown | IPI -5% -> distillate demand (4-week lag): DoWhy effect -3.18% (adjusted for (none needed)), phased in over 4 weeks | -130 (-3.18%) in week 9 | 3,937 → -129 (-3.18%) |
p=2 d=1 q=2 K=3 trend=c log=True
p=2 d=1 q=2 K=3 trend=n log=False
p=1 d=1 q=1 K=3 trend=c log=False
p=2 d=1 q=3 K=3 trend=n log=False
p=2 d=1 q=2 K=3 trend=n log=True · drivers: vmt_l0, emp_l4, ev_demand_l0, ev_supply_l0| Window | Horizon | MASE (held) | MASE (known) | MASE (blend) | MAPE (held) | Benchmark MASE | vs benchmark | |
|---|---|---|---|---|---|---|---|---|
| 2000 | 12w | 0.805 | 0.776 | 0.790 | 7.01% | 0.783 (SARIMAX) | -2.8% | |
| 2005 | 12w | 0.793 | 0.760 | 0.776 | 6.91% | 0.773 (SARIMAX) | -2.6% | |
| 2010 | 12w | 0.774 | 0.747 | 0.793 | 6.76% | 0.792 (ETS) | +2.3% | best |
| 2015 | 12w | 0.800 | 0.753 | 0.822 | 7.00% | 0.845 (ETS) | +5.4% | |
| 2020 | 12w | 0.825 | 0.758 | 0.872 | 7.25% | 0.825 (ETS) | -0.0% |
Drag to zoom, double-click to reset, click legend entries to hide series. Solid test line: future drivers held at their last value (honest). Dashed: actual future drivers fed in (upper bound).
Bars split each week's forecast change against the last actual week into seasonality, each driver family and the underlying level/trend; the line is the net change.
| Driver | Fitted coefficient | What it means |
|---|---|---|
| X - Activity: vehicle miles travelled (mobility) (same week) | elasticity +0.536 (significant) | A 10% rise in vehicle miles travelled (mobility) (same week) moves demand +5.4%. |
| X - Activity: employment level (macro) (4-week lag) | elasticity +3.864 (significant) | A 10% rise in employment level (macro) (4-week lag) moves demand +38.6%. |
| X - Events: demand-shock weeks (9/11, GFC, COVID) (same week) | -23.1% in flagged weeks (significant) | Demand in demand-shock weeks (9/11, GFC, COVID) runs -23.1% vs a normal week. |
| X - Events: supply-disruption weeks (hurricanes, freezes, outages) (same week) | -2.3% in flagged weeks (not significant) | Demand in supply-disruption weeks (hurricanes, freezes, outages) runs -2.3% vs a normal week. |
| Component | Fitted values | What it explains |
|---|---|---|
| AR - autoregressive | p=2 (coef +0.15, -0.01) | Momentum: this week's forecast leans on the previous 2 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=2 (coef -1.19, +0.26) | Shock smoothing: forecast errors from the last 2 weeks adjust this week's forecast. |
| S - seasonality (via X) | K=3 Fourier pairs, 8.5% peak-to-trough | Repeating yearly cycle - the calendar's contribution to demand. |
| X - Activity: vehicle miles travelled (mobility) (same week) | elasticity +0.536 (significant) | A 10% rise in vehicle miles travelled (mobility) (same week) moves demand +5.4%. |
| X - Activity: employment level (macro) (4-week lag) | elasticity +3.864 (significant) | A 10% rise in employment level (macro) (4-week lag) moves demand +38.6%. |
| X - Events: demand-shock weeks (9/11, GFC, COVID) (same week) | -23.1% in flagged weeks (significant) | Demand in demand-shock weeks (9/11, GFC, COVID) runs -23.1% vs a normal week. |
| X - Events: supply-disruption weeks (hurricanes, freezes, outages) (same week) | -2.3% in flagged weeks (not significant) | Demand in supply-disruption weeks (hurricanes, freezes, outages) runs -2.3% vs a normal week. |
| Estimand | Adjust for (backdoor) | Coefficient | Effect of the scenario shock | Refutations (should be near 0 / unchanged) | Sensitivity |
|---|---|---|---|---|---|
| WTI +25% -> jet demand (8-week lag) | crude_prod, crude_stk, macro | +0.0141 (p=0.109) | +0.32% | placebo -0.004 · subset +0.013 · +cause +0.014 | [-0.114, +0.012] · 5 valid sets: [+0.014, +0.014] |
| IPI -5% -> jet demand (4-week lag) | ev_demand | +0.5371 (p=1.000) | -2.72% | placebo +0.028 · subset +0.551 · +cause +0.539 | [-0.958, +0.350] · 3 valid sets: [+0.537, +0.537] |
| utilization -10 pts -> jet output | (none needed) | +0.0156 (p=0.000) | -14.47% | placebo +0.000 · subset +0.016 · +cause +0.016 | [+0.015, +0.017] · 10 valid sets: [+0.016, +0.016] |
Coefficients are elasticities on year-on-year log changes (utilization in points), COVID window excluded. Placebo should be near 0; subset and random-cause should stay close to the estimate; the sweep shows the estimate's range under small unobserved confounders.
Same fitted model, four driver paths. Only the drivers change along each scenario's DAG chain.
| Branch | What changes | Peak effect vs baseline | Week 12: forecast → effect |
|---|---|---|---|
| Oil Shock | WTI +25% -> jet demand (8-week lag): DoWhy effect +0.32% (adjusted for crude_prod, crude_stk, macro), phased in over 8 weeks | +6 (+0.32%) in week 10 | 1,671 → +5 (+0.32%) |
| Refinery Down | utilization -10 pts -> supply-event flag on for 2 weeks, crack -3.4 $/bbl, p_gas -2.9%, p_dsl -3.6%, p_jet -5.6% | -41 (-2.29%) in week 1 | 1,666 → +0 (+0.00%) |
| Slowdown | IPI -5% -> jet demand (4-week lag): DoWhy effect -2.72% (adjusted for ev_demand), phased in over 4 weeks | -48 (-2.72%) in week 11 | 1,620 → -45 (-2.72%) |
p=0 d=1 q=3 K=6 trend=n log=True
p=0 d=1 q=1 K=5 trend=n log=True
p=0 d=1 q=2 K=2 trend=n log=True
p=0 d=1 q=2 K=2 trend=n log=True
p=0 d=1 q=2 K=4 trend=n log=False · drivers: vmt_l0, emp_l4, ev_demand_l0, ev_supply_l0| Window | Horizon | MASE (held) | MASE (known) | MASE (blend) | MAPE (held) | Benchmark MASE | vs benchmark | |
|---|---|---|---|---|---|---|---|---|
| 2000 | 24w | 0.742 | 0.738 | 0.748 | 6.54% | 0.779 (ETS) | +4.8% | |
| 2005 | 24w | 0.737 | 0.739 | 0.744 | 6.49% | 0.764 (ETS) | +3.6% | |
| 2010 | 24w | 0.734 | 0.757 | 0.749 | 6.49% | 0.768 (ETS) | +4.5% | |
| 2015 | 24w | 0.725 | 0.728 | 0.763 | 6.39% | 0.827 (SARIMAX) | +12.3% | best |
| 2020 | 24w | 0.769 | 0.738 | 0.832 | 6.80% | 0.944 (SARIMAX) | +18.5% |
Drag to zoom, double-click to reset, click legend entries to hide series. Solid test line: future drivers held at their last value (honest). Dashed: actual future drivers fed in (upper bound).
Bars split each week's forecast change against the last actual week into seasonality, each driver family and the underlying level/trend; the line is the net change.
| Driver | Fitted coefficient | What it means |
|---|---|---|
| X - Activity: vehicle miles travelled (mobility) (same week) | +259.0 kbd per log-unit (significant) | A 10% rise in vehicle miles travelled (mobility) (same week) moves demand +25 kbd. |
| X - Activity: employment level (macro) (4-week lag) | +1585.1 kbd per log-unit (significant) | A 10% rise in employment level (macro) (4-week lag) moves demand +151 kbd. |
| X - Events: demand-shock weeks (9/11, GFC, COVID) (same week) | -357 kbd in flagged weeks (significant) | Demand in demand-shock weeks (9/11, GFC, COVID) runs -357 kbd vs a normal week. |
| X - Events: supply-disruption weeks (hurricanes, freezes, outages) (same week) | -73 kbd in flagged weeks (significant) | Demand in supply-disruption weeks (hurricanes, freezes, outages) runs -73 kbd vs a normal week. |
| 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=2 (coef -1.07, +0.22) | Shock smoothing: forecast errors from the last 2 weeks adjust this week's forecast. |
| S - seasonality (via X) | K=4 Fourier pairs, 141 kbd peak-to-trough | Repeating yearly cycle - the calendar's contribution to demand. |
| X - Activity: vehicle miles travelled (mobility) (same week) | +259.0 kbd per log-unit (significant) | A 10% rise in vehicle miles travelled (mobility) (same week) moves demand +25 kbd. |
| X - Activity: employment level (macro) (4-week lag) | +1585.1 kbd per log-unit (significant) | A 10% rise in employment level (macro) (4-week lag) moves demand +151 kbd. |
| X - Events: demand-shock weeks (9/11, GFC, COVID) (same week) | -357 kbd in flagged weeks (significant) | Demand in demand-shock weeks (9/11, GFC, COVID) runs -357 kbd vs a normal week. |
| X - Events: supply-disruption weeks (hurricanes, freezes, outages) (same week) | -73 kbd in flagged weeks (significant) | Demand in supply-disruption weeks (hurricanes, freezes, outages) runs -73 kbd vs a normal week. |
| Estimand | Adjust for (backdoor) | Coefficient | Effect of the scenario shock | Refutations (should be near 0 / unchanged) | Sensitivity |
|---|---|---|---|---|---|
| WTI +25% -> jet demand (8-week lag) | crude_prod, crude_stk, macro | +0.0141 (p=0.109) | +0.32% | placebo -0.004 · subset +0.013 · +cause +0.014 | [-0.114, +0.012] · 5 valid sets: [+0.014, +0.014] |
| IPI -5% -> jet demand (4-week lag) | ev_demand | +0.5371 (p=1.000) | -2.72% | placebo +0.028 · subset +0.551 · +cause +0.539 | [-0.958, +0.350] · 3 valid sets: [+0.537, +0.537] |
| utilization -10 pts -> jet output | (none needed) | +0.0156 (p=0.000) | -14.47% | placebo +0.000 · subset +0.016 · +cause +0.016 | [+0.015, +0.017] · 10 valid sets: [+0.016, +0.016] |
Coefficients are elasticities on year-on-year log changes (utilization in points), COVID window excluded. Placebo should be near 0; subset and random-cause should stay close to the estimate; the sweep shows the estimate's range under small unobserved confounders.
Same fitted model, four driver paths. Only the drivers change along each scenario's DAG chain.
| Branch | What changes | Peak effect vs baseline | Week 24: forecast → effect |
|---|---|---|---|
| Oil Shock | WTI +25% -> jet demand (8-week lag): DoWhy effect +0.32% (adjusted for crude_prod, crude_stk, macro), phased in over 8 weeks | +6 (+0.32%) in week 14 | 1,650 → +5 (+0.32%) |
| Refinery Down | utilization -10 pts -> supply-event flag on for 2 weeks, crack -3.4 $/bbl, p_gas -2.9%, p_dsl -3.6%, p_jet -5.6% | -73 (-3.98%) in week 1 | 1,644 → +0 (+0.00%) |
| Slowdown | IPI -5% -> jet demand (4-week lag): DoWhy effect -2.72% (adjusted for ev_demand), phased in over 4 weeks | -48 (-2.72%) in week 16 | 1,600 → -45 (-2.72%) |
p=3 d=1 q=2 K=4 trend=n log=False
p=3 d=1 q=2 K=5 trend=c log=False
p=0 d=1 q=3 K=6 trend=n log=False
p=1 d=1 q=3 K=1 trend=c log=False
Slopes on year-on-year changes along each DAG edge, COVID window excluded.
| Edge | Slope | Units | Status |
|---|---|---|---|
wti->p_gas | 0.5499 | elasticity (log/log) | ok |
wti->p_dsl | 0.6109 | elasticity (log/log) | ok |
wti->p_jet | 1.022 | elasticity (log/log) | ok |
ipi->emp | 0.2436 | elasticity (log/log) | ok |
ipi->vmt | 0.1035 | elasticity (log/log) | ok |
util->crack | 0.3396 | $/bbl per utilization point | ok |
crack->p_gas | 0.0088 | log-price per $/bbl | ok |
crack->p_dsl | 0.0108 | log-price per $/bbl | ok |
crack->p_jet | 0.0169 | log-price per $/bbl | ok |
What goes into this stage, what happens, and what comes out.