Version 1.0 — FROZEN 2026-09-04. Supersedes research builds V22–V29.4.
Prepared 2026-09-04 from the V29 research audits in data/report/. Any change to Sections 1–8 requires a new, explicitly designated research version; V30 and later product versions implement this specification without altering it.
The product publishes a U.S. Recession Risk Score (0–100) with a regime label (Low / Elevated / High) produced by a ridge-regularised logistic model on eight macro-financial indicators, validated point-in-time against data as it was first published. It separately publishes a Market Stress / Drawdown Monitor built from observable market conditions, which makes no forecast. The product distinguishes three outputs that must never be conflated:
| Output | What it is | Status |
|---|---|---|
| Recession Risk Score (0–100) and regime | the model's relative risk assessment: percentile of today's model output against its own out-of-sample history | primary, validated for ranking (Section 6) |
| 12-month calibrated probability | a statistical estimate produced by the calibration policy | secondary, labelled not validated (Section 8) |
| Historical recession frequency by regime | a descriptive statistic: how often a recession followed within 12 months when the score was in this regime, 1998–2025 | descriptive only; not a probability of anything (Section 7) |
Customer interface, fixed order:
RECESSION RISK
72 / 100 ELEVATED Trend: Rising
12-month calibrated probability: XX % (not validated — see methodology)
Historical recession frequency in this regime: 22.6 %
No recession probability is published as a headline number, because no probability construction tested passed point-in-time validation (Section 8).
Headline validation figure: point-in-time AUROC 0.82 (95% block-bootstrap interval 0.67–0.94) over 332 out-of-sample months, December 1997 – August 2025, covering the 2001, 2008 and 2020 recessions. The revised-data figure (0.92) is reported only as a measure of the cost of data revisions and is never used as a headline.
Event. A U.S. recession as dated by the NBER Business Cycle Dating Committee, taken from FRED series USREC (1 = month in recession).
Label. For forecast-origin month t, Y12(t) = 1 if any month t+1 … t+12 is a recession month; 0 if all twelve future months are known and none is a recession month; undefined otherwise. A month whose 12-month window has not yet closed is therefore never scored as a "correct negative". Consequence: the validation record ends 12 months before the most recent data.
Horizon. 12 months, fixed. Rationale: it is the horizon at which the yield curve's documented lead over recessions is strongest, it matches the annual planning cycle of most institutional users, and it is the longest horizon at which the training sample retains enough positive months to fit.
Recessions in the point-in-time validation window. Apr 2001–Nov 2001 (run-up only partly inside the window), Jan 2008–Jun 2009, Mar 2020–Apr 2020. Three events. Every performance claim in this document is conditional on that sample size and says so where it appears.
| Series | Source | Role | Revised after release? | Vintage treatment |
|---|---|---|---|---|
| USREC | NBER via FRED | target only, never a predictor | dating decisions are made with a lag | realised label; not vintaged |
| UNRATE | BLS via FRED/ALFRED | predictor | yes | exact ALFRED vintages |
| PAYEMS | BLS via FRED/ALFRED | predictor | yes | exact ALFRED vintages |
| INDPRO | Federal Reserve via FRED/ALFRED | predictor | yes | exact ALFRED vintages |
| HOUST | Census via FRED/ALFRED | predictor | yes | exact ALFRED vintages |
| UMCSENT | U. Michigan via FRED | predictor | preliminary→final within month; later revisions not verified | treated as unrevised (unverified) |
| DGS10, TB3MS | Treasury via FRED | predictor (term spread) | believed not revised; not independently verified | treated as unrevised (unverified) |
| S&P 500 | Shiller monthly (datahub.io copy) spliced with FRED SP500 (last 10 years) |
predictor (12-month momentum); drawdown monitor | price history; not independently verified | treated as unrevised (unverified) |
| NASDAQCOM | FRED | drawdown monitor only | price history; not independently verified | treated as unrevised (unverified) |
| EBP (excess bond premium) | Federal Reserve Board | excluded from the certified model (Section 4); shown in the Stress Monitor | re-estimated historically | no vintages exist → cannot be validated point-in-time; excluded from the vintage-clean core audit (recorded in alfred_audit_summary.json) |
Licensing status (must be resolved before commercial launch). FRED terms restrict commercial redistribution and require attribution; underlying series carry their owners' terms (BLS, Census, Federal Reserve data are U.S. Government works; UMCSENT is University of Michigan proprietary; S&P 500 index levels are S&P Dow Jones Indices intellectual property, and the Shiller copy is a research dataset). The product displays derived scores and regimes, not redistributed series; a licensing matrix confirming this is acceptable for each source is a V30 deliverable, and a licensed market-data feed replaces the Shiller/FRED splice in production.
Vintage treatment wording. "Exact ALFRED vintages" means the value as published on the forecast date, retrieved from the FRED/ALFRED API. "Treated as unrevised (unverified)" means the series is taken from current data on the assumption that it is not revised after release; that assumption has not yet been independently documented and is listed as an open verification item. No series in this specification is described as "verified unrevised".
series/observations, output_type=2, vintage_dates = month-end of t), i.e. the series exactly as published on that date. Unrevised series and market prices are taken from current data.The standard track (same procedure on today's revised data, from 1987) is computed alongside solely to quantify the cost of revisions. It is not a product metric.
| Feature | Definition | Why it is in |
|---|---|---|
| TERM | DGS10 − TB3MS (month-end) | yield-curve slope; the dominant recession signal |
| TERM_change | 6-month change in TERM | curve steepening/flattening dynamics |
| UNRATE_12m_change | 12-month change in unemployment rate (pp) | labour-market turn (Sahm-type signal) |
| PAYEMS_12m | 12-month % change in nonfarm payrolls | employment momentum (note: positive coefficient — see §10) |
| INDPRO_12m | 12-month % change in industrial production | real-activity momentum |
| HOUST_12m | 12-month % change in housing starts | most cyclical sector; leads |
| UMCSENT_12m | 12-month % change in consumer sentiment | household expectations |
| SP500_12m | 12-month % change in S&P 500 | market's own forward view |
Excluded and why. EBP / credit spreads: no vintages, so cannot be certified; also shown in the Model Selection Lab to reduce early warning (2008: 6 of 12 run-up months in High vs 12; 2020: 0) while raising overall AUROC — it confirms recessions late rather than anticipating them. Re-test if vintaged credit data become available. Valuation (CAPE, earnings yield), volatility, drawdown state: tested for the bear-market target only (Section 12); not tested as recession predictors in V29 and not to be added without a designated research version.
Logistic regression, L2 (ridge) penalty, C = 0.1, class weights balanced, features standardised on the training window, max_iter 5000. Selected by the V29.4 Model Selection Lab against a rule stated before the run (Section 11). The unregularised logistic (C = 1) is the documented incumbent; the logistic + gradient-boosting ensemble is the documented runner-up.
Coefficient signs are reported with the model and must be shown in any "why is risk elevated" explanation as contribution to risk, not translated into economic adjectives (Section 10, "payroll sign").
Score(t) = percentile rank of the month's raw model output among all prior out-of-sample outputs dated ≤ t − 12, × 100. Minimum 40 prior outputs before a score is issued. The score is therefore a monotone transform of the model output, ranks exactly as well as the model, and needs no probability interpretation. It is recomputed every month; historical scores are never revised once issued.
| Regime | Score | Historical recession frequency by risk regime (L2 model, point-in-time, Dec 1997–Aug 2025) |
|---|---|---|
| Low | < 60 | 0.6 % (159 months) |
| Elevated | 60 – 84.99 | 22.6 % (53 months) |
| High | ≥ 85 | 41.4 % (69 months) |
Thresholds were fixed at the 60th and 85th percentiles before the Model Selection Lab was run and were not tuned to it.
These frequencies are descriptive historical statistics, not probabilities. They record how often a recession followed within 12 months when the score was in each regime over one 28-year sample containing three recessions. They are to be labelled in the product exactly as "Historical recession frequency by risk regime" and must not be described as probabilities, likelihoods or forecasts until the calibration gate in Section 8 has been passed. The Low regime is the strongest descriptive statement the product makes. Elevated and High differ meaningfully under the L2 model (+19 points); they did not under the unregularised incumbent (+3 points), which is the primary reason for the change of model.
Trend. 3-month change in Score: Rising ≥ +5 points; Stable between −5 and +5; Falling ≤ −5. Presentation logic only; it carries no statistical claim.
No probability is published as a headline. Tested constructions, all strictly walk-forward (V29.1 §B, V29.2): raw output, Platt scaling, Platt shrunk toward the base rate with a fixed factor (0.25 / 0.5 / 0.75), Platt shrunk with a nested, monthly re-estimated factor, and decile-binned empirical frequency. On the point-in-time track none achieves positive Brier skill across periods; the one construction that appeared to (fixed factor 0.5, skill +0.05) was shown by the nested procedure to be a hindsight choice (nested skill −0.09; the nested factor sat at 1.0 — "no shrinkage" — from 2010 to 2020). All constructions have strongly positive skill 2007–2016 and strongly negative skill 2017–2026.
Policy. The Score is the primary output; the probability is a secondary, distinct object and is never derived from, or used to describe, the regime frequencies in Section 7. A probability may be shown in a secondary position only as "walk-forward Platt, nested shrink", explicitly labelled not validated to beat the base rate under point-in-time data, and never as a headline, alert trigger or API default. The validation gate for promoting a probability to headline status: positive point-in-time Brier skill in every 10-year sub-period and calibration slope within 0.8–1.25 and no reliability bin off by more than 10 points. This gate is re-evaluated only when a new recession has fully entered the record.
Scripts in the repository, each reproducible from cached data without network access:
| Question | Script | Output |
|---|---|---|
| Ranking, thresholds, per-recession lead, periods, standard-vs-PIT gap | recession_performance_report.py |
report/recession_performance_report.md |
| Ranking robustness (LORO, rolling windows), calibration constructions, warning usefulness, Risk Score regimes, 2017–26 diagnosis | recession_robustness_audit.py |
report/recession_robustness_audit.md |
| Nested shrinkage test | shrinkage_audit.py |
report/shrinkage_audit.md |
| Model comparison | model_selection_lab.py |
report/model_selection_lab.md |
| Bear-market target and features | bear_target_audit.py, bear_feature_audit.py |
data/bear_*_audit.md |
Statistical conventions: AUROC intervals by 12-month block bootstrap (1,000 draws); Brier skill = 1 − Brier/Brier(base rate); calibration slope/intercept by logistic regression of outcome on logit(forecast); false-warning episodes = consecutive months in High outside recession with no recession in the following 12 months.
The TRUE ALFRED validation window contains only three recession cycles available for evaluation (2001, 2008, 2020), and the point-in-time lead-time analysis covers those cycles only as far as the available window allows (the 2001 run-up lies partly outside it). Performance estimates therefore carry substantial uncertainty; the AUROC interval of 0.67–0.94 reflects it. No claim of consistent lead time is supportable.
| Model | AUROC | 95 % CI | 2017–26 | worst LORO | Elevated → High recession rate | false High months (2005–06 / 2022–24) | 2008 run-up in High | 2020 run-up in High |
|---|---|---|---|---|---|---|---|---|
| logistic C=1 (incumbent) | 0.816 | 0.68–0.93 | 0.49 | 0.75 | 32 % → 35 % | 44 (11 / 27) | 12/12 | 1/12 |
| logistic L2 C=0.1 (selected) | 0.823 | 0.67–0.94 | 0.44 | 0.74 | 23 % → 41 % | 40 (10 / 24) | 12/12 | 1/12 |
| logistic L1 C=0.5 | 0.821 | 0.69–0.93 | 0.49 | 0.77 | 39 % → 29 % | 38 | 10/12 | 0/12 |
| logistic + curve×labour interactions | 0.815 | 0.68–0.93 | 0.48 | 0.75 | 31 % → 36 % | 45 | 12/12 | 2/12 |
| random forest | 0.751 | 0.59–0.89 | 0.53 | 0.69 | 32 % → 31 % | 49 | 10/12 | 6/12 |
| gradient boosting | 0.754 | 0.61–0.88 | 0.57 | 0.74 | 22 % → 34 % | 38 | 6/12 | 9/12 |
| ensemble (logit + GBM) | 0.805 | 0.67–0.92 | 0.55 | 0.78 | 33 % → 36 % | 42 | 11/12 | 8/12 |
| term spread only (benchmark) | 0.701 | 0.50–0.88 | 0.63 | 0.67 | 15 % → 35 % | 32 | 11/12 | 5/12 |
| logistic + EBP (not vintage) | 0.882 | 0.77–0.97 | 0.50 | 0.84 | 26 % → 48 % | 25 (0 / 22) | 6/12 | 0/12 |
Pre-stated decision rule. Replace the incumbent only if a candidate (a) keeps AUROC inside the incumbent's interval, (b) keeps ≥ 8 of 12 run-up months in High for 2008 and 2020, and (c) improves High-vs-Elevated separation or cuts 2022–24 false-High months without buying (c) by losing (b). No candidate satisfies (b) for 2020 except the ensemble, which fails (c). Among candidates that match the incumbent on (b), L2 is the only one that improves (c) on both counts; it is adopted. Tree models are inferior on ranking under vintage data. The EBP variant is recorded for future re-test only.
Finding (V29 steps 1–2, 135 point-in-time configurations). No definition of a forward bear-market target — S&P 500 or NASDAQ; 15/20/25 % decline; 12/18/24-month horizon; measured from the all-time high, the trailing 12-month high, or as a new peak-to-trough onset — is predictable from macro features (all 54 configurations: negative Brier skill; AUROC 0.41–0.64). Market-native features (momentum, drawdown, volatility, curve, EBP) raise AUROC only for "still-below-a-prior-high" definitions, via the current drawdown itself, and do nothing for onset definitions (AUROC ≤ 0.57). Valuation features are pending one run; see the research-candidate note below.
Product consequence. The market component is a Market Stress / Drawdown Monitor — a descriptive composite, not a forecast — built from: current S&P 500 drawdown from its all-time high and from its 12-month high; 12-month realised volatility (monthly) and 3-month realised volatility (daily NASDAQ proxy until a licensed daily S&P feed exists); 12-month momentum and distance from the 10-month moving average; EBP level and 6-month change (credit stress, displayed, not modelled); and the Recession Risk Score as the one forward-looking input. Each input is expressed as a percentile of its own history and averaged with equal weights into a 0–100 Stress score with the same Low/Elevated/High bands. The Drawdown Monitor is an analytical composite, not a statistically validated probability or forecast of future market declines. It carries that sentence verbatim wherever it is displayed, together with: "Describes current market conditions. No tested model forecast market declines reliably under point-in-time validation."
Valuation features (CAPE, earnings yield vs 10-year, dividend yield, real 10-year yield, inflation): research candidate — not included in the production composite. The pending valuation run (RUN_FEATURE_AUDIT.bat) cannot change this specification. If it shows positive onset-definition Brier skill across periods, that result triggers a designated research version and a new audit under the change-control clause; nothing changes silently.
Frozen negative result. "Probability of a bear market" is not published in any form.
Can claim
Must disclose alongside any of the above
Cannot claim
🔒 METHODOLOGY SPECIFICATION V1.0 — FROZEN 2026-09-04. Permitted without a new version: bug fixes that do not change any number in Sections 1–8 when re-run; presentation changes; adding disclosures. Everything else — new features, model changes, threshold changes, publishing a probability, changing the bear-market stance — requires a designated research version (V3x-R), its own audit report using the scripts in Section 9, and a revised specification with a new version number.
Unemployment rate and nonfarm payrolls: U.S. Bureau of Labor Statistics. Industrial production, 10-year Treasury constant-maturity yield and 3-month Treasury bill rate (H.15): Board of Governors of the Federal Reserve System. Housing starts: U.S. Census Bureau and U.S. Department of Housing and Urban Development. Recession dates: National Bureau of Economic Research. Index of Consumer Sentiment: University of Michigan, Survey Research Center, Surveys of Consumers (© University of Michigan; used as a model input only, with permission confirmed in writing; the index level is not displayed). All series retrieved from FRED®/ALFRED®, Federal Reserve Bank of St. Louis. Market inputs in the beta use a research data source pending a licensed feed; index levels are never displayed or redistributed.
This product uses the FRED® API but is not endorsed or certified by the Federal Reserve Bank of St. Louis. Not investment advice.