Week 2 Outcomes: $1.32 Off
- Forecast: $108.16
- Actual (March 27 close): $106.84
- Error: $1.32 (1.24%)
- Naive baseline error: $0.40
- Skill score: -2.30
The naive baseline won. Again. 😂
$1.32 off on a wartime oil forecast should feel like a win. In any other context it would be. But the naive baseline (literally: "price stays where it is") was off by only $0.40. Brent opened the week at $106.41 and closed at $106.84. A model that assumes nothing will happen outperformed a scenario-weighted Monte Carlo simulation for the second consecutive week.
That's the uncomfortable finding so far. Two weeks of war, two weeks of the model adding complexity without adding accuracy.
What Actually Happened
The week opened with a bang and ended with a whisper. Monday March 23 was the most volatile single day of the experiment so far. Brent swung from $92 to $109.71 in a single session, a $17.71 intraday range, finishing at $100.49.
Then the week progressively calmed down and drifted back up to $105.32 by Friday.
| Date | Close | High | Low | Daily Vol |
|---|---|---|---|---|
| Mon 23 | $100.49 | $109.71 | $92.00 | 17.6% |
| Tue 24 | $100.04 | $105.04 | $98.09 | 7.0% |
| Wed 25 | $98.05 | $98.40 | $93.46 | 5.0% |
| Thu 26 | $101.26 | $102.48 | $97.04 | 5.4% |
| Fri 27 | $105.32 | $106.96 | $99.30 | 7.3% |
Monday was Trump's ultimatum deadline. Iran vowed to "completely close Hormuz" if power plants were hit. Brent surged past $112 in Asian hours. Then Trump announced a five day pause on energy strikes, claiming "productive talks" with Iran. Iran categorically denied any negotiations. Price crashed $17 by the US close.
The spike and recovery model designed specifically for this pattern did exactly what it was supposed to. The problem is that by Friday the net movement was near zero.
The Band Held (Until It Didn't)
For two consecutive weeks the $100-110 band absorbed everything the war threw at it. Unprecedented strikes on Tehran. Iran hitting Dimona and Arad near Israel's nuclear facility, wounding 180+. Iran's parliament speaker publicly declaring energy infrastructure "legitimate targets." The Pentagon preparing ground invasion plans. The IRGC setting up a tolled passageway through Hormuz and charging in Chinese yuan.
The market processed all of that and closed the week $0.43 higher.
Then over the weekend, the band broke. Houthis formally entered the war on March 28. By Monday March 30, Brent gapped up to $115.
The stalemate thesis was the strongest single call for Weeks 1 and 2. It's dead now.
What the Model Got Right
-
Direction. Correct again. Two for two. Prices moved up from $106.41 to $106.84.
-
Confidence intervals. All three captured the actual. 100% CI hit rate across both weeks. The intervals are well-calibrated.
-
The spike andrecovery split. This was the big Week 2 innovation. Splitting escalation into sustained (40%) and spike-and-recovery (60%) sub-scenarios. Monday's $17.71 intraday swing followed by a week-long recovery to $105 is exactly the dynamic it was designed to model. The sub-scenario structure is earning its keep.
-
The $110 ceiling call. The ceiling held for the third consecutive week. Brent touched $109.71 on Monday and got rejected again. (Though as of today it's been broken, the ceiling was real for the duration of the forecast window.)
What the Model Got Wrong
Still losing to baseline. Two weeks in a row.
The model's point estimate ($108.16) was directionally correct but overshooting by $1.32 when the naive baseline ($106.41) only missed by $0.40. Adding a Monte Carlo simulation to "the price stays the same" made the prediction worse, not better.
The ceiling masked the thesis. The model was right that escalation pressure dominates. But it didn't account for how effectively that pressure was being absorbed. IEA reserves, OPEC+ signals, sanctions lifts, and active price management created a ceiling that prevented escalation from translating into sustained price movement. The model sees the fire. It doesn't see the fire extinguishers.
The Baseline Problem
This is now a pattern. Two weeks of a Bayesian Monte Carlo losing to a model that literally predicts nothing. The question is whether this means anything.
The case that it does. The war is producing extreme intraday volatility but near-zero weekly movement. Active intervention (400m barrel IEA release, Russian sanctions lift, managed Hormuz reopening) is suppressing weekly close-to-close changes. A model designed for regime change is forecasting into a regime that's being actively stabilised.
The case that it doesn't. The model has been directionally correct both weeks with perfect CI calibration. Point estimate error dropped from $13.75 to $1.32. The architecture is learning. If the regime shifts (the band breaks, the ceiling fails), the Bayesian model will capture the new state faster than the naive baseline.
The band broke this weekend. Week 3 will tell us whether the model was early or wrong.
France Confirms Structural Damage
The signal that reframes everything. France's Finance Minister confirmed 30-40% of Gulf refining capacity has been damaged or destroyed by Iranian retaliatory strikes. Recovery could take up to three years. Even if a ceasefire happened tomorrow, the supply side is structurally broken. The IEA's 400 million barrel reserve release covers roughly 36 days at the current 11 million bpd deficit.
This isn't a temporary disruption any more. This is infrastructure damage that outlasts the war.
Methodology Changes for Week 3
-
1. Adjust for band breakout. The $100-110 stalemate band is dead. Brent at $115 needs a new equilibrium assumption. Stalemate floor and ceiling need to anchor to the new level, not the old one.
-
2. Factor structural supply damage. The 30-40% refining capacity loss creates a price floor that's independent of scenario. Even de-escalation doesn't return us to $100 quickly with processing capacity gone for years.
-
3. Black Swan weight increase. Houthis entering the war, Bab el-Mandeb explicitly threatened, nuclear facility tit-for-tat ongoing, ground invasion being planned. The tail risk has widened. It's not theoretical any more, it's stated policy.
-
4. Monte Carlo v3.0. Accepts dynamic horizon (4 trading days this week. This Friday is Good Friday). Weights passed as CLI arguments for faster iteration. Still 5,000 samples. Still the escalation split.
Scored March 30, 2026. You can find the live dashboard here.
Previous: Week 2 Forecast | Next: Week 3 Forecast