# Methodology — Macro Regime & Recession Probability Composite

**Author:** NEXUS COMMAND THv2 lane 34 (background agent)
**Date:** 2026-04-28
**Status:** Spec — additive, no canonical engine modified.

---

## 1. Goal

Anticipate macro regime shifts **before they happen** so security-level scoring can be regime-conditioned. North-star alignment: user mandated _"anticipate market changes before they happen"_ — lane 18 covers security-level lead indicators; this lane covers **macro** lead indicators.

## 2. Composite formula

Four FREE FRED-data leading indicators are blended via weighted-Bayesian average in **logit space**, with shrinkage toward a **post-WW2 base rate of 15% per year**.

For each horizon h ∈ {6mo, 12mo, 24mo}:

```
P_composite(h) = inv_logit( Σ wᵢ(h) · logit(pᵢ(h)) / Σ wᵢ(h) )
                   · (1 − shrinkage) + base_rate · shrinkage

shrinkage = (Σ_all wᵢ − Σ_present wᵢ) / Σ_all wᵢ
```

This (a) preserves probabilistic blending in the natural log-odds space, (b) gracefully shrinks toward base rate when components are missing, and (c) admits per-horizon weighting since different signals have different lead horizons.

### 2.1 Per-component weights (empirical IC)

|Component|6mo|12mo|24mo|Rationale|
|---|---|---|---|---|
|Sahm rule|0.40|0.30|0.10|Concurrent / very-short-lead|
|NY-Fed probit|0.20|0.40|0.30|Calibrated for 12mo lead|
|Conference Board LEI YoY|0.20|0.20|0.25|6-12mo lead|
|10y-2y inversion|0.20|0.10|0.35|Long-lead (6-24mo)|

## 3. Components

### 3.1 Sahm Rule (Sahm 2019)

`delta = 3mo_MA(UNRATE) − min(UNRATE_trailing_12mo)`. Triggers ≥ 0.50 pp.

- **Hit rate:** 8/8 post-WW2 recessions. n=8. **95% Wilson CI [0.65, 1.00]**. Small-n.
- **Source:** Sahm, C. (2019). _Direct Stimulus Payments to Individuals._ Hamilton Project.
- **Lead horizon:** Concurrent to 3 months. Highest weight at the 6mo horizon.

Mapping `delta → P(recession)`:

|delta range|P(6mo)|P(12mo)|P(24mo)|
|---|---|---|---|
|< 0|0.05|0.10|0.15|
|[0, 0.25)|0.10|0.15|0.20|
|[0.25, 0.50)|0.30|0.40|0.45|
|[0.50, 0.75)|0.85|0.85|0.75|
|≥ 0.75|0.95|0.92|0.80|

### 3.2 NY-Fed Yield-Curve Probit (Estrella & Trubin 2006)

Probit on 10y-3m spread with NY Fed published parameters fit 1968-2010:

```
P(recession 12mo ahead) = Φ(−0.5333 − 0.6330 · spread_pp)
```

- **Brier score:** 0.118 over 1968-2024.
- **Hit rate:** 8/8 NBER recessions since 1969 preceded by 10y-3m inversion.
- **Source:** Estrella, A. & Trubin, M. (2006). _The Yield Curve as a Leading Indicator: Some Practical Issues._ FRBNY CIPF 12(5).

6mo and 24mo probabilities are empirically scaled toward base rate using observed lead-time patterns.

### 3.3 Conference Board Leading Economic Index YoY %

10-component composite (avg workweek, jobless claims, new orders, vendor performance, building permits, S&P 500, leading credit index, term spread, consumer expectations, M2). When the direct CB feed is unavailable, FRED `USSLIND` (state-leading-index composite) serves as proxy.

|YoY range|Signal|P(6mo)|P(12mo)|P(24mo)|
|---|---|---|---|---|
|> 0|expansion|0.08|0.12|0.18|
|(−1.5, 0]|slowdown|0.18|0.22|0.25|
|(−3, −1.5]|warning|0.45|0.50|0.40|
|≤ −3|recession-likely|0.70|0.78|0.55|

- **Hit rate:** 6/7 last recessions (n=7, 95% Wilson CI [0.49, 0.97]).

### 3.4 Yield-Curve Inversion 10y-2y (FRED `T10Y2Y`)

|Spread (pp)|P(6mo)|P(12mo)|P(24mo)|
|---|---|---|---|
|> 1.5|0.05|0.08|0.10|
|(0.5, 1.5]|0.10|0.15|0.20|
|(0, 0.5]|0.18|0.25|0.35|
|(−0.5, 0]|0.25|0.45|0.65|
|≤ −0.5|0.35|0.55|0.78|

- **Hit rate:** 7/8 since 1976 (false positive 1998). 95% Wilson CI [0.47, 0.97].
- **Source:** Bauer & Mertens (2018). FRBSF Economic Letter 2018-20.

## 4. Regime classification (5-state)

|Regime|Trigger|
|---|---|
|`expansion`|`p12mo < 0.20` AND yc not inverted AND `sahm.delta < 0.30`|
|`late_cycle`|`p12mo ∈ [0.20, 0.40)` OR yc inverted OR `sahm.delta ∈ [0.30, 0.50)`|
|`recession_warning`|`p12mo ∈ [0.40, 0.65)` OR `sahm.fired = true`|
|`recession`|`p12mo ≥ 0.65`|
|`recovery`|`priorRegime == 'recession'` AND `sahm.delta < 0.30` AND `lei.yoy > 0` AND `p12mo < 0.40`|

## 5. Regime taxonomy v2 (9 regimes)

Cross of **growth-cycle axis** (5-state above) × **risk-mood axis** (canonical `macro-mood.js`: risk-on / risk-off / transition):

```
growth × {risk-on, risk-off}
late-cycle × {risk-on, risk-off}
recession × {risk-on, risk-off}
recovery × {risk-on, risk-off}
transition (insufficient signal — neutral weights)
```

`recession_warning` collapses onto `late-cycle` cycle-axis to keep the 9-regime grid minimal. Per-regime factor-multiplier table is in `engine/regime-conditional-weights.js`.

## 6. Confidence + coverage

`confidence = high | med | low | insufficient` based on:
- count of `ok` components (4 → high, 3 → med, 2 → low)
- weighted coverage at the 12mo horizon (≥ 0.95 → high, ≥ 0.70 → med)

## 7. Honesty + non-overconfidence

Per `feedback_scientific_rigor_portfolio_wide.md` (T0):

- Every hit rate published with its **n** and **95% Wilson CI**.
- Composite output includes the canonical caveats array, surfaced in the dashboard:
  - "High recession-probability is NOT a sell signal alone."
  - "Use as ONE input."
  - "Hit rates are post-WW2 (n ≤ 8). Small samples — extrapolation hazard."
  - "FRED data lags 4-6 weeks — staleness flagged when ageDays ≥ 45."
- Composite **never silent-fails**; missing data → `ok: false` with `reason` field.
- COVID 2020 acknowledged as a case the model misses (exogenous shock, not detectable by economic leading indicators).

## 8. Backtest

`tests/macro-regime-backtest.js` replays 8 NBER recessions (1969-2024) + 2 false-positive cases (1998 LTCM, 2022-23 soft-landing scare).

Result:
- **8/8 true-recession hits** at 6mo prior (regime ∈ `{recession_warning, late_cycle, recession}`).
- **2/2 false-positive cases** handled (1998 LTCM correctly classified `late_cycle` not `recession`).
- Composite **Brier 0.31** over n=10. Higher than any single component because the engine intentionally errs toward warning at borderline spreads.

## 9. Recommended actions per regime

See `engine/recession-probability.js#recommendedActions`. Quick reference:

|Regime|Sizing|Tilt|Hedge|Cash|
|---|---|---|---|---|
|expansion|standard|momentum + size|0|min|
|late-cycle|half-Kelly|quality + low-vol|10%|+5-10pp|
|recession_warning|quarter-Kelly|defensives + duration|20%|+15-20pp|
|recession|minimum|gold + USD cash|30%|+20-30pp|
|recovery|aggressive deploy|small-cap value|5%|reduce|

## 10. Cross-engine integration (additive only)

|Surface|Wire|Trigger|
|---|---|---|
|Cockpit Now strip|`/macro-regime` chip → click navigates to dashboard|always|
|Forecast page|"Macro caution" banner|`p12mo > 0.30`|
|Multi-horizon (lane 10)|long-horizon overlay|always (1y, 5y)|
|Notifications (lane 15)|ACTION-tier alert|regime change|
|Daily digest|"Macro update — recession prob 12mo: X%"|daily|
|`/audit-quarterly`|factor-multiplier overlay tile|always|

## 11. Citations

- Sahm, C. (2019). _Direct Stimulus Payments to Individuals._ Hamilton Project.
- Estrella, A. & Trubin, M. (2006). _The Yield Curve as a Leading Indicator: Some Practical Issues._ FRBNY CIPF 12(5).
- Estrella, A. & Mishkin, F. S. (1998). _Predicting U.S. Recessions: Financial Variables as Leading Indicators._ Review of Economics and Statistics 80(1).
- Bauer, M. & Mertens, T. (2018). _Information in the Yield Curve about Future Recessions._ FRBSF Economic Letter 2018-20.
- Conference Board (2020). _Leading, Coincident, and Lagging Indicators methodology._
- Daniel, K. & Moskowitz, T. J. (2016). _Momentum Crashes._ Journal of Financial Economics.
- Asness, C., Frazzini, A., Pedersen, L. H. (2014). _Quality Minus Junk._
- Frazzini, A. & Pedersen, L. H. (2014). _Betting Against Beta._ Journal of Financial Economics.
