Skip to content
SOFR2 3.66 UST 2Y1 4.34 UST 5Y1 4.52 UST 10Y1 4.77 BAA–10Y1 +157 HY OAS1 2.65
Labor Share1 93.4 Q2'26 Top 1% Wealth1 31.6% Q1'26 Bottom 50% Wealth1 2.5% Q1'26 Savings Rate1 3.0% Jul'26 NFCI1 −0.56 Aug 28 Haruspex Index3 −0.63 Recessionary Contraction Q2'26
Hobby Project · Live Macro Model

The Haruspex Index

The name is the fallback in case this is only as accurate as the ancient art it's named for. This model attempts to read the guts of the economy.

Fifteen FRED-anchored factors, weighted and normalized to a single regime read between −2.0 and +2.0. Updated automatically. Open to critiques.

Current Reading
−0.63
Robust band −0.75 to −0.40 · regime near a boundary
Recessionary Contraction
RecessionStagflationFragileNeutralExpansion
Signal Detail
Δ vs prior quarter−0.24
Dominant forceReal-wage squeeze
Effective factors~2.69 of 15
Zone stability60.1%
Last updated: Q2 2026 · pulled from FRED
An economist is an expert who will know tomorrow why the things he predicted yesterday didn't happen today.— Laurence J. Peter
What the Score Means

One number, −2.0 to +2.0.

Fifteen macro factors are each scored on the same −2.0 to +2.0 scale, weighted by importance, and averaged into a single reading. Positive leans toward healthy or inflationary expansion. Negative means stress: cost-push inflation eating into the real economy, sliding toward stagflation and, at the extreme, contraction. Today's reading of −0.63 sits in Recessionary Contraction: broad deterioration.

+0.75 to +2.00 Inflationary Expansion growth running hot
+0.20 to +0.74 Neutral Expansion steady and balanced
−0.15 to +0.19 Fragile / Artificial Stability calm on the surface
−0.55 to −0.16 Stagflation Risk prices up, real economy soft
−2.00 to −0.56 Recessionary Contraction broad deterioration

Read the zone, not the third decimal. The robustness band (−0.75 to −0.40) is how far the number drifts when the inputs are stress-tested 20,000 ways; a wide band or a low zone-stability (60.1% here) means the read sits near a boundary and the zone is contested.

Track Record

What it would have read, back to 2000.

The engine run point-in-time each quarter, on the factors that had FRED data then, against CPI inflation on the right axis. This is what it is honest about: it is a cost-push gauge, not a recession timer. Across 106 quarters it moves inversely to inflation (correlation -0.6); it falls when prices bite (2008 oil, 2022 to 2023, now). In the disinflationary crashes of 2009 and 2020 it turned up, not down, because inflation collapsed and policy eased. NBER recessions are shaded for context.

+2 +1 0 −1 −2 9%3%0% 2000200420082012201620202024
HRX index (left) CPI inflation, YoY % (right) NBER recession
Trajectory

Q2 2026: the read, quarter by quarter.

The latest move is −0.24 on the quarter. The index is a regime read, so watch the band it sits in, not the third decimal.

−0.15 −0.55 Q1'25Q2'25Q3'25Q4'25Q1'26Q2'26
The Factors

All fifteen, weighted.

Every factor in the index — its weight, its FRED series, and where it sits this quarter. Weights sum to 20.5; the reading is their weighted average, bounded −2.0 to +2.0. Each factor is dated to the period its data covers.

F1
Real Wage Growth
−2.0
wt 2 · AHETPI · as of Q2'26
F2
Consumer Demand
1.0
wt 1 · RSAFS · as of Q2'26
F3
Savings Rate
−1.50
wt 2 · PSAVERT · as of Q2'26
F4
Credit Usage
0.0
wt 1 · DRCCLACBS · as of Q1'26
F5
Institutional Liquidity
−0.50
wt 2 · FEDFUNDS · as of Q2'26
F6
Commodity / Energy
−2.0
wt 1.5 · CPIENGSL · as of Q2'26
F7
Asset Inflation vs CPI
1.50
wt 1 · SP500;CPIAUCSL · as of Q2'26
F8
Retail Speculation
0.50
wt 0.5 · VIXCLS · as of Q2'26
F9
Consumer Sentiment
−1.50
wt 1.5 · UMCSENT · as of Q2'26
F10
Input Cost Pressures
−1.50
wt 1.5 · PCUOMFGOMFG · as of Q2'26
F11
USD FX Strength
1.0
wt 1 · DTWEXBGS · as of Q2'26
F12
Policy / Stimulus
0.50
wt 1.5 · FYFSGDA188S · as of 2025
F13
Housing Affordability
0.0
wt 1.5 · FIXHAI · as of Q2'26
F14
Stock Mkt Cap / GDP
−1.0
wt 0.5 · WILL5000INDFC;GDP · as of 2026-Q1 (last audited) · last audited
F15
LEI Trend
−0.75
wt 2 · USSLIND · as of 2026-Q1 (last audited) · last audited
Read It Honestly

A model you can't critique is a model you can't trust.

~2.69
Effective factors of 15
The factors aren't independent. On current data the index behaves like ~2 to 3 signals, not 15. Read it as regime, not a precise decimal. Indicative: the window is still short.
±0.10
Robustness band
Under 20,000 perturbations of the inputs and weights, the score wobbles within −0.75 to −0.40.
60.1%
Zone stability
A meaningful share of stressed draws crossed into the neighboring zone. The read sits near a boundary; treat the zone as contested.
Math is the truth. Everything else is decoration.

The index is a regime diagnostic, not a crystal ball. It confirms turns, it doesn't call them. Most factors are coincident-to-lagging; a few (LEI, sentiment) lead. Use it for direction and discipline: first-lien posture, shorter duration, real stress-testing of exit assumptions.

15 factors, FRED-sourced, symmetric −2/+2 rubric, normalized by weight. 13 of 15 factors live this quarter; the rest hold their last audited value, dated above. Window: 6 quarters.

The Haruspex Index is a personal macroeconomic research tool that uses my own proprietary hobby-level "Haruspex Macroeconomic Regime Engine", not investment advice and not a solicitation. It is a hobby read, not a forecast. Always read it with these things in mind.

FRED, Federal Reserve Bank of St. Louis · University of Michigan (UMCSENT) · National Association of Realtors (FIXHAI)

Methodology

How the read is built, step by step.

Reproduced from the audited workbook and re-run every quarter: fifteen FRED-anchored factors, each scored on a symmetric −2.0 to +2.0 rubric, weighted, normalized to one number — then stress-tested for how much that number can actually be trusted.

Scoring rubric

Each factor carries a direction and a ladder of (threshold → score) bands. GTE factors score higher as the raw reading rises; LT factors are inverted — lower is better (cost pressures, leverage, policy rates). The engine walks the ladder top-down, first match wins, floor is −2.0. It's the nested-IF logic from the workbook's Rubric tab, ported verbatim.

F10 input-cost PPI (YoY %, inverted): ≤0% → +2 · 4% → 0 · 10% → −1 · >14% → −2

Normalization

Index = Σ(factor score × weight) ÷ Σ(weights), bounded −2.0 to +2.0. Weights sum to 20.5. Because it's a weighted average on one shared scale, no single factor can run away with the read and the number stays comparable quarter to quarter. Change a threshold or a weight in the workbook and the whole model re-scores.

Diagnostic bands

  • +0.75 to +2.00 Inflationary Expansion
  • +0.20 to +0.74 Neutral Expansion
  • −0.15 to +0.19 Fragile / Artificial Stability
  • −0.55 to −0.16 Stagflation Risk
  • −2.00 to −0.56 Recessionary Contraction

Robustness band — Monte Carlo

Every run, 20,000 draws perturb each raw input by ±15% of its rubric band-width (a data-revision proxy) and every weight by ±20% (weighting-judgment uncertainty), then re-score and re-normalize. The P05–P95 spread is the published band; zone-stability % is the share of draws that stayed in the same regime. A fuzzy number sitting inside a stable zone is the honest output.

Effective factors — PCA

Fifteen factors are not fifteen independent signals. Each run eigendecomposes their correlation matrix and reports a participation ratio, (Σλ)² ÷ Σλ². On current data the index carries the information of roughly 2 to 3 independent factors — which is exactly why it's read as a regime, not a third decimal.

Data, window & updates

Every series pulls from FRED and refreshes quarterly. AUTO factors read a single series; SEMI factors need a computed transform (YoY, spread, ratio, quarterly average, 6-month change) and get verified. All fifteen are aligned to the longest common window where every series has data — the latest-start constraint — and the backtest runs point-in-time on the factors that had data then, no hindsight. Any factor's raw value can be hand-overridden, and overrides are flagged.

FRED-native swaps (v1.0)

Two factors moved to FRED-native series so nothing hangs on a manual pull: F10 Input Costs → PCUOMFGOMFG (Manufacturing PPI, YoY %); F13 Housing Affordability → FIXHAI (NAR), which flipped direction and had its weight raised 1.0 → 1.5. That lifted the weight sum to 20.5; normalization adjusts automatically.

Reproducibility

A regression test feeds the workbook's historical raw values and asserts the code reproduces its audited scores to the decimal. The quarterly build fails rather than publish a reading that drifts from the source model. The code's only job is to mirror the workbook, then make it live.

Data retrieved from FRED, Federal Reserve Bank of St. Louis. UMCSENT © University of Michigan. FIXHAI © National Association of Realtors.