The fitted model becomes a scenario tool. Fix a driver with a do(·) intervention, propagate the change through the structural equations, and read the revised demand path against the baseline.
Each event is removed from history with do(·) interventions on the fitted structural model. Blue is what happened, green is the path without the event, the shaded window is the event itself.
No COVID-19 pandemic: 2020-03-13 → 2021-06-25 (68 weeks)
Every driver the pandemic moved is set to the path it was on before March 2020: the demand-shock flag off, mobility, employment and industrial production continuing their pre-pandemic seasonal paths, crude at its pre-pandemic level, refinery utilization likewise. Weather and retail prices are left as observed; the price path runs through WTI so gasoline's retail-price term is not counted a second time.
Fuel
Actual → without the event
Change
Cumulative
Margin exposure
Gasoline
8,206 → 7,847 kb/d
-359 kb/d(-4.38%)
-165.4 mb(-20.2 days of demand)
+14,594 $M
Distillate (diesel)
3,773 → 3,825 kb/d
+52 kb/d(+1.38%)
+17.7 mb(+4.7 days of demand)
+8,732 $M
Jet fuel
1,049 → 1,283 kb/d
+234 kb/d(+22.33%)
+113.8 mb(+108.5 days of demand)
+1,727 $M
do(·) interventions on the fitted structural model (6 columns)
Intervention
Causal path
Rule
Weeks changed
Mean: actual → counterfactual
do(ev_demand)
Event residual
zero
2020-03-13 → 2021-06-25 (68w)
0.235 → 0.000
do(vmt)
Activity
continue
2020-03-13 → 2021-06-25 (68w)
244,308.926 → 218,225.985
do(emp)
Activity
continue
2020-03-13 → 2021-06-25 (68w)
147,392.294 → 155,942.809
do(ipi)
Activity
continue
2020-03-13 → 2021-06-25 (68w)
95.516 → 95.293
do(wti)
Price pass-through
continue
2020-03-13 → 2021-06-25 (68w)
45.673 → 44.332
do(util)
Supply
continue
2020-03-13 → 2021-06-25 (68w)
78.690 → 88.919
Model from2005_h12 · test MASE 0.783 · structural spread over 8 fitted runs
Channels: vmt_l0, ev_demand_l0, wti_dowhy, interaction. Lag tail 8 weeks. Not part of gasoline's demand model, so this event's change doesn't apply here: employment level.
Direction & magnitude
-359 kb/d(-4.38%)
peak -1,454 kb/d in week ending 2021-06-18
Top causal path
Activity
83% of effect · vehicle miles travelled (mobility)
Uncertainty
±224 kb/d (parameter)
structural range 661 kb/d over 8 fits
Decision translation
-165.4 mb
-20.2 days of demand · margin +14,594 $M
1Direction and magnitude
Horizon into the event
Week ending
Actual
Without the event
Signed change
95% parameter band
week 4
2020-04-03
5,065
6,110
+1,045 kb/d(+20.63%)
6,034 – 6,187
week 8
2020-05-01
6,664
7,325
+661 kb/d(+9.92%)
7,238 – 7,412
week 12
2020-05-29
7,549
8,182
+633 kb/d(+8.38%)
7,172 – 8,280
week 24
2020-08-21
9,161
8,857
-304 kb/d(-3.32%)
8,598 – 8,882
week 52
2021-03-05
8,726
7,389
-1,337 kb/d(-15.32%)
7,277 – 7,504
end of window (week 68)
2021-06-25
9,173
7,770
-1,403 kb/d(-15.30%)
7,647 – 8,376
peak
2021-06-18
9,440
7,986
-1,454 kb/d(-15.40%)
7,860 – 8,519
average over window
8,206
7,847
-359 kb/d(-4.38%)
7,568 – 8,015
2Attribution: which causal path carries the effect
Path / channel
Mean change
Cumulative
Share
Source
Coefficient
Activity
-388 kb/d
-206.17 mb
83%
vmt_l0 vehicle miles travelled (mobility)
-388 kb/d
-206.17 mb
SARIMAX coefficient
+0.4486 (significant)
Event residual
+78 kb/d
+41.47 mb
17%
ev_demand_l0 demand-shock weeks
+78 kb/d
+41.47 mb
SARIMAX coefficient
-0.05019 (significant)
Price pass-through
-2 kb/d
-1.02 mb
0%
wti_dowhy WTI crude price
-2 kb/d
-1.02 mb
DoWhy estimate (8-week lag)
-0.0162 (significant)
Interaction
+1 kb/d
+0.35 mb
0%
interaction joint effect minus the sum of the single channels (channels combine multiplicatively)
+1 kb/d
+0.35 mb
-
–
3Uncertainty
Source
Size
Parameter uncertainty
±224 kb/d
95% band, mean over the window
Model choice
661 kb/d range
same event re-run on 8 fits
DoWhy: WTI +25% -> gasoline demand (8-week lag)
[-0.1545, -0.0162]
range across backdoor sets and the confounder sweep
Held fixed
each week's unexplained noise, seasonality, trend, weather, and any driver not listed as an intervention
4Decision translation
Quantity
Value
Demand
-165.4 mb
-20.2 days of demand
Refinery output
+299 kb/d
+142.4 mb cumulative · utilization -10 pts -> gasoline output: coefficient +0.0034 per utilization point (DoWhy)
Market balance
+658 kb/d
more barrels available · +307.8 mb, +37.5 days
Days of supply (week 12)
-7.2 d
end of window 26.5 → 71.9 d
Margin exposure
+14,594 $M
crack +3.5 $/bbl on average · crack* = crack + +0.3396 $/bbl per utilization point x (util* - util)
Check
computed days of supply vs EIA column 'dos_gas': mean abs difference 0.02 days
Model from2000_h12 · test MASE 0.872 · structural spread over 8 fitted runs
Channels: ev_demand_l0, wti_dowhy, ipi_dowhy, interaction. Lag tail 8 weeks. Not part of diesel's demand model, so this event's change doesn't apply here: employment level, vehicle miles travelled (mobility).
Direction & magnitude
+52 kb/d(+1.38%)
peak +583 kb/d in week ending 2020-06-19
Top causal path
Event residual
78% of effect · demand-shock weeks
Uncertainty
±201 kb/d (parameter)
structural range 94 kb/d over 8 fits
Decision translation
+17.7 mb
+4.7 days of demand · margin +8,732 $M
1Direction and magnitude
Horizon into the event
Week ending
Actual
Without the event
Signed change
95% parameter band
week 4
2020-04-03
3,807
4,003
+196 kb/d(+5.14%)
3,891 – 4,118
week 8
2020-05-01
3,129
3,582
+453 kb/d(+14.48%)
2,850 – 3,685
week 12
2020-05-29
2,718
3,111
+393 kb/d(+14.44%)
2,294 – 3,200
week 24
2020-08-21
3,958
4,004
+46 kb/d(+1.16%)
3,830 – 4,004
week 52
2021-03-05
4,487
4,496
+9 kb/d(+0.19%)
4,475 – 4,496
end of window (week 68)
2021-06-25
4,170
3,938
-232 kb/d(-5.56%)
3,938 – 4,680
peak
2020-06-19
3,466
4,049
+583 kb/d(+16.81%)
2,399 – 4,165
average over window
3,773
3,825
+52 kb/d(+1.38%)
3,608 – 4,009
2Attribution: which causal path carries the effect
Path / channel
Mean change
Cumulative
Share
Source
Coefficient
Event residual
+37 kb/d
+19.89 mb
78%
ev_demand_l0 demand-shock weeks
+37 kb/d
+19.89 mb
SARIMAX coefficient
-0.05014 (significant)
Activity
-7 kb/d
-3.89 mb
15%
ipi_dowhy industrial production
-7 kb/d
-3.89 mb
DoWhy estimate (4-week lag)
+0.6295 (significant)
Interaction
+3 kb/d
+1.35 mb
5%
interaction joint effect minus the sum of the single channels (channels combine multiplicatively)
+3 kb/d
+1.35 mb
-
–
Price pass-through
+1 kb/d
+0.35 mb
1%
wti_dowhy WTI crude price
+1 kb/d
+0.35 mb
DoWhy estimate (8-week lag)
+0.0106 (not significant)
3Uncertainty
Source
Size
Parameter uncertainty
±201 kb/d
95% band, mean over the window
Model choice
94 kb/d range
same event re-run on 8 fits
DoWhy: WTI +25% -> distillate demand (8-week lag)
[-0.1027, +0.0106]
range across backdoor sets and the confounder sweep
DoWhy: IPI -5% -> distillate demand (4-week lag)
[-0.8530, +0.6295]
range across backdoor sets and the confounder sweep
Held fixed
each week's unexplained noise, seasonality, trend, weather, and any driver not listed as an intervention
4Decision translation
Quantity
Value
Demand
+17.7 mb
+4.7 days of demand
Refinery output
+491 kb/d
+233.9 mb cumulative · utilization -10 pts -> distillate output: coefficient +0.0098 per utilization point (DoWhy)
Market balance
+439 kb/d
more barrels available · +216.2 mb, +57.3 days
Days of supply (week 12)
+2.2 d
end of window 34.6 → 92.3 d
Margin exposure
+8,732 $M
crack +3.5 $/bbl on average · crack* = crack + +0.3396 $/bbl per utilization point x (util* - util)
Check
computed days of supply vs EIA column 'dos_dst': mean abs difference 0.02 days
Model from2010_h12 · test MASE 0.774 · structural spread over 8 fitted runs
Channels: vmt_l0, emp_l4, ev_demand_l0, wti_dowhy, interaction. Lag tail 8 weeks.
From 2020-06-12, the stock path implied by this event goes negative - the market would have rebalanced through prices, trade or higher runs this model doesn't capture. Trust the balance gap over the stock level after that date.
Direction & magnitude
+234 kb/d(+22.33%)
peak +1,302 kb/d in week ending 2020-05-22
Top causal path
Activity
72% of effect · vehicle miles travelled (mobility), employment level
Uncertainty
±66 kb/d (parameter)
structural range 250 kb/d over 8 fits
Decision translation
+113.8 mb
+108.5 days of demand · margin +1,727 $M
1Direction and magnitude
Horizon into the event
Week ending
Actual
Without the event
Signed change
95% parameter band
week 4
2020-04-03
755
1,157
+402 kb/d(+53.29%)
1,121 – 1,195
week 8
2020-05-01
515
1,278
+763 kb/d(+148.15%)
1,217 – 1,342
week 12
2020-05-29
385
867
+482 kb/d(+125.24%)
743 – 906
week 24
2020-08-21
1,142
1,520
+378 kb/d(+33.08%)
1,444 – 1,561
week 52
2021-03-05
849
833
-16 kb/d(-1.94%)
795 – 872
end of window (week 68)
2021-06-25
1,435
1,238
-197 kb/d(-13.73%)
1,182 – 1,370
peak
2020-05-22
860
2,162
+1,302 kb/d(+151.39%)
1,830 – 2,270
average over window
1,049
1,283
+234 kb/d(+22.33%)
1,207 – 1,340
2Attribution: which causal path carries the effect
Path / channel
Mean change
Cumulative
Share
Source
Coefficient
Activity
+154 kb/d
+82.06 mb
72%
vmt_l0 vehicle miles travelled (mobility)
-63 kb/d
-33.25 mb
SARIMAX coefficient
+0.5363 (significant)
emp_l4 employment level
+217 kb/d
+115.32 mb
SARIMAX coefficient
+3.864 (significant)
Event residual
+51 kb/d
+26.96 mb
24%
ev_demand_l0 demand-shock weeks
+51 kb/d
+26.96 mb
SARIMAX coefficient
-0.2629 (significant)
Interaction
+10 kb/d
+5.16 mb
5%
interaction joint effect minus the sum of the single channels (channels combine multiplicatively)
+10 kb/d
+5.16 mb
-
–
Price pass-through
-1 kb/d
-0.35 mb
0%
wti_dowhy WTI crude price
-1 kb/d
-0.35 mb
DoWhy estimate (8-week lag)
+0.0141 (not significant)
3Uncertainty
Source
Size
Parameter uncertainty
±66 kb/d
95% band, mean over the window
Model choice
250 kb/d range
same event re-run on 8 fits
DoWhy: WTI +25% -> jet demand (8-week lag)
[-0.1144, +0.0141]
range across backdoor sets and the confounder sweep
Held fixed
each week's unexplained noise, seasonality, trend, weather, and any driver not listed as an intervention
4Decision translation
Quantity
Value
Demand
+113.8 mb
+108.5 days of demand
Refinery output
+149 kb/d
+70.8 mb cumulative · utilization -10 pts -> jet output: coefficient +0.0156 per utilization point (DoWhy)
Market balance
-85 kb/d
extra draw · -43.0 mb, -41.0 days
Days of supply (week 12)
-69.5 d
end of window 33.7 → 3.5 d
Margin exposure
+1,727 $M
crack +3.5 $/bbl on average · crack* = crack + +0.3396 $/bbl per utilization point x (util* - util)
Check
computed days of supply vs EIA column 'dos_jet': mean abs difference 0.03 days
Supply side of the same event: refinery utilization on its no-event path moves output (DoWhy utilization → output), the crack spread (edge equation) and, with demand, the stock path. Positive balance means more barrels available without the event.
Supply-event flag off and refinery utilization on its pre-event path (output, crack and stocks follow). Rename this event once the dates in the flagged-runs table below are matched to the disruption.
Fuel
Actual → without the event
Change
Cumulative
Margin exposure
Gasoline
8,258 → 8,261 kb/d
+4 kb/d(+0.04%)
+0.2 mb(+0.0 days of demand)
+1,267 $M
Distillate (diesel)
4,047 → 4,190 kb/d
+143 kb/d(+3.54%)
+6.0 mb(+1.5 days of demand)
+573 $M
Jet fuel
1,056 → 1,081 kb/d
+25 kb/d(+2.35%)
+1.0 mb(+1.0 days of demand)
+164 $M
do(·) interventions on the fitted structural model (2 columns)
Intervention
Causal path
Rule
Weeks changed
Mean: actual → counterfactual
do(ev_supply)
Event residual
zero
2021-02-12 → 2021-03-19 (6w)
1.000 → 0.000
do(util)
Supply
continue
2021-02-12 → 2021-03-19 (6w)
72.400 → 82.383
Model from2005_h12 · test MASE 0.783 · structural spread over 10 fitted runs
Channels: ev_supply_l0. Lag tail 0 weeks.
Direction & magnitude
+4 kb/d(+0.04%)
peak +4 kb/d in week ending 2021-03-05
Top causal path
Event residual
100% of effect · supply-disruption weeks
Uncertainty
±103 kb/d (parameter)
structural range 189 kb/d over 10 fits
Decision translation
+0.2 mb
+0.0 days of demand · margin +1,267 $M
1Direction and magnitude
Horizon into the event
Week ending
Actual
Without the event
Signed change
95% parameter band
week 4
2021-03-05
8,726
8,730
+4 kb/d(+0.04%)
8,622 – 8,840
end of window (week 6)
2021-03-19
8,616
8,620
+4 kb/d(+0.04%)
8,513 – 8,728
peak
2021-03-05
8,726
8,730
+4 kb/d(+0.04%)
8,622 – 8,840
average over window
8,258
8,261
+4 kb/d(+0.04%)
8,159 – 8,365
2Attribution: which causal path carries the effect
Path / channel
Mean change
Cumulative
Share
Source
Coefficient
Event residual
+4 kb/d
+0.16 mb
100%
ev_supply_l0 supply-disruption weeks
+4 kb/d
+0.16 mb
SARIMAX coefficient
-0.0004479 (not significant)
3Uncertainty
Source
Size
Parameter uncertainty
±103 kb/d
95% band, mean over the window
Model choice
189 kb/d range
same event re-run on 10 fits
Held fixed
each week's unexplained noise, seasonality, trend, weather, and any driver not listed as an intervention
4Decision translation
Quantity
Value
Demand
+0.2 mb
+0.0 days of demand
Refinery output
+293 kb/d
+12.3 mb cumulative · utilization -10 pts -> gasoline output: coefficient +0.0034 per utilization point (DoWhy)
Market balance
+289 kb/d
more barrels available · +12.2 mb, +1.5 days
Margin exposure
+1,267 $M
crack +3.4 $/bbl on average · crack* = crack + +0.3396 $/bbl per utilization point x (util* - util)
Check
computed days of supply vs EIA column 'dos_gas': mean abs difference 0.02 days
Model from2020_h12 · test MASE 0.829 · structural spread over 10 fitted runs
Channels: ev_supply_l0. Lag tail 0 weeks.
Direction & magnitude
+143 kb/d(+3.54%)
peak +159 kb/d in week ending 2021-03-05
Top causal path
Event residual
100% of effect · supply-disruption weeks
Uncertainty
±167 kb/d (parameter)
structural range 142 kb/d over 10 fits
Decision translation
+6.0 mb
+1.5 days of demand · margin +573 $M
1Direction and magnitude
Horizon into the event
Week ending
Actual
Without the event
Signed change
95% parameter band
week 4
2021-03-05
4,487
4,646
+159 kb/d(+3.54%)
4,464 – 4,835
end of window (week 6)
2021-03-19
3,592
3,719
+127 kb/d(+3.54%)
3,574 – 3,870
peak
2021-03-05
4,487
4,646
+159 kb/d(+3.54%)
4,464 – 4,835
average over window
4,047
4,190
+143 kb/d(+3.54%)
4,026 – 4,360
2Attribution: which causal path carries the effect
Path / channel
Mean change
Cumulative
Share
Source
Coefficient
Event residual
+143 kb/d
+6.02 mb
100%
ev_supply_l0 supply-disruption weeks
+143 kb/d
+6.02 mb
SARIMAX coefficient
-0.03479 (not significant)
3Uncertainty
Source
Size
Parameter uncertainty
±167 kb/d
95% band, mean over the window
Model choice
142 kb/d range
same event re-run on 10 fits
Held fixed
each week's unexplained noise, seasonality, trend, weather, and any driver not listed as an intervention
4Decision translation
Quantity
Value
Demand
+6.0 mb
+1.5 days of demand
Refinery output
+363 kb/d
+15.2 mb cumulative · utilization -10 pts -> distillate output: coefficient +0.0098 per utilization point (DoWhy)
Market balance
+219 kb/d
more barrels available · +9.2 mb, +2.3 days
Margin exposure
+573 $M
crack +3.4 $/bbl on average · crack* = crack + +0.3396 $/bbl per utilization point x (util* - util)
Check
computed days of supply vs EIA column 'dos_dst': mean abs difference 0.03 days
Model from2010_h12 · test MASE 0.774 · structural spread over 10 fitted runs
Channels: ev_supply_l0. Lag tail 0 weeks.
Direction & magnitude
+25 kb/d(+2.35%)
peak +30 kb/d in week ending 2021-02-26
Top causal path
Event residual
100% of effect · supply-disruption weeks
Uncertainty
±37 kb/d (parameter)
structural range 77 kb/d over 10 fits
Decision translation
+1.0 mb
+1.0 days of demand · margin +164 $M
1Direction and magnitude
Horizon into the event
Week ending
Actual
Without the event
Signed change
95% parameter band
week 4
2021-03-05
849
869
+20 kb/d(+2.35%)
840 – 899
end of window (week 6)
2021-03-19
1,037
1,061
+24 kb/d(+2.35%)
1,026 – 1,098
peak
2021-02-26
1,285
1,315
+30 kb/d(+2.35%)
1,271 – 1,361
average over window
1,056
1,081
+25 kb/d(+2.35%)
1,045 – 1,118
2Attribution: which causal path carries the effect
Path / channel
Mean change
Cumulative
Share
Source
Coefficient
Event residual
+25 kb/d
+1.04 mb
100%
ev_supply_l0 supply-disruption weeks
+25 kb/d
+1.04 mb
SARIMAX coefficient
-0.0232 (not significant)
3Uncertainty
Source
Size
Parameter uncertainty
±37 kb/d
95% band, mean over the window
Model choice
77 kb/d range
same event re-run on 10 fits
Held fixed
each week's unexplained noise, seasonality, trend, weather, and any driver not listed as an intervention
4Decision translation
Quantity
Value
Demand
+1.0 mb
+1.0 days of demand
Refinery output
+157 kb/d
+6.6 mb cumulative · utilization -10 pts -> jet output: coefficient +0.0156 per utilization point (DoWhy)
Market balance
+132 kb/d
more barrels available · +5.5 mb, +5.3 days
Margin exposure
+164 $M
crack +3.4 $/bbl on average · crack* = crack + +0.3396 $/bbl per utilization point x (util* - util)
Check
computed days of supply vs EIA column 'dos_jet': mean abs difference 0.02 days
Supply side of the same event: refinery utilization on its no-event path moves output (DoWhy utilization → output), the crack spread (edge equation) and, with demand, the stock path. Positive balance means more barrels available without the event.
WTI follows its pre-window path; the effect reaches demand through the DoWhy backdoor elasticities (8-week lag). Retail prices are not touched. Rename once the dates are matched to the shock.
Fuel
Actual → without the event
Change
Cumulative
Margin exposure
Gasoline
9,147 → 9,163 kb/d
+16 kb/d(+0.17%)
+28.4 mb(+3.1 days of demand)
+0 $M
Distillate (diesel)
3,941 → 3,937 kb/d
-5 kb/d(-0.12%)
-8.4 mb(-2.1 days of demand)
+0 $M
Jet fuel
1,482 → 1,480 kb/d
-2 kb/d(-0.15%)
-4.0 mb(-2.7 days of demand)
+0 $M
do(·) interventions on the fitted structural model (1 columns)
Intervention
Causal path
Rule
Weeks changed
Mean: actual → counterfactual
do(wti)
Price pass-through
continue
2007-01-05 → 2011-04-29 (226w)
79.769 → 68.213
Model from2005_h12 · test MASE 0.783 · structural spread over 4 fitted runs
Channels: wti_dowhy. Lag tail 8 weeks.
Direction & magnitude
+16 kb/d(+0.17%)
peak +98 kb/d in week ending 2008-08-08
Top causal path
Price pass-through
100% of effect · WTI crude price
Uncertainty
±153 kb/d (parameter)
structural range 0 kb/d over 4 fits
Decision translation
+28.4 mb
+3.1 days of demand · margin +0 $M
1Direction and magnitude
Horizon into the event
Week ending
Actual
Without the event
Signed change
95% parameter band
week 4
2007-01-26
9,090
9,090
+0 kb/d(+0.00%)
9,090 – 9,090
week 8
2007-02-23
9,121
9,121
+0 kb/d(+0.00%)
9,121 – 9,121
week 12
2007-03-23
9,250
9,215
-35 kb/d(-0.38%)
8,922 – 9,215
week 24
2007-06-15
9,591
9,569
-22 kb/d(-0.23%)
9,382 – 9,569
week 52
2007-12-28
9,286
9,354
+68 kb/d(+0.74%)
9,354 – 9,960
end of window (week 226)
2011-04-29
8,943
9,007
+64 kb/d(+0.72%)
9,007 – 9,573
peak
2008-08-08
9,446
9,544
+98 kb/d(+1.04%)
9,544 – 10,426
average over window
9,147
9,163
+16 kb/d(+0.17%)
9,083 – 9,388
2Attribution: which causal path carries the effect
Path / channel
Mean change
Cumulative
Share
Source
Coefficient
Price pass-through
+17 kb/d
+28.43 mb
100%
wti_dowhy WTI crude price
+17 kb/d
+28.43 mb
DoWhy estimate (8-week lag)
-0.0162 (significant)
3Uncertainty
Source
Size
Parameter uncertainty
±153 kb/d
95% band, mean over the window
Model choice
0 kb/d range
same event re-run on 4 fits
DoWhy: WTI +25% -> gasoline demand (8-week lag)
[-0.1545, -0.0162]
range across backdoor sets and the confounder sweep
Held fixed
each week's unexplained noise, seasonality, trend, weather, and any driver not listed as an intervention
4Decision translation
Quantity
Value
Demand
+28.4 mb
+3.1 days of demand
Refinery output
+0 kb/d
+0.0 mb cumulative · utilization not intervened - output as observed
Market balance
-16 kb/d
extra draw · -28.4 mb, -3.1 days
Days of supply (week 12)
+0.2 d
end of window 22.5 → 19.6 d
Margin exposure
+0 $M
crack +0.0 $/bbl on average · crack spread unchanged (utilization not intervened or util->crack edge missing)
Check
computed days of supply vs EIA column 'dos_gas': mean abs difference 0.03 days
Model from2000_h12 · test MASE 0.872 · structural spread over 4 fitted runs
Channels: wti_dowhy. Lag tail 8 weeks.
Direction & magnitude
-5 kb/d(-0.12%)
peak -30 kb/d in week ending 2008-08-08
Top causal path
Price pass-through
100% of effect · WTI crude price
Uncertainty
±54 kb/d (parameter)
structural range 0 kb/d over 4 fits
Decision translation
-8.4 mb
-2.1 days of demand · margin +0 $M
1Direction and magnitude
Horizon into the event
Week ending
Actual
Without the event
Signed change
95% parameter band
week 4
2007-01-26
4,540
4,540
+0 kb/d(+0.00%)
4,540 – 4,540
week 8
2007-02-23
4,710
4,710
+0 kb/d(+0.00%)
4,710 – 4,710
week 12
2007-03-23
4,348
4,359
+11 kb/d(+0.25%)
4,245 – 4,359
week 24
2007-06-15
4,086
4,092
+6 kb/d(+0.15%)
4,027 – 4,092
week 52
2007-12-28
4,340
4,319
-21 kb/d(-0.48%)
4,319 – 4,547
end of window (week 226)
2011-04-29
3,893
3,875
-18 kb/d(-0.47%)
3,875 – 4,073
peak
2008-08-08
4,406
4,376
-30 kb/d(-0.68%)
4,376 – 4,705
average over window
3,941
3,937
-5 kb/d(-0.12%)
3,909 – 4,017
2Attribution: which causal path carries the effect
Path / channel
Mean change
Cumulative
Share
Source
Coefficient
Price pass-through
-5 kb/d
-8.36 mb
100%
wti_dowhy WTI crude price
-5 kb/d
-8.36 mb
DoWhy estimate (8-week lag)
+0.0106 (not significant)
3Uncertainty
Source
Size
Parameter uncertainty
±54 kb/d
95% band, mean over the window
Model choice
0 kb/d range
same event re-run on 4 fits
DoWhy: WTI +25% -> distillate demand (8-week lag)
[-0.1027, +0.0106]
range across backdoor sets and the confounder sweep
Held fixed
each week's unexplained noise, seasonality, trend, weather, and any driver not listed as an intervention
4Decision translation
Quantity
Value
Demand
-8.4 mb
-2.1 days of demand
Refinery output
+0 kb/d
+0.0 mb cumulative · utilization not intervened - output as observed
Market balance
+5 kb/d
more barrels available · +8.4 mb, +2.1 days
Days of supply (week 12)
-0.1 d
end of window 37.4 → 39.4 d
Margin exposure
+0 $M
crack +0.0 $/bbl on average · crack spread unchanged (utilization not intervened or util->crack edge missing)
Check
computed days of supply vs EIA column 'dos_dst': mean abs difference 0.03 days
Model from2005_h12 · test MASE 0.793 · structural spread over 4 fitted runs
Channels: wti_dowhy. Lag tail 8 weeks.
Direction & magnitude
-2 kb/d(-0.15%)
peak -15 kb/d in week ending 2008-08-08
Top causal path
Price pass-through
100% of effect · WTI crude price
Uncertainty
±23 kb/d (parameter)
structural range 0 kb/d over 4 fits
Decision translation
-4.0 mb
-2.7 days of demand · margin +0 $M
1Direction and magnitude
Horizon into the event
Week ending
Actual
Without the event
Signed change
95% parameter band
week 4
2007-01-26
1,591
1,591
+0 kb/d(+0.00%)
1,591 – 1,591
week 8
2007-02-23
1,532
1,532
+0 kb/d(+0.00%)
1,532 – 1,532
week 12
2007-03-23
1,518
1,523
+5 kb/d(+0.33%)
1,478 – 1,523
week 24
2007-06-15
1,731
1,734
+3 kb/d(+0.20%)
1,703 – 1,734
week 52
2007-12-28
1,590
1,580
-10 kb/d(-0.64%)
1,580 – 1,675
end of window (week 226)
2011-04-29
1,474
1,465
-9 kb/d(-0.62%)
1,465 – 1,550
peak
2008-08-08
1,674
1,659
-15 kb/d(-0.90%)
1,659 – 1,801
average over window
1,482
1,480
-2 kb/d(-0.15%)
1,468 – 1,514
2Attribution: which causal path carries the effect
Path / channel
Mean change
Cumulative
Share
Source
Coefficient
Price pass-through
-2 kb/d
-4.05 mb
100%
wti_dowhy WTI crude price
-2 kb/d
-4.05 mb
DoWhy estimate (8-week lag)
+0.0141 (not significant)
3Uncertainty
Source
Size
Parameter uncertainty
±23 kb/d
95% band, mean over the window
Model choice
0 kb/d range
same event re-run on 4 fits
DoWhy: WTI +25% -> jet demand (8-week lag)
[-0.1144, +0.0141]
range across backdoor sets and the confounder sweep
Held fixed
each week's unexplained noise, seasonality, trend, weather, and any driver not listed as an intervention
4Decision translation
Quantity
Value
Demand
-4.0 mb
-2.7 days of demand
Refinery output
+0 kb/d
+0.0 mb cumulative · utilization not intervened - output as observed
Market balance
+2 kb/d
more barrels available · +4.0 mb, +2.7 days
Days of supply (week 12)
-0.1 d
end of window 27.2 → 29.8 d
Margin exposure
+0 $M
crack +0.0 $/bbl on average · crack spread unchanged (utilization not intervened or util->crack edge missing)
Check
computed days of supply vs EIA column 'dos_jet': mean abs difference 0.02 days
Supply side of the same event: refinery utilization on its no-event path moves output (DoWhy utilization → output), the crack spread (edge equation) and, with demand, the stock path. Positive balance means more barrels available without the event.
The fitted demand model has no direct SPR channel; a release can only reach demand through the crude price, so WTI is set to its pre-window path. If WTI did not move in the window the effect is zero by construction.
Fuel
Actual → without the event
Change
Cumulative
Margin exposure
Gasoline
8,800 → 8,808 kb/d
+8 kb/d(+0.09%)
+2.0 mb(+0.2 days of demand)
+0 $M
Distillate (diesel)
3,953 → 3,951 kb/d
-2 kb/d(-0.06%)
-0.6 mb(-0.1 days of demand)
+0 $M
Jet fuel
1,531 → 1,530 kb/d
-1 kb/d(-0.08%)
-0.3 mb(-0.2 days of demand)
+0 $M
do(·) interventions on the fitted structural model (1 columns)
Intervention
Causal path
Rule
Weeks changed
Mean: actual → counterfactual
do(wti)
Price pass-through
continue
2021-09-10 → 2023-01-06 (70w)
90.019 → 87.568
Model from2005_h12 · test MASE 0.783 · structural spread over 10 fitted runs
Channels: wti_dowhy. Lag tail 8 weeks.
Direction & magnitude
+8 kb/d(+0.09%)
peak -48 kb/d in week ending 2023-03-03
Top causal path
Price pass-through
100% of effect · WTI crude price
Uncertainty
±55 kb/d (parameter)
structural range 0 kb/d over 10 fits
Decision translation
+2.0 mb
+0.2 days of demand · margin +0 $M
1Direction and magnitude
Horizon into the event
Week ending
Actual
Without the event
Signed change
95% parameter band
week 4
2021-10-01
9,427
9,427
+0 kb/d(+0.00%)
9,427 – 9,427
week 8
2021-10-29
9,504
9,504
+0 kb/d(+0.00%)
9,504 – 9,504
week 12
2021-11-26
8,796
8,814
+18 kb/d(+0.21%)
8,814 – 8,974
week 24
2022-02-18
8,657
8,650
-7 kb/d(-0.08%)
8,595 – 8,650
week 52
2022-09-02
8,727
8,731
+4 kb/d(+0.04%)
8,731 – 8,762
end of window (week 70)
2023-01-06
7,558
7,549
-9 kb/d(-0.12%)
7,471 – 7,549
peak
2023-03-03
8,562
8,514
-48 kb/d(-0.55%)
8,119 – 8,514
average over window
8,800
8,808
+8 kb/d(+0.09%)
8,788 – 8,898
2Attribution: which causal path carries the effect
Path / channel
Mean change
Cumulative
Share
Source
Coefficient
Price pass-through
+4 kb/d
+1.98 mb
100%
wti_dowhy WTI crude price
+4 kb/d
+1.98 mb
DoWhy estimate (8-week lag)
-0.0162 (significant)
3Uncertainty
Source
Size
Parameter uncertainty
±55 kb/d
95% band, mean over the window
Model choice
0 kb/d range
same event re-run on 10 fits
DoWhy: WTI +25% -> gasoline demand (8-week lag)
[-0.1545, -0.0162]
range across backdoor sets and the confounder sweep
Held fixed
each week's unexplained noise, seasonality, trend, weather, and any driver not listed as an intervention
4Decision translation
Quantity
Value
Demand
+2.0 mb
+0.2 days of demand
Refinery output
+0 kb/d
+0.0 mb cumulative · utilization not intervened - output as observed
Market balance
-8 kb/d
extra draw · -2.0 mb, -0.2 days
Days of supply (week 12)
-0.1 d
end of window 27.4 → 26.9 d
Margin exposure
+0 $M
crack +0.0 $/bbl on average · crack spread unchanged (utilization not intervened or util->crack edge missing)
Check
computed days of supply vs EIA column 'dos_gas': mean abs difference 0.03 days
Model from2020_h12 · test MASE 0.829 · structural spread over 10 fitted runs
Channels: wti_dowhy. Lag tail 8 weeks.
Direction & magnitude
-2 kb/d(-0.06%)
peak +13 kb/d in week ending 2023-02-10
Top causal path
Price pass-through
100% of effect · WTI crude price
Uncertainty
±20 kb/d (parameter)
structural range 0 kb/d over 10 fits
Decision translation
-0.6 mb
-0.1 days of demand · margin +0 $M
1Direction and magnitude
Horizon into the event
Week ending
Actual
Without the event
Signed change
95% parameter band
week 4
2021-10-01
4,365
4,365
+0 kb/d(+0.00%)
4,365 – 4,365
week 8
2021-10-29
3,686
3,686
+0 kb/d(+0.00%)
3,686 – 3,686
week 12
2021-11-26
4,209
4,203
-6 kb/d(-0.14%)
4,203 – 4,265
week 24
2022-02-18
4,233
4,235
+2 kb/d(+0.05%)
4,213 – 4,235
week 52
2022-09-02
3,624
3,623
-1 kb/d(-0.03%)
3,623 – 3,634
end of window (week 70)
2023-01-06
3,821
3,824
+3 kb/d(+0.08%)
3,792 – 3,824
peak
2023-02-10
3,894
3,907
+13 kb/d(+0.33%)
3,771 – 3,907
average over window
3,953
3,951
-2 kb/d(-0.06%)
3,943 – 3,983
2Attribution: which causal path carries the effect
Path / channel
Mean change
Cumulative
Share
Source
Coefficient
Price pass-through
-1 kb/d
-0.55 mb
100%
wti_dowhy WTI crude price
-1 kb/d
-0.55 mb
DoWhy estimate (8-week lag)
+0.0106 (not significant)
3Uncertainty
Source
Size
Parameter uncertainty
±20 kb/d
95% band, mean over the window
Model choice
0 kb/d range
same event re-run on 10 fits
DoWhy: WTI +25% -> distillate demand (8-week lag)
[-0.1027, +0.0106]
range across backdoor sets and the confounder sweep
Held fixed
each week's unexplained noise, seasonality, trend, weather, and any driver not listed as an intervention
4Decision translation
Quantity
Value
Demand
-0.6 mb
-0.1 days of demand
Refinery output
+0 kb/d
+0.0 mb cumulative · utilization not intervened - output as observed
Market balance
+2 kb/d
more barrels available · +0.6 mb, +0.1 days
Days of supply (week 12)
+0.1 d
end of window 32.4 → 32.7 d
Margin exposure
+0 $M
crack +0.0 $/bbl on average · crack spread unchanged (utilization not intervened or util->crack edge missing)
Check
computed days of supply vs EIA column 'dos_dst': mean abs difference 0.02 days
Model from2010_h12 · test MASE 0.774 · structural spread over 10 fitted runs
Channels: wti_dowhy. Lag tail 8 weeks.
Direction & magnitude
-1 kb/d(-0.08%)
peak +8 kb/d in week ending 2023-03-03
Top causal path
Price pass-through
100% of effect · WTI crude price
Uncertainty
±9 kb/d (parameter)
structural range 0 kb/d over 10 fits
Decision translation
-0.3 mb
-0.2 days of demand · margin +0 $M
1Direction and magnitude
Horizon into the event
Week ending
Actual
Without the event
Signed change
95% parameter band
week 4
2021-10-01
1,694
1,694
+0 kb/d(+0.00%)
1,694 – 1,694
week 8
2021-10-29
1,682
1,682
+0 kb/d(+0.00%)
1,682 – 1,682
week 12
2021-11-26
1,727
1,724
-3 kb/d(-0.18%)
1,724 – 1,753
week 24
2022-02-18
1,476
1,477
+1 kb/d(+0.07%)
1,468 – 1,477
week 52
2022-09-02
1,432
1,431
-1 kb/d(-0.04%)
1,431 – 1,436
end of window (week 70)
2023-01-06
1,406
1,407
+1 kb/d(+0.11%)
1,394 – 1,407
peak
2023-03-03
1,651
1,659
+8 kb/d(+0.49%)
1,587 – 1,659
average over window
1,531
1,530
-1 kb/d(-0.08%)
1,526 – 1,544
2Attribution: which causal path carries the effect
Path / channel
Mean change
Cumulative
Share
Source
Coefficient
Price pass-through
-1 kb/d
-0.29 mb
100%
wti_dowhy WTI crude price
-1 kb/d
-0.29 mb
DoWhy estimate (8-week lag)
+0.0141 (not significant)
3Uncertainty
Source
Size
Parameter uncertainty
±9 kb/d
95% band, mean over the window
Model choice
0 kb/d range
same event re-run on 10 fits
DoWhy: WTI +25% -> jet demand (8-week lag)
[-0.1144, +0.0141]
range across backdoor sets and the confounder sweep
Held fixed
each week's unexplained noise, seasonality, trend, weather, and any driver not listed as an intervention
4Decision translation
Quantity
Value
Demand
-0.3 mb
-0.2 days of demand
Refinery output
+0 kb/d
+0.0 mb cumulative · utilization not intervened - output as observed
Market balance
+1 kb/d
more barrels available · +0.3 mb, +0.2 days
Days of supply (week 12)
+0.1 d
end of window 22.3 → 22.7 d
Margin exposure
+0 $M
crack +0.0 $/bbl on average · crack spread unchanged (utilization not intervened or util->crack edge missing)
Check
computed days of supply vs EIA column 'dos_jet': mean abs difference 0.03 days
Supply side of the same event: refinery utilization on its no-event path moves output (DoWhy utilization → output), the crack spread (edge equation) and, with demand, the stock path. Positive balance means more barrels available without the event.
Fuel
Demand change
Output change
Balance gap
Stocks at end
Margin exposure
Gasoline
+8 kb/d
+0 kb/d
-8 kb/d
-4.0 mb
+0 $M
Distillate (diesel)
-2 kb/d
+0 kb/d
+2 kb/d
+1.1 mb
+0 $M
Jet fuel
-1 kb/d
+0 kb/d
+1 kb/d
+0.6 mb
+0 $M
Stage 04Counterfactual simulation engine
What goes into this stage, what happens, and what comes out.
What goes in
The fitted causal model per fuel
A scenario: a driver, a shock size and a start week
For historical counterfactuals, the event flag to remove
What happens
Run the Baseline, Oil Shock, Refinery Down and Slowdown branches
Rewrite history without a flagged event to see the path demand would have taken
Attribute the effect to the causal paths that carry it
Report parameter and structural uncertainty side by side
What comes out
Signed change against baseline per fuel and horizon
Attribution: which paths carry the effect
Confidence bands and decision translation: volumes, days of cover and margin exposure