SA CPI Commodity Pass-Through Model

Maps BCOM constituent weights to SA CPI sub-categories, applies futures-curve-implied price paths and FX, and projects an indicative forward CPI path. Discussion aid, not a forecasting model — see notes below.
1. BCOM curvespot → 3M / 6M / 12M futures-implied % change, editable per commodity
2. FX overlayUSD/ZAR spot & forward — converts USD commodity moves to ZAR terms
3. Pass-through & lagCPI sub-weight × elasticity × indirect uplift, applied at assumed lag (months)
4. Implied CPI pathcumulative bps vs base run-rate, shown as a probability cone
Every BCOM constituent below is USD-priced; SA CPI reflects rand prices. Set spot and forward-implied % change (positive = rand depreciation) — this is applied multiplicatively to every commodity's ZAR-terms price change.
Defaults approximate NDF/forward-point carry differential (ZAR rates over USD rates). Overwrite with current desk levels.
Paste a block of Ticker,3M%,6M%,12M% — comma or tab separated, one commodity per line, any order — then click Apply. Rows are matched by ticker. Click "Load current values" first to pull today's numbers into the box, copy that into Excel, update against your live curve, then copy the edited block back in and click Apply.
What-if column overrides the futures-implied % for that tenor when populated — leave blank to use the curve-implied path. Indirect uplift is an explicit guesstimate multiplier for second-round effects (e.g. diesel → fertiliser → food; diesel → electricity generation cost) — flagged, not modelled. Confidence reflects pass-through reliability, not price-forecast confidence. SA Maize, SA Soybeans and SA Wheat use SAFEX (JSE) futures curves rather than CBOT/BCOM — marked · ZAR next to the ticker. These are already rand-denominated, so the FX overlay is deliberately not applied to these three rows, to avoid double-counting currency effects.
BCOM Commodity BCOM Wt% CPI Mapping CPI Sub-Wt% Elasticity Lag (mo) Season. Confidence Spot Δ 3M% Spot Δ 6M% Spot Δ 12M% What-if 3M% What-if 6M% What-if 12M% Indirect× CPI bps 3M CPI bps 6M CPI bps 12M
Total implied CPI impact (bps, direct + indirect, ex. base effects)
The forward path nets new commodity/FX moves against what happened in the base month a year ago. Editable — prefilled with recent Stats SA prints where available; extend/adjust as new releases land.
Central path = current headline YoY + cumulative implied bps impact, monthly-interpolated. Band widens with horizon per the uncertainty inputs below — reflecting compounding forecast error, not a statistical distribution. Treat as a discussion cone, not a forecast.
Central implied path   Uncertainty cone   Current YoY (flat reference)

Column definitions

  • Elasticity — the assumed pass-through coefficient (0–1): the share of a commodity's USD/ZAR price move that actually reaches the mapped CPI item's retail price, after retailer margin absorption, regulation, and consumer substitution are netted out. 1.0 = full 1-for-1 pass-through (e.g. regulated fuel pricing); 0.3 = only 30% reaches the till, with the rest absorbed elsewhere in the supply chain (e.g. gold price into jewellery retail prices). This is a judgement input, not an estimated regression coefficient — treat it as a starting point to argue with.
  • Indirect uplift (Indirect×) — a manual multiplier scaling the direct effect up to proxy for second-round effects: diesel → fertiliser/animal feed → food; diesel → backup power/generation costs. "Flagged, not modelled" means this number is a guessed scaling factor, not a derived figure — a genuinely modelled version would require tracing each link in the chain separately, each with its own lag and elasticity (e.g. a distinct "diesel → fertiliser → maize" row with a longer lag and lower confidence than the direct diesel → fuel-price link). The multiplier approach keeps the tool simple and honest about its limits, at the cost of not showing where the extra impact is coming from. If a specific pathway (diesel-linked effects are the most material candidate) needs to carry real weight in a client conversation, it's worth breaking out as its own explicit row rather than relying on the hidden multiplier — flag this if useful and it can be added.
  • Confidence — reflects reliability of the pass-through assumption itself (data quality, historical consistency), not confidence in the underlying price forecast.
  • Lag (mo) — months before the price move is fully reflected in the printed CPI index. Shifts timing of impact along the chart's monthly path; does not change magnitude.

How the CPI bps figures are calculated

  • For each commodity: ZAR price change = (futures-implied or what-if USD % change) + (FX forward % change for that tenor).
  • Direct CPI impact (bps) = CPI sub-weight% × elasticity × ZAR price change% × indirect uplift multiplier × 100.
  • Lag (months) shifts when the impact lands in the printed index — it does not change the magnitude. The chart applies lags when spreading impacts across the monthly path.
  • Fuel benefits from a known, short, mechanical lag (SA's monthly retail price-averaging + one-month publication lag). Food/agricultural pass-through is longer and considerably noisier — local harvest cycles, import parity, and retailer margin absorption all interfere — hence lower confidence and wider assumed lags.
  • SA Maize, SA Soybeans and SA Wheat are priced off SAFEX (JSE Commodity Derivatives) rather than CBOT — these contracts settle in ZAR, so the model does not add the FX overlay on top of their spot/futures % change (it's already embedded in the local price via import/export parity arbitrage). Their assumed lag is shorter than the original CBOT proxies, reflecting the absence of a shipping/FX-conversion lag on top of the local harvest cycle.

What is explicitly not modelled (guesstimates only)

  • Second-round effects (diesel → fertiliser/agri input costs → food; diesel → backup power/electricity generation costs) are captured only via the manually-set Indirect Uplift multiplier — this is a judgement input, not a derived figure.
  • Retailer/producer margin absorption — in practice, price moves are frequently partially absorbed rather than fully passed through, especially on the way down.
  • SARB reaction function / monetary policy feedback loops.
  • Cross-commodity substitution effects (e.g. consumers shifting between beef and poultry) and demand elasticity.

Reference weights used as starting points

  • BCOM constituent weights: Bloomberg Commodity Index factsheet, 30 June 2026.
  • SA CPI main-category weights (2023 basket, current at time of writing): Housing & Utilities 24.10%, Food & NAB 18.23%, Transport 13.89%, Insurance & Financial Services 10.41% — Stats SA basket/weights update, January 2025.
  • Fuel, cereal, meat and oils/fats sub-weights are Stats SA-sourced where available; where not, they are flagged "Est." and should be checked against the latest COICOP 8-digit weights file before client use.
This tool is a discussion aid to frame conversations about commodity price transmission into SA CPI. It is not a precision forecasting model, does not constitute investment or economic advice, and all editable assumptions (elasticities, lags, indirect multipliers, band widths) are judgement-based starting points intended for adjustment.