Forward Price Projection
Forecast10-year price path under an export-restriction shock, with accuracy attribution
How to read this output
The forecast result has 5 stat chips, a baseline-vs-scenario price chart, optional ±1σ confidence band, and a calibration-accuracy panel.
e.g. ↑ Up → scenario peak rose at least 5% above the no-shock counterfactual at that year
e.g. 1.68× means scenario price was at most 68% above the no-shock baseline at the peak year
e.g. Restriction starts 2025; peak year 2026 means price peaks one year into the restriction
e.g. 2030 (+3yr post-end) → 3 years after restriction end, prices return to within ±10% of where they would have been without the shock
e.g. 30% · 2025–2027 → export_restriction pinned to 0.30 from 2025 through 2027 inclusive
e.g. If the band crosses the baseline line, the shock direction is not robust to parameter uncertainty
e.g. graphite: in_sample 1.0, oos 0.467 → fits its own period perfectly but the regime shift makes cross-period transfer hard
Key takeaway: A high Peak vs baseline + late or 'Never' normalisation = severe scar from the shock. Use the CI band to gauge whether the headline direction is solid or marginal.
What this page computes (thin L2 — supply-shock interventions only)
Formal: P(Y | do(export_restriction = m for years [t_a, t_b])) — restrict export supply, integrate ODE forward
Demand-side equation (price elasticity η_D enters here)
D_t = D_0 · g^t · (P_t / P_ref)^η_D
· (1 − policy.substitution) · (1 − policy.efficiency)
· (1 + demand_surge_t) · demand_destruction_mult_tSupply-side equation (α_P, τ_K, capacity utilisation)
u_t = clamp( u_0 + β_u · log(P_t / P_ref), u_min, u_max )
Q_t = K_t · u_t
Q_eff,t = Q_t · (1 − shock.export_restriction_t)
· policy_supply_mult_t · capacity_supply_mult_t
dK/dt = (K_target(P_t) − K_t) / τ_K [capacity adjusts at rate 1/τ_K]
dP/dt = α_P · (shortage_t − λ_cover · inventory_gap_t) + σ_P · dW_tCalibrated parameters {α_P, η_D, τ_K, g} per episode
Per-mineral values are fitted by differential evolution to maximise DA + Spearman ρ vs. CEPII BACI bilateral unit values (see src/minerals/predictability.py lines 71–89).
Caveat: This page is a convenience L2 interface for supply-shock interventions. For the canonical do-calculus surface — intervening on any structural parameter (η_D, τ_K, substitution_elasticity, fringe_capacity_share, …) via explicit graph surgery — use the L2 — Intervention page.
Source: src/minerals/model.py — step(); calibration in src/minerals/predictability.py
No forecast yet
Pick a commodity, year, and severity on the left, then click Run forecast.