---
title: "Back-test: would the framework have flagged Regime A in May 2002?"
author: ml
data_as_of: 1 Oct 2026 (history to Dec 2020)
---

# Back-test: would the framework have flagged Regime A in May 2002?

*This file is generated. Edit `dataroom/backtest/2002/narrative.md`, then run `make backtest-2002` in `dataroom/`. Every number in the text and tables is computed by `dataroom/backtest/backtest_2002.py` from the data room, and every table is also saved as CSV (Appendix C). The framework is `02-framework/rates-regime-framework-2026.md`; this tests item 4 of section 8.*

## 1. Answer

**No.** Run exactly as written, with the 2026 bands and the "3 of 5 headline metrics for 3 months" rule, the framework would **not** have flagged Regime A in May 2002. The tally that month was **{{may_tally}}**, so no call. Nor would it have flagged A in any of the {{noA_months}} months from {{noA_from}} to Dec 2006. In that period the most A votes in any month was {{max_A_after}}, although the 10-year fell from {{may_10y}}% to {{y10_12}}% within a year. The live data room, which runs the same rules from 2003, first calls A in **{{first_A_live}}**.

Three qualifications matter:

- **The framework did call A, but earlier and only briefly:** {{ep_rt_A}}. These calls came during the Fed's 2001 cutting cycle. They depend on how the pre-2003 5y5y is reconstructed: with the raw Fed Board series instead of the level-adjusted one, there are no A calls at all, and the only calls are B ({{ep_raw}}). All calls in the main version: {{ep_rt}}.
- **What blocked an A call in 2002 was the 2026 calibration of the bands.** The term premium (ACM) was {{may_acm}}%, which the 2026 bands read as Regime **C**. It stayed in the C band for {{acm_c_months}} of the {{acm_c_total}} months from Jun 2001 to Dec 2004. The 10-year TIPS yield was {{may_tips}}%, above every band. The framework's own Regime A levels arrived years later: TIPS below 1.25% first in {{a_tips}}, term premium below zero first in {{a_acm}}, and the 10-year below 4% for a full year first from {{a_10y_12m}}.
- **The parts of the framework that did point to A were outside the headline vote.** In May 2002 the structural drivers (Layer 2) scored **{{drv_total}}** out of a possible −7. Core PCE inflation, as published at the time, was {{pce_rt_may}}%. Japan's 10-year was {{may_jgb}}%. A direction-aware version of the vote, which asks which way each input is moving rather than where it sits, came close in 2002–03 (3 A votes in {{dir_A3_months}}) but never reached three months in a row.

![Regime votes 1999-2006: as written, with the raw 5y5y, and the direction-aware variant](../dataroom/backtest/2002/charts/votes.png)

## 2. What was tested and how

The framework's question: "Rebuild the dashboard with data from May 2002 … Would the framework have flagged Regime A?" I rebuilt every month-end from Jan 1999 to Dec 2006 and ran four versions of the vote:

| Version | What changes | Why |
|---|---|---|
| As written (main result) | Nothing. Same code as the live data room (`derive.regime_votes`), same 2026 bands. | The literal test. |
| Raw 5y5y | Before 2003 the 5y5y uses the Fed Board series without the level adjustment (Appendix A). | The 5y5y must be reconstructed before 2003, and the reconstruction matters. |
| Quarter-end stamp | Interest/receipts dated at quarter end, as the live dashboard does, rather than two months later when it was first usable. | Shows the effect of publication lag. |
| Direction-aware | 5y5y, TIPS and term premium scored on their 12-month change and position against their own trailing 10 years, not on 2026 levels. | Tests whether direction would have caught what levels missed. |

Alongside the votes: every dashboard metric that has bands, as it read in May 2002, the Layer 2 driver scores, the journal's 12-month range method applied in May 2002, and a comparison of real-time and revised data.

**Data that did not exist in 2002, and what replaced it.**

- **5y5y and 10-year TIPS (FRED, from 2003):** taken from the Federal Reserve Board's TIPS yield curve (Gürkaynak-Sack-Wright), which starts in Jan 1999.
- **TIPS check:** on the 2003–2020 overlap the Fed Board TIPS yield sits {{tips_gap}}pt from FRED's, with correlation {{tips_corr}} ({{tips_n}} months), so it is used as is.
- **5y5y adjustment:** the Fed Board 5y5y runs {{off}}pt above FRED's in {{off_from}} to {{off_to}}, so it is lowered by that gap (Appendix A).
- **Fed target rate:** taken from FRED `DFEDTAR`.
- **Credit spread:** FRED `BAA10Y` replaces HY OAS, which FRED keeps only from 2023.

None of the five headline inputs is lost.

**Real-time data.** Market prices are not revised, so four of the five headline inputs are exactly what was on screens in 2002. Core PCE, unemployment and GDP were taken as first published, from ALFRED (the St. Louis Fed's archive of past data releases). Federal interest payments have no ALFRED history before 2008, so interest/receipts uses today's figures, lagged two months to when the quarter was first published.

## 3. The dashboard in May 2002

**Headline vote, 31 May 2002:**

{{t_headline}}

Tally **{{may_tally}}**: no regime has 3 votes, so no call (and a call also needs three months running). Two of the five headline metrics voted **C**, the fiscal or inflation regime, the opposite of what followed.

**Every dashboard metric that has bands, as it could have been read on 31 May 2002.** Each value is the latest one published by that date: quarterly data two months after the quarter ends, annual data four months after. Core PCE is shown as first published, with today's revised value beside it.

{{t_dash}}

Count across these rows: {{dash_counts}}. The macro rows (core inflation, the budget balance, unit labour costs) leaned A. The market-price rows did not. Interest/receipts shows B here because this table applies its level band (15–20%). In the headline vote it counts as A because it was falling.

![Headline inputs 1999-2006 against the 2026 bands](../dataroom/backtest/2002/charts/inputs.png)

## 4. Working, month by month (Jun 2001 to Dec 2003)

The headline rules, applied each month-end:

- **5y5y and term premium:** fixed bands.
- **TIPS:** votes C if it fell more than 10bp over 3 months while the 10-year rose more than 10bp; otherwise its band.
- **Policy:** compares the 3-month change in fed funds with the 30-year: A if both fell more than 10bp, C if fed funds fell and the 30-year rose, B if fed funds moved less than 10bp.
- **Interest/receipts:** A if lower than 12 months earlier, C if above 20% and rising, B if 15–20%.
- **Call:** 3 or more votes for one regime in three consecutive months.

"-" means the reading sits between bands, or the rule gives no vote.

**Market inputs (rows 2, 3, 4):**

{{t_work1}}

**Policy, fiscal and the count (rows 6, 9):**

{{t_work2}}

## 5. Why the votes did not say A

- **Term premium (row 4).** The ACM premium was {{may_acm}}% in May 2002 and peaked at {{acm_peak}}% in {{acm_peak_month}}, the very year yields bottomed. The 2026 C band (above 1.25%) is calibrated to the post-2010 world of QE and compressed premia. In 2002 a premium of 2% or more was normal, so this metric voted C every month until it fell below 1.25% in {{acm_below_125}}. *Caveat:* the ACM model is estimated on the full sample to today, so its 2002 values carry hindsight. Kim-Wright (on the chart above) was lower, at {{may_kw}}% in May 2002, but that is still in the C band.
- **TIPS (row 3).** At {{may_tips}}% the real yield was above every band. Its C rule fired in Mar and May 2002 because TIPS fell while nominal yields rose: breakevens were widening on recovery hopes, which is not the fiscal-dominance signal the rule was written for. TIPS then fell into the B band (first {{tips_first_b}}) and reached {{tips_min}}% in {{tips_min_month}}, but never below 1.25% before {{a_tips}}.
- **5y5y (row 2).** After adjustment it was in the B band (2.0–2.6%) for nearly all of 2002–03; it went below 2% in only a few months of 2003. In 2001 it was below 2% (from {{adj_2001_min}}%), which is where the 2001 A calls came from.
- **Policy (row 6).** The Fed's last cuts of the cycle (Nov and Dec 2001) were followed by a rising 30-year, so the "long end rises while the Fed cuts" C signature fired in Jan and Feb 2002. That was a normal bear steepening at the end of an easing cycle. It fired again after the Nov 2002 cut and, in Jul–Sep 2003, after the Jun 2003 cut, as the summer bond sell-off lifted the 30-year. In all, policy voted C in {{policy_c_months}}. The Jun 2002 C vote comes from a {{jun_dff}}bp drift in the effective fed funds rate, not a cut. For most of 2002 the Fed was on hold, a B vote.
- **Interest/receipts (row 9)** was the only metric pointing to A most months, because interest costs were falling relative to revenue. In May 2002 the fall was just {{may_dint}}pp, so even this vote was marginal.

**Effect of publication lag.** Using the dashboard's quarter-end dating for interest/receipts instead of the "as usable" lag changes the call in {{n_call_diff}} months ({{call_diff_months}}). It never produces an A call in 2002–03: {{ep_rev}}.

**Tie-out with the live data room.** For 2003–2006 the quarter-end version matches the live register (`register/regime_votes.csv`) in {{tie_same}} of {{tie_n}} months. The exception is Feb 2003: the back-test has a TIPS reading for Dec 2002 (from the Fed Board), while the live register starts in Jan 2003.

## 6. Direction-aware variant

The same five inputs, but the three level-banded ones (5y5y, TIPS, term premium) are scored on direction:

- **A** if the 12-month fall is at least {{dir_steps}} *and* the reading is below its own median for the trailing 10 years;
- **C** if the 12-month rise is at least as large and the reading is above that median;
- **B** otherwise.

Policy and interest votes are already directional and are unchanged. Only data available at each month-end is used.

Result: {{ep_dir}}. May 2002: **{{dir_may_tally}}** ({{dir_may_detail}}). The A count reached 3 in {{dir_A3_months}}, but never for three consecutive months. TIPS and the term premium were falling, yet the policy and interest votes flickered, and the 5y5y rose in 2002 as the recession scare faded.

{{t_dir}}

## 7. Structural drivers (Layer 2) in May 2002

Scored with what could be known in May 2002, using the framework's −1 / 0 / +1 scale (−1 pushes yields down):

{{t_drivers}}

**Total {{drv_total}}.** This layer, not the headline vote, carried the A signal in 2002. The framework says this score "is not a forecast; it is a map of pressure". Here the map pointed down while the market-price metrics were still calibrated, in effect, to say C.

## 8. What happened next, and the range test

{{t_outcome}}

The 10-year fell from {{may_10y}}% to {{y10_12}}% by May 2003, then traded around 4–5% to 2007. It did not settle below 4% until {{a_10y_12m}} and reached {{low10}}% in {{low10_m}}. On 6 May 2003 the FOMC said "the probability of an unwelcome substantial fall in inflation, though minor, exceeds that of a pickup in inflation from its already low level". Core PCE, as published, fell to {{pce_rt_2003_min}}% ({{pce_rt_2003_min_m}}).

**Range test.** The journal method (every past 12-month change that started within ±1pt of today's level, applied to today's level, using data to May 2002 only) gives:

{{t_range}}

The 10-year's actual May 2003 level of {{r10_act}}% was below **every** past 12-month change from similar starting levels. The method's history (mostly 1962–2001) contains no fall that large from about 5%. The 30-year, at {{r30_act}}%, was also outside its 10th–90th range ({{r30_p10}}–{{r30_p90}}%).

![What happened next: the May 2002 range for May 2003 against the outcome](../dataroom/backtest/2002/charts/outcome.png)

## 9. Real-time against revised data

May 2002 readings, as first published and as revised today:

{{t_vintage}}

Revisions do not change the answer; if anything they hide the 2002 signal. Core PCE as published was {{pce_rt_may}}% against {{pce_rev_may}}% after revision, and over 2001–03 the published figure was on average {{pce_rev_mean}}pt {{pce_rev_dir}} today's. **In real time, disinflation looked stronger than it does in today's data.** The headline vote is unaffected, because its inputs are market prices plus interest/receipts, which has no 2002 vintage (see section 2).

![Core PCE inflation: as published against revised](../dataroom/backtest/2002/charts/core_pce_vintage.png)

## 10. Lessons for the 2026 framework

1. **The headline bands are era-specific.** Run on 2002 data, they read a disinflationary decade as B or C, because a 2% term premium and a 3% real yield were normal then. They would misread 2026 the same way if the "normal" level has shifted again. Consider bands relative to each input's own trailing history (as in section 6), or to r\*, alongside the fixed ones.
2. **The C signatures misfire at turning points.** "TIPS falling while nominal yields rise" and "long end rising while the Fed cuts" both fired in early 2002 on recovery reflation, not fiscal stress. Require them alongside a fiscal or inflation reading before they count.
3. **Layer 2 was right when Layer 3 was not.** In May 2002 the driver score was {{drv_total}} while the headline vote leaned C. The framework already says to wait for confirmation from Layer 2; the back-test says Layer 2 can lead, so keep the driver score next to the vote rather than beneath it.
4. **Three months running is strict for a turning regime.** The direction-aware vote reached 3 A votes in four months of 2002–03 but never three months in a row. "Two months running" would have called A in May–Jun 2003. Treat this as a hypothesis, not a fitted rule: one episode is not enough evidence, and a looser rule also produces more false calls.
5. **History-based ranges anchor on the old regime.** The journal's range method put May 2003 at {{r10_p10}}–{{r10_p90}}% for the 10-year; the outcome was {{r10_act}}%. This is the 2002 error in numerical form, and it argues for the regime-tilted ranges the journal already uses.

## 11. Caveats

- **5y5y reconstruction.** The adjustment ({{off}}pt) is measured on 2003–05, after the test date, and the gap has a standard deviation of {{off_sd}}pt. The 2001 A calls disappear without it, so treat them as fragile.
- **ACM hindsight.** The model is re-estimated on today's full sample, so its 2002 values were not available in that form at the time.
- **Interest/receipts** uses today's revised BEA data; no 2002 vintage exists in ALFRED.
- **30-year yield.** Treasury held no 30-year auctions from Aug 2001 to Feb 2006, so FRED's DGS30 for 2002–06 does not come from a newly issued 30-year bond, and the data room treats it as extrapolated. It tracks the Fed Board 30-year curve as closely as in other years. The policy vote uses it.
- **Early TIPS market.** In 1999–2002 the TIPS market was small and illiquid, so its real yields and breakevens contain a liquidity premium.
- **One episode.** This is one historical episode, and the lessons above are hypotheses to test, not recalibrations. The framework file has not been changed.

## Appendix A. 5y5y splice

The 5y5y uses FRED `T5YIFR` from Jan 2003. Before that it uses the Fed Board 5-year, 5-year-forward breakeven (`BKEVEN5F05`) minus the mean gap between the two series over {{off_from}} to {{off_to}}: **{{off}}pt** (standard deviation {{off_sd}}pt, {{off_n}} months, correlation {{off_corr}}). The two series are built differently: the Fed Board one is a fitted zero-coupon forward, FRED's comes from Treasury par yields. Unadjusted, the May 2002 reading would be {{may_5y5y_raw}}% instead of {{may_5y5y}}%: a 5y5y "-" vote (between the B and C bands) instead of B.

{{t_splice}}

![5y5y splice](../dataroom/backtest/2002/charts/splice_5y5y.png)

## Appendix B. Every month, 1999–2006

Votes are shown as A-B-C counts; a bold letter marks a regime call. "Detail" is the per-metric vote in the main version.

{{t_all}}

## Appendix C. Data and sources

All files are in `dataroom/backtest/2002/data/`. Each series' raw download, checks and source are in the data room register (`dataroom/register/audit_register.csv`).

| File | Contents |
|---|---|
| `vote_inputs_real_time.csv` | The five headline inputs at each month-end (main version) |
| `vote_inputs_revised.csv` | Same, with interest/receipts dated at quarter end |
| `votes_as_written_real_time.csv` | Main result: A/B/C counts, per-metric detail, call |
| `votes_as_written_revised.csv`, `votes_raw_5y5y_sensitivity.csv`, `votes_direction_aware.csv` | The other three versions |
| `working_2001-06_2003-12.csv` | The month-by-month working in section 4 |
| `dashboard_snapshot_2002-05.csv` | Section 3, all banded metrics |
| `drivers_2002-05.csv` | Section 7 |
| `splice_5y5y.csv` | Appendix A, monthly |
| `vintage_core_pce.csv`, `vintage_unemployment.csv`, `vintage_ngdp.csv` | Real-time against revised, monthly |
| `range_test.csv`, `outcome.csv` | Section 8 |
| `market_panel_month_end.csv` | Every market series used, month-end, 1999–2020 |
| `summary.json` | Key results in machine-readable form |

**Sources:**

- FRED (St. Louis Fed): `DGS10`, `DGS30`, `DFF`, `DFEDTAR`, `T5YIFR`, `DFII10`, `BAA10Y`, `PCEPILFE`, `UNRATE`, `GDP`, `A091RC1Q027SBEA`, `FGRECPT`.
- ALFRED: past releases of `PCEPILFE`, `UNRATE`, `GDP`.
- Federal Reserve Board: [TIPS yield curve and inflation compensation](https://www.federalreserve.gov/data/tips-yield-curve-and-inflation-compensation.htm) (`feds200805.csv`) and the nominal curve (`feds200628.csv`).
- New York Fed: [ACM term premia](https://www.newyorkfed.org/research/data_indicators/term-premia-tabs).
- US Treasury: TIC.
- Ministry of Finance Japan: JGB yields.
