Methodology · Scenarios

How we compute scenario probabilities.

A scenario is a possible macro or geopolitical event with a knowable price impact: Hormuz closure, a Fed pause, a Red Sea escalation. Every scenario in ALAN ships with a published probability that updates as the world changes. This page explains the math, the inputs, and the limits, so you can decide whether to trust a number before you act on it.

The prior is editorial, written down once.

Every scenario starts with a hand-authored base rate: the probability our editorial team estimates over the next 12 months given long-run history and the current set-up. This is the prior. It does not move with the tape. You see it on every scenario card the first time the macro engine has not yet refreshed.

Treat the prior as the answer to: "If you knew nothing else about today, how likely is this?"

The posterior is Bayesian, computed every tick.

Each scenario carries a set of author-curated likelihood rules. A rule says: "given this scenario is actually unfolding, the named macro signal is more (or less) surprising than it would otherwise be." Concretely, a Hormuz-closure rule reads:

signal     uso_realized_vol_30d
op         > 35
lift       3.0×
category   independent
rationale  Historical Hormuz scares all sit above this band

When the live macro feed shows USO 30-day realized volatility above 35%, the rule fires. Its lift, 3× in this case, multiplies the prior odds by three. Multiple rules combine by category: independent rules multiply, substitute rules take the strongest, and confirming rules combine via the square root of their product so two correlated signals don't double- count.

The result is the posterior: a probability that responds to the world. It is shown as a color-coded pill on every scenario surface: green at 10% or below, amber up to 30%, red beyond.

The math, plainly.

We use the odds form of Bayes' rule:

prior_odds      = prior / (1 - prior)
posterior_odds  = prior_odds × combined_lift
posterior       = posterior_odds / (1 + posterior_odds)
posterior       = clamp(posterior, 0.5%, 95%)

The clamp is deliberate. A single noisy reading should never drive belief to certainty in either direction. If you ever see a posterior pinned at 95%, that's the cap biting, not the engine claiming the event is inevitable.

What feeds the engine.

The Phase 1 macro feed pulls from authoritative sources directly, with no third-party aggregators. Today's signal set:

  • VIX close: equity-vol risk gauge (FRED VIXCLS).
  • USO 30-day realized volatility: annualized standard deviation of daily log returns on the United States Oil Fund. Captures the oil-specific tail without paying for an options-IV feed.
  • US Treasury rates: 10y, 2y, 2s10s slope, and the effective Fed Funds rate (FRED DGS10, DGS2, T10Y2Y, DFF).

Future signal families (geopolitical event severity, news-velocity z-scores, JPY spot, lake-elevation for shipping bottlenecks) will plug in as they ship. The engine is tolerant of partial coverage: scenarios whose relevant signals haven't shipped yet pass the prior through unchanged.

Why per-rule transparency matters.

Every posterior on the platform is one click away from its full driver detail. Open the "Why?" disclosure on any scenario and you'll see exactly which rules fired, what value each signal carried, and how much each one moved the posterior. We publish these alongside the number because a probability you can't audit is a probability you shouldn't trade.

This also makes the engine honestly inspectable. If a rule looks too sensitive, firing every week with a big lift, that's visible. The calibration loop (which fires a weekly summary internally) flags exactly that pattern so authors can recalibrate.

Limits: read these before you trade.

  • Calibration is partial. Most scenarios fire rarely. We don't have decades of ground-truth on every scenario, so we use Bayesian updating over expert priors rather than trained statistical models. The math is honest about this. The engine never claims a precision it can't justify.
  • Coverage is partial. Six of twelve shipped scenarios have likelihood rules at launch. The rest pass the prior through. Treat a passthrough posterior the same as you'd treat the editorial prior: an informed estimate, with no live signal.
  • Look-ahead bias is guarded. The macro loader only reads signal snapshots whose observation timestamp is ≤ the engine's compute moment. Backtests re-use the same loader so historical replays match live behavior.
  • Lifts are conservative. No single rule ships with a lift above 3×. Lifts above 3× are reserved for future per-event geopolitical severity scores once the underlying harvester ships.

What's next.

The roadmap from here is straightforward: more signal families, more likelihood-rule coverage, and a calibration brief that plots predicted-vs-realized once enough scenarios fire to make the chart meaningful. Every step ships with the same transparency promise: the math is published, the rules are inspectable, and the limits are on this page rather than buried in a footnote.

Open the scenarios desk →See attribution methodologyBack to overview