Systemic risk / Methodology
FinWeave systemic-risk series: methodology
Original series computed 2026-07-10 by scripts/build_systemic.py.
CoVaR and Delta-CoVaR were recomputed and independently validated on
2026-09-05; other measures and the source returns were unchanged.
Input: data/parquet/equity_returns.parquet (daily bank equity log returns,
Yahoo Finance via argus's collector, 2020-01-03 to 2026-07-06; provenance in
docs/data_provenance.md).
Output: data/parquet/systemic_series.parquet (165,381 rows, long format).
Engine: the systemic layer absorbed from argus,
engine/finweave_engine/layers/systemic/{covar,mes,absorption,srisk}.py,
with the corrected same-tail Delta-CoVaR baseline and certified numerical
fallback used for the 2026-09-05 replacement.
Published Cleveland Fed Systemic Risk Indicator
The Cleveland Fed SRI is a separate, publisher-computed series. It follows the Merton distance-to-default method in Saldias (2013), applied to US banks and financial intermediaries. This repository ingests the published values and does not recompute them.
- ADD captures average insolvency risk for a sample of approximately 100 representative banking institutions. Falling ADD means the market's perception of average insolvency risk is rising.
- PDD captures insolvency risk for a weighted portfolio of those institutions. Falling PDD likewise indicates rising average insolvency risk.
- Sign convention: the published indicator is
sri = pdd - add, within a maximum absolute deviation of 0.0001 from four-decimal rounding across the full series. It is notadd - pdd. - Stress direction: systemic stress is associated with the spread narrowing toward zero. The publisher says a spread below 0.1 for more than two days indicates major financial stress. A wider spread does not carry that signal.
The published SRI spans 2008-03-24 through 2025-10-01 and ranges from -0.4544 to 2.5111. It is decommissioned: October 1, 2025 is the terminal observation, and the publisher says no further updates are planned.
This SRI is Merton-based. The site's existing MES and LRMES measures below are returns-based. These are complementary constructions, and neither substitutes for the other.
What this is (and what it is NOT)
This is a market-based systemic-risk series for the large US banking sector: four academic measures of how much each listed bank co-moves with, and contributes to, system-wide tail risk, plus one system-level measure of how unified bank co-movement is. The published series themselves are computed from equity returns only. Separate consolidated holding-company book debt and shares-outstanding inputs now exist on disk, but do not enter these returns-based outputs.
It is NOT a complete SRISK dollar-capital-shortfall estimate. SRISK (Brownlees-Engle 2017) converts a market-based loss expectation into a dollar capital shortfall using each bank's market capitalization and book debt (total liabilities). Consolidated holding-company book debt exists in the FR Y-9C estate, and shares outstanding exist in the SEC EDGAR FSDS archive. Price levels do not exist: the equity-returns source stores log returns and volume only, so market capitalization cannot be reconstructed. This build therefore produces LRMES, the returns-based systemic-vulnerability core of SRISK, and stops there. No dollar output is published pending the owner's price-source and licence decision. Do not present LRMES as SRISK.
It is not investment advice. These are historical statistical measures of co-movement, not forecasts of failure.
Design principles
- Engine outputs require definition-level validation. Values come from the absorbed engine's functions. Where a rolling driver exists it is used; otherwise the atomic function is called with matching window slices. The Delta-CoVaR baseline correction shows why matching a second implementation's arithmetic is insufficient when both implement the same incorrect definition.
- Match argus where argus decides; use the engine default otherwise. argus
itself computes only absorption and MES, and only at a 63-day window in its
SVB case study (
app/main.py). For a full historical series the primary window is 252 trading days (1 year), which is the coded default of every rolling function in the engine (compute_covar_rolling,compute_mes_rolling,compute_absorption_ratio_rolling) and the academic standard. The absorption ratio is additionally published at argus's 63-day window because the shorter window is what resolves the March 2020 co-movement spike (a 252-day trailing window cannot end before 2021). - Real inputs only; refuse the wrong substitute. Consolidated holding-company book debt and shares exist, but price levels do not. LRMES is shipped; SRISK dollars wait for the owner's price-source and licence decision.
- Honest anchors. Each measure is checked against known crisis episodes and the result is reported as found, including where a naive anchor does not hold and why (see Validation).
Universe
- System index:
KBE, the SPDR S&P Regional Banking ETF, used by argus as itsSYSTEM_INDEX(app/collectors/yahoo.py). It is the market/system proxy in every measure, never treated as a bank. - Banks: 28. The 27 current bank-holding-company tickers from argus's
BHC_TICKERScollector list (JPM, BAC, C, WFC, GS, MS, BK, STT, USB, PNC, TFC, COF, SCHW, AXP, FITB, MTB, HBAN, RF, CFG, KEY, ZION, WAL, FHN, EWBC, FCNCA, ALLY, NTRS) plus CMA (Comerica, a distinct regional bank present in the data). - BNY is excluded (not counted among the 28). BNY and BK are the same entity, Bank of New York Mellon: the ticker changed from BK to BNY. Including both would double-count it. BK is kept because it is the fresher series (to 2026-07-02 vs BNY's 2026-02-09).
- CMA is kept for its own per-bank measures (its CoVaR / MES / LRMES series end naturally at its last observation, 2026-01-30) but excluded from the system absorption panel. The absorption ratio uses listwise deletion, so one stale ticker would force every post-January-2026 date onto a stale correlation subset; the absorption panel therefore keeps only the 27 tickers fresh to within 10 trading days of the panel end.
Shareable table context
The /systemic table stores its selected comparison measure in
systemic_sort and its one expanded holding-company row in systemic_bank.
LRMES sorting and no expanded row are the canonical defaults, so those default
values are omitted from shared links. A bank value is accepted only when its
case-normalized ticker is present in the current server-supplied table; unknown,
duplicate, or no-longer-listed values do not open a row. These tickers identify
listed holding companies, not FDIC-insured-bank legal entities.
The restored sort is descriptive: it is not a failure-probability ranking, a regulatory judgment, or an investment recommendation. Larger LRMES and LRMES share values sort first, while more-negative MES and Delta-CoVaR values sort first. A missing MES or CoVaR observation remains absent rather than being interpreted as zero, and restoring a link does not change a row's stale flag.
The measures
Long-format output columns: measure, entity, date, value,
window_days, method. entity is the ticker for bank-level measures and
SYSTEM for system-level measures. window_days = 0 on lrmes marks the
full-sample GARCH filter (see below).
Delta-CoVaR and CoVaR (per bank)
Adrian, Tobias, and Markus K. Brunnermeier. 2016. "CoVaR." American Economic Review 106(7): 1705-1741.
Corrected generation, validated 2026-09-05. The archived Delta-CoVaR values used a separate median system regression as the baseline. The replacement evaluates both bank states in the same system tail regression, as specified in equation (10) of the authors' NY Fed Staff Report 348 (September 2014 revision). The page and analyst reject an archived or mixed generation without the corrected method marker.
For this implementation, CoVaR is the fitted system q-quantile return when the bank return equals its own q-quantile. Its median-state baseline uses that same fit with the bank return set to its median:
Delta-CoVaR_q = beta_q * (bank_VaR_q - bank_median).
This is a rolling bivariate equity-return implementation, without the paper's conditioning state variables or forward projections. It measures statistical tail dependence, not a causal effect of bank distress. The CoVaR level uses the tail regression alone. Its formula is unchanged, but the tighter solver precision can change previously stored numerical levels.
- Estimation: rolling,
window_days = 252, tail quantileq = 0.05. - Iterative quantile regression uses
p_tol = 1e-8and a 10,000-iteration cap. A convergence warning invokes the same check-loss problem as a linear program with unrestricted regression coefficients and nonnegative residual slacks. The HiGHS solution must pass finite-value, primal-feasibility and dual-certificate checks; a failed certificate stops generation. This is a numerical solver change, not a new economic estimator. method = rolling_quantile_reg_same_tail_v2. Both the CoVaR level and Delta-CoVaR are stored; the level uses the engine'scompute_covar()inside a loop whose window slicing is identical tocompute_covar_rolling().- Series span: 2021-01-04 to 2026-07-06 (a 252-day trailing window cannot end before the first year of data closes).
Marginal Expected Shortfall, MES (per bank)
Acharya, Viral V., Lasse H. Pedersen, Thomas Philippon, and Matthew Richardson. 2017. "Measuring Systemic Risk." Review of Financial Studies 30(1): 2-47.
MES is the average return of a bank on the days when the system return is in its own left tail (below its q-quantile). A more negative MES means the bank loses more precisely when the system is under stress.
- Estimation: rolling,
window_days = 252,q = 0.05, enginecompute_mes_rolling().method = rolling_tail_mean. - Series span: 2021-01-04 to 2026-07-06.
LRMES, the SRISK core (per bank)
Brownlees, Christian, and Robert F. Engle. 2017. "SRISK: A Conditional Capital Shortfall Measure of Systemic Risk." Review of Financial Studies 30(1): 48-79. Conditional-correlation step: Engle, Robert. 2002. "Dynamic Conditional Correlation." Journal of Business & Economic Statistics 20(3): 339-350.
Long-Run MES is the expected fractional decline in a bank's equity given a
systemic event, defined as a fixed multi-period market decline (the engine
uses C = -0.40). The engine estimates it from a GARCH(1,1) fit on the bank and
on the system returns (conditional volatilities) and a DCC(1,1) fit on their
standardized residuals (time-varying conditional correlation), then
LRMES = 1 - exp(log(1 + C) * beta) with beta = rho_t * sigma_bank_t / sigma_system_t.
- Estimation: one GARCH(1,1) + DCC(1,1) fit per bank over its full aligned
history produces conditional volatility and correlation at every date;
LRMES is evaluated at each date's filtered
(rho_t, sigma_bank_t, sigma_system_t). This is in-sample GARCH filtering (parameters estimated on the full sample, conditional paths are the filtered values).window_days = 0marks this (not a trailing window).method = garch_dcc_filter. - DCC parameters
(alpha, beta)are MLE-estimated per pair (Engle 2002 two-step SLSQP), not hardcoded; the engine falls back to(0.05, 0.90)only if the optimizer fails. - Series span: 2020-01-03 to 2026-07-06 (LRMES needs no trailing window, so it starts at the first date).
Engine input and diagnostic contract, repaired after the output vintage.
Earlier compute_srisk_all() outputs could select the simple-beta fallback when
NumPy-array input reached a Series-only .values access in _fit_garch(). The
current engine revision fixes that input-type failure by normalizing NumPy arrays
and pandas Series with np.asarray() and returning array-valued residual and
conditional-volatility paths. test_fit_garch_accepts_numpy_and_series_alike
covers both input types, while
test_compute_srisk_all_actually_runs_dcc_garch proves that clean data reaches
the GARCH/DCC branch.
Current compute_srisk_all() results include a method diagnostic:
method = dcc_garch means GARCH completed and DCC MLE converged;
method = dcc_garch_default_params means GARCH fitted but DCC used its declared
numerical defaults after non-convergence; and method = simple_beta identifies
the unconditional-correlation fallback after a numerical failure. A fallback is
a valid reported outcome, but it is not labeled as a fully fitted DCC/GARCH
estimate.
The 2026-07-10 builder called _fit_garch directly with aligned pandas Series,
so its recorded method = garch_dcc_filter path did not encounter the historical
NumPy-input failure. That legacy output method records the estimator family, not
the newer compute_srisk_all() convergence diagnostic. The 2026-09-05 rebuild
kept those direct helper calls and replaced systemic_series.parquet with the
corrected same-tail Delta-CoVaR baseline (see the build log entry in
docs/CODEBASE_LEDGER.md); no other historical vintage was rebuilt.
SRISK dollar level (per bank): NOT PRODUCED
SRISK = max(0, k * book_debt - (1 - k) * (1 - LRMES) * market_cap) with
prudential ratio k = 0.08, the U.S. default in
NYU V-Lab equation (1)
(verified 2026-09-05). The engine floors the resulting shortfall at zero.
Required capital applies to debt plus surviving equity after the crisis loss,
not debt plus pre-crisis equity. This is deliberately not in the output.
Consolidated holding-company book_debt is available from the FR Y-9C estate,
and shares outstanding are available in
data/parquet/entity_shares_outstanding.parquet, built from the SEC EDGAR
companyfacts bulk, but the price levels needed to construct market_cap do not
exist in the repo. Choosing
a price source and accepting its licence posture is a deliberate owner decision
reserved in the ledger. LRMES above is the returns-based core; converting it to
a dollar shortfall remains the open step.
Absorption ratio and AR shift (system level)
Kritzman, Mark, Yuanzhen Li, Sebastien Page, and Roberto Rigobon. 2011. "Principal Components as a Measure of Systemic Risk." Journal of Portfolio Management 37(4): 112-126.
The absorption ratio is the fraction of the banking cross-section's total return variance captured by its top eigenvalues (here the top 20% of eigenvalues, via PCA on the return correlation matrix). A high ratio means bank returns are tightly unified (few factors explain most variance), which Kritzman et al. associate with a fragile, tightly-coupled system; a low ratio means dispersed, independent movement.
- Estimation: rolling PCA on the fresh 27-bank panel (KBE excluded, matching
argus's
bank_tickers),frac = 0.20. Published at two windows:window_days = 252(primary) andwindow_days = 63(argus's SVB case-study window, which resolves the 2020 spike).method = rolling_pca. - AR shift = 21-day moving average of the 252-day absorption ratio minus its
252-day moving average (
method = ma_shift,window_days = 252). Kritzman et al. propose a positive shift (short-run coupling tightening above its long-run level) as a turbulence lead indicator. - Spans: absorption 63d 2020-04-03 to 2026-07-06; absorption 252d and AR shift from 2021-01-04 / 2021-12-31 to 2026-07-06.
Parameter summary
| Setting | Value | Source |
|---|---|---|
| System index | KBE | argus SYSTEM_INDEX |
| Tail quantile q (CoVaR, MES) | 0.05 | argus + engine default |
| Absorption eigenvalue fraction | 0.20 | argus + engine default |
| Primary rolling window | 252 trading days | engine rolling-fn default |
| Absorption second window | 63 trading days | argus SVB case study |
| AR-shift short / long MA | 21 / 252 | engine compute_ar_shift default |
| LRMES systemic-event threshold C | -0.40 | engine compute_lrmes default |
| GARCH | (1,1), constant mean | engine _fit_garch |
| DCC | (1,1), Engle two-step MLE | engine _fit_dcc_params |
Limitations (read before using)
- Listed banks only. The universe is 28 publicly-traded large US bank holding companies plus a bank-sector ETF. Private banks, credit unions, the thousands of small FDIC banks, and non-bank financials are absent. These are market-based measures; they exist only for entities with a traded equity.
- SRISK dollar levels are not produced. Consolidated holding-company book debt and shares outstanding exist, but the price levels needed for market capitalization do not (see above). LRMES is the returns-based core; the dollar shortfall, and therefore the classic March-2020 SRISK spike driven by the market-cap/leverage channel, remains out of reach pending the owner's price-source and licence decision. This is why the "SRISK spikes in March 2020" anchor is reported as not-applicable rather than passed.
- Book-value liabilities vintage (applies once SRISK is built). When SRISK is eventually computed, book debt is a point-in-time filing (quarterly FR Y-9C / 10-Q) that lags the daily equity series; the standard SRISK convention holds the most recent reported liabilities fixed between filings, so the dollar level inherits a reporting-lag vintage. Noted now so it is not a surprise later.
- Yahoo input caveat. The equity returns originate from Yahoo Finance via an unofficial API wrapper (argus's collector), not an exchange feed or a licensed vendor. Yahoo's Terms of Service restrict redistribution to personal/non-commercial use, so this series is an internal engine output, not a redistributable raw dataset (unlike the FDIC/FRED spine). Yahoo adjusted returns can carry dividend/split-adjustment and thin-day artifacts; two tickers (BNY, CMA) also stopped updating in early 2026.
- In-sample GARCH filtering. LRMES uses full-sample GARCH/DCC parameters, so a given historical date's conditional volatility reflects parameters estimated with later data. This is the standard filtering convention (e.g. NYU V-Lab re-estimates periodically); it is appropriate for a descriptive historical series but is not a real-time, point-in-time forecast.
- No network/contagion layer. The Eisenberg-Noe interbank network measure
is not included (argus's
network_metricswas never populated with real data; this build adds no substitute).
Validation
Printed evidence: scripts/validate_systemic.py. Three parts.
1. Reference comparison: not possible, and why
The task specified comparing the computed series against
argus_systemic_reference.parquet. That reference does not exist. Argus's
systemic_indicators table has 0 rows and network_metrics has 0 rows
(confirmed read-only against argus.db, and consistent with
data/raw/argus_export/SOURCE.md): argus has never run these computations
against real data and stored the result. There is nothing to compute a
correlation or maximum deviation against. Validation therefore rests on crisis
anchors and independent recomputation below, not on an argus reference.
2. Crisis sanity anchors
- MES at the SVB week (strong pass). Ranking the 28 banks by their 252-day MES as of 2023-03-17, the most systemically-exposed name is WAL (Western Alliance, MES -0.1102), the regional bank that came closest to failing in the March 2023 run, by a wide margin over the next names. Five of argus's seven SVB-affected regionals (WAL, EWBC, KEY, CMA, ZION) are in the eight most-negative MES banks. MES correctly localizes the episode to the SVB-vulnerable regionals.
- Absorption spikes in the 2020 COVID co-movement crash (pass). The 63-day absorption ratio over March-May 2020 averages 0.9550, the 95th percentile of its full-sample distribution, versus 0.9198 in calm mid-2021. The broad-market crash unified bank co-movement, exactly what the absorption ratio is built to detect.
- The full-sample maximum is NOT 2020. The 63-day absorption ratio peaks at 0.9696 on 2025-06-20, above the 2020 peak of 0.9580: the April-July 2025 co-movement spike (coinciding with the April 2025 tariff-driven market selloff) unified bank returns even more tightly than COVID did. The narrative above discusses 2020 and 2023 because they are the classic anchor episodes; the 2025 window is a larger co-movement event by this measure and is visible in the dashboard chart.
- Absorption jumps inside the SVB window, but the level stays below the full-sample median (corrected 2026-08-16; the earlier text claimed no rise and the series refutes it). The 63-day absorption goes from 0.7941 on 2023-03-09 to 0.8842 on 2023-03-23, a 10-trading-day gain of 0.0901, which is the largest of the 1,560 ten-day windows in the series. Read as a level the same episode is unremarkable: March-April 2023 averages 0.8571 against a full-sample median of 0.8883 (18th percentile), and the 252-day absorption falls across the rate cycle (2021-H2 0.8911, 2022-H2 0.8723, 2023-Q1 0.8595). Level and change disagree here, and both are published.
- LRMES is a conditional-beta measure and is near-flat by design (reported honestly). System-mean LRMES sits in a narrow 0.37-0.45 band across all regimes (COVID monthly mean 0.394, calm 2021 0.380, recent 0.366). This is correct: LRMES is the expected equity loss given a fixed -40% systemic shock, so it tracks each bank's systematic exposure, not the current level of market stress. Its cross-section is economically right (WAL is consistently the most vulnerable: LRMES 0.576 at the 2020-03-23 COVID trough versus JPM 0.355, GS 0.389), and it does rise modestly in stress, but it does not and should not spike the way a dollar SRISK level would. The dramatic SRISK spike lives in the market-cap/leverage channel that is the documented missing input.
3. Historical recomputation and the Delta-CoVaR correction
The historical validation recomputed the following stored values from the raw
returns without calling the engine (scripts/validate_systemic.py Part 3):
| Measure | Point | Stored | Independent | Diff |
|---|---|---|---|---|
| Absorption 63d | 2023-03-17 | 0.877166 | 0.877166 | 0.00e+00 |
| MES 252d, JPM | 2026-07-06 | -0.014760 | -0.014760 | 0.00e+00 |
The former Delta-CoVaR check repeated the engine's incorrect median-regression baseline. Agreement between them did not validate the definition. That check is withdrawn. The corrected generation replaces 77,122 CoVaR/Delta-CoVaR rows across 28 banks while preserving all 165,381 row keys, schema, and other measures. The 54 windows requiring the linear-programming fallback were independently recomputed using HiGHS interior-point and checked against dual certificates. Together with the first and latest window for every bank, 110 windows passed independent reproduction. No sampled window failed the prespecified tolerances: absolute CoVaR/Delta difference from an independent linear-programming solution below 0.00001 in log-return units, and quantile-loss excess below 0.000001. These numerical checks do not establish predictive skill or causal validity.
Reproduction uses scripts/build_systemic.py --covar-only --output NEW_STAGE.
The output is staged and must pass independent validation before replacement;
the command refuses to overwrite the source or an existing staging file.
Verdict
The historical absorption and MES checks remain separate from the Delta-CoVaR error. The corrected Delta-CoVaR generation passed the checks above and replaced the archived values locally on 2026-09-05. Where an anchor does not hold (the LRMES/SRISK March-2020 spike), the reason is understood and documented rather than papered over. SRISK dollar levels remain an honest, ledger-tracked open gap pending the owner's price-source and licence decision.
Long-run academic benchmarks (added 2026-07-10)
Three independent academic datasets, wired 2026-07-10 from the data-expansion
sweep (docs/data_expansion_2026_07.md, wiring-queue items 3 and 7/10), shown
as context, not systemic-risk measures. None feed the LRMES, MES, CoVaR,
or absorption-ratio computations above; they are separate series composed on
the page purely for scale and historical framing. Full provenance for each:
docs/data_provenance.md.
Market-wide volatility regime (Ken French Data Library)
Rolling 12-month annualized volatility of the Fama-French US market excess
return (Mkt-RF, french_ff3_monthly.parquet, monthly, 1926-07 to the
current vintage month): stddev_samp(Mkt-RF) over a trailing 12-observation
window, annualized by x sqrt(12). This is the whole US equity market back to
1926, a much longer and broader backdrop than the absorption ratio above
(28 banks, 2020-2026 only). Computed anchors (2026-07-10): all-time peak
~71% (1933, the Depression); GFC peak ~31% (2009); COVID-year peak ~28%
(Dec 2020, a trailing-12-month window that still contains the March 2020
crash); the single calendar month of October 1987 (Black Monday) returned
Mkt-RF = -23.19% on its own (shown as a separate one-month anchor, not part
of the rolling series). License: free for academic research and teaching use
with citation (Fama and French; not public domain).
Banking-industry cost of capital and beta (Damodaran Online)
A cross-sectional snapshot (not a time series), Damodaran's US industry
averages, January 2026 vintage: money-center banks, regional banks, and the
Total Market baseline, each with levered beta, unlevered beta, cost of equity,
and WACC (damodaran_cost_of_capital.parquet joined to
damodaran_betas.parquet on (industry_name, region)). A textbook CAPM/WACC
yardstick placed next to the market-implied LRMES/MES/CoVaR measures above;
the two are not the same thing (one is a forward-looking valuation input, the
other a realized-return-based tail-risk statistic), and the page does not
conflate them. License: free, acknowledgement welcomed but not required.
Eight centuries of global real interest rates (Schmelzing, BoE SWP 845)
Schmelzing's 7-year-averaged global real interest rate,
schmelzing_headline.parquet, 1310-2018 (702 non-null years; the paper's own
window, not extended to today). Shown as the deep-history backdrop for the
low- and negative-real-rate environment of the 2010s that shaped bank
risk-taking and reach-for-yield behavior generally (the page does not claim a
specific causal link to any named bank episode). All-time high and low and the
2018 endpoint are computed at render time from the parquet, not hardcoded.
License: Bank of England copyright; non-commercial re-use permitted (kept
under that allowance for this free, non-commercial research repository).
G-SIB designations (FSB, added 2026-07-11)
The official supervisory counterpart to the market-based measures above: the
Financial Stability Board's annual list of global systemically important banks
(G-SIBs) and their capital-surcharge buckets, gsib_history.parquet (442 rows,
2011-2025, 37 distinct banks). Shown on /systemic as (1) the latest year's
list grouped by bucket with home jurisdiction, and (2) a per-bank bucket-history
heat matrix 2011-2025. This is official designation data, not a FinWeave
computation; it does not feed LRMES, MES, CoVaR, or the absorption ratio.
- Source and method. FSB annual G-SIB PDFs (fsb.org), transcribed verbatim
from each year's Annex bucket table; every
(year, bank, bucket)triple read directly off the primary PDF, with each year's row count hard-asserted against the FSB's own stated list size. Full retrieval, the 15 PDF URLs, the verbatim transcription note, the cosmetic name-normalization table, and the two task-specified spot-checks (JPMorgan in the top bucket; Credit Suisse exits after 2022) are indata/raw/gsib/SOURCE.md. - Buckets. FSB buckets 1-5, higher = larger capital surcharge; bucket 5 has
never been populated in any year. 2011 predates the bucket system (the
4 Nov 2011 methodology paper listed 29 G-SIFIs alphabetically with no bucket),
so the 2011 column carries a null bucket for every bank and the matrix renders
it as designation-only (a
.marker), not a zero. - Honest absence. A blank matrix cell means the bank was not on that year's list (rendered blank, never zero). The matrix tracks presence separately from bucket so a 2011 listed-but-null cell is distinguished from an absent year.
- Jurisdiction. ISO3 of the bank's headquarters/home-regulator domicile, assigned here from uncontested public facts (the FSB lists do not print a country); the assignment table and the Nordea/HSBC edge cases are in the SOURCE.md.
- No forced links to /banks. A G-SIB is a consolidated holding company;
the
/banks/[cert]scorecards key on FDIC insured-subsidiary CERTs, a different legal entity that does not map one-to-one onto a holding company. To avoid asserting an identity that does not hold, G-SIB bank names are rendered as plain text, not links (the page links only the section-level pointer to the/banksexplorer). This mirrors the same holding-company-vs-subsidiary caveat already stated for the equity-ticker universe on this page. - License. FSB publications are freely available; cite "FSB, [Year] List of
Global Systemically Important Banks (G-SIBs)". Every value is recomputable from
data/parquet/gsib_history.parquetbysrc/lib/gsib.ts.