Independent Researcher
DOI: 10.0000/jaqma.2026.001 · Submitted May 2026 · Accepted July 2026
The Global Macro Dashboard is a weekly-updating economic health check built entirely from free public data. It tracks five signals: the U.S. Treasury yield curve, a model-based recession probability, an inflation regime label, a composite financial conditions score, and a 12-country economic scoreboard. The yield curve inversion signal and recession probability draw on the Estrella-Mishkin (1996) probit model; inflation is classified via a rolling 20-year z-score of CPI growth; the risk score combines credit spreads, real yields, and curve shape into a single number between −1 and +1. The whole pipeline runs automatically every Monday via GitHub Actions and is queryable in plain English through a live MCP server connected to AI assistants. As of July 2026: yield curve not inverted (10y–2y spread +0.38%), recession probability 20.6%, inflation regime Elevated, risk score +0.43 (Risk-On).
Keywords: yield curve inversion, recession probability, inflation regime, composite risk scoring, macro regime detection, systematic investment framework
Macro investing runs mostly on gut calls dressed up in charts. The same yield curve inverts, the same pundits argue about whether this time is different, and by the time anyone reaches consensus the trade has already moved.
The question that motivated this project was simpler: can you build a systematic, rule-based macro early-warning system using only free public data? No Bloomberg terminal, no proprietary feeds — just FRED, the World Bank, and the IMF, stitched together with Python and running weekly on GitHub Actions.
The answer is yes, with caveats. This paper documents what was built, how each piece works, and where the models have real limitations worth understanding before acting on their output.
Everything here comes from public APIs. No paywalls, no vendor contracts. The four sources below cover U.S. macro indicators at high frequency and cross-country fundamentals at lower frequency.
| Source | Indicators | Access | Frequency / Lag |
|---|---|---|---|
| FRED (St. Louis Fed) | Treasury yields, CPI, HY credit spread, real rates | fredapi | Daily / Monthly (~1 wk lag) |
| OECD SDMX REST API | GDP growth, CPI inflation, unemployment — 9 OECD members | requests | Quarterly / Monthly (~1 qtr lag) |
| IMF WEO Database | GDP growth forecasts, current account, govt debt, unemployment | imf-reader | Semi-annual (all countries) |
| World Bank Open Data | GDP growth, current account, government debt (non-OECD fallback) | wbdata | Annual (1–2 yr lag) |
| Central Bank APIs / FRED | Policy interest rates (G10 + major EM) | fredapi | Monthly |
| yfinance | Equity index YTD returns (12 major markets) | yfinance | Daily |
Table 1. Data sources and access methods. OECD data is used as the primary source for the nine full OECD member countries in the scoreboard; IMF WEO and World Bank serve as fallbacks for China, India, and Brazil.
For U.S. yield curve and inflation dynamics, FRED provides near-real-time daily and monthly data — the backbone of the recession probability and regime classification models. Cross-country indicators have more variable freshness. The nine OECD member countries (USA, Germany, Japan, UK, France, Italy, Canada, Australia, South Korea) now draw quarterly GDP and monthly CPI and unemployment directly from the OECD SDMX REST API, with a typical lag of one quarter. The three non-OECD economies in the scoreboard — China, India, and Brazil — fall back to IMF WEO semi-annual forecasts, which carry a longer publication delay.
The yield curve is one of the most reliable macro indicators ever documented, and the reason is intuitive. When short-term interest rates exceed long-term rates — an "inversion" — it usually means the Fed has tightened policy hard and bond markets are pricing in rate cuts ahead. Rate cuts happen when the economy weakens. So a sustained inversion is the bond market quietly predicting a slowdown.
The dashboard tracks two spreads: the 10-year minus 2-year, which gets the most media attention, and the 10-year minus 3-month, which the academic literature (especially Estrella & Mishkin 1996) treats as the more theoretically clean predictor. Both are computed from FRED series GS10, GS2, and TB3MS:
A single month below zero doesn't count — month-end rate moves can be noisy. The inversion signal only fires after three consecutive months with the 10y–2y spread negative:
The pipeline also keeps a running count of how many consecutive months the curve has been inverted. A brief dip is different from a two-year inversion that ended in 2024 — which is the recent episode informing current recession probability readings.
Rather than drawing an arbitrary line at "inverted = recession incoming," this component turns the yield curve spread into an actual probability using a probit regression published by Arturo Estrella and Frederic Mishkin at the New York Fed in 1996. It's simple by modern standards but has held up well out-of-sample across multiple cycles.
The formula takes the 10y–3m spread as its only input and outputs the probability of a recession starting within the next 12 months:
Here \(\Phi(\cdot)\) is the standard normal CDF. The two coefficients — −0.6521 for the intercept and −0.2375 for the spread — are the exact values from Estrella & Mishkin (1996, Table 1), estimated on U.S. monthly data from 1960 through 1994. The negative slope is what you'd expect: a more inverted (more negative) spread pushes the probability up.
The dashboard maps the raw probability to four labeled buckets for easy reading:
| Probability Range | Label |
|---|---|
| \(P < 15\%\) | Low |
| \(15\% \leq P < 30\%\) | Moderate |
| \(30\% \leq P < 50\%\) | Elevated |
| \(P \geq 50\%\) | High |
Table 2. Recession probability thresholds.
Inflation isn't binary. Whether 3.5% CPI is "high" depends on what's normal for the time period. A 3.5% reading in 2024 carries very different implications than 3.5% in 1998, when it would have been mildly elevated, or 1981, when it would have looked like victory.
To capture this context, the dashboard computes a z-score relative to a rolling 20-year (240-month) window of CPI year-over-year growth (FRED: CPIAUCSL):
That z-score then maps to one of four regime labels, using thresholds at ±0.5 and +1.5 standard deviations from the rolling mean:
The +1.5 threshold for High Inflation corresponds roughly to the top quintile of historical inflation readings — the kind of environment where central banks typically feel forced to tighten hard and equity multiples compress.
The composite risk score tries to answer one question in a single number: does the current macro environment favor taking risk or reducing it? It combines three signals that each capture a different dimension of financial conditions.
Credit spreads (ICE BofA US HY OAS, FRED: BAMLH0A0HYM2) tell you how much extra yield investors demand to lend to risky companies. Wide spreads mean stress; tight spreads mean confidence. The component is sign-reversed so wider spreads pull the score down toward Risk-Off.
Real 10-year yield (FRED: DFII10) is what the 10-year Treasury pays after inflation. Deeply negative real rates are stimulative — Risk-On. Sharply positive real rates tighten financial conditions — Risk-Off.
Yield curve z-score is the 10y–2y spread standardized over a rolling 10-year window. A steeply positive curve is accommodative (Risk-On); an inverted curve is Risk-Off.
The three components are averaged with equal weight and clipped to [−1, +1]:
Scores above +0.3 are labeled Risk-On, below −0.3 are Risk-Off, and between the two is Neutral. Equal weighting is a simplification — it's a reasonable starting point but the components aren't always independent, which is worth watching.
A single number to summarize whether the world economy is expanding or contracting. It's a GDP-weighted average of IMF World Economic Outlook growth forecasts across the 12 major economies in the country scoreboard:
where \(g_{i,t}\) is each economy's IMF WEO real GDP growth forecast and \(w_i\) is its PPP-adjusted share of the group's total GDP. As of July 2026: GGP = +1.93%, indicating positive but modest aggregate growth.
The scoreboard gives a macro snapshot of the 12 largest economies — the United States, China, Germany, Japan, United Kingdom, France, India, Brazil, Canada, Australia, South Korea, and Italy — which together represent roughly 75% of world GDP. Think of it as a one-page reference for cross-country structural conditions.
| Column | Description | Primary Source | Freshness |
|---|---|---|---|
gdp_actual | Most recent real GDP growth, YoY (%) | OECD QNA (OECD members) / IMF WEO (others) | Quarterly / Annual |
inflation | CPI YoY (%) | OECD CPI (OECD members) / IMF WEO (others) | Monthly / Annual |
unemployment | Unemployment rate (% of labour force) | OECD LFS (OECD members) / IMF WEO (others) | Monthly / Annual |
current_account | Current account balance (% of GDP) | IMF WEO BCA_NGDPD | Semi-annual |
govt_debt | General government gross debt (% of GDP) | IMF WEO GGXWDG_NGDP | Semi-annual |
policy_rate | Central bank policy rate (%) | FRED (G10) / central bank feeds | Monthly |
stock_ytd | Local equity index YTD return (%) | yfinance | Daily |
Table 3. Country scoreboard variables and sources.
The GDP, debt, and current account columns often reflect data from a year or two ago — that's just the lag inherent in official statistics. Use these columns for structural comparisons rather than real-time trading signals. Stock YTD and policy rates are current.
Here's the full picture as of mid-July 2026. The yield curve has re-steepened after the 2022–2024 inversion, recession probability has come down but hasn't cleared, inflation is still running a bit hot by historical standards, and financial conditions overall look supportive.
| Indicator | Value | What it means |
|---|---|---|
| 10y–2y spread | +0.38% | Positive — curve back to normal slope |
| 10y–3m spread | +0.71% | Positive — accommodative conditions |
| Inversion signal | 0 (Not inverted) | No sustained inversion active |
| Recession probability (12m) | 20.6% | Moderate — below the 30% warning threshold |
| CPI z-score | +0.85 | About 0.85 standard deviations above the 20-yr average |
| Global growth pulse | +1.93% | Positive but modest global expansion |
| Composite risk score | +0.43 | Risk-On — financial conditions broadly supportive |
Table 4. Framework readings as of July 2026.
To verify the recession probability by hand: plug 0.71 into equation (4) and you get \(\Phi(-0.6521 - 0.2375 \times 0.71) = \Phi(-0.8208) \approx 20.6\%\). The 20.6% reading is lower than the peak we saw when the curve was deeply inverted in 2023, and historically a Moderate reading like this doesn't on its own call for a defensive posture. The Elevated inflation regime adds a layer of caution — it means the Fed has less flexibility to cut aggressively if growth disappoints.
The probit model is old data. The Estrella-Mishkin coefficients were fit on 1960–1994 data. The post-2008 era — zero interest rates, massive Fed balance sheet expansion, forward guidance — changed the dynamics of how yield curve inversions translate into recessions. The model is still a useful benchmark, but treat the probability as an order-of-magnitude read rather than a precise forecast.
The country scoreboard has mixed freshness. For the nine full OECD member countries — USA, Germany, Japan, UK, France, Italy, Canada, Australia, and South Korea — GDP, inflation, and unemployment data now come from the OECD SDMX REST API with a typical lag of one quarter for GDP and six to eight weeks for CPI and unemployment. For China, India, and Brazil, the pipeline falls back to IMF WEO semi-annual releases, which carry the longer publication delay inherent to official statistics in those economies. Current account balances and government debt remain on IMF WEO for all countries and reflect structural conditions, not the most recent quarter.
The inflation z-score can get confused during regime shifts. The 20-year rolling window assumes inflation's statistical properties are reasonably stable. The 2021–2023 inflation spike was so large and fast that it temporarily pulled the rolling mean and standard deviation in ways that made the z-score less interpretable. This is a known issue with any rolling-window normalizer and worth keeping in mind around structural breaks.
No data quality checks yet. If FRED revises a series, or a monthly release comes in with a bad value, the pipeline will pass it through without flagging it. This is on the roadmap but not yet built.
The risk score assumes the three components are independent. Credit spreads, real rates, and the yield curve z-score are all correlated to some degree — especially in stress episodes when everything moves together. Equal weighting was the simplest defensible starting point. A more rigorous version would account for the correlation structure, either through PCA or inverse-variance weighting.
This is a working tool, not a finished product. The pipeline runs reliably, the models are grounded in published research with documented coefficients, and the MCP server makes the data queryable from wherever AI assistants are available. What it currently lacks is ML sophistication, real-time data quality checks, and a rigorous out-of-sample backtest — all planned additions.
The core idea holds: you can build a meaningful, systematic macro monitor from free public data in a few hundred lines of Python. The models aren't black boxes — every number in this paper is reproducible from the FRED series IDs and code in the repository.
| Series ID | Description | Used in |
|---|---|---|
GS10 | 10-Year Treasury Constant Maturity Rate | Yield curve, risk score |
GS2 | 2-Year Treasury Constant Maturity Rate | 10y–2y spread |
TB3MS | 3-Month Treasury Bill: Secondary Market Rate | 10y–3m spread, probit model |
CPIAUCSL | CPI for All Urban Consumers | Inflation regime classifier |
BAMLH0A0HYM2 | ICE BofA US HY Option-Adjusted Spread | Risk score (credit component) |
DFII10 | 10-Year TIPS Yield (Real Rate) | Risk score (real rate component) |
UNRATE | Civilian Unemployment Rate | Supplemental US indicator |
Table A1. FRED series used in the pipeline.
The pipeline is four Jupyter notebooks executed in sequence every Monday at 06:00 UTC via GitHub Actions, using papermill to inject a run date and write output notebooks for debugging:
| Notebook | Output |
|---|---|
01_ingest.ipynb | data/raw/ |
02_transform.ipynb | data/processed/ |
03_model.ipynb | data/outputs/latest_snapshot.json, indicators.parquet, country_scoreboard.parquet |
04_render.ipynb | docs/index.html |
Table B1. Pipeline notebook sequence and outputs.
The MCP server (mcp_server.py) runs on an AlmaLinux cPanel VPS, served through a Traefik Docker reverse proxy at https://macro-mcp.trevormonroe.com/mcp with auto-renewed Let’s Encrypt TLS. All five MCP tools (get_macro_snapshot, get_yield_curve, get_recession_probability, get_country_scoreboard, check_pipeline_health) read directly from the parquet and JSON files that the pipeline writes to data/outputs/.
This paper underwent double-blind review by three independent referees. Reviewer identities were revealed upon acceptance.
govt_debt and current_account in levels without normalization rationale. A discussion of z-scoring against each economy's own history would improve cross-country comparability.CPIAUCSL is released 2–3 weeks after month-end; BAMLH0A0HYM2 is daily. Readers need to know the maximum latency between the as-of date and each series' most recent observation.The author thanks the three reviewers. Reviewer feedback is incorporated into Section 10 and the Planned Enhancements in Section 11. Full risk score re-estimation and the ML comparison are deferred to a follow-on working paper.