Crisis atlas · back to overview
Crisis early warning, honestly evaluated
A regularized logistic regression that scores the probability of a systemic banking-crisis onset within the next 1-3 years, trained on 230 historical onsets across the crisis layer’s two chronologies and the macro run-up features documented on the patterns page. Every feature is dated t−1 or older, every reported metric is out-of-sample under an era-blocked walk-forward, and the benchmarks it fails to beat are printed beside the ones it does. An early-warning score flags vulnerability configurations; it does not predict specific crises, and this page quantifies exactly how often it is wrong.
The honest headline
Pooled across every out-of-sample block (1985–2021, 5,930 country-years, 389 of them within three years of an onset), the logistic model reaches an AUC of 0.624 against an unconditional base rate of 6.6% (a coin-flip scorer has AUC 0.500 and the base rate itself is the no-information benchmark). The gradient-boosting comparison model does worse, at 0.587 pooled, so the interpretable logistic is the headline model and boosting is kept only as a robustness line.
The model does not beat the credit-gap benchmark on the rows where both exist.
On the 1,126 pooled test rows where the credit-to-GDP gap feature is available, ranking countries by the gap alone gives an AUC of 0.679, while the full model on those same rows reaches 0.648. Where the BIS gap exists (mostly larger, financially deep economies), the Basel III guide variable alone is the better ranker; the model's contribution is coverage, since it also scores the majority of country-years and countries for which no credit gap exists at all. The model is published with this result, not tuned until it flips.
Era-blocked walk-forward, block by block
For each block starting at T, the model is trained only on rows whose full 3-year label window closes before T and tested on the next five years; the final block trains on labels through 2015 and tests on 2016–2023. No block’s test outcomes ever touch its training data, and nothing was tuned against the test blocks.
| Block | Train labels | Test years | n | Onset rows | Base rate | AUC logistic | AUC boosting | AUC credit gap* | AUC logistic* |
|---|---|---|---|---|---|---|---|---|---|
| wf1985 | ≤ 1984 | 1985–1989 | 661 | 84 | 12.7% | 0.621 | 0.518 | 0.802 | 0.681 |
| wf1990 | ≤ 1989 | 1990–1994 | 652 | 107 | 16.4% | 0.670 | 0.669 | 0.685 | 0.777 |
| wf1995 | ≤ 1994 | 1995–1999 | 677 | 70 | 10.3% | 0.684 | 0.638 | 0.607 | 0.711 |
| wf2000 | ≤ 1999 | 2000–2004 | 845 | 9 | 1.1% | 0.651 | 0.619 | 0.390 | 0.555 |
| wf2005 | ≤ 2004 | 2005–2009 | 934 | 76 | 8.1% | 0.640 | 0.574 | 0.703 | 0.618 |
| wf2010 | ≤ 2009 | 2010–2014 | 885 | 21 | 2.4% | 0.438 | 0.494 | n/a | n/a |
| wf2015 | ≤ 2014 | 2015–2019 | 934 | 19 | 2.0% | 0.600 | 0.449 | n/a | n/a |
| final | ≤ 2015 | 2016–2023 | 1,080 | 14 | 1.3% | 0.599 | 0.364 | n/a | n/a |
| Pooled OOS | – | 1985–2021 | 5,930 | 389 | 6.6% | 0.624 | 0.587 | 0.679 | 0.648 |
*Starred columns are computed on the subset of test rows where the credit-to-GDP gap feature exists (1,126 pooled rows, 110 of them onset rows): the single-variable gap benchmark and the logistic model restricted to the same rows, a fair head-to-head. n/a means the block’s gap subset contains no onsets, so AUC is undefined there. “Train labels” is the last year a training label window may touch; the training cutoff is three years earlier so no training label uses outcome information from the test era.
The dispersion is the story: discrimination is decent in the crisis-dense 1980s-2000s, and poor where crises nearly vanish. In the 2010–2014 block the model scores 0.438, worse than a coin flip on 21 onset rows. Post-2008 blocks have very few onsets, so their AUCs rest on thin positives and swing accordingly. That is what honest era-blocking looks like; a random shuffle split would hide it.
The false-alarm arithmetic
The published operating threshold flags a country-year when its score lands in the top decile of pooled out-of-sample risk (p ≥ 12.5%). At that threshold, out of sample, precision is 16.9% and recall is 25.7%: of 593 flagged country-years, 100 were within three years of an onset and 493 were false alarms, while 289 onset rows went unflagged. At this threshold, most flags do not precede an onset, and most onset years go unflagged. This tradeoff is the central fact about macro early-warning systems, and it is why the gauge below must be read as a vulnerability screen, not a forecast.
Where the gauge stands today
One row per country, scored by the full-sample logistic on the latest fully realized data (features dated up to 2024, always t−1 or older relative to the prediction year; no forecasts, no nowcasts). Of 196 scored countries, the 20 in the top decile are shown; 6 exceed the published historical threshold.
An early-warning score flags vulnerability configurations, not crises.
At the published threshold the model’s own backtest says 16.9% of flags precede an onset and 74.3% of onsets go unflagged. A country in this table has macro-financial features that resembled past pre-crisis years; that is all the number means. No country here is predicted to have a crisis, and countries marked with a recent onset are inside the post-crisis window the model never trained on, so their scores are out of the training distribution.
| Country | p (3y onset) | Largest signed contributions vs training average | Data through | Gap source |
|---|---|---|---|---|
| Zimbabwe ZWE | 38.6% | CPI inflation (%) = 736.1 +2.58Credit-to-GDP gap (pp) [missing] -0.39Real credit growth, 3y (%) [missing] -0.27 | 2024 | none |
| Sudan SDN | 38.3% | CPI inflation (%) = 185.7 +2.12Real GDP growth (%) = -14.0 +0.49Credit-to-GDP gap (pp) [missing] -0.39 | 2024 | none |
| Argentina ARG | 23.3% | CPI inflation (%) = 120.9 +1.33Real credit growth, 3y (%) = -2.5 -0.39Real GDP growth (%) = -3.8 +0.20 | 2024 | BIS |
| South Sudan SSD | 22.4% | CPI inflation (%) = 91.4 +0.98Real GDP growth (%) = -26.1 +0.49Credit-to-GDP gap (pp) [missing] -0.39 | 2024 | none |
| Palestine PSE | 16.6% | CPI inflation (%) = 53.7 +0.52Real GDP growth (%) = -26.6 +0.49Credit-to-GDP gap (pp) [missing] -0.39 | 2024 | none |
| Lebanon LBN | 15.6% | CPI inflation (%) = 45.2 +0.42Credit-to-GDP gap (pp) [missing] -0.39Current account / GDP (%) = -19.7 +0.32 | 2024 | none |
| Timor-Leste TLS | 10.4% | Current account / GDP (%) = -31.5 +0.54Credit-to-GDP gap (pp) [missing] -0.39Real GDP growth (%) = -9.1 +0.35 | 2024 | none |
| Saudi Arabia SAU | 10.1% | CPI inflation (%) = 1.5 -0.11Credit-to-GDP gap (pp) = 3.7 +0.07Real credit growth, 3y (%) = 26.7 +0.06 | 2024 | BIS |
| Yemen YEM | 9.8% | Credit-to-GDP gap (pp) [missing] -0.39CPI inflation (%) = 33.9 +0.28Current account / GDP (%) = -17.1 +0.27 | 2024 | none |
| Brazil BRA | 8.9% | Credit-to-GDP gap (pp) = 4.2 +0.09Real house-price growth, 3y (%) = -5.1 -0.09CPI inflation (%) = 4.5 -0.07 | 2024 | BIS |
| Dominica DMA | 8.6% | Current account / GDP (%) = -37.8 +0.59Credit-to-GDP gap (pp) [missing] -0.39Real credit growth, 3y (%) [missing] -0.27 | 2024 | none |
| Malawi MWI | 8.5% | Credit-to-GDP gap (pp) [missing] -0.39Current account / GDP (%) = -18.8 +0.30Real credit growth, 3y (%) [missing] -0.27 | 2024 | none |
| Venezuela VEN | 7.8% | CPI inflation (%) = 49.0 +0.46Credit-to-GDP gap (pp) [missing] -0.39Real credit growth, 3y (%) [missing] -0.27 | 2024 | none |
| Japan JPN | 7.7% | Real credit growth, 3y (%) = -0.5 -0.36Credit-to-GDP gap (pp) = 7.9 +0.19Current account / GDP (%) = 4.5 -0.13 | 2024 | BIS |
| Sierra Leone SLE | 7.6% | Credit-to-GDP gap (pp) [missing] -0.39Real credit growth, 3y (%) [missing] -0.27CPI inflation (%) = 28.6 +0.22 | 2024 | none |
| Haiti HTI | 7.5% | Credit-to-GDP gap (pp) [missing] -0.39Real credit growth, 3y (%) [missing] -0.27Real GDP growth (%) = -4.2 +0.21 | 2024 | none |
| Burundi BDI | 7.2% | Credit-to-GDP gap (pp) [missing] -0.39Real credit growth, 3y (%) [missing] -0.27Current account / GDP (%) = -15.4 +0.24 | 2024 | none |
| Israel ISR | 7.0% | Real credit growth, 3y (%) = 9.6 -0.20Current account / GDP (%) = 3.5 -0.12CPI inflation (%) = 3.1 -0.09 | 2024 | BIS |
| Egypt EGY | 6.7% | Credit-to-GDP gap (pp) [missing] -0.39Real credit growth, 3y (%) [missing] -0.27CPI inflation (%) = 28.3 +0.21 | 2024 | none |
| Myanmar MMR | 6.7% | Credit-to-GDP gap (pp) [missing] -0.39Real credit growth, 3y (%) [missing] -0.27CPI inflation (%) = 26.5 +0.19 | 2024 | none |
Source: Jordà-Schularick-Taylor Macrohistory R6 | Laeven-Valencia 2026 (IMF WP/26/94) | BIS credit-to-GDP gap and total credit (Data Portal) | Global Macro Database (release 2026_06) Methodology
What drives the score
Full-sample logistic coefficients on standardized inputs (9,451 training rows, 611 positives). Positive coefficients raise crisis odds: the credit boom (real credit growth, the credit gap), the house-price boom, external deficits (the negative sign on the current account), weak growth, and high inflation all point the direction the run-up literature says they should. Missing-flag coefficients show how the model shifts when a feature is absent rather than pretending an imputed value is real.
| Feature (measured at t−1 or older) | Coefficient (std) | Winsor 1%/99% | Impute median | Missing-flag coef |
|---|---|---|---|---|
| Credit-to-GDP gap (pp) | +0.266 | -32.0 / 29.7 | 1.17 | -0.386 |
| Real credit growth, 3y (%) | +0.345 | -20.3 / 104.7 | 19.59 | -0.265 |
| Current account / GDP (%) | -0.178 | -34.5 / 33.4 | -2.23 | -0.886 |
| Real house-price growth, 3y (%) | +0.128 | -40.3 / 91.1 | 6.28 | +0.001 |
| Public debt/GDP change, 3y (pp) | -0.051 | -65.0 / 60.2 | 0.64 | -0.370 |
| Real GDP growth (%) | -0.144 | -13.9 / 19.3 | 3.40 | -0.004 |
| CPI inflation (%) | +0.334 | -9.7 / 223.8 | 4.27 | -0.008 |
| Intercept | -2.212 |
Every statistic needed to recompute any score by hand (winsor bounds, imputation medians, means, standard deviations, intercept) is stored in the same artifact, and the build’s verification pass recomputes the top gauge scores independently from these numbers before publishing.
Methodology
Target and onset definition
A row is a country-year (i, t). The label is 1 when a systemic banking-crisis onset falls in {t, t+1, t+2}, i.e. within 1-3 years after the last observed data year t−1. The onset definition is the crisis layer’s, quoted from the methodology: “the first year of a systemic banking-crisis episode for a country”, where distinct crisis start years are “merged when separated by no more than two tranquil years, i.e. a year y extends the current episode when y − episode.end ≤ 3; otherwise it opens a new episode. The onset is the episode start year.” One chronology per country, never mixed: crisisJST (JST Macrohistory R6) for the 18 JST advanced economies (86 merged onsets), the Laeven-Valencia 2026 banking vintage for every other country (144 merged onsets), the same split the patterns page uses. Unlike the event study, the label set keeps all merged episode starts; the event study’s extra 5-year de-overlap rule (84 + 142 kept onsets there) is replaced here by the post-crisis exclusion below, which removes the ambiguous rows instead of mislabeling them as tranquil.
Features: every lag and transformation
- Credit-to-GDP gap (pp). The BIS published Q4 gap (actual minus one-sided HP trend, private non-financial sector) at t−1 where BIS reports it; otherwise, for the 18 JST countries, a one-sided HP filter gap computed on annual JST credit-to-GDP (100·tloans/gdp) with smoothing λ = 1,562.5 (the Ravn-Uhlig annual equivalent of the BIS quarterly 400,000) and a 10-year burn-in. The artifact records which source each country-year used. The Global Macro Database carries no credit series at all (verified during the patterns build), so for non-JST countries without BIS coverage this feature is missing and stays missing.
- Real credit growth, 3y (%). JST tloans deflated by JST CPI, 3-year growth to t−1; where JST is unavailable, BIS Q4 nominal credit to the private non-financial sector (domestic currency, adjusted for breaks) deflated by the GMD CPI index. Source recorded per country-year.
- Current account / GDP (%). JST 100·ca/gdp at t−1, else GMD CA_GDP.
- Real house-price growth, 3y (%). JST hpnom/cpi 3-year growth to t−1, else GMD rHPI.
- Public debt/GDP change, 3y (pp). JST debtgdp (scaled to percent), else GMD govdebt_GDP; change from t−4 to t−1.
- Real GDP growth (%). One-year growth at t−1; JST rgdpmad, else GMD rGDP.
- CPI inflation (%). One-year rate at t−1; JST CPI growth, else GMD infl.
All growth and change windows are guarded on contiguous calendar years, so a gap in a source series yields a missing value, never a spurious multi-year “annual” change. Missing features are never fabricated: the logistic model winsorizes at the training 1st/99th percentiles, imputes the training median, standardizes with training moments, and carries one 0/1 missing-indicator column per feature so that missingness is itself a signal with an estimated coefficient. The gradient-boosting comparison consumes missing values natively. All preprocessing statistics come from the training rows of each block only.
Sample rules
- GMD observations are cut at 2024 because GMD merges IMF-consistent forecasts into the same columns beyond that; no model input is ever a forecast.
- Labels require a fully observable 3-year window inside the chronology: t+2 ≤ 2020 for JST countries, t+2 ≤ 2023 for the rest; right-censored years are dropped from estimation rather than labeled tranquil. Non-JST rows start at t ≥ 1970, the Laeven-Valencia window.
- War years (1914-1919, 1939-1946) are excluded, the JST-literature convention.
- Post-crisis exclusion: rows with an onset in the previous five years are dropped, so post-crisis collapse years are not learned as tranquil (the post-crisis bias of Bussière and Fratzscher 2006).
- A row needs at least 3 of the 7 features.
Models and evaluation
Headline: L2-regularized logistic regression (C = 1, fixed seed), published because its coefficients are inspectable above. Comparison: histogram gradient boosting (depth 3, 300 iterations, fixed seed). Both are fit unweighted so predicted probabilities are consistent with the sample base rate rather than inflated by class rebalancing. Evaluation is the era-blocked walk-forward described above; the pooled figure combines the seven walk-forward blocks with the final block’s post-2019 rows so no country-year is pooled twice. Deciles and the operating threshold come from the pooled out-of-sample distribution.
What the model has never seen
The chronologies end in 2020 (JST) and 2023 (Laeven-Valencia), so the model has never been shown a crisis after 2023 and cannot have learned anything from events since then. The current gauge is computed only from realized data (vintage: jst-r6(2020);lv-2026-wp2694(2023);bis-gap(2025-Q4);gmd-2026_06(cut2024), model ews-1.0), and its scores are conditional probabilities under a model of the past, not statements about current events.
Onsets: Jordà, Schularick and Taylor (2017), Macrohistory Database Release 6 (macrohistory.net, consulted 2026-07-09), free for non-commercial use with citation; Laeven and Valencia (2026), “Systemic Banking Crises Database: 1970-2025”, IMF Working Paper WP/26/94. Features: JST (same license); Bank for International Settlements Data Portal (credit-to-GDP gap, total credit to the private non-financial sector), “Source: BIS”; Global Macro Database (Müller, Xu, Lehbib and Chen 2025, NBER WP 33714, release 2026_06, globalmacrodata.com, consulted 2026-07-09), free for academic and non-profit research only. This page inherits the crisis layer’s posture: non-commercial research use only. Construction details for the underlying chronologies are in the crisis methodology.