Recession Nowcasting: Real-Time Probability Bands for the US and Canada
Calibrated real-time recession probabilities built only from data available at each historical date, with uncertainty bands and an honest out-of-sample horse-race against the term-spread probit and the Sahm rule. Updated weekly.
The dashboard below gives a probability that the US economy is in recession right now, along with a confidence band around it and a historical track record you can check. Canada sits alongside it. Both figures are built only from data that was actually published at each point in time, with no hindsight adjustments. That constraint ends up doing a lot of work.
What a recession is, and why dating it is harder than it looks
The word recession gets used loosely, but the official definition in the US belongs to the National Bureau of Economic Research. The NBER’s Business Cycle Dating Committee declares the start and end of recessions after a thorough review of employment, personal income, industrial production, and other indicators. They are slow and deliberate on purpose. A recession is only announced once the committee is confident, which usually means months after the fact. The 2020 recession was dated in June 2020, three months after it began. The 2007 recession was dated in December 2008, a full year in. Canada uses the C.D. Howe Institute’s Business Cycle Council, which follows a similar approach.
The consequence is that you cannot know you are in a recession by reading an official announcement. You can only know in retrospect. What you can do is estimate the probability in real time, using the data that is available right now. That is what this project does.
The look-ahead problem
Here is the thing most recession models get wrong. When you build a model on historical data, it is tempting to use the data as it exists today, fully revised, seasonally adjusted, and clean. But that is not the data a policymaker or investor would have seen at the time. GDP gets revised substantially in the months after its first release. Employment figures are benchmarked annually. Industrial production estimates change. If you train a model on final revised data and evaluate how well it would have performed in real time, you will overstate its usefulness dramatically.
The forecasting literature calls this the look-ahead bias, and it is surprisingly common even in serious academic work. A model that appears to have called every recession with two months’ lead time might have been using revised data that was not available until a year after the fact.
This project applies a discipline called vintage data analysis. Every backtest decision at month tau uses only observations that had been released by tau. Individual data series have different publication schedules. Unemployment claims come out weekly. Industrial production comes out about two weeks after the reference month. GDP is released about a month after the quarter ends and revised several more times over the next year. We model these publication lags explicitly: each series becomes visible to the model only once its release date has passed. The result is a pseudo-real-time backtest. It is not perfect, since we do not have access to the exact vintage-specific data for every series, but it removes timing look-ahead entirely. A separate comparison against full-information final data quantifies what remains.
The model
The core model is a dynamic factor model, specifically the DynamicFactorMQ implementation from statsmodels, which fits a state-space model via the Kalman filter and EM algorithm.
The idea behind a factor model is that a large panel of macroeconomic series all respond to a small number of common underlying forces, what economists call factors. If you have twenty-three monthly indicators covering industrial production, employment, prices, housing, consumer sentiment, and credit spreads, all of them are noisy readings of the same underlying business cycle. The factor model extracts that common signal and discards the series-specific noise. One or a few factors can then summarize the state of the economy much better than any individual series.
The Kalman filter is the machinery that does this efficiently. It handles two complications at once. First, the data arrives unevenly: not every series is available for every month at the time you are making the nowcast, because of the publication lags described above. Second, the factors themselves follow a dynamic process, meaning last month’s factor value is informative about this month’s. The Kalman filter propagates uncertainty forward and backward through time, using all available information at each step. EM, short for expectation-maximization, is the estimation algorithm that fits the model to data when there are latent (unobserved) variables involved.
Once the factors are extracted, a probit regression maps them to recession probability. A probit is just a binary regression that outputs probabilities rather than raw linear predictions and constrains them to lie between zero and one.
For the expanding-window backtest, which requires hundreds of model refits across different historical cutoff dates, we use a faster PCA-based factor approximation rather than the full Kalman smoother. Principal components analysis finds the directions of maximum variance in the panel, which serve as factor proxies without the full state-space machinery. It is less precise but runs in milliseconds rather than seconds, which matters a great deal when you are refitting the model for every month from 1985 to the present.
The comparators
Running the DFM alone tells you nothing about whether it is actually useful. You need something to compare it against.
Three benchmarks run in the same backtest harness.
The term-spread probit is the classic recession forecasting model in the academic literature. The term spread is the difference between the 10-year Treasury yield and the 3-month Treasury yield. When that spread inverts, meaning short rates exceed long rates, it has historically preceded recessions by roughly a year. Arturo Estrella and Frederic Mishkin showed in a series of papers in the 1990s that this single variable has substantial predictive power. The twist here is that the spread enters the model with a 12-month lag, since it is a leading indicator rather than a contemporaneous one. Using it as a nowcast of the current month would miss the point.
The Sahm rule is a real-time recession indicator developed by Claudia Sahm. It triggers when the three-month average of the national unemployment rate rises by 0.5 percentage points or more relative to its 12-month low. The appeal is that it is mechanical, based on real-time data, and has a clean track record. Sahm herself has noted that the rule is not a model, just a threshold.
Penalised MIDAS (Mixed-Data Sampling) is a regularised logistic regression on multiple lags of key indicators. MIDAS models are designed to handle situations where the predictors and the outcome are observed at different frequencies. The penalisation (elastic net) prevents overfitting when the number of lags is large relative to the sample.
All three competitors and the DFM use the same vintage discipline as described above. Nothing gets a free pass on the look-ahead question.
Evaluation
The performance metrics are Brier score, AUC, PR-AUC, and expected calibration error (ECE). Brier score is the mean squared error between predicted probability and actual recession indicator. AUC is the area under the receiver operating characteristic curve and measures discrimination without committing to a threshold. ECE measures whether predicted probabilities are well-calibrated, meaning a 30% predicted probability should correspond to a recession about 30% of the time.
All reported confidence intervals use a stationary block bootstrap, which accounts for the serial correlation in economic time series. Hypothesis tests for predictive ability follow Diebold-Mariano for the full sample and Giacomini-White for conditional comparisons. COVID months (February through August 2020) are reported both included and excluded from the evaluation window, since that period is anomalous in ways that can artificially inflate or deflate model scores.
Results
The gap between real-time performance and full-information performance is the central finding.
The DFM achieves an AUC of 0.963 when evaluated on final revised data, the kind you see in the history books. In real-time, using only data that was available at each point in time, that falls to 0.742. That 22-point drop comes entirely from publication lags and data revisions. The model is not worse in any fundamental sense. It simply does not have the data at the moment it needs to make the call.
This gap is precisely what the vintage-vs-final refutation is designed to measure, and it is the most important number in the whole project. A lot of recession models in the literature are implicitly evaluated on the 0.963 standard while being deployed in the 0.742 world.
The term-spread probit performs well in real time, reaching AUC 0.826 with excellent calibration (ECE 0.028). This is not surprising. The spread is widely understood and the 12-month lag means it is genuinely forward-looking. Gradient boosting achieves the best real-time AUC at 0.884. Penalised MIDAS achieves the best Brier score at 0.048. The DFM ranks third on AUC among the four models in the real-time config, which is the honest result and the one we report.
The uncertainty band
A single point probability is misleading. It implies a precision the model does not have.
Two sources of uncertainty combine to produce the band shown in the dashboard. The first is parameter uncertainty: we do not know the true coefficients of the probit model, only estimates of them. A block bootstrap refits the probit on 1,000 resampled versions of the backtest data to build a distribution over plausible coefficients. The second is state uncertainty: the Kalman smoother does not give you one factor path, it gives you a distribution over factor paths, characterised by the smoothed estimate and its standard error. Five hundred Monte Carlo draws jointly perturb both sources. The reported band is the 5th to 95th percentile of the resulting probability distribution.
This means the band is not a confidence interval in the classical frequentist sense. It is better read as a range of plausible current-month probabilities under the model, accounting for both what we do not know about the true parameters and what we cannot observe about the true factor state.
Current reading
As of the June 2026 update, the model assigns approximately 6% probability to the US being in recession right now, with a band of 2.3% to 13.9%. Canada sits at roughly 5%. Both figures use live data from the Federal Reserve’s FRED API and Statistics Canada.
The model updates automatically each Monday at 11:00 UTC. If the FRED API is unavailable, the pipeline falls back to a deterministic synthetic panel and the dashboard displays a banner indicating the data mode.
Data and methods
US recession dates come from NBER. Canadian dates come from the C.D. Howe Institute Business Cycle Council, manually compiled from their published chronologies. The US panel is 23 monthly series covering employment, industrial production, prices, housing, consumer sentiment, credit spreads, and money supply, with FRED-MD stationarity transformations applied to each. Canada uses Statistics Canada tables and Bank of Canada policy rate data. All code and committed data artifacts are in the repository.