Recession odds are low: 4.4%, well below the 25% alarm line.
2 Oct 2026 · No. A430D5BC0D
K4 in force · benchmark is headline
LatestNew data on 2 Oct 2026: the jobs report, jobless claims, and durable goods, plus 23 other series. The headline is 4.4%, down 1.7 pts from the September close.
4.4%
chance of a US recession within 12 months80% range 2.9–6.3%
Headline, 2 Oct 2026: term spread + EBP
Recession odds are low: 4.4%, well below the 25% alarm line.
Two market signals set this number, and both read calm: the yield curve is positive (the 10-year Treasury yield is 1.08 points above the 3-month bill); the excess bond premium, the extra yield lenders demand beyond expected defaults, is −0.29, below its long-run average: lenders are relaxed.
80% range 2.9–6.3% · Updated 2 Oct 2026, 11:26 pm ET · data checked 4 Oct 2026
▼ 1.7 ptsfrom 6.1% at the September official close
Compare other models, and why this is the headline
Term spread + EBPheadline · 80% band 2.9–6.3%
4.4%
12-block model80% band 0.7–3.4%
1.6%
Yield curve alonethis project’s probit
7.4%
Fed Board modelpublished
12%
Chauvet-Pigerin recession now
0.6%
0%10%20%alarm30%
Why this number: kill rule K4 found that this two-signal benchmark forecast better than the 12-block model in testing, so the benchmark is the headline (6.1% at the last official close). The 12-block model reads 1.6%, shown as a second opinion. See the kill rules
How reliable is it? In testing over 1980–2024, months this benchmark put below 5% were followed by a recession 0.7% of the time (268 months). Its above 50% readings were less exact: recessions followed 46% of the time against 84% forecast. Each band rests on only a handful of recessions, so read the number as a guide to risk, not a precise frequency.
The Fed Board's 12% is its June 2026 reading, published about two months behind (July: 11%, which enters on its scheduled date). It is a similar bond-market model, but Fed staff fit it to the whole history with hindsight and revise it, while ours is refitted each month using only what was known at the time; over 1980–2024 the two series correlate only 0.35.
What moved since the last official close
The model fell from 2.5% to 1.6% with the jobs report, jobless claims, and durable goods, plus 23 other series. Labor went from −0.07 to +0.22; the curve block went from −0.37 to −0.24. Both reduced the reading. Within labor, the strongest signals: prime-age employment-population ratio (+1.35); average weekly hours, manufacturing (+1.01); initial jobless claims, 4-week average (+0.86). The weakest: job openings (−1.20); temporary help services employment (−0.91).
Push on the model
Each weighted block's change, in probit-index points. Right lowers risk; left raises it. 5 of 12 blocks carry no weight.
Labor Market−0.12
The Yield Curve Complex−0.08
Real Activity & Output+0.01
Equity, Volatility & Cross-Asset+0.01
Business, Orders & Surveys+0.00
Inflation & Prices−0.00
Commodities & Dollar−0.00
The twelve blocks today
Standardised against each signal's own history. Below zero is recession-like.
Uncertainty, Sentiment & Text−1.34
Monetary Policy, Rates & Liquidity−1.04
Inflation & Prices−0.48
The Yield Curve Complex−0.24
Real Activity & Output+0.08
Housing & Construction+0.10
Equity, Volatility & Cross-Asset+0.20
Labor Market+0.22
Business, Orders & Surveys+0.33
Credit & Financial Conditions+0.34
Commodities & Dollar+0.37
Household & Consumer+0.42
reassuringrecession-likeno weight in the model
With a weight of −0.50, Commodities & Dollar is the largest single term holding the model's probability down (−0.19 on the probit scale, more than Business, Orders & Surveys).
The record
Since 2015Since 1980
Term spread + EBP (headline)12-block modelRecessionAlarm line, 25%
Walk-forward: each month is forecast using only recessions the NBER had announced by then. Before about 2010 most inputs come from later-revised data, so the early record is an optimistic ceiling.
Kill rules
Written on 2 October 2026, before the model was relied on. When one fires, its action is applied automatically. K4 compares the model with term spread + EBP in both test windows (corrected 3 October 2026).
K1clear
Missed recession
NBER announces a recession and the model never reached the 25% alarm in the 12 months before it began.
K2clear
Persistent false alarm
Model above 50% for 18 consecutive months with no recession starting.
K3pending
Live calibration failure
0 of 36 live forecasts resolved
K4in force
Benchmark overtakes model
AUROC: model vs term spread + EBP 0.887 vs 0.899 (1980+), 0.898 vs 0.907 (1990+). AUPRC: 0.353 vs 0.628 and 0.343 vs 0.441. Benchmark ahead on AUROC in 1980+ and 1990+.
K5clear
Data outage
Three or more blocks have fewer than half their usual number of factors this month.
K6clear
Model disagreement
Model and term spread + EBP differ by more than 30 percentage points.
K7clear
Extrapolation
A block the model weights is at the +/-4 standardisation cap.
K8scheduled
Text/sentiment recalibration
Annually, regardless of performance (registry: text factors decay fastest).
Forecast log
Append-only and hash-chained: any edit to a past entry is detected. Kill-rule changes never edit an entry.
| Month | Model | TS + EBP | Logged | Note | Hash | | ------------------ | ----- | -------- | ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ---------- | | 2026-10-02in-month | 1.6% | 4.4% | 2026-10-02 22:26 | in-month update: Jobs report; Jobless claims; Durable goods; 23 other series (30-year fixed mortgage rate, AAA, Atlanta Fed GDPNow, BAA…) | A430D5BC0D | | 2026-09official | 2.5% | 6.1% | 2026-10-02 22:01 | post-audit fixes 2026-10-02 | 84F00E9016 | | 2026-09official | 2.8% | 6.2% | 2026-10-02 20:46 | | D7B9A9D8A4 |
"Official" is the month-end forecast, comparable with the 1980–2024 track record. "In-month" is an interim update logged when new data was published. Both September official entries stay in the log by design: the 20:46 entry was superseded at 22:01 (post-audit fixes 2026-10-02). Rebuild any entry with `run.cmd reproduce YYYY-MM` (official) or `YYYY-MM-DD` (in-month).
Cite this
CycleWatch. (2026, October 2). US recession probability: 4.4% chance a recession begins within 12 months (forecast-log entry A430D5BC0D). CycleWatch website
Copy citation The forecast history is downloadable as CSV on the Data page.
Signals
Every series the registry allows on this page, as last published. The signal is each series' z-score against its own history, signed so that below zero is recession-like. Choose a block to open it, or search; select a row for details.
81in the model8reading recession-like8reading reassuring194shown
Real Activity & Output+0.081 of 11 recession-like · weight −0.12Labor Market+0.221 of 13 recession-like · weight −0.40Household & Consumer+0.420 of 8 recession-like · no weightBusiness, Orders & Surveys+0.330 of 6 recession-like · weight −0.46Credit & Financial Conditions+0.340 of 14 recession-like · no weightMonetary Policy, Rates & Liquidity−1.043 of 9 recession-like · no weightThe Yield Curve Complex−0.240 of 2 recession-like · weight −0.65Inflation & Prices−0.481 of 3 recession-like · weight −0.09Housing & Construction+0.101 of 9 recession-like · no weightEquity, Volatility & Cross-Asset+0.200 of 2 recession-like · weight −0.12Commodities & Dollar+0.370 of 3 recession-like · weight −0.50Uncertainty, Sentiment & Text−1.341 of 1 recession-like · no weight
Search signals
AllIn model · 81Not in model · 47Context · 34Benchmark · 24Supporting · 8
Show 36 without current data
Block 01 · Real Activity & Output15 metrics · 11 in the model
| Indicator | Latest | Updated | Last 24 | Signal | Use | | -------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ | ------------------------- | ------- | ------ | ------------ | | Capacity utilizationTCU · FRED | 76.27 Percent−0.054 | 2026-08-01pub. 2026-09-18 | | +0.00 | In model | | Cass Freight shipments indexFRGSHPUSM649NCIS · FRED | licensed: not shown on the public site | 2026-08-01pub. 2026-09-11 | | +0.38 | In model | | Core capital goods ordersNEWORDER · FRED | 87,640 Millions of Dollars+1,345 | 2026-08-01pub. 2026-09-25 | | +0.73 | In model | | Electricity outputIPG2211S · FRED | 113.1 Index 2017=100+2.32 | 2026-08-01pub. 2026-09-18 | | +1.45 | In model | | Heavy truck salesHTRUCKSSAAR · FRED | 0.396 Millions of Units−0.017 | 2026-09-01pub. 2026-10-02 | | −1.64 | In model | | Industrial productionINDPRO · FRED | 103.1 Index 2017=100+0.023 | 2026-08-01pub. 2026-09-18 | | −0.24 | In model | | Real GDPGDPC1 · FRED | 24,408 Billions of Chained 2017 Dollars+133.6 | 2026-04-01pub. 2026-07-30 | | −0.15 | In model | | Real gross domestic incomeA261RX1Q020SBEA · FRED | 24,550 Billions of Chained 2017 Dollars+159.7 | 2026-04-01pub. 2026-08-26 | | −0.11 | In model | | Real manufacturing & trade salesCMRMTSPL · FRED | 1,598,922 Millions of Chained 2017 Dollars+9,233 | 2026-07-01pub. 2026-09-30 | | +0.41 | In model | | Real personal consumption expendituresPCEC96 · FRED | 16,955 Billions of Chained 2017 Dollars+92.80 | 2026-08-01pub. 2026-09-30 | | +0.43 | In model | | Real personal income less transfersW875RX1 · FRED | 17,047 Billions of Chained 2017 Dollars−13.20 | 2026-08-01pub. 2026-09-30 | | −0.42 | In model | | Average of GDP and GDILB0000091Q020SBEA · BEA | 24,479 Billions of Chained 2017 Dollars+146.7 | 2026-04-01pub. 2026-08-26 | | — | Not in model | | Business inventoriesBUSINV · FRED | 2,764,708 Millions of Dollars+22,175 | 2026-07-01pub. 2026-09-16 | | — | Not in model | | Durable goods orders ex-transportADXTNO · CENSUS | 224,364 Millions of Dollars+551.0 | 2026-08-01pub. 2026-09-25 | | — | Not in model | | Inventory-to-sales ratioISRATIO · FRED | 1.30 Ratio+0.000 | 2026-07-01pub. 2026-09-16 | | — | Not in model |
Block 02 · Labor Market22 metrics · 13 in the model
| Indicator | Latest | Updated | Last 24 | Signal | Use | | ------------------------------------------------------------------------------------------------------------- | -------------------------------------- | ------------------------- | ------- | ------ | ------------ | | Average weekly hours, all privateAWHAETP · FRED | 34.40 Hours+0.000 | 2026-09-01pub. 2026-10-02 | | +0.67 | In model | | Average weekly hours, manufacturingAWHMAN · FRED | 42.00 Hours+0.200 | 2026-09-01pub. 2026-10-02 | | +1.01 | In model | | Continuing claimsCCSA · FRED | 1,701,000 Number−11,000 | 2026-09-19pub. 2026-10-01 | | +0.46 | In model | | Household survey employmentCE16OV · FRED | 163,152 Thousands of Persons+406.0 | 2026-09-01pub. 2026-10-02 | | +0.40 | In model | | Indeed job postings indexIHLIDXUS · FRED | licensed: not shown on the public site | 2026-09-18pub. 2026-09-23 | | +0.41 | In model | | Initial jobless claims, 4-week averageIC4WSA · FRED | 200,000 Number−2,500 | 2026-09-26pub. 2026-10-01 | | +0.86 | In model | | Insured unemployment rateIURSA · FRED | 1.10 Percent+0.000 | 2026-09-19pub. 2026-10-01 | | +0.58 | In model | | Job openingsJTSJOL · FRED | 7,079 Level in Thousands−256.0 | 2026-08-01pub. 2026-09-29 | | −1.20 | In model | | Layoffs and dischargesJTSLDL · FRED | 1,641 Level in Thousands−61.00 | 2026-08-01pub. 2026-09-29 | | +0.78 | In model | | Nonfarm payrollsPAYEMS · FRED | 159,044 Thousands of Persons+29.00 | 2026-09-01pub. 2026-10-02 | | −0.88 | In model | | Prime-age employment-population ratioLNS12300060 · FRED | 80.70 Percent+0.300 | 2026-09-01pub. 2026-10-02 | | +1.35 | In model | | Quits rateJTSQUR · FRED | 1.90 Rate+0.000 | 2026-08-01pub. 2026-09-29 | | −0.67 | In model | | Temporary help services employmentTEMPHELPS · FRED | 2,487 Thousands of Persons−10.90 | 2026-09-01pub. 2026-10-02 | | −0.91 | In model | | Average hourly earningsCES0500000003 · FRED | 37.81 Dollars per Hour+0.050 | 2026-09-01pub. 2026-10-02 | | — | Not in model | | Employment cost indexECIALLCIV · FRED | 177.2 Index Dec 2005=100+1.56 | 2026-04-01pub. 2026-07-31 | | — | Not in model | | U-6 underemployment rateU6RATE · FRED | 7.60 Percent−0.100 | 2026-09-01pub. 2026-10-02 | | — | Not in model | | Unemployment rateUNRATE · FRED | 4.20 Percent+0.100 | 2026-09-01pub. 2026-10-02 | | — | Not in model | | Unit labor costsULCNFB · FRED | 124.0 Index 2017=100+0.359 | 2026-04-01pub. 2026-08-06 | | — | Not in model | | Labor force participation rateCIVPART · FRED | 61.80 Percent+0.200 | 2026-09-01pub. 2026-10-02 | | — | Context | | Michaillat-Saez ruleMS\_RULE · DERIVED | no free source | | | — | Benchmark | | Richmond Fed SOS indicatorSOS · DERIVED | no free source | | | — | Benchmark | | Sahm Rule (real-time)SAHMREALTIME · FRED | 0.000 Percentage Points+0.070 | 2026-09-01pub. 2026-10-02 | | — | Benchmark |
Block 03 · Household & Consumer15 metrics · 8 in the model
| Indicator | Latest | Updated | Last 24 | Signal | Use | | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------ | ------------------------- | ------- | ------ | ------------ | | Credit card delinquency, all banksDRCCLACBS · FRED | 2.85 Percent−0.060 | 2026-04-01pub. 2026-08-25 | | +0.26 | In model | | Household net worthTNWBSHNO · FRED | 195,870,496 Millions of U.S. Dollars+12,803,400 | 2026-04-01pub. 2026-09-11 | | +2.76 | In model | | Real disposable personal incomeDSPIC96 · FRED | 18,410 Billions of Chained 2017 Dollars−4.90 | 2026-08-01pub. 2026-09-30 | | −0.04 | In model | | Real retail & food services salesRRSFS · FRED | 231,630 Millions of 1982-84 CPI Adjusted Dollars+1,933 | 2026-08-01pub. 2026-09-16 | | +0.42 | In model | | Retail sales, control groupRSXFS · FRED | 646,347 Millions of Dollars+7,316 | 2026-08-01pub. 2026-09-16 | | −0.09 | In model | | SLOOS consumer credit standardsDRTSCLCC · FRED | 6.70 Percent+4.70 | 2026-07-01pub. 2026-08-03 | | −0.07 | In model | | Total vehicle sales, SAARTOTALSA · FRED | 16.38 Millions of Units−0.602 | 2026-09-01pub. 2026-10-02 | | −0.95 | In model | | U. Michigan consumer sentimentUMCSENT · FRED | licensed: not shown on the public site | 2026-08-01pub. 2026-08-28 | | +1.06 | In model | | Mortgage delinquency rateDRSFRMACBS · FRED | 1.86 Percent−0.020 | 2026-04-01pub. 2026-08-25 | | — | Not in model | | Personal saving ratePSAVERT · FRED | 4.10 Percent−0.500 | 2026-08-01pub. 2026-09-30 | | — | Not in model | | Revolving consumer creditREVOLSL · FRED | 1,357,221 Millions of U.S. Dollars+2,803 | 2026-07-01pub. 2026-09-08 | | — | Not in model | | Distribution of wealth and debtWFRBST01134 · FRED | 32.50 Percent of Aggregate+0.800 | 2026-04-01pub. 2026-09-18 | | — | Context | | Excess savings bufferEXCESS\_SAV · DERIVED | no free source | | | — | Context | | Financial obligations ratioFODSP · FRED | no free source | | | — | Context | | Household debt service ratioTDSP · FRED | 11.11 Percent−0.047 | 2026-04-01pub. 2026-09-22 | | — | Context |
Block 04 · Business, Orders & Surveys6 metrics · 6 in the model
| Indicator | Latest | Updated | Last 24 | Signal | Use | | --------------------------------------------------------------------------------------------------------------------------- | ------------------------------- | ------------------------- | ------- | ------ | -------- | | Business formation applicationsBAHBATOTALSAUS · FRED | 145,387 Number−6,219 | 2026-08-01pub. 2026-09-11 | | −0.28 | In model | | CFNAI diffusion indexCFNAIDIFF · FRED | 0.020 Index−0.020 | 2026-08-01pub. 2026-09-21 | | −0.13 | In model | | Chicago Fed National Activity IndexCFNAI · FRED | \-0.040 Index−0.120 | 2026-08-01pub. 2026-09-21 | | −0.15 | In model | | Corporate profits, NIPA basisCPATAX · FRED | 3,877 Billions of Dollars+276.9 | 2026-04-01pub. 2026-08-26 | | +0.90 | In model | | Empire State manufacturing surveyGACDISA066MSFRBNY · FRED | 7.60 Index−13.00 | 2026-09-01pub. 2026-09-15 | | +0.01 | In model | | Philadelphia Fed manufacturing surveyGACDFSA066MSFRBPHI · FRED | 37.80 Index−9.60 | 2026-09-01pub. 2026-09-17 | | +1.60 | In model |
Block 05 · Credit & Financial Conditions23 metrics · 14 in the model
| Indicator | Latest | Updated | Last 24 | Signal | Use | | --------------------------------------------------------------------------------------------------------- | -------------------------------------- | ------------------------- | ------- | ------ | ------------ | | Adjusted NFCIANFCI · FRED | \-0.574 Index+0.011 | 2026-09-25pub. 2026-09-30 | | +0.53 | In model | | Bank depositsDPSACBW027SBOG · FRED | 19,637 Billions of U.S. Dollars+66.29 | 2026-09-23pub. 2026-10-02 | | −0.06 | In model | | Chicago Fed National Financial Conditions IndexNFCI · FRED | \-0.548 Index+0.005 | 2026-09-25pub. 2026-09-30 | | +0.10 | In model | | Excess bond premium (Gilchrist-Zakrajsek)EBP · FED\_BOARD | \-0.319 Percentage points−0.030 | 2026-07-01pub. — | | +0.70 | In model | | Kansas City Fed financial stress indexKCFSI · FRED | \-0.946 Index−0.104 | 2026-08-01pub. 2026-09-05 | | +0.87 | In model | | Moody's Aaa minus 10-year TreasuryAAA10Y · FRED | licensed: not shown on the public site | 2026-10-01pub. 2026-10-02 | | +0.70 | In model | | Moody's Baa minus 10-year TreasuryBAA10Y · FRED | licensed: not shown on the public site | 2026-10-01pub. 2026-10-02 | | +0.29 | In model | | NFCI credit subindexNFCICREDIT · FRED | \-0.061 Index+0.001 | 2026-09-25pub. 2026-09-30 | | −0.38 | In model | | NFCI leverage subindexNFCILEVERAGE · FRED | 0.084 Index+0.001 | 2026-09-25pub. 2026-09-30 | | −0.50 | In model | | SLOOS: C&I tightening, large firmsDRTSCILM · FRED | 0.000 Percent−8.10 | 2026-07-01pub. 2026-08-03 | | −0.00 | In model | | SLOOS: CRE standardsSUBLPDRCSN · FRED | \-11.30 Percent−8.00 | 2026-07-01pub. 2026-08-03 | | +1.05 | In model | | SLOOS: loan demandDRSDCILM · FRED | 16.10 Percent+11.30 | 2026-07-01pub. 2026-08-03 | | +0.67 | In model | | St. Louis Fed financial stress indexSTLFSI4 · FRED | \-0.807 Index−0.106 | 2026-09-25pub. 2026-09-30 | | +0.93 | In model | | Total bank creditTOTBKCR · FRED | 19,863 Billions of U.S. Dollars−25.14 | 2026-09-23pub. 2026-10-02 | | −0.18 | In model | | BBB OASBAMLC0A4CBBB · FRED | licensed: not shown on the public site | 2026-10-01pub. 2026-10-01 | | — | Not in model | | CCC and lower OASBAMLH0A3HYC · FRED | licensed: not shown on the public site | 2026-10-01pub. 2026-10-01 | | — | Not in model | | CRE delinquency at banksDRCRELEXFACBS · FRED | 1.53 Percent−0.030 | 2026-04-01pub. 2026-08-25 | | — | Not in model | | Commercial & industrial loansBUSLOANS · FRED | 2,935 Billions of U.S. Dollars+46.73 | 2026-08-01pub. 2026-09-11 | | — | Not in model | | Commercial paper spreadsCPFF · FED\_BOARD | 0.280 Percent+0.090 | 2026-10-01pub. 2026-10-02 | | — | Not in model | | High yield OASBAMLH0A0HYM2 · FRED | licensed: not shown on the public site | 2026-10-01pub. 2026-10-01 | | — | Not in model | | Investment grade corporate OASBAMLC0A0CM · FRED | licensed: not shown on the public site | 2026-10-01pub. 2026-10-01 | | — | Not in model | | NFCI risk subindexNFCIRISK · FRED | \-0.629 Index+0.006 | 2026-09-25pub. 2026-09-30 | | — | Not in model | | SLOOS: C&I tightening, small firmsDRTSCIS · FRED | 1.80 Percent−4.80 | 2026-07-01pub. 2026-08-03 | | — | Not in model |
Block 06 · Monetary Policy, Rates & Liquidity15 metrics · 9 in the model
| Indicator | Latest | Updated | Last 24 | Signal | Use | | --------------------------------------------------------------------------------------------------------- | ----------------------------------------- | ------------------------- | ------- | ------ | ------------ | | 10-year real yieldDFII10 · FRED | 2.88 Percent−0.050 | 2026-10-01pub. 2026-10-02 | | −1.94 | In model | | 5-year real yieldDFII5 · FRED | 2.65 Percent−0.080 | 2026-10-01pub. 2026-10-02 | | −1.84 | In model | | Effective fed funds rateDFF · FRED | 3.88 Percent+0.000 | 2026-10-01pub. 2026-10-02 | | −0.65 | In model | | Fed balance sheet total assetsWALCL · FRED | 6,743,031 Millions of U.S. Dollars−4,673 | 2026-09-30pub. 2026-10-01 | | −0.15 | In model | | M2 money stockM2SL · FRED | 23,343 Billions of Dollars+124.9 | 2026-08-01pub. 2026-09-22 | | −0.33 | In model | | Overnight reverse repo balancesRRPONTSYD · FRED | 1.50 Billions of US Dollars+1.15 | 2026-10-02pub. 2026-10-02 | | −0.02 | In model | | Real M2M2REAL · FRED | 6,986 Billions of 1982-84 Dollars+9.80 | 2026-08-01pub. 2026-09-22 | | −0.21 | In model | | Reserve balances at Federal Reserve banksWRESBAL · FRED | 2,948,090 Millions of U.S. Dollars+17,897 | 2026-09-30pub. 2026-10-01 | | −0.22 | In model | | Treasury General AccountWTREGEN · FRED | 948,674 Millions of U.S. Dollars−28,410 | 2026-09-30pub. 2026-10-01 | | −4.00 | In model | | Target range, upper boundDFEDTARU · FRED | 4.00 Percent+0.000 | 2026-10-02pub. 2026-10-02 | | — | Not in model | | M2 velocityM2V · FRED | 1.42 Ratio+0.003 | 2026-04-01pub. 2026-07-30 | | — | Context | | Mortgage rate lock-in effectLOCK\_IN · DERIVED | no free source | | | — | Context | | Taylor rule deviationTAYLOR\_DEV · DERIVED | no free source | | | — | Context | | Ten-year term premium (ACM)THREEFYTP10 · FRED | 1.02 Percent−0.005 | 2026-09-25pub. 2026-09-29 | | — | Context | | r-star (Holston-Laubach-Williams)HLW\_RSTAR · FED\_REGIONAL | no free source | | | — | Context |
Block 07 · The Yield Curve Complex2 metrics · 2 in the model
| Indicator | Latest | Updated | Last 24 | Signal | Use | | --------------------------------------------------------------------------------------------------- | ------------------- | ------------------------- | ------- | ------ | -------- | | 10-year minus 2-year Treasury spreadT10Y2Y · FRED | 0.450 Percent−0.010 | 2026-10-02pub. 2026-10-02 | | −0.34 | In model | | 10-year minus 3-month Treasury spreadT10Y3M · FRED | 1.09 Percent+0.020 | 2026-10-02pub. 2026-10-02 | | −0.14 | In model |
Block 08 · Inflation & Prices18 metrics · 3 in the model
| Indicator | Latest | Updated | Last 24 | Signal | Use | | ---------------------------------------------------------------------------------------------------------------- | --------------------------------------- | ------------------------- | ------- | ------ | ------------ | | Hamilton net oil price increaseOIL\_SHOCK · Derived | 0.000 model input (derived)+0.000 | 2026-10-02pub. — | | −0.00 | In model | | Natural gas, Henry HubDHHNGSP · FRED | 3.18 Dollars per Million BTU+0.050 | 2026-09-29pub. 2026-09-30 | | +0.27 | In model | | WTI crude oilDCOILWTICO · FRED | 96.16 Dollars per Barrel−3.21 | 2026-09-29pub. 2026-09-30 | | −1.71 | In model | | 10-year breakeven inflationT10YIE · FRED | 2.36 Percent+0.000 | 2026-10-02pub. 2026-10-02 | | — | Not in model | | 16% trimmed mean CPITRMMEANCPIM157SFRBCLE · FRED | 0.220 Percent Change−0.003 | 2026-08-01pub. 2026-09-11 | | — | Not in model | | 5-year 5-year forward breakevenT5YIFR · FRED | 2.35 Percent−0.010 | 2026-10-02pub. 2026-10-02 | | — | Not in model | | 5-year breakeven inflationT5YIE · FRED | 2.37 Percent+0.010 | 2026-10-02pub. 2026-10-02 | | — | Not in model | | Brent crude oilDCOILBRENTEU · FRED | 114.0 Dollars per Barrel−6.01 | 2026-09-29pub. 2026-09-30 | | — | Not in model | | Cleveland Fed model inflation expectationsEXPINF1YR · FRED | 2.64 Percent+0.245 | 2026-09-01pub. 2026-09-11 | | — | Not in model | | Cleveland median CPIMEDCPIM159SFRBCLE · FRED | 2.58 Percent Change from Year Ago−0.114 | 2026-08-01pub. 2026-09-11 | | — | Not in model | | Core CPICPILFESL · FRED | 337.8 Index 1982-1984=100+0.976 | 2026-08-01pub. 2026-09-11 | | — | Not in model | | Core PCE price indexPCEPILFE · FRED | 130.5 Index 2017=100+0.322 | 2026-08-01pub. 2026-09-30 | | — | Not in model | | Headline CPICPIAUCSL · FRED | 334.1 Index 1982-1984=100+1.32 | 2026-08-01pub. 2026-09-11 | | — | Not in model | | Headline PCE price indexPCEPI · FRED | 131.6 Index 2017=100+0.407 | 2026-08-01pub. 2026-09-30 | | — | Not in model | | Import price indexIR · FRED | 150.8 Index 2000=100+1.00 | 2026-08-01pub. 2026-09-16 | | — | Not in model | | PPI final demandPPIFIS · FRED | 157.4 Index Nov 2009=100+0.627 | 2026-08-01pub. 2026-09-10 | | — | Not in model | | Sticky-price CPICORESTICKM159SFRBATL · FRED | 2.70 Percent Change from Year Ago−0.015 | 2026-08-01pub. 2026-09-11 | | — | Not in model | | U. Michigan 1-year inflation expectationsMICH · FRED | 4.00 Percent−0.200 | 2026-08-01pub. 2026-08-28 | | — | Not in model |
Block 09 · Housing & Construction12 metrics · 9 in the model
| Indicator | Latest | Updated | Last 24 | Signal | Use | | ------------------------------------------------------------------------------------------------------------------------- | -------------------------------------- | ------------------------- | ------- | ------ | ------------ | | 30-year fixed mortgage rateMORTGAGE30US · FRED | licensed: not shown on the public site | 2026-10-01pub. 2026-10-01 | | −1.83 | In model | | Building permitsPERMIT · FRED | 1,403 Thousands of Units−30.00 | 2026-08-01pub. 2026-09-17 | | −0.18 | In model | | Housing startsHOUST · FRED | 1,275 Thousands of Units−34.00 | 2026-08-01pub. 2026-09-17 | | +0.71 | In model | | Months' supply of new homesMSACSR · FRED | 8.50 Months' Supply−0.500 | 2026-08-01pub. 2026-09-24 | | +1.05 | In model | | New home salesHSN1F · FRED | 684.0 Thousands+41.00 | 2026-08-01pub. 2026-09-24 | | +0.64 | In model | | Private nonresidential constructionPNRESCONS · FRED | 773,010 Millions of Dollars+8,031 | 2026-08-01pub. 2026-10-01 | | +0.93 | In model | | Rental vacancy rateRRVRUSQ156N · FRED | 7.30 Percent+0.000 | 2026-04-01pub. 2026-07-28 | | −0.00 | In model | | Residential fixed investment share of GDPA011RE1Q156NBEA · FRED | 3.60 Percent−0.100 | 2026-04-01pub. 2026-07-30 | | −0.67 | In model | | Total construction spendingTTLCONS · FRED | 2,203,129 Millions of Dollars+18,655 | 2026-08-01pub. 2026-10-01 | | +0.30 | In model | | Case-Shiller national HPICSUSHPINSA · FRED | licensed: not shown on the public site | 2026-07-01pub. 2026-09-29 | | — | Not in model | | Existing home salesEXHOSLUSM495S · FRED | licensed: not shown on the public site | 2026-08-01pub. 2026-10-02 | | — | Not in model | | FHFA house price indexUSSTHPI · FRED | 719.9 Index 1980:Q1=100+7.67 | 2026-04-01pub. 2026-08-25 | | — | Not in model |
Block 10 · Equity, Volatility & Cross-Asset4 metrics · 2 in the model
| Indicator | Latest | Updated | Last 24 | Signal | Use | | ------------------------------------------------------------------------------------------------------- | -------------------------------------- | ------------------------- | ------- | ------ | -------- | | CBOE volatility indexVIXCLS · FRED | licensed: not shown on the public site | 2026-10-01pub. 2026-10-01 | | +0.19 | In model | | Equity drawdown from trailing 12-month highSP500 · FRED | licensed: not shown on the public site | 2026-10-02pub. 2026-10-02 | | +0.21 | In model | | Bond-equity correlation regimeBE\_CORR · DERIVED | no free source | | | — | Context | | Equity risk premium versus real yieldsERP · DERIVED | no free source | | | — | Context |
Block 11 · Commodities & Dollar7 metrics · 3 in the model
| Indicator | Latest | Updated | Last 24 | Signal | Use | | --------------------------------------------------------------------------------------------------- | ------------------------------------------ | ------------------------- | ------- | ------ | ------------ | | Advanced-economy dollar indexDTWEXAFEGS · FRED | 113.9 Index Jan 2006=100−0.294 | 2026-09-25pub. 2026-09-28 | | +0.26 | In model | | Agricultural commodity indexWPU01 · FRED | 230.9 Index 1982=100−6.97 | 2026-08-01pub. 2026-09-10 | | +0.44 | In model | | Broad trade-weighted dollar indexDTWEXBGS · FRED | 120.3 Index Jan 2006=100−0.222 | 2026-09-25pub. 2026-09-28 | | +0.41 | In model | | Copper pricePCOPPUSDM · FRED | 13,543 U.S. Dollars per Metric Ton−9.22 | 2026-07-01pub. 2026-08-17 | | — | Not in model | | EM corporate spreadsBAMLEMCBPIOAS · FRED | licensed: not shown on the public site | 2026-10-01pub. 2026-10-01 | | — | Not in model | | USD/JPY and carry-trade stressDEXJPUS · FRED | 157.2 Japanese Yen to One U.S. Dollar−1.74 | 2026-09-25pub. 2026-09-28 | | — | Not in model | | Crypto-equity correlation regimeCR\_EQ\_CORR · DERIVED | no free source | | | — | Context |
Block 12 · Fiscal & Sovereign5 metrics · 0 in the model
| Indicator | Latest | Updated | Last 24 | Signal | Use | | ------------------------------------------------------------------------------------------------------- | -------------------------------------- | ------------------------- | ------- | ------ | ------------ | | Federal deficit as share of GDPFYFSGDA188S · FRED | \-5.77 Percent of GDP+0.427 | 2025-01-01pub. 2026-02-20 | | — | Not in model | | Bill versus coupon issuance mixISSUE\_MIX · TREASURY | no free source | | | — | Context | | Debt ceiling and shutdown calendarFISCAL\_CAL · SCRAPE | no free source | | | — | Context | | Federal debt held by the publicGFDEBTN · FRED | 39,462,398 Millions of Dollars+396,977 | 2026-04-01pub. 2026-09-02 | | — | Context | | Net interest outlaysA091RC1Q027SBEA · FRED | 1,280 Billions of Dollars+26.88 | 2026-04-01pub. 2026-07-30 | | — | Context |
Block 13 · Global & External3 metrics · 0 in the model
| Indicator | Latest | Updated | Last 24 | Signal | Use | | ---------------------------------------------------------------------------------------------------------------------- | ----------------- | ------------------------- | ------- | ------ | --------- | | BIS debt service ratiosBIS\_DSR · BIS | no free source | | | — | Context | | EM foreign exchange reservesEM\_RESERVES · IMF | no free source | | | — | Context | | OECD composite leading indicator, USUSALOLITOAASTSAM · FRED | 101.0 Index+0.064 | 2026-08-01pub. 2026-09-15 | | — | Benchmark |
Block 14 · Uncertainty, Sentiment & Text3 metrics · 1 in the model
| Indicator | Latest | Updated | Last 24 | Signal | Use | | ---------------------------------------------------------------------------------------------------------- | ----------------- | ------------------------- | ------- | ------ | ------------ | | Economic Policy Uncertainty indexUSEPUINDXD · FRED | 160.6 Index−3.85 | 2026-10-01pub. 2026-10-02 | | −1.34 | In model | | Global Economic Policy UncertaintyGEPUCURRENT · FRED | 241.7 Index−41.02 | 2026-07-01pub. 2026-08-10 | | — | Not in model | | Philadelphia Fed Anxious IndexANXIOUS · FED\_REGIONAL | no free source | | | — | Benchmark |
Block 15 · Composite & Model Benchmarks19 metrics · 0 in the model
| Indicator | Latest | Updated | Last 24 | Signal | Use | | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------- | ---------------------------------------------------- | ------- | ------ | --------- | | Aruoba-Diebold-Scotti business conditions indexADS · FED\_REGIONAL | no free source | | | — | Benchmark | | Atlanta Fed GDPNowGDPNOW · FRED | 3.68 Percent Change at Annual Rate+2.14 | 2026-07-01pub. 2026-07-30 | | — | Benchmark | | CFNAI three-month averageCFNAIMA3 · FRED | 0.010 Index+0.020 | 2026-08-01pub. 2026-09-21 | | — | Benchmark | | Chauvet-Piger smoothed probabilityRECPROUSM156N · FRED | 0.620 Percent+0.380 | 2026-08-01pub. 2026-10-01 | | — | Benchmark | | Cleveland Fed yield curve modelCLEV\_PROB · FED\_REGIONAL | no free source | | | — | Benchmark | | Conference Board LEI 3Ds ruleCB\_LEI · VENDOR | no free source | | | — | Benchmark | | Dallas Fed Weekly Economic IndexWEI · FRED | 2.93 Index−0.090 | 2026-09-26pub. 2026-10-01 | | — | Benchmark | | Hamilton GDP-based recession indexJHGDPBRINDX · FRED | 7.00 Percentage Points−0.700 | 2026-01-01pub. 2026-07-30 | | — | Benchmark | | Michaillat-Saez ruleMS\_BENCH · DERIVED | no free source | | | — | Benchmark | | NBER recession indicator (the label)USREC · FRED | 0.000 +1 or 0+0.000 | 2026-09-01pub. 2026-10-01 | | — | Benchmark | | NY Fed Staff NowcastNYFED\_NOWCAST · FED\_REGIONAL | no free source | | | — | Benchmark | | NY Fed yield curve probabilityNYFED\_PROB · FED\_REGIONAL | no free source | | | — | Benchmark | | Philadelphia Fed leading indexUSSLIND · FRED | 1.72 Percent+0.150 | 2020-02-01no update since: discontinued or suspended | | — | Benchmark | | Richmond Fed SOS indicatorSOS\_BENCH · DERIVED | no free source | | | — | Benchmark | | SF Fed Labor Market Stress IndexLMSI\_BENCH · DERIVED | no free source | | | — | Benchmark | | Sahm RuleSAHMCURRENT · FRED | 0.000 Percentage Points+0.070 | 2026-09-01pub. 2026-10-02 | | — | Benchmark | | Term spread + EBP probitTS\_EBP · CycleWatch | 4.36 % chance of recession within 12 months+0.390 | 2026-10-02pub. 2026-10-02 | | — | Benchmark | | Term spread alone, transitions onlyTS\_ONLY · CycleWatch | 7.37 % chance of recession within 12 months+0.437 | 2026-10-02pub. 2026-10-02 | | — | Benchmark | | Unconditional base rateBASE\_RATE · CycleWatch | 13.31 % chance of recession within 12 months+0.000 | 2026-10-02pub. 2026-10-02 | | — | Benchmark |
Block 16 · Structural & Slow-Moving15 metrics · 0 in the model
| Indicator | Latest | Updated | Last 24 | Signal | Use | | ------------------------------------------------------------------------------------------------------------- | -------------------------- | ------------------------- | ------- | ------ | ------- | | AI and datacenter capex cycleAI\_CAPEX · DERIVED | no free source | | | — | Context | | Age dependency ratioDEP\_RATIO · SCRAPE | no free source | | | — | Context | | Bank regulatory and capital regimeBANK\_REG · SCRAPE | no free source | | | — | Context | | Corporate concentrationCONCENTRATION · CENSUS | no free source | | | — | Context | | Electricity demand growthELEC\_DEMAND · EIA | no free source | | | — | Context | | Fixed versus floating debt mixRATE\_MIX · BIS | no free source | | | — | Context | | Housing supply deficitHOUSING\_DEFICIT · DERIVED | no free source | | | — | Context | | Insurance availability and repricingINSURANCE · SCRAPE | no free source | | | — | Context | | Long-term debt cycle positionDEBT\_CYCLE · BIS | no free source | | | — | Context | | Net immigration flowsIMMIGRATION · SCRAPE | no free source | | | — | Context | | Prime-age participation trendLNS11300060 · FRED | 83.70 Percent+0.300 | 2026-09-01pub. 2026-10-02 | | — | Context | | Reshoring and energy transition capexRESHORE · CENSUS | no free source | | | — | Context | | Total factor productivityTFP\_SF · FED\_REGIONAL | no free source | | | — | Context | | Trend labor productivityOPHNFB · FRED | 120.0 Index 2017=100+0.423 | 2026-04-01pub. 2026-08-06 | | — | Context | | Working-age population growthLFWA64TTUSM647S · FRED | 210,408,200 Persons−14,200 | 2026-07-01pub. 2026-08-17 | | — | Context |
Block 17 · Alternative & High-Frequency2 metrics · 0 in the model
| Indicator | Latest | Updated | Last 24 | Signal | Use | | --------------------------------------------------------------------------------------------------- | -------------------------------------- | ------------------------- | ------- | ------ | ------------ | | Indeed job postings (daily)IHLIDXNSAUS · FRED | licensed: not shown on the public site | 2026-09-18pub. 2026-09-23 | | — | Not in model | | Weekly claims nowcast inputICSA · FRED | 197,000 Number−1,000 | 2026-09-26pub. 2026-10-01 | | — | Not in model |
Supporting series8 metrics · 0 in the model
| Indicator | Latest | Updated | Last 24 | Signal | Use | | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------- | ------------------------- | ------- | ------ | ---------- | | 3-Month Treasury Bill Secondary Market Rate, Discount BasisTB3MS · FRED | 3.94 Percent+0.220 | 2026-09-01pub. 2026-10-01 | | — | Supporting | | Advance Retail Sales: Building Materials, Garden Equipment and Supplies DealersRSBMGESD · FRED | 44,308 Millions of Dollars+14.00 | 2026-08-01pub. 2026-09-16 | | — | Supporting | | Advance Retail Sales: Gasoline StationsRSGASS · FRED | 63,432 Millions of Dollars+1,825 | 2026-08-01pub. 2026-09-16 | | — | Supporting | | Advance Retail Sales: Motor Vehicle and Parts DealersRSMVPD · FRED | 139,178 Millions of Dollars+644.0 | 2026-08-01pub. 2026-09-16 | | — | Supporting | | Market Yield on U.S. Treasury Securities at 10-Year Constant Maturity, Quoted on an Investment BasisGS10 · FRED | 4.99 Percent+0.310 | 2026-09-01pub. 2026-10-01 | | — | Supporting | | Moody's Seasoned Aaa Corporate Bond YieldAAA · FRED | licensed: not shown on the public site | 2026-09-01pub. 2026-10-01 | | — | Supporting | | Moody's Seasoned Baa Corporate Bond YieldBAA · FRED | licensed: not shown on the public site | 2026-09-01pub. 2026-10-01 | | — | Supporting | | Spot Crude Oil Price: West Texas Intermediate (WTI)WTISPLC · FRED | 83.90 Dollars per Barrel+3.44 | 2026-08-01pub. 2026-09-02 | | — | Supporting |
Licensed sources (ISM, Conference Board, S&P Global PMIs and others) show "no free source". Series from ICE BofA, Moody's, S&P, Nasdaq, UMich, CBOE, Freddie Mac, Indeed and Cass are licensed for personal use only: they feed the model, but their values are withheld here; their dates and standardised signal are shown.
US Consumer
What American households pay, earn, spend and owe: from the price of a dozen eggs to credit-card delinquencies, with every item in the Consumer Price Index. Shown for context; none of it feeds the recession model.
Inflation+3.4%CPI, 12 months to Aug 2026
Core PCE+3.0%the Fed's 2% target measure
Real wages−0.2%pay after inflation, 12 months to Aug 2026
Real spending+2.6%after inflation, 12 months to Aug 2026
Saving rate4.1%of disposable income, Aug 2026
Unemployment4.2%Sep 2026
Everyday prices
Average prices BLS collects across US cities, August 2026
| Item | Now | A year ago | 1 month | 12 months | 5 years | | ------------------------------- | ------ | ---------- | ------- | --------- | ------- | | Eggs, grade A large per dozen | $2.27 | $3.59 | +3.8%° | −36.7% | +32.9% | | Milk, whole per gallon | $4.23 | $4.17 | −1.9%° | +1.4% | +18.8% | | Bread, white per lb | $1.82 | $1.84 | +0.2%° | −1.0% | +24.3% | | Ground beef per lb | $6.92 | $6.32 | +0.6%° | +9.6% | +54.9% | | Chicken, whole per lb | $2.01 | $2.08 | +0.3%° | −3.1% | +36.7% | | Chicken breast, boneless per lb | $4.17 | $4.21 | +0.5%° | −0.9% | +18.0% | | Bacon, sliced per lb | $6.61 | $7.21 | +0.3%° | −8.4% | −6.9% | | Cheddar cheese per lb | $5.98 | $6.12 | +4.2%° | −2.3% | +12.1% | | Coffee, ground roast per lb | $9.30 | $8.87 | −0.2%° | +4.8% | +96.8% | | Bananas per lb | $0.65 | $0.67 | +0.3%° | −2.1% | +10.7% | | Oranges, navel per lb | $1.71 | $1.79 | — | −4.8% | — | | Tomatoes per lb | $1.98 | $1.93 | −1.3%° | +2.7% | +6.4% | | Flour, all purpose per lb | $0.55 | $0.56 | +0.9%° | −1.6% | +47.7% | | Sugar per lb | $1.02 | $1.04 | +0.0%° | −1.5% | +50.4% | | Gasoline, regular per gallon | $4.20 | $3.29 | +2.6%° | +27.5% | +29.0% | | Electricity per kWh | $0.196 | $0.190 | −0.5%° | +3.2% | +36.1% | | Utility (piped) gas per therm | $1.71 | $1.63 | +0.6%° | +4.9% | +35.3% |
Weekly gasoline price (EIA, regular): $4.46 a gallon on 28 Sep 2026, against $3.12 a year earlier. Average prices are not seasonally adjusted (° on the monthly change), and they track specific products, so they can move differently from the CPI category they sit in.
Paychecks vs prices
Is pay keeping up with prices?
In the year to August 2026, average hourly pay rose 3.1% (to $37.76) and consumer prices 3.4%, so pay lagged prices: real wages fell 0.2%. For production and nonsupervisory workers, real pay was flat.
0%5%2017201820192020202120222023202420252026
Average hourly earnings, 12-month changeConsumer prices (CPI), 12-month changeReal wages
Real wages = (1 + wage growth) ÷ (1 + inflation) − 1, with average hourly earnings of all private employees (BLS) and the CPI, both seasonally adjusted. Average pay also rises when lower-paid jobs are lost, as in 2020, so real wages can jump in a downturn.
Spending and income
After inflation, from the national accounts
| Measure | Latest | Over 12 months | Month | | ------------------------------------- | ---------------- | -------------- | -------- | | Real consumer spending BEA | $16.96 tn a year | +2.6% | Aug 2026 | | Real disposable income BEA | $18.41 tn a year | +1.3% | Aug 2026 | | Retail and food services sales Census | $738 bn a month | +5.4% | Aug 2026 | | Personal saving rate BEA | 4.1% | −1.1 pts | Aug 2026 |
\-20%0%20%2017201820192020202120222023202420252026
Real consumer spendingReal disposable income
Spending growing faster than income for long means households are saving less or borrowing more. Retail sales are in dollars, not adjusted for inflation.
Credit
What households owe and how they are coping
| Measure | Latest | Over 12 months | Month | | -------------------------------------------------------- | -------- | -------------- | -------- | | Revolving credit (mostly credit cards) Federal Reserve | $1.36 tn | +3.6% | Jul 2026 | | Total consumer credit Federal Reserve | $5.19 tn | +2.6% | Jul 2026 | | Credit card delinquency rate, banks Federal Reserve | 2.9% | −0.2 pts | Apr 2026 | | Debt service, share of disposable income Federal Reserve | 11.1% | −0.01 pts | Apr 2026 | | Unemployment rate BLS | 4.2% | −0.2 pts | Sep 2026 |
Delinquency and debt-service figures are quarterly and arrive with a lag. Consumer credit excludes mortgages.
Inflation, item by item
The Consumer Price Index, every category BLS publishes
Every item in the Consumer Price Index, 301 of them from eggs to airline fares: how much each price changed in August 2026 and over the past year. Prices overall rose 3.4% in the year to August 2026. Next release: Wednesday 14 October.
All items+3.4%over 12 months · +0.4% in Aug · 3 mo ann. +0.2%
Core+2.4%over 12 months · +0.3% in Aug · 3 mo ann. +2.0%
Groceries+2.2%over 12 months · +0.0% in Aug · 3 mo ann. +0.6%
Energy+16.3%over 12 months · +2.1% in Aug · 3 mo ann. −19.1%
Shelter+3.0%over 12 months · +0.3% in Aug · 3 mo ann. +2.1%
Gasoline+27.4%over 12 months · +3.9% in Aug · 3 mo ann. −31.0%
Biggest rises in August
| Item | 1 month | 12 months | | ------------------------------------------------------------------- | ------- | --------- | | Fuel oil | +10.1% | +52.0% | | Other motor fuels | +9.6% | +44.0% | | Fuel oil and other fuels | +6.8% | +30.2% | | Wireless telephone services | +5.9%° | +3.2% | | Telephone services | +5.4%° | +3.3% | | Salad dressing | +5.0% | −0.7% | | Women's dresses | +4.9% | −1.0% | | Motor fuel | +4.1% | +27.9% |
Biggest falls in August
| Item | 1 month | 12 months | | ------------------------------------------------------------------------------------------------------------- | ------- | --------- | | Lettuce | −6.2% | −2.2% | | Other video equipment | −6.1% | +4.6% | | Cookies | −3.5%° | +0.8% | | Tomatoes | −3.0% | +5.8% | | Apples | −2.8% | +5.4% | | Women's underwear, nightwear, swimwear, and accessories | −2.5% | +3.6% | | Telephone hardware, calculators, and other consumer information items | −2.4% | −14.1% | | Toys | −2.3% | +2.3% |
Search prices
AllFood and beveragesHousingApparelTransportationMedical careRecreationEducation and communicationOther goods and services
Expand allCollapse
34 of 301 items shown.
| Item | 1 month | 12 months | 3 mo ann. | Index | 12-month change, last 2 years | | ----------------------------------------------------------------------------------------------------------------------------------------- | ------- | --------- | --------- | ----- | ----------------------------- | | All items | +0.4% | +3.4% | +0.2% | 335.0 | | | Food and beverages | +0.1% | +2.6% | +1.6% | 347.2 | | | Food | +0.1% | +2.7% | +1.6% | 350.4 | | | Food at home | +0.0% | +2.2% | +0.6% | 321.5 | | | Cereals and bakery products | +0.0% | +2.6% | +2.1% | 369.2 | | | Cereals and cereal products | −0.3% | +3.1% | +3.3% | 291.4 | | | Flour and prepared flour mixes | +1.4% | +0.6% | +0.3% | 332.1 | | | Breakfast cereal | −1.6% | +3.1% | +0.9% | 283.3 | | | Rice, pasta, cornmeal | −0.2% | +3.4% | +6.9% | 295.4 | | | Rice | +0.1%° | +4.7% | — | 200.1 | | | Bakery products | +0.1% | +2.4% | +1.4% | 414.7 | | | Bread | −0.1% | +3.8% | +2.4% | 249.9 | | | White bread | +0.1%° | +3.7% | — | 449.4 | | | Bread other than white | −0.4%° | +3.9% | — | 489.8 | | | Fresh biscuits, rolls, muffins | +0.7% | +2.0% | −2.8% | 246.5 | | | Cakes, cupcakes, and cookies | −0.6% | +3.1% | +1.4% | 395.4 | | | Cookies | −3.5%° | +0.8% | — | 404.3 | | | Fresh cakes and cupcakes | +1.9% | +5.0% | +7.9% | 382.2 | | | Other bakery products | +0.8% | +1.7% | +2.6% | 367.4 | | | Fresh sweetrolls, coffeecakes, doughnuts | −1.1%° | +3.9% | — | 410.0 | | | Crackers, bread, and cracker products | +0.6% | +4.5% | +20.4% | 458.9 | | | Frozen and refrigerated bakery products, pies, tarts, turnovers | −0.5% | −2.1% | −10.4% | 336.5 | | | Meats, poultry, fish, and eggs | +0.1% | +1.1% | +0.3% | 351.5 | | | Meats, poultry, and fish | −0.1% | +3.5% | −1.3% | 359.3 | | | Meats | −0.2% | +3.6% | −1.5% | 376.9 | | | Beef and veal | −1.0% | +5.9% | −2.4% | 519.1 | | | Uncooked ground beef | −0.0% | +7.2% | −1.5% | 447.9 | | | Uncooked beef roasts | −1.7% | +8.4% | +4.6% | 431.4 | | | Uncooked beef steaks | −1.5% | +4.0% | −2.6% | 346.2 | | | Uncooked other beef and veal | +1.1%° | +4.4% | — | 411.6 | | | Pork | +0.4% | +0.6% | −5.7% | 275.3 | | | Bacon, breakfast sausage, and related products | +0.4% | −2.3% | −4.8% | 205.9 | | | Bacon and related products | +0.4% | −3.4% | −8.7% | 383.6 | | | Breakfast sausage and related products | −0.1% | −0.1% | +0.7% | 192.8 | | | Ham | −1.4% | +4.2% | −8.4% | 258.2 | | | Ham, excluding canned | −1.2% | +3.8% | −10.2% | 285.2 | | | Pork chops | −0.0% | +1.9% | −4.4% | 251.9 | | | Other pork including roasts, steaks, and ribs | +2.6% | +1.0% | +3.6% | 165.9 | | | Other meats | +1.3% | +1.5% | +9.4% | 296.9 | | | Frankfurters | +0.0% | +5.3% | +21.0% | 323.0 | | | Poultry | +0.4% | +0.5% | −4.0% | 315.5 | | | Chicken | +0.4% | −2.3% | −4.4% | 197.7 | | | Fresh whole chicken | −0.5% | −3.0% | −7.1% | 322.4 | | | Fresh and frozen chicken parts | +0.3% | −2.3% | −4.6% | 297.0 | | | Other uncooked poultry including turkey | +0.8% | +11.5% | +1.4% | 226.4 | | | Fish and seafood | +0.0% | +6.5% | +2.3% | 380.8 | | | Fresh fish and seafood | −1.1% | +6.3% | −2.4% | 238.0 | | | Processed fish and seafood | +0.9% | +6.8% | +7.8% | 189.4 | | | Shelf stable fish and seafood | +0.0% | +6.1% | +1.9% | 261.2 | | | Frozen fish and seafood | +1.7% | +8.2% | +8.6% | 428.5 | | | Eggs | +2.9% | −23.0% | +29.9% | 276.5 | | | Dairy and related products | +0.3% | −0.3% | +5.4% | 272.1 | | | Milk | −1.2% | +4.1% | +4.9% | 187.5 | | | Fresh whole milk | −1.1% | +4.7% | +7.6% | 267.9 | | | Fresh milk other than whole | −1.0% | +4.0% | +4.2% | 195.0 | | | Cheese and cheese products | +0.7% | −3.8% | +10.5% | 258.4 | | | Ice cream and related products | −0.4% | −1.8% | −9.8% | 270.5 | | | Other dairy and related products | +1.8% | +0.7% | +5.9% | 194.7 | | | Fruits and vegetables | −0.4% | +3.2% | −3.2% | 367.5 | | | Fresh fruits and vegetables | −0.7% | +3.1% | −4.8% | 413.4 | | | Fresh fruits | −0.5% | +3.8% | +9.1% | 425.2 | | | Apples | −2.8% | +5.4% | +4.5% | 394.4 | | | Bananas | +0.1% | −1.4% | +5.6% | 217.3 | | | Citrus fruits | −0.5% | +2.4% | +7.1% | 315.7 | | | Oranges, including tangerines | +1.0% | −0.9% | +12.1% | 636.8 | | | Other fresh fruits | +0.3% | +5.4% | +16.8% | 142.6 | | | Fresh vegetables | −0.9% | +2.6% | −17.9% | 399.6 | | | Potatoes | +1.2% | +3.6% | +15.4% | 458.7 | | | Lettuce | −6.2% | −2.2% | −51.2% | 403.9 | | | Tomatoes | −3.0% | +5.8% | −51.3% | 377.1 | | | Other fresh vegetables | −0.3% | +2.0% | −8.9% | 395.0 | | | Processed fruits and vegetables | +0.5% | +3.2% | +3.3% | 213.0 | | | Canned fruits and vegetables | +0.7% | +4.0% | −0.7% | 234.7 | | | Frozen fruits and vegetables | +0.8% | +2.4% | +8.1% | 189.7 | | | Other processed fruits and vegetables including dried | −0.3% | +3.4% | +4.5% | 201.0 | | | Nonalcoholic beverages and beverage materials | +0.2% | +3.7% | −2.0% | 237.8 | | | Juices and nonalcoholic drinks | +0.2% | +3.5% | −0.1% | 183.7 | | | Carbonated drinks | +1.2% | +4.4% | +2.9% | 243.2 | | | Frozen noncarbonated juices and drinks | −0.5%° | −0.3% | — | 284.4 | | | Nonfrozen noncarbonated juices and drinks | −0.8% | +3.2% | −3.8% | 159.2 | | | Beverage materials including coffee and tea | +0.0% | +4.0% | −6.6% | 165.6 | | | Coffee | −0.6% | +6.1% | −10.3% | 297.2 | | | Roasted coffee | −0.5% | +4.9% | −11.5% | 307.2 | | | Instant coffee | +0.5%° | +11.0% | — | 302.9 | | | Other beverage materials including tea | +1.1% | +0.4% | −0.2% | 167.1 | | | Other food at home | +0.1% | +2.4% | +2.1% | 283.4 | | | Sugar and sweets | −0.7% | +6.1% | +1.7% | 324.5 | | | Sugar and sugar substitutes | −0.6% | −0.5% | −1.5% | 278.2 | | | Candy and chewing gum | −0.6% | +8.1% | +1.7% | 228.8 | | | Other sweets | −0.2% | +1.7% | −1.7% | 199.1 | | | Fats and oils | +1.5% | −0.3% | +11.2% | 312.7 | | | Butter and margarine | +0.4% | −5.7% | +4.3% | 263.6 | | | Butter | +0.9% | −8.3% | −2.8% | 293.8 | | | Margarine | +1.1%° | +4.7% | — | 195.2 | | | Salad dressing | +5.0% | −0.7% | +24.3% | 176.1 | | | Other fats and oils including peanut butter | +1.1% | +2.5% | +12.7% | 225.7 | | | Other foods | +0.1% | +2.1% | +1.1% | 295.8 | | | Soups | −0.6% | +1.0% | −2.0% | 334.7 | | | Frozen and freeze dried prepared foods | −0.5% | +0.1% | +1.7% | 211.7 | | | Snacks | +1.1% | +2.0% | +5.8% | 316.8 | | | Spices, seasonings, condiments, sauces | −0.2% | +3.1% | +2.8% | 331.6 | | | Baby food and formula | −1.4%° | +1.3% | — | 227.8 | | | Other miscellaneous foods | −0.9% | +3.6% | −5.4% | 176.4 | | | Prepared salads | +2.3% | +1.6% | +1.9% | 162.7 | | | Food away from home | +0.3% | +3.4% | +3.2% | 397.9 | | | Full service meals and snacks | +0.4% | +3.5% | +4.2% | 246.2 | | | Limited service meals and snacks | +0.0%° | +3.2% | — | 259.7 | | | Food at employee sites and schools | +0.6% | +3.0% | +8.3% | 220.2 | | | Food from vending machines and mobile vendors | +1.2%° | +3.8% | — | 254.0 | | | Other food away from home | +0.3% | +4.4% | +5.0% | 271.1 | | | Alcoholic beverages | +0.1% | +1.6% | +1.3% | 301.7 | | | Alcoholic beverages at home | −0.0% | +0.2% | −0.7% | 231.3 | | | Beer, ale, and other malt beverages at home | +0.2% | +2.4% | +0.4% | 285.7 | | | Distilled spirits at home | −0.3% | −0.7% | +1.2% | 212.7 | | | Wine at home | −0.0% | −1.1% | −2.5% | 179.4 | | | Alcoholic beverages away from home | +0.1% | +3.0% | +3.2% | 459.1 | | | Housing | +0.2% | +3.1% | +1.7% | 360.2 | | | Shelter | +0.3% | +3.0% | +2.1% | 430.6 | | | Rent of primary residence | +0.2% | +2.7% | +2.3% | 449.0 | | | Lodging away from home | +2.4% | +3.2% | −10.6% | 196.1 | | | Housing at school, excluding board | +0.7% | +3.1% | +4.4% | 695.0 | | | Other lodging away from home including hotels and motels | +2.7% | +2.9% | −13.2% | 398.3 | | | Owners' equivalent rent of residences | +0.2% | +3.1% | +2.8% | 443.6 | | | Owners' equivalent rent of primary residence | +0.2% | +3.1% | +2.8% | 443.6 | | | Tenants' and household insurance | −0.0%° | +4.1% | — | 174.8 | | | Fuels and utilities | +0.1% | +5.0% | −1.4% | 353.3 | | | Household energy | −0.1% | +5.0% | −3.5% | 297.1 | | | Fuel oil and other fuels | +6.8% | +30.2% | −4.5% | 458.4 | | | Fuel oil | +10.1% | +52.0% | −6.3% | 528.4 | | | Propane, kerosene, and firewood | +0.9% | +0.6% | −2.1% | 411.4 | | | Energy services | −0.4% | +4.0% | −3.4% | 300.7 | | | Electricity | −0.2% | +3.8% | −4.4% | 310.1 | | | Utility (piped) gas service | −1.1% | +4.4% | −0.0% | 266.4 | | | Water and sewer and trash collection services | +0.5% | +4.8% | +5.1% | 334.6 | | | Water and sewerage maintenance | +0.2% | +4.9% | +3.7% | 765.5 | | | Garbage and trash collection | +1.0% | +4.4% | +8.4% | 685.0 | | | Household furnishings and operations | +0.1% | +2.0% | +1.5% | 156.1 | | | Window and floor coverings and other linens | −1.0% | +2.0% | −2.5% | 61.75 | | | Floor coverings | +1.5%° | +0.9% | — | 131.9 | | | Window coverings | +0.2% | +5.4% | +3.8% | 87.78 | | | Other linens | −0.2% | +1.0% | +2.7% | 40.83 | | | Furniture and bedding | −0.9% | −0.8% | −1.9% | 132.8 | | | Bedroom furniture | −0.6%° | −0.5% | — | 142.2 | | | Living room, kitchen, and dining room furniture | −1.1%° | −0.8% | — | 110.3 | | | Other furniture | −0.7% | −1.9% | −2.3% | 74.17 | | | Appliances | +1.3% | +0.1% | +2.4% | 85.54 | | | Major appliances | +1.4% | −1.9% | −5.1% | 87.87 | | | Laundry equipment | +2.8% | +5.8% | +9.6% | 114.5 | | | Other appliances | +1.3% | +1.3% | +7.3% | 76.43 | | | Other household equipment and furnishings | −0.2% | −0.5% | −6.5% | 55.12 | | | Clocks, lamps, and decorator items | +1.1%° | −3.1% | — | 39.44 | | | Indoor plants and flowers | −1.5% | +0.2% | −3.0% | 167.1 | | | Dishes and flatware | −1.0%° | +9.8% | — | 46.96 | | | Nonelectric cookware and tableware | −1.4% | +4.6% | −15.6% | 83.49 | | | Tools, hardware, outdoor equipment and supplies | +0.6% | +1.4% | +1.0% | 116.5 | | | Tools, hardware and supplies | −0.4% | +2.8% | +1.7% | 130.4 | | | Outdoor equipment and supplies | +1.0% | +0.4% | +0.2% | 110.1 | | | Housekeeping supplies | +0.0% | +2.1% | +1.9% | 243.5 | | | Household cleaning products | −0.6% | +2.1% | +3.0% | 155.2 | | | Household paper products | +0.6%° | +0.2% | — | 241.2 | | | Miscellaneous household products | +0.4% | +3.2% | +1.1% | 145.4 | | | Household operations (October 2024) | −0.3%° | +5.7% | — | 259.8 | | | Domestic services (November 2024) | +0.7%° | — | — | 227.1 | | | Gardening and lawncare services | +0.0%° | — | — | 345.0 | | | Moving, storage, freight expense | −1.9% | −4.6% | −12.3% | 196.3 | | | Repair of household items (July 2024) | — | +5.0% | — | 393.4 | | | Apparel | +0.0% | +3.6% | −1.8% | 136.8 | | | Men's and boys' apparel | +0.6% | +3.7% | +4.8% | 133.1 | | | Men's apparel | +1.4% | +3.7% | +6.2% | 135.9 | | | Men's suits, sport coats, and outerwear | +2.1% | +0.7% | +8.5% | 95.74 | | | Men's underwear, nightwear, swimwear, and accessories | −0.2% | +7.7% | +6.3% | 194.3 | | | Men's shirts and sweaters | +2.3% | +5.3% | +3.1% | 85.97 | | | Men's pants and shorts | −0.2% | +0.2% | +1.3% | 140.3 | | | Boys' apparel | −0.6% | +3.9% | +3.5% | 120.3 | | | Women's and girls' apparel | +0.2% | +3.5% | −2.1% | 113.0 | | | Women's apparel | +0.0% | +3.1% | −3.1% | 114.2 | | | Women's outerwear | +0.7% | +1.2% | +5.6% | 107.1 | | | Women's dresses | +4.9% | −1.0% | +8.7% | 111.0 | | | Women's suits and separates | −0.2% | +4.5% | −1.5% | 76.92 | | | Women's underwear, nightwear, swimwear, and accessories | −2.5% | +3.6% | −8.4% | 117.2 | | | Girls' apparel | +1.3% | +6.1% | +3.4% | 108.7 | | | Footwear | −0.3% | +3.6% | −0.5% | 152.0 | | | Men's footwear | +1.5% | +5.7% | +11.3% | 160.3 | | | Boys' and girls' footwear | −1.7% | −1.2% | −11.0% | 163.3 | | | Women's footwear | +0.0% | +4.3% | −1.9% | 139.7 | | | Infants' and toddlers' apparel | −0.7% | −3.4% | −13.5% | 121.6 | | | Jewelry and watches | −1.6% | +8.2% | −17.6% | 229.7 | | | Watches | +0.7% | +9.2% | +13.6% | 177.3 | | | Jewelry | −1.5% | +7.8% | −21.3% | 230.2 | | | Transportation | +1.2% | +6.2% | −7.0% | 290.8 | | | Private transportation | +1.1% | +5.3% | −9.6% | 289.2 | | | New and used motor vehicles | +0.3% | −0.4% | +1.9% | 126.3 | | | New vehicles | +0.3% | +0.6% | +1.2% | 179.7 | | | New cars | +0.3% | +1.2% | +0.5% | 175.9 | | | New trucks (March 2022) | +0.2% | +12.6% | +2.2% | 116.5 | | | Used cars and trucks | +0.4% | −2.3% | +2.2% | 184.6 | | | Leased cars and trucks | −0.1% | −1.0% | −0.0% | 113.1 | | | Car and truck rental | +2.2% | +3.5% | +18.2% | 167.4 | | | Motor fuel | +4.1% | +27.9% | −30.5% | 362.5 | | | Gasoline (all types) | +3.9% | +27.4% | −31.0% | 359.7 | | | Gasoline, unleaded regular | +4.0% | +28.1% | −32.1% | 352.0 | | | Gasoline, unleaded midgrade | +3.6% | +25.4% | −27.6% | 394.0 | | | Gasoline, unleaded premium | +3.1% | +23.8% | −25.3% | 386.0 | | | Other motor fuels | +9.6% | +44.0% | −14.8% | 397.8 | | | Motor vehicle parts and equipment | +0.0% | +0.9% | +3.5% | 188.9 | | | Tires | +0.0% | +0.4% | +1.3% | 159.3 | | | Vehicle accessories other than tires | +0.1%° | +3.9% | — | 234.6 | | | Motor vehicle maintenance and repair | +1.1% | +5.2% | +11.8% | 465.1 | | | Motor vehicle body work (July 2026) | — | +3.6% | — | 452.9 | | | Motor vehicle maintenance and servicing | +1.0%° | +7.9% | — | 395.5 | | | Motor vehicle repair | +1.4% | +2.6% | +18.8% | 314.2 | | | Motor vehicle insurance | −0.8% | −5.1% | −11.6% | 848.2 | | | Motor vehicle fees | −0.7%° | +1.9% | — | 218.9 | | | State motor vehicle registration and license fees | −0.6%° | +3.4% | — | 206.9 | | | Parking and other fees | −0.9% | −0.1% | −13.5% | 237.6 | | | Public transportation | +2.3% | +15.4% | +21.1% | 294.0 | | | Airline fares | +2.7% | +23.4% | +22.4% | 309.7 | | | Other intercity transportation | −0.2% | −3.7% | −14.9% | 149.8 | | | Intracity transportation | +0.8%° | +8.5% | — | 370.5 | | | Medical care | −0.2% | +1.6% | −0.1% | 593.0 | | | Medical care commodities | −0.2% | −2.7% | −3.9% | 405.5 | | | Medicinal drugs | −0.4% | −2.7% | −3.5% | 132.3 | | | Prescription drugs | −0.0% | −2.9% | −3.5% | 550.4 | | | Nonprescription drugs | −1.0% | −2.0% | −4.7% | 107.1 | | | Medical equipment and supplies | +1.0%° | −2.3% | — | 110.3 | | | Medical care services | −0.2% | +2.5% | +0.7% | 653.6 | | | Professional services | −0.2% | +3.2% | +0.5% | 457.0 | | | Physicians' services | −0.0% | +2.0% | −0.3% | 439.4 | | | Dental services | −0.6% | +5.0% | −0.4% | 656.7 | | | Eyeglasses and eye care | +0.2% | +1.3% | +2.0% | 220.1 | | | Services by other medical professionals | — | — | — | 281.5 | | | Hospital and related services | +0.1% | +5.5% | +2.4% | 110.0 | | | Hospital services | −0.0% | +5.2% | +2.7% | 459.7 | | | Nursing homes and adult day services | +0.6% | +4.6% | +2.3% | 315.6 | | | Care of invalids and elderly at home | +0.6%° | +10.6% | — | 194.3 | | | Health insurance | −0.5%° | −8.5% | — | 136.5 | | | Recreation | +0.0% | +2.7% | +3.0% | 145.2 | | | Video and audio | +0.1% | +3.9% | +6.2% | 124.3 | | | Televisions | +1.4% | −1.0% | +13.5% | 96.56 | | | Cable, satellite, and live streaming television service | −0.0% | +3.0% | +4.3% | 610.8 | | | Other video equipment | −6.1% | +4.6% | +13.2% | 109.7 | | | Purchase, subscription, and rental of video | +1.0%° | +10.8% | — | 85.93 | | | Audio equipment | −1.3% | −2.0% | −4.0% | 27.38 | | | Recorded music and music subscriptions | −0.1%° | +7.4% | — | 95.49 | | | Pets, pet products and services | +0.2% | +3.2% | +3.6% | 236.8 | | | Pets and pet products | −0.2% | +1.9% | +2.4% | 245.5 | | | Pet food and treats | −0.1% | +1.6% | +2.6% | 194.5 | | | Pet services including veterinary | +0.7% | +4.8% | +5.0% | 382.0 | | | Sporting goods | +1.0% | +5.3% | +11.3% | 128.9 | | | Sports vehicles including bicycles | +1.8% | +6.8% | +21.0% | 180.4 | | | Sports equipment | −0.0% | +3.5% | +0.4% | 86.51 | | | Photography | +1.7% | +2.4% | −7.5% | 87.37 | | | Photographic equipment and supplies | +1.2% | −0.6% | −11.3% | 72.94 | | | Photographers and photo processing | +2.0%° | +3.8% | — | 134.6 | | | Other recreational goods | −1.8% | +2.5% | +2.3% | 34.07 | | | Toys | −2.3% | +2.3% | +3.7% | 28.73 | | | Sewing machines, fabric and supplies | +0.1% | +3.5% | −9.2% | 103.7 | | | Music instruments and accessories | +0.3% | +2.9% | −0.9% | 130.8 | | | Other recreation services | −0.4% | +0.8% | −1.9% | 211.0 | | | Club membership for shopping clubs, fraternal, or other organizations, or participant sports fees | −0.1% | −1.3% | +0.4% | 167.5 | | | Admissions | −0.8% | +2.9% | −4.9% | 495.3 | | | Admission to movies, theaters, and concerts | −0.6% | +2.6% | −8.1% | 240.3 | | | Admission to sporting events | −0.4% | +2.4% | +3.4% | 250.4 | | | Fees for lessons or instructions | +0.6% | +1.9% | +1.9% | 422.1 | | | Recreational reading materials | +2.9% | +4.2% | +22.1% | 307.8 | | | Newspapers and magazines | +3.6%° | +10.9% | — | 257.1 | | | Recreational books | +2.3%° | −2.2% | — | 98.52 | | | Education and communication | +1.6% | +2.1% | +5.7% | 150.3 | | | Education | +0.8% | +3.3% | +6.0% | 322.2 | | | Educational books and supplies | −0.7% | +1.1% | +4.2% | 771.0 | | | Tuition, other school fees, and childcare | +0.8% | +3.4% | +6.1% | 927.0 | | | College tuition and fees | +0.5% | +2.8% | +5.1% | 987.5 | | | Elementary and high school tuition and fees | +1.4% | +4.3% | +7.1% | 108.1 | | | Day care and preschool | +1.0% | +4.0% | +7.2% | 403.7 | | | Technical and business school tuition and fees | +0.7% | +1.3% | +2.4% | 286.3 | | | Communication | +2.3% | +1.1% | +5.4% | 73.82 | | | Postage and delivery services | +0.6% | +12.8% | +4.8% | 284.6 | | | Postage | +0.5% | +12.7% | +4.9% | 441.5 | | | Delivery services | +2.3% | +14.2% | +3.6% | 534.6 | | | Information and information processing | +2.3% | +0.9% | +5.4% | 69.21 | | | Telephone services | +5.4%° | +3.3% | — | 96.25 | | | Wireless telephone services | +5.9%° | +3.2% | — | 47.61 | | | Residential telephone services | −0.1%° | +2.6% | — | 164.1 | | | Information technology, hardware and services | −0.3% | −1.1% | +0.1% | 100.4 | | | Computers, peripherals, and smart home assistants | +3.8% | +8.4% | +29.2% | 38.02 | | | Computer software and accessories | −2.2%° | +25.4% | — | 28.13 | | | Internet services and electronic information providers | −0.7% | +1.5% | −1.7% | 87.52 | | | Telephone hardware, calculators, and other consumer information items | −2.4% | −14.1% | −14.5% | 84.05 | | | Other goods and services | +0.2% | +4.2% | +1.4% | 608.0 | | | Tobacco and smoking products | +0.6% | +6.3% | +1.8% | 111.3 | | | Cigarettes | +0.8% | +7.0% | +2.8% | 750.7 | | | Tobacco products other than cigarettes | +0.1%° | +4.1% | — | 366.6 | | | Personal care | +0.1% | +3.8% | +1.4% | 303.8 | | | Personal care products | +0.1% | +2.9% | +2.2% | 185.7 | | | Hair, dental, shaving, and miscellaneous personal care products | +0.2%° | +3.1% | — | 126.7 | | | Cosmetics, perfume, bath, nail preparations and implements | +0.2%° | +2.8% | — | 196.7 | | | Personal care services | +0.4%° | +4.2% | — | 374.9 | | | Haircuts and other personal care services | +0.4%° | +4.2% | — | 228.7 | | | Miscellaneous personal services | −0.3% | +4.4% | −2.8% | 612.7 | | | Legal services (September 2024) | — | +0.2% | — | 457.0 | | | Laundry and dry cleaning services | +0.2% | +5.1% | +4.6% | 254.6 | |
Special aggregates
Cross-cuts BLS publishes alongside the tree
| Aggregate | 1 month | 12 months | 3 mo ann. | | ------------------------------------------------------------------------------------------------- | ------- | --------- | --------- | | All items less food and energy (core) | +0.3% | +2.4% | +2.0% | | Energy | +2.1% | +16.3% | −19.1% | | All items less shelter | +0.5% | +3.6% | −0.8% | | Commodities | +0.6% | +4.0% | −2.9% | | Commodities less food and energy commodities (core goods) | +0.1% | +0.7% | +0.9% | | Services | +0.3% | +3.1% | +2.1% | | Services less energy services (core services) | +0.3% | +3.0% | +2.4% | | Services less rent of shelter | +0.3% | +3.1% | +1.3% | | Durables | +0.0% | −0.3% | +1.2% | | Nondurables | +0.7% | +5.8% | −4.3% |
Source: U.S. Bureau of Labor Statistics, Consumer Price Index for All Urban Consumers (CPI-U), U.S. city average; index 1982–84 = 100. Monthly changes are seasonally adjusted where BLS adjusts the item (253 of 301); the rest are marked ° and include normal seasonal swings, such as clothing discounts in January. 12-month changes are unadjusted, as BLS reports them. BLS did not collect October 2025 prices (federal shutdown), so changes that span that month are blank. Updated automatically on the day BLS publishes. Shown for context: these figures do not feed the recession model.
Sources: U.S. Bureau of Labor Statistics, Bureau of Economic Analysis, Census Bureau, Federal Reserve Board and Energy Information Administration, via FRED. Updated with the daily data check.
Track record
How the forecasts would have done since 1980, each month made with only what was known at the time (a walk-forward test). Five recessions fall in the test window, so every figure here carries wide uncertainty.
Alarms and recessions since 1980
Shaded: recessions. Bars: months each forecast stood at or above the 25% alarm line. Above each recession: whether the 12-block model warned in the year before it began.
12-block modelTerm spread + EBPmissedwarned 11 mowarned 6 mowarned 4 mowarned 11 mo1980198519901995200020052010201520202025
Bottom line
- Kill rule K4 is in force: term spread + EBP ranks pre-recession months better than the 12-block model in both windows (AUROC 0.899 / 0.907 against 0.887 / 0.898), so it carries the headline. The model keeps the better probability accuracy (Brier score).
- Out of sample the model ranks risky months about as well as the yield curve alone; the difference is not statistically significant.
- It raised fewer false alarms than term spread + EBP, but warned later.
- Before about 2010 most inputs are later-revised data, and several indexes are used only from their publication date. Expect live performance below this record.
- Every figure is recomputed from the page's own numbers: probit arithmetic, block averages, signs.
- The headline must follow the kill rules, and match the forecast log.
- Stale or discontinued series, and any rewritten log entry, are flagged. A critical finding stops the page from being published.
- K4 corrected to compare with term spread + EBP in both windows; the headline now follows it. No logged forecast was edited.
- False-alarm table generated from the forecast series; scorecard footnotes for rows that are not like-for-like.
- Portfolio tool: compared with the S&P in the same recession windows; cash and bond funds handled; broker holdings files and mutual-fund share classes accepted.
- New design: CycleWatch.
- Kill rule K4 is triggered: the term spread + EBP benchmark, 4.4% this week, is the headline. The model figures below are the 12-block model's.
- Recession probability 1.6%, down from 2.5% (official September) (yield curve alone: 7.4%).
- Nonfarm payrolls: +29k in September 2026 (prior +133k).
- Unemployment rate: 4.2% in September 2026 (prior 4.1%).
- Initial jobless claims: 197k (week to 26 Sep; prior 198k).
- Continuing jobless claims: 1,701k (week to 19 Sep; prior 1,712k).
- Core PCE inflation: 3.0% year on year in August 2026 (prior 3.0%).
- Real income (ex transfers): -0.1% on the month in August 2026 (prior +0.2%).
- Biggest model mover: Labor Market (-0.07 to +0.22), reducing risk.
- Next week: Chicago Fed National Financial Conditions Index (Wed); Unemployment Insurance Weekly Claims Report (Thu).
Calibration
When the model said X%, how often a recession followed. On the dashed line is perfect; dot size is the number of months.
0%0%25%25%50%50%75%75%100%100%0-5%: predicted 2%, happened 0% (291 months)5-15%: predicted 9%, happened 14% (63 months)15-25%: predicted 20%, happened 47% (36 months)25-50%: predicted 35%, happened 24% (45 months)50-100%: predicted 68%, happened 44% (27 months)Predicted probability
Scorecard
AUROC ranks pre-recession months (0.5 is no skill, 1 is perfect). AUPRC rewards precision on the rare pre-recession months. Brier is probability error; lower is better.
1980–2024, excluding COVID
| Predictor | AUROC | Before audit | AUPRC | Brier | | ---------------------------------------- | ----- | ------------ | ----- | ----- | | Model v1 (unconstrained) | 0.913 | 0.887 | 0.448 | 0.074 | | Term spread + EBP probit headline | 0.899 | 0.880 | 0.628 | 0.098 | | Term spread probit | 0.894 | 0.875 | 0.474 | 0.086 | | Model v2 (sign-constrained) | 0.887 | 0.879 | 0.353 | 0.084 | | Fed Board TS+EBP probability (published) | 0.705 | 0.766 | 0.258 | 0.109 | | CFNAI 3-month avg (inverted) | 0.699 | 0.698 | 0.200 | | | Sahm rule (real-time) | 0.692 | 0.685 | 0.158 | | | Chauvet-Piger probability | 0.668 | 0.690 | 0.180 | | | OECD leading indicator (inverted) | 0.430 | 0.432 | 0.092 | | | Base rate | 0.420 | 0.424 | 0.102 | 0.103 |
1990–2024, excluding COVID
| Predictor | AUROC | Before audit | AUPRC | Brier | | ---------------------------------------- | ----- | ------------ | ----- | ----- | | Model v1 (unconstrained) | 0.917 | 0.909 | 0.430 | 0.061 | | Term spread + EBP probit headline | 0.907 | 0.898 | 0.441 | 0.090 | | Model v2 (sign-constrained) | 0.898 | 0.899 | 0.343 | 0.071 | | Term spread probit | 0.876 | 0.863 | 0.269 | 0.092 | | CFNAI 3-month avg (inverted) | 0.687 | 0.685 | 0.146 | | | Fed Board TS+EBP probability (published) | 0.686 | 0.742 | 0.244 | 0.098 | | Chauvet-Piger probability | 0.599 | 0.642 | 0.111 | | | Sahm rule (real-time) | 0.594 | 0.584 | 0.100 | | | Base rate | 0.421 | 0.431 | 0.100 | 0.086 | | OECD leading indicator (inverted) | 0.246 | 0.249 | 0.055 | |
Term spread + EBP uses the excess bond premium's back-history before it was published in 2012, which flatters it. The Fed Board's published probability is an in-sample fit. The Fed Board and Chauvet-Piger probabilities estimate the chance of being in recession, not of one beginning within 12 months, so those rows are not like-for-like. The OECD leading indicator scores below 0.5 because it is entered with the wrong orientation; treat that row as mis-specified.
Alarm record at 25%
| Recession began | Model | Peak | | --------------- | ---------------------- | ---- | | Feb 1980 | missed | 22% | | Aug 1981 | warned 11 months ahead | 42% | | Aug 1990 | warned 6 months ahead | 27% | | Apr 2001 | warned 4 months ahead | 56% | | Jan 2008 | warned 11 months ahead | 80% |
1980 had only one month of out-of-sample forecasts before it began.
False alarms at 25%
| Period above 25% | Peak | What followed | | --------------------------------------------- | ---- | ---------------------------------------------------------------------------------------------------------------- | | Nov 1988 – Jul 1989 | 58% | Fell back below 25%; the recession began 13 months later (Aug 1990) | | Nov 1995 – Mar 1996, Jun 1996, Aug – Sep 1996 | 35% | No recession; 8 months above the line in total | | Jul – Oct 2011 | 67% | No recession | | May 2022 – Jun 2024, Aug 2024, Nov – Dec 2024 | 83% | No recession so far; the latest months are not yet resolved (NBER dating lag); 29 months above the line in total |
From the model's walk-forward series: months at or above the alarm line with no recession beginning within 12 months. Runs up to three months apart count as one episode. Left out: single months, months inside recessions and the first 6 months after one ends. Recent months stay open until the NBER could have dated a recession.
Integrity
Two safeguards that do not depend on trusting this page.
Checked before publishing
Ready
Checked 2026-10-03: 0 critical, 5 warnings, 6 notes.
Verify the forecast log
Each forecast is chained to the one before it by a SHA-256 hash, so editing any past entry breaks the chain from that point on. Check it here: your browser recomputes every hash.
Verify all 3 entries
Independent audit, 2 October 2026
Four reviewers checked for leakage of future data, code bugs, data accuracy and robustness. All 28 first-release figures and 32 current values checked matched official sources, and the code was found not to look ahead. Fixed as a result: an inverted stock-market signal, a storage bug, three kill-rule logic errors, outage handling, mislabelled series and licence tags, a yield-curve splice, release delays, and use of indexes before they existed.
Changes, 3 October 2026
Weekly
Written every Friday from the data published that week: the releases, the markets and what moved the model.
Latest week · headline 4.4% (term spread + EBP), model 1.6%
What came out
| Nonfarm payrolls | +29k in September 2026 (prior +133k) | Fri 02 Oct | | -------------------------------- | ------------------------------------------------ | ---------- | | Unemployment rate | 4.2% in September 2026 (prior 4.1%) | Fri 02 Oct | | Initial jobless claims | 197k (week to 26 Sep; prior 198k) | Thu 01 Oct | | Continuing jobless claims | 1,701k (week to 19 Sep; prior 1,712k) | Thu 01 Oct | | Core PCE inflation | 3.0% year on year in August 2026 (prior 3.0%) | Wed 30 Sep | | Real income (ex transfers) | \-0.1% on the month in August 2026 (prior +0.2%) | Wed 30 Sep | | Real consumer spending | +0.6% on the month in August 2026 (prior +0.1%) | Wed 30 Sep | | Job openings (JOLTS) | 7.08m in August 2026 (prior 7.33m) | Tue 29 Sep | | Chicago Fed financial conditions | \-0.5 in week to 25 Sep (prior -0.6) | Wed 30 Sep |
stronger weaker than the prior reading, for the economy.
Markets this week
| Market | Level | Week | | ------------------------------------------------------------------------------ | ------ | ------ | | Yield curve (10y − 3m) | 1.09% | +16 bp | | 10-year Treasury yield (latest day; the Signals tab shows the monthly average) | 5.24% | +7 bp | | WTI oil | 96.16 | +12.8% | | Broad dollar index | 120.33 | +0.0% |
What moved the model
| Labor Market | \-0.07 → +0.22 | reducing risk | | ----------------------------- | -------------- | ---------------------- | | The Yield Curve Complex | \-0.37 → -0.24 | reducing risk | | Uncertainty, Sentiment & Text | \-4.00 → -1.34 | no weight in the model | | Household & Consumer | +0.54 → +0.42 | no weight in the model |
A block score averages every signal in the block against its own history, so it can improve after a weak headline release (a small payroll gain, say) when its other signals, such as claims, hours and employment rates, strengthen. The Today tab lists the strongest and weakest signals in the block that moved most.
Coming up next week
| Wed 07 Oct | Chicago Fed National Financial Conditions Index | | ---------- | ----------------------------------------------- | | Thu 08 Oct | Unemployment Insurance Weekly Claims Report |
Portfolio
See how your holdings have behaved in past recessions, weighted by today's odds. Your files are read on this device only: nothing is uploaded, sent or saved.
Choose one or more CSV exports: Yahoo Finance portfolio files (Symbol, Current Price, Quantity, Transaction Type) or broker holdings downloads such as Vanguard's (Account Number, Symbol, Shares, Share Price, Total Value). Each Yahoo file is one portfolio; each account in a broker file becomes its own portfolio. Identical files are counted once.
Choose CSV files or drop them here
Risk library: 1,728 stocks and ETFs, built 03 Oct 2026. Recession probability used: 4.4%, the term spread + EBP headline while kill rule K4 stands (the model reads 1.6%).
Method
Every layer of the calculation for this forecast (2 Oct 2026), with the Python behind each step. The headline is the term spread + excess bond premium benchmark; both are shown in full.
Data as known81signals, every published version kept
TransformΔchanges and spreads, smoothed
Standardisezagainst each signal's own history
Average12block scores
Probitη −2.15weighted sum
12-block model1.6%second opinion
Term spread+1.0810-year minus 3-month, pts
EBP−0.29excess bond premium, pts
Probitη −1.71527 months, 6 recessions
Term spread + EBP4.4%headline
The headline: term spread + excess bond premium
A two-variable probit, the benchmark kill rule K4 names. It carries the headline while it beats the 12-block model out of sample.
| Term | Input x | Weight β | β × x | | -------------------------------------------------------- | -------- | -------- | ------------ | | Intercept | | | \-0.5228 | | 10-year minus 3-month Treasury spread, percentage points | +1.0800 | \-0.8549 | \-0.9233 | | Excess bond premium, percentage points | \-0.2886 | +0.9152 | \-0.2641 | | Total (η) | | | \-1.7103 |
Probability = Φ(-1.7103) = 4.36% (matches the logged figure)
Fitted at this forecast on 527 months (1973-04 to 2024-04) whose outcome the NBER had made known, covering the recessions that began after Nov 1973, Jan 1980, Jul 1981, Jul 1990, Mar 2001 and Dec 2007. No penalty and no sign constraint: a steeper curve lowers the probability and a higher excess bond premium raises it, as estimated. The inputs are the month's average spread and the latest published premium; the premium's history before 2012 was not available in real time, which flatters this model's record.
View the Python · recession.live.benchmark\_detail 33 lines
def benchmark_detail(T: pd.Timestamp, scores: Optional[pd.DataFrame] = None,
paths: Optional[pd.DataFrame] = None) -> Optional[dict]:
"""
The term spread + EBP probit at decision date T, refitted exactly as
forecast() fits it (same training rows, same penalty), for the Method tab:
coefficients, today's inputs, eta and the probability. None if the stored
features no longer reach T.
"""
from scipy.stats import norm fd = features.FEATURE_DIR
scores = pd.read_parquet(fd / "block_scores.parquet") if scores is None else scores
paths = pd.read_parquet(fd / "feature_paths.parquet") if paths is None else paths
panel = _panel(scores, paths)
if T not in panel.index:
return None
blocks = model.block_columns(panel)
present = panel[blocks].notna().sum(axis=1) >= model.MIN_BLOCKS_PRESENT
tr = model._training_rows(panel, T) & present
rows = tr & panel["term_spread"].notna() & panel["ebp"].notna()
fit = Probit(1e-6).fit(panel.loc[rows, ["term_spread", "ebp"]].values, panel.loc[rows, "y"].values)
x = panel.loc[T, ["term_spread", "ebp"]]
if x.isna().any():
return None
a, b1, b2 = (float(v) for v in fit.beta)
eta = a + b1 float(x["term_spread"]) + b2 float(x["ebp"])
peaks = sorted(str(p)[:7] for p in panel.loc[rows & (panel["y"] == 1), "peak"].dropna().unique())
lo, hi = (float(v) for v in fit.interval(x.values.astype(float)[None, :])[0])
return {"intercept": a, "b_ts": b1, "b_ebp": b2, "ts": float(x["term_spread"]), "ebp": float(x["ebp"]),
"eta": eta, "p": float(norm.cdf(eta)), "interval_80": (lo, hi),
"train_months": int(rows.sum()), "peaks": peaks,
"first": f"{panel.index[rows].min():%Y-%m}", "last": f"{panel.index[rows].max():%Y-%m}"}
View the Python · recession.live.headline 13 lines
def headline(f: dict) -> dict:
"""
The number published as the headline. The model's own forecast is always
logged; when a triggered kill rule says so, the benchmark is published
instead (if it could be computed for the same date).
"""
rules = [k["id"] for k in f.get("kill_criteria", [])
if k["status"] == "TRIGGERED" and k["id"] in BENCHMARK_HEADLINE_RULES]
bench = f["benchmarks"].get(K4_BENCHMARK)
if rules and bench is not None:
return {"series": "benchmark", "probability": bench, "rules": rules}
return {"series": "model", "probability": f["probability"], "rules": rules}View the Python · recession.live.k4\_status 30 lines
def k4_status(scorecard: Optional[pd.DataFrame] = None) -> tuple[str, str]:
"""
K4 from the latest Stage 4 scorecard: TRIGGERED if the term spread + EBP
benchmark (the one the rule's action names) beats the model on AUROC in
EITHER window. The first version compared against the plain term spread
on 1990+ only, which reported "ok" while the named benchmark was ahead in
both windows (page corrections, 3 Oct 2026). AUPRC is reported, not judged.
"""
if scorecard is None:
sc = model.STAGE4_DIR / "scorecard.csv"
if not sc.exists():
return "pending", "no scorecard yet"
scorecard = pd.read_csv(sc)
card = scorecard.set_index(["window", "predictor"])
auroc, auprc, lost = [], [], []
for window, short in K4_WINDOWS:
try:
m, b = card.loc[(window, V2)], card.loc[(window, K4_BENCHMARK)]
except KeyError:
return "pending", f"scorecard has no {short} rows for the model and {K4_BENCHMARK}"
auroc.append(f"{m['AUROC']:.3f} vs {b['AUROC']:.3f} ({short})")
auprc.append(f"{m['AUPRC']:.3f} vs {b['AUPRC']:.3f}")
if b["AUROC"] > m["AUROC"]:
lost.append(short)
detail = (f"AUROC: model vs term spread + EBP {', '.join(auroc)}. "
f"AUPRC: {' and '.join(auprc)}.")
if lost:
detail += f" Benchmark ahead on AUROC in {' and '.join(lost)}."
return ("TRIGGERED" if lost else "ok"), detailThe 12-block model, step by step
1. Collect the data as it was known. Every series is stored with each version ever published (FRED/ALFRED), so the model only sees figures released by the decision date. Before a series' first archived vintage, its earliest vintage is used with a conservative release delay. 2. Transform each series into a change or spread (table below). Monthly changes are averaged over 3 months, because a single month is mostly noise. Daily and weekly series are averaged to months first.View the Python · recession.features.apply\_transform 25 lines ``` def apply_transform(x: pd.Series, tx: R.Tx, freq: str) -> pd.Series: ppy = PERIODS_PER_YEAR[freq] if tx is R.Tx.NONE: y = x elif tx is R.Tx.DIFF: y = x.diff() elif tx is R.Tx.DIFF2: y = x.diff().diff() elif tx is R.Tx.LOG_DIFF: y = 100 * _log(x).diff() elif tx is R.Tx.LOG_DIFF2: y = 100 * _log(x).diff().diff() elif tx is R.Tx.YOY: y = 100 * (x / x.shift(ppy) - 1) elif tx is R.Tx.PCT_6M_ANN: y = 100 ((x / x.shift(max(ppy // 2, 1))) * 2 - 1) elif tx is R.Tx.MAX_3Y_INCREASE: lp = 100 * _log(x) y = (lp - lp.shift(1).rolling(3 ppy, min_periods=3 ppy).max()).clip(lower=0) else: raise NotImplementedError(f"transform {tx.value} is not used by any Stage 3 feature") if tx in DIFF_LIKE and freq == "M": y = y.rolling(SMOOTH_MONTHS, min_periods=SMOOTH_MONTHS).mean() return y
3. Standardise each one against its own history up to that month only: z = (value − median) ÷ scale, where scale = interquartile range ÷ 1.349 (the standard deviation's equivalent for normal data), capped at ±4. Both are shown for every factor below.View the Python · recession.features.expanding\_robust\_z 16 lines
def expanding_robust_z(paths: pd.DataFrame) -> pd.DataFrame:
"""
z(T) from the median and IQR of the feature's own real-time path up to T.
Event-type features (the Hamilton oil shock is zero most months; oil was
price-controlled before 1973) have an IQR of zero. There the scale falls
back to the expanding standard deviation, so a rare non-zero value still
registers instead of dividing by zero.
"""
ex = paths.expanding(MIN_HISTORY_MONTHS)
med = ex.median()
scale = (ex.quantile(0.75) - ex.quantile(0.25)) / 1.349
scale = scale.where(scale > 0, ex.std())
z = (paths - med) / scale.where(scale > 0)
return z.replace([np.inf, -np.inf], np.nan).clip(-Z_CLIP, Z_CLIP)
4. Orient and average: multiply by −sign so negative always means recession-like, then average within each block. Indexes are left out before the date they were first published.View the Python · recession.features.block\_scores 15 lines
def block_scores(z: pd.DataFrame, specs: list[Spec], included: list[str]) -> tuple[pd.DataFrame, pd.DataFrame]:
"""Equal-weight mean of signed z within each block. Negative = recessionary."""
sign = {s.key: s.sign for s in specs}
z = mask_unpublished(z)
signed = pd.DataFrame({k: -sign[k] * z[k] for k in included})
block_of = {s.key: s.block for s in specs}
names = {b.number: b.name for b in R.BLOCKS}
scores, counts = {}, {}
for b in sorted({block_of[k] for k in included}):
cols = [k for k in included if block_of[k] == b]
label = f"B{b:02d} {names[b]}"
scores[label] = signed[cols].mean(axis=1)
counts[label] = signed[cols].notna().sum(axis=1)
return pd.DataFrame(scores), pd.DataFrame(counts)
5. Combine with a probit: probability = Φ(intercept + Σ weight × block score), where Φ is the standard normal distribution.View the Python · recession.model.Probit 61 lines
class Probit:
"""
Probit with an L2 penalty on slopes. Fisher-information covariance for intervals.
sign_constrained=True forces every slope <= 0: inputs are block scores
oriented so that NEGATIVE = recessionary (registry sign convention), so a
weaker block may only RAISE the probability. The constraint encodes the
registry's declared signs; it is not estimated from the data.
"""
def _init_(self, lam: float, sign_constrained: bool = False):
self.lam = lam
self.sign_constrained = sign_constrained
self.beta: np.ndarray | None = None
self.cov: np.ndarray | None = None
@staticmethod
def _X(x: np.ndarray) -> np.ndarray:
return np.column_stack([np.ones(len(x)), x])
def fit(self, x: np.ndarray, y: np.ndarray) -> "Probit":
X = self._X(x)
pen = np.full(X.shape[1], self.lam)
pen[0] = 0.0
def nll(b):
eta = X @ b
ll = y norm.logcdf(eta) + (1 - y) norm.logcdf(-eta)
# d/deta of the log-likelihood, computed stably
g_pos = np.exp(norm.logpdf(eta) - norm.logcdf(eta))
g_neg = np.exp(norm.logpdf(eta) - norm.logcdf(-eta))
grad = -(X.T @ (y g_pos - (1 - y) g_neg)) + pen * b
return -ll.sum() + 0.5 (pen b * b).sum(), grad
b0 = np.zeros(X.shape[1])
b0[0] = norm.ppf(np.clip(y.mean(), 0.01, 0.99))
bounds = ([(None, None)] + [(None, 0.0)] * (X.shape[1] - 1)) if self.sign_constrained else None
res = minimize(nll, b0, jac=True, method="L-BFGS-B", bounds=bounds)
self.converged = bool(res.success)
if not res.success:
import warnings
warnings.warn(f"Probit did not converge: {res.message}")
self.beta = res.x
eta = X @ self.beta
w = norm.pdf(eta) * 2 / np.clip(norm.cdf(eta) norm.cdf(-eta), 1e-12, None)
H = X.T @ (X * w[:, None]) + np.diag(pen)
self.cov = np.linalg.pinv(H)
return self
def predict(self, x: np.ndarray) -> np.ndarray:
return norm.cdf(self._X(x) @ self.beta)
def interval(self, x: np.ndarray, q=(0.1, 0.9), draws: int = 4000, seed: int = 0) -> np.ndarray:
"""Probability quantiles from parameter uncertainty (Laplace approximation)."""
rng = np.random.default_rng(seed)
# Unclipped draws: clipping constrained slopes at 0 pushed the whole
# interval upward and off-centre from the point estimate (audit B).
B = rng.multivariate_normal(self.beta, self.cov, size=draws)
p = norm.cdf(self._X(x) @ B.T)
return np.quantile(p, q, axis=1).T
```
View the Python · recession.live.forecast 87 lines
```
def forecast(scores: Optional[pd.DataFrame] = None, paths: Optional[pd.DataFrame] = None,
counts: Optional[pd.DataFrame] = None, decision: Optional[str] = None,
as_of: Optional[str] = None) -> dict:
"""
decision="YYYY-MM": the official month-end forecast for that month.
as_of="YYYY-MM-DD": an in-month update using everything published by that day
(requires the Stage 3 paths to include that date: run_stage3(extra_date=...)).
"""
fd = features.FEATURE_DIR
scores = pd.read_parquet(fd / "block_scores.parquet") if scores is None else scores
paths = pd.read_parquet(fd / "feature_paths.parquet") if paths is None else paths
counts = pd.read_parquet(fd / "block_counts.parquet") if counts is None else counts
panel = _panel(scores, paths)
blocks = model.block_columns(panel)
present = panel[blocks].notna().sum(axis=1) >= model.MIN_BLOCKS_PRESENT
if as_of is not None:
T = pd.Timestamp(as_of).normalize() # in-month (event) update
elif decision:
T = pd.Timestamp(decision) + pd.offsets.MonthEnd(0) # official month-end
else:
T = panel.index[present & panel.index.is_month_end][-1]
earlier = panel.index[present & (panel.index < T)]
prev = earlier[-1]
kind = "month-end" if T.is_month_end else "in-month"
Xb = panel[blocks].fillna(0.0)
tr = model._training_rows(panel, T) & present
y = panel.loc[tr, "y"].values
v2 = Probit(model.RIDGE_LAMBDA, sign_constrained=True).fit(Xb.loc[tr].values, y)
ts_rows = tr & panel["term_spread"].notna()
ts = Probit(1e-6).fit(panel.loc[ts_rows, ["term_spread"]].values, panel.loc[ts_rows, "y"].values)
te_rows = ts_rows & panel["ebp"].notna()
tsebp = Probit(1e-6).fit(panel.loc[te_rows, ["term_spread", "ebp"]].values, panel.loc[te_rows, "y"].values)
x, xp = Xb.loc[[T]].values, Xb.loc[[prev]].values
p, p_prev = float(v2.predict(x)[0]), float(v2.predict(xp)[0])
lo, hi = (float(v) for v in v2.interval(x)[0])
beta = v2.beta[1:]
def bench(fit, cols, when):
row = panel.loc[[when], cols]
return float(fit.predict(row.values)[0]) if row.notna().all(axis=None) else None
ind = model.indicator_benchmarks(pd.DatetimeIndex([T])).iloc[0]
block_rows = {}
for j, b in enumerate(blocks):
now, before = float(Xb.loc[T, b]), float(Xb.loc[prev, b])
recent = counts[b].loc[:T].iloc[-25:-1]
block_rows[b] = {
"score": round(now, 3), "score_prev": round(before, 3),
"weight": round(float(beta[j]), 6),
"contribution": round(float(beta[j] * now), 4), # probit index units; + = more risk
"change_contribution": round(float(beta[j] * (now - before)), 4),
"factors": int(counts.loc[T, b]) if T in counts.index and pd.notna(counts.loc[T, b]) else 0,
"usual_factors": int(recent.max()) if len(recent) else 0,
}
out = {
"decision_month": f"{T:%Y-%m}",
"kind": kind,
"as_of": f"{T:%Y-%m-%d}",
"compared_with": f"{prev:%Y-%m-%d}",
"probability": round(p, 4), "probability_exact": p,
"intercept": round(float(v2.beta[0]), 6),
"ridge_lambda": model.RIDGE_LAMBDA,
"interval_80": [round(lo, 4), round(hi, 4)],
"probability_prev_month_same_model": round(p_prev, 4),
"alarm_threshold": DECISIONS.alarm_threshold,
"alarm": p >= DECISIONS.alarm_threshold,
"benchmarks": {
"Term spread + EBP probit": bench(tsebp, ["term_spread", "ebp"], T),
"Term spread probit": bench(ts, ["term_spread"], T),
"Fed Board TS+EBP probability (published)": _num(ind["Fed Board TS+EBP probability (published)"]),
"Chauvet-Piger probability": _num(ind["Chauvet-Piger probability"]),
"Sahm rule (real-time)": _num(ind["Sahm rule (real-time)"]),
},
"blocks": block_rows,
"features_included": None, # filled by the caller from the Stage 3 report
"train_months": int(tr.sum()),
"base_rate": round(float(y.mean()), 4), # what "no skill" would have forecast (K3)
"recessions_in_training": int(panel.loc[tr & (panel["y"] == 1), "peak"].nunique()),
}
out["flags"] = flags(out)
out["kill_criteria"] = kill_status(out)
out["explanation"] = explain(out)
return out
| Transform | What it computes |
| ----------------- | ---------------------------------------------------------------------------------------- |
| NONE | the level as published |
| DIFF | change from the previous period |
| LOG\_DIFF | 100 × change in the logarithm, about the % change from the previous period |
| YOY | % change from a year earlier |
| MAX\_3Y\_INCREASE | rise above the highest level of the previous 3 years (Hamilton's net oil price increase) |From raw data to block scores
Open a block to see every factor: its value, the median and scale it is standardised with, its z-score and its signed contribution.
Real Activity & Outputblock score +0.077 \= average of 11 signed values
| Factor | Series | Transform | Value | Median | Scale | z-score | Sign | Signed z |
| -------------------------------------- | ---------------- | --------- | -------- | ------ | ----- | ------- | ---- | -------- |
| Real GDP | GDPC1 | LOG\_DIFF | 0.549 | 0.632 | 0.548 | \-0.15 | \-1 | \-0.15 |
| Real gross domestic income | A261RX1Q020SBEA | LOG\_DIFF | 0.653 | 0.721 | 0.642 | \-0.11 | \-1 | \-0.11 |
| Industrial production | INDPRO | LOG\_DIFF | 0.139 | 0.235 | 0.396 | \-0.24 | \-1 | \-0.24 |
| Capacity utilization | TCU | DIFF | 0.037 | 0.037 | 0.321 | +0.00 | \-1 | +0.00 |
| Real personal income less transfers | W875RX1 | LOG\_DIFF | 0.129 | 0.228 | 0.234 | \-0.42 | \-1 | \-0.42 |
| Real personal consumption expenditures | PCEC96 | LOG\_DIFF | 0.337 | 0.248 | 0.206 | +0.43 | \-1 | +0.43 |
| Real manufacturing & trade sales | CMRMTSPL | LOG\_DIFF | 0.428 | 0.263 | 0.399 | +0.41 | \-1 | +0.41 |
| Core capital goods orders | NEWORDER | LOG\_DIFF | 1.27 | 0.379 | 1.22 | +0.73 | \-1 | +0.73 |
| Heavy truck sales | HTRUCKSSAAR | LOG\_DIFF | \-4.78 | 0.280 | 3.08 | \-1.64 | \-1 | \-1.64 |
| Cass Freight shipments index | FRGSHPUSM649NCIS | YOY | licensed | +0.38 | \-1 | +0.38 | | |
| Electricity output | IPG2211S | YOY | 7.00 | 1.95 | 3.47 | +1.45 | \-1 | +1.45 |
Labor Marketblock score +0.220 \= average of 13 signed values
| Factor | Series | Transform | Value | Median | Scale | z-score | Sign | Signed z |
| -------------------------------------- | ----------- | --------- | -------- | ------- | ----- | ------- | ---- | -------- |
| Nonfarm payrolls | PAYEMS | LOG\_DIFF | 0.032 | 0.142 | 0.125 | \-0.88 | \-1 | \-0.88 |
| Household survey employment | CE16OV | LOG\_DIFF | 0.182 | 0.117 | 0.163 | +0.40 | \-1 | +0.40 |
| Initial jobless claims, 4-week average | IC4WSA | YOY | \-14.38 | \-3.59 | 12.61 | \-0.86 | +1 | +0.86 |
| Continuing claims | CCSA | YOY | \-11.06 | \-4.38 | 14.46 | \-0.46 | +1 | +0.46 |
| Insured unemployment rate | IURSA | DIFF | \-0.033 | \-0.008 | 0.043 | \-0.58 | +1 | +0.58 |
| Average weekly hours, manufacturing | AWHMAN | DIFF | 0.100 | 0.000 | 0.099 | +1.01 | \-1 | +1.01 |
| Average weekly hours, all private | AWHAETP | DIFF | 0.033 | 0.000 | 0.049 | +0.67 | \-1 | +0.67 |
| Temporary help services employment | TEMPHELPS | LOG\_DIFF | \-0.276 | 0.328 | 0.665 | \-0.91 | \-1 | \-0.91 |
| Quits rate | JTSQUR | DIFF | \-0.033 | 0.000 | 0.049 | \-0.67 | \-1 | \-0.67 |
| Job openings | JTSJOL | LOG\_DIFF | \-2.09 | 0.230 | 1.94 | \-1.20 | \-1 | \-1.20 |
| Layoffs and discharges | JTSLDL | LOG\_DIFF | \-2.35 | \-0.422 | 2.49 | \-0.78 | +1 | +0.78 |
| Prime-age employment-population ratio | LNS12300060 | DIFF | 0.167 | 0.033 | 0.099 | +1.35 | \-1 | +1.35 |
| Indeed job postings index | IHLIDXUS | YOY | licensed | +0.41 | \-1 | +0.41 | | |
Household & Consumerblock score +0.419 \= average of 8 signed values
| Factor | Series | Transform | Value | Median | Scale | z-score | Sign | Signed z |
| ---------------------------------- | --------- | --------- | -------- | ------- | ----- | ------- | ---- | -------- |
| Real disposable personal income | DSPIC96 | LOG\_DIFF | 0.214 | 0.224 | 0.231 | \-0.04 | \-1 | \-0.04 |
| U. Michigan consumer sentiment | UMCSENT | DIFF | licensed | +1.06 | \-1 | +1.06 | | |
| Retail sales, control group | RSXFS | LOG\_DIFF | 0.377 | 0.403 | 0.294 | \-0.09 | \-1 | \-0.09 |
| Real retail & food services sales | RRSFS | LOG\_DIFF | 0.321 | 0.179 | 0.335 | +0.42 | \-1 | +0.42 |
| Total vehicle sales, SAAR | TOTALSA | LOG\_DIFF | \-1.67 | 0.173 | 1.94 | \-0.95 | \-1 | \-0.95 |
| Credit card delinquency, all banks | DRCCLACBS | DIFF | \-0.060 | \-0.020 | 0.156 | \-0.26 | +1 | +0.26 |
| Household net worth | TNWBSHNO | LOG\_DIFF | 6.76 | 1.90 | 1.76 | +2.76 | \-1 | +2.76 |
| SLOOS consumer credit standards | DRTSCLCC | NONE | 6.70 | 5.60 | 16.01 | +0.07 | +1 | \-0.07 |
Business, Orders & Surveysblock score +0.325 \= average of 6 signed values
| Factor | Series | Transform | Value | Median | Scale | z-score | Sign | Signed z |
| ------------------------------------- | ------------------ | --------- | ------- | ------ | ----- | ------- | ---- | -------- |
| Empire State manufacturing survey | GACDISA066MSFRBNY | NONE | 7.60 | 7.43 | 15.89 | +0.01 | \-1 | +0.01 |
| Philadelphia Fed manufacturing survey | GACDFSA066MSFRBPHI | NONE | 37.80 | 10.75 | 16.92 | +1.60 | \-1 | +1.60 |
| Chicago Fed National Activity Index | CFNAI | NONE | \-0.040 | 0.050 | 0.608 | \-0.15 | \-1 | \-0.15 |
| CFNAI diffusion index | CFNAIDIFF | NONE | 0.020 | 0.070 | 0.378 | \-0.13 | \-1 | \-0.13 |
| Corporate profits, NIPA basis | CPATAX | YOY | 18.16 | 6.78 | 12.59 | +0.90 | \-1 | +0.90 |
| Business formation applications | BAHBATOTALSAUS | LOG\_DIFF | \-0.364 | 0.092 | 1.62 | \-0.28 | \-1 | \-0.28 |
Credit & Financial Conditionsblock score +0.338 \= average of 14 signed values
| Factor | Series | Transform | Value | Median | Scale | z-score | Sign | Signed z |
| ----------------------------------------------- | -------------- | --------- | -------- | ------- | ----- | ------- | ---- | -------- |
| Moody's Baa minus 10-year Treasury | BAA10Y | DIFF | licensed | \-0.29 | +1 | +0.29 | | |
| Moody's Aaa minus 10-year Treasury | AAA10Y | DIFF | licensed | \-0.70 | +1 | +0.70 | | |
| Excess bond premium (Gilchrist-Zakrajsek) | EBP | NONE | \-0.289 | \-0.047 | 0.344 | \-0.70 | +1 | +0.70 |
| Chicago Fed National Financial Conditions Index | NFCI | NONE | \-0.555 | \-0.505 | 0.476 | \-0.10 | +1 | +0.10 |
| Adjusted NFCI | ANFCI | NONE | \-0.585 | \-0.265 | 0.604 | \-0.53 | +1 | +0.53 |
| NFCI credit subindex | NFCICREDIT | NONE | \-0.062 | \-0.259 | 0.513 | +0.38 | +1 | \-0.38 |
| NFCI leverage subindex | NFCILEVERAGE | NONE | 0.084 | \-0.235 | 0.641 | +0.50 | +1 | \-0.50 |
| St. Louis Fed financial stress index | STLFSI4 | NONE | \-0.787 | \-0.268 | 0.558 | \-0.93 | +1 | +0.93 |
| Kansas City Fed financial stress index | KCFSI | NONE | \-0.946 | \-0.410 | 0.619 | \-0.87 | +1 | +0.87 |
| SLOOS: C&I tightening, large firms | DRTSCILM | NONE | 0.000 | 0.000 | 17.79 | +0.00 | +1 | \-0.00 |
| SLOOS: CRE standards | SUBLPDRCSN | NONE | \-11.30 | 7.00 | 17.38 | \-1.05 | +1 | +1.05 |
| SLOOS: loan demand | DRSDCILM | NONE | 16.10 | 0.000 | 23.94 | +0.67 | \-1 | +0.67 |
| Total bank credit | TOTBKCR | YOY | 6.08 | 6.69 | 3.33 | \-0.18 | \-1 | \-0.18 |
| Bank deposits | DPSACBW027SBOG | YOY | 6.64 | 6.81 | 2.87 | \-0.06 | \-1 | \-0.06 |
Monetary Policy, Rates & Liquidityblock score \-1.040 \= average of 9 signed values
| Factor | Series | Transform | Value | Median | Scale | z-score | Sign | Signed z |
| ----------------------------------------- | --------- | --------- | ------- | ------- | ----- | ------- | ---- | -------- |
| Effective fed funds rate | DFF | DIFF | 0.084 | 0.001 | 0.129 | +0.65 | +1 | \-0.65 |
| 5-year real yield | DFII5 | DIFF | 0.193 | \-0.006 | 0.108 | +1.84 | +1 | \-1.84 |
| 10-year real yield | DFII10 | DIFF | 0.176 | \-0.006 | 0.093 | +1.94 | +1 | \-1.94 |
| M2 money stock | M2SL | YOY | 5.66 | 6.63 | 2.93 | \-0.33 | \-1 | \-0.33 |
| Real M2 | M2REAL | YOY | 2.19 | 2.99 | 3.81 | \-0.21 | \-1 | \-0.21 |
| Fed balance sheet total assets | WALCL | YOY | 2.07 | 3.76 | 11.52 | \-0.15 | \-1 | \-0.15 |
| Reserve balances at Federal Reserve banks | WRESBAL | LOG\_DIFF | \-0.717 | \-0.065 | 2.93 | \-0.22 | \-1 | \-0.22 |
| Overnight reverse repo balances | RRPONTSYD | DIFF | \-0.177 | 0.002 | 7.61 | \-0.02 | \-1 | \-0.02 |
| Treasury General Account | WTREGEN | LOG\_DIFF | 18,333 | 0.028 | 1.23 | +4.00 | +1 | \-4.00 |
The Yield Curve Complexblock score \-0.239 \= average of 2 signed values
| Factor | Series | Transform | Value | Median | Scale | z-score | Sign | Signed z |
| ------------------------------------- | ------ | --------- | ----- | ------ | ----- | ------- | ---- | -------- |
| 10-year minus 3-month Treasury spread | T10Y3M | NONE | 1.08 | 1.28 | 1.48 | \-0.14 | \-1 | \-0.14 |
| 10-year minus 2-year Treasury spread | T10Y2Y | NONE | 0.455 | 0.778 | 0.945 | \-0.34 | \-1 | \-0.34 |
Inflation & Pricesblock score \-0.479 \= average of 3 signed values
| Factor | Series | Transform | Value | Median | Scale | z-score | Sign | Signed z |
| ------------------------------- | ---------- | ----------------- | ------ | ------- | ----- | ------- | ---- | -------- |
| WTI crude oil | DCOILWTICO | LOG\_DIFF | 4.59 | 0.000 | 2.69 | +1.71 | +1 | \-1.71 |
| Hamilton net oil price increase | OIL\_SHOCK | MAX\_3Y\_INCREASE | 0.000 | 0.000 | 3.84 | +0.00 | +1 | \-0.00 |
| Natural gas, Henry Hub | DHHNGSP | LOG\_DIFF | \-2.17 | \-0.024 | 7.96 | \-0.27 | +1 | +0.27 |
Housing & Constructionblock score +0.104 \= average of 9 signed values
| Factor | Series | Transform | Value | Median | Scale | z-score | Sign | Signed z |
| ----------------------------------------- | --------------- | --------- | -------- | ------ | ----- | ------- | ---- | -------- |
| Building permits | PERMIT | LOG\_DIFF | \-0.166 | 0.310 | 2.58 | \-0.18 | \-1 | \-0.18 |
| Housing starts | HOUST | LOG\_DIFF | 2.52 | 0.014 | 3.55 | +0.71 | \-1 | +0.71 |
| New home sales | HSN1F | LOG\_DIFF | 2.43 | 0.160 | 3.54 | +0.64 | \-1 | +0.64 |
| Months' supply of new homes | MSACSR | DIFF | \-0.233 | 0.000 | 0.222 | \-1.05 | +1 | +1.05 |
| 30-year fixed mortgage rate | MORTGAGE30US | DIFF | licensed | +1.83 | +1 | \-1.83 | | |
| Residential fixed investment share of GDP | A011RE1Q156NBEA | DIFF | \-0.100 | 0.000 | 0.148 | \-0.67 | \-1 | \-0.67 |
| Total construction spending | TTLCONS | LOG\_DIFF | 0.530 | 0.317 | 0.701 | +0.30 | \-1 | +0.30 |
| Private nonresidential construction | PNRESCONS | LOG\_DIFF | 1.03 | 0.143 | 0.956 | +0.93 | \-1 | +0.93 |
| Rental vacancy rate | RRVRUSQ156N | DIFF | 0.000 | 0.000 | 0.297 | +0.00 | +1 | \-0.00 |
Equity, Volatility & Cross-Assetblock score +0.202 \= average of 2 signed values
| Factor | Series | Transform | Value | Median | Scale | z-score | Sign | Signed z |
| ------------------------------------------- | ------ | --------- | -------- | ------ | ----- | ------- | ---- | -------- |
| Equity drawdown from trailing 12-month high | SP500 | NONE | licensed | \-0.21 | +1 | +0.21 | | |
| CBOE volatility index | VIXCLS | NONE | licensed | \-0.19 | +1 | +0.19 | | |
Commodities & Dollarblock score +0.368 \= average of 3 signed values
| Factor | Series | Transform | Value | Median | Scale | z-score | Sign | Signed z |
| --------------------------------- | ---------- | --------- | ------- | ------ | ----- | ------- | ---- | -------- |
| Broad trade-weighted dollar index | DTWEXBGS | LOG\_DIFF | \-0.320 | 0.010 | 0.810 | \-0.41 | +1 | +0.41 |
| Advanced-economy dollar index | DTWEXAFEGS | LOG\_DIFF | \-0.163 | 0.087 | 0.962 | \-0.26 | +1 | +0.26 |
| Agricultural commodity index | WPU01 | YOY | \-2.45 | 1.42 | 8.85 | \-0.44 | +1 | +0.44 |
Uncertainty, Sentiment & Textblock score \-1.341 \= average of 1 signed values
| Factor | Series | Transform | Value | Median | Scale | z-score | Sign | Signed z |
| --------------------------------- | ---------- | --------- | ----- | ------ | ----- | ------- | ---- | -------- |
| Economic Policy Uncertainty index | USEPUINDXD | NONE | 160.6 | 98.34 | 46.42 | +1.34 | +1 | \-1.34 |
From block scores to a probability
| Block | Score x | Weight β | β × x |
| ---------------------------------- | -------- | -------- | ------------ |
| Intercept | | | \-1.8917 |
| Real Activity & Output | +0.0770 | \-0.1163 | \-0.0090 |
| Labor Market | +0.2200 | \-0.4037 | \-0.0888 |
| Household & Consumer | +0.4190 | +0.0000 | +0.0000 |
| Business, Orders & Surveys | +0.3250 | \-0.4564 | \-0.1483 |
| Credit & Financial Conditions | +0.3380 | +0.0000 | +0.0000 |
| Monetary Policy, Rates & Liquidity | \-1.0400 | +0.0000 | \-0.0000 |
| The Yield Curve Complex | \-0.2390 | \-0.6519 | +0.1558 |
| Inflation & Prices | \-0.4790 | \-0.0854 | +0.0409 |
| Housing & Construction | +0.1040 | +0.0000 | +0.0000 |
| Equity, Volatility & Cross-Asset | +0.2020 | \-0.1231 | \-0.0249 |
| Commodities & Dollar | +0.3680 | \-0.5043 | \-0.1856 |
| Uncertainty, Sentiment & Text | \-1.3410 | +0.0000 | \-0.0000 |
| Total (η) | | | \-2.1515 |
Probability = Φ(-2.1515) = 1.57% (logged: 1.57%)
Does one recession drive the weights?
The model refitted 7 more times, leaving out one recession's run-up each time
| Block | All 7 recessions | Range, one left out | Weakest without | Times at zero |
| -------------------------------- | ---------------- | ------------------- | --------------- | ------------- |
| Real Activity & Output | \-0.12 | \-0.30 to -0.03 | Jan 1980 | 0 |
| Labor Market | \-0.40 | \-0.48 to -0.22 | Mar 2001 | 0 |
| Business, Orders & Surveys | \-0.46 | \-0.58 to -0.25 | Jul 1990 | 0 |
| The Yield Curve Complex | \-0.65 | \-0.75 to -0.58 | Mar 2001 | 0 |
| Inflation & Prices | \-0.09 | \-0.16 to -0.05 | Mar 2001 | 0 |
| Equity, Volatility & Cross-Asset | \-0.12 | \-0.19 to +0.00 | Mar 2001 | 1 |
| Commodities & Dollar | \-0.50 | \-0.58 to -0.41 | Nov 1973 | 0 |
Weights that fall below half their size, or to zero, when one recession is dropped rest mainly on that episode: Real Activity & Output and Equity, Volatility & Cross-Asset. Stability is not proof of forecasting power: these fits still learn from the same history. The out-of-sample test is the scorecard behind kill rule K4, which this model currently loses to the two-signal benchmark.
View the Python · recession.live.weight\_stability 28 lines
def weight_stability(T: pd.Timestamp, scores: Optional[pd.DataFrame] = None,
paths: Optional[pd.DataFrame] = None) -> Optional[pd.DataFrame]:
"""
Leave one recession out: refit the 12-block model exactly as forecast()
does at decision date T, once with all training months and once without
each recession's run-up (the months labelled for that peak). A weight that
holds its size whichever recession is dropped rests on more than one
episode; one that collapses when a single recession is removed is fragile.
Rows: "all" and each left-out peak; columns: one weight per block.
"""
fd = features.FEATURE_DIR
scores = pd.read_parquet(fd / "block_scores.parquet") if scores is None else scores
paths = pd.read_parquet(fd / "feature_paths.parquet") if paths is None else paths
panel = _panel(scores, paths)
blocks = model.block_columns(panel)
present = panel[blocks].notna().sum(axis=1) >= model.MIN_BLOCKS_PRESENT
Xb = panel[blocks].fillna(0.0)
tr = model._training_rows(panel, T) & present
peaks = sorted(panel.loc[tr & (panel["y"] == 1), "peak"].dropna().unique())
names = {b.number: b.name for b in R.BLOCKS}
label = lambda c: f"B{int(c[1:3]):02d} {names.get(int(c[1:3]), c)}" if c[:1] == "B" and c[1:3].isdigit() else c
rows = {}
for drop in [None] + peaks:
keep = tr & ~(panel["peak"] == drop) if drop is not None else tr
fit = Probit(model.RIDGE_LAMBDA, sign_constrained=True).fit(Xb.loc[keep].values, panel.loc[keep, "y"].values)
rows["all" if drop is None else str(drop)[:7]] = fit.beta[1:]
return pd.DataFrame(rows, index=[label(c) for c in blocks]).T### How the weights are fitRefitted at every forecast on 640 months covering 7 recessions: only months whose outcome the NBER had announced by the decision date, ending at least 12 months before it (the forecast horizon), so no answer leaks in.
A ridge penalty (λ = 10.0) shrinks the weights toward zero, because seven recessions cannot pin down twelve weights precisely.
Every weight is constrained to be zero or negative: a weaker block can only raise the probability. Blocks at zero add nothing once the others are known.
2020 is excluded as an exogenous shock.
View the Python · recession.model.\_training\_rows 6 lines
def _training_rows(panel: pd.DataFrame, origin: pd.Timestamp) -> pd.Series:
return (panel["y"].notna()
& (panel["known_from"] <= origin)
& (panel.index <= origin - pd.offsets.MonthEnd(EMBARGO_MONTHS))
& ~panel["exogenous"].astype(bool))```