The problem
Purchasing wanted a price outlook and a way to check supplier quotes against the market, without trusting forecasts that sound more certain than they are.
What I built
A daily pipeline of public data (commodity prices back to 2001, weather, climate indices, exchange rates, world prices) feeding forecast models that must earn their place in backtests, plus a Claude advisor that only explains numbers the code has already computed.
Key features
- Daily commodity prices with five groups of external factors
- One-to-three-month forecasts with P10–P90 bands and a reasoned confidence level
- Lagged correlation from −6 to +12 months and event studies
- Policy and law event register that requires a source link and approval
- Supplier quotes compared with market price on a delivered-cost basis
- AI drafts negotiation messages and draft purchase orders
Under the hood
- Models step up from last price → seasonal → ridge → ridge with factors; a more complex one is used only if it wins a no-lookahead rolling backtest (Diebold–Mariano p<0.10 and at least 3% lower error)
- On real data most prices behave like a random walk and external factors help only a few items, so the system reports honest confidence instead of guessing
- Claude advisor guarded in code: suppliers masked, answers must cite fact IDs, numbers must match the facts, no promised outcomes, plus a daily token budget and 24-hour cache