Financial conditions / Methodology
FinWeave /conditions layer: methodology
Version 1.0, computed 2026-07-10 by scripts/build_conditions.py, validated by
scripts/validate_conditions.py.
Inputs (open spine only): data/parquet/fred_conditions.parquet (FRED),
data/parquet/bis_credit_gap.parquet and data/parquet/bis_total_credit.parquet
(BIS). Provenance: docs/data_provenance.md.
Output: data/parquet/conditions_series.parquet (41,980 rows, long format).
Engine: the macro layer absorbed from argus,
engine/finweave_engine/layers/macro/{fci,credit_impulse,credit_gap}.py, driven
unmodified.
What this layer is
Several composable views of financial and credit conditions over a long history, each computed over real primary-source inputs:
- A Financial Conditions Index (FCI) for the United States: an engine PCA-weighted z-score composite, quarterly, higher = tighter.
- A credit-to-GDP gap for nine major economies, computed by the engine's one-sided HP filter and shown alongside BIS's own published gap.
- A credit impulse for the same economies (the credit-to-GDP acceleration).
- A curated conditions panel for charting: yield-curve slopes, HY/IG credit spreads, and the two official US stress indices (NFCI, STLFSI4).
- A global-stress panel: two official daily stress indices ingested unaltered, the U.S. Treasury OFR Financial Stress Index and the ECB CISS, both spanning the 2008 and 2020 crises (section 5 below).
Beyond these, the layer also carries: the Shiller CAPE long-run valuation (section 6), the US credit cycle (SLOOS demand vs standards and Z.1 sectoral debt, section 7), money markets (NY Fed SOFR/EFFR and the FOMC target range, with the pre-2000 FRED DFF splice, section 8), the US household balance sheet (NY Fed Consumer Credit Panel / Equifax, section 9), and the lender of last resort (Federal Reserve discount-window originations, section 10).
The first four views are built ONLY on the commercial-safe open spine (FRED Terms of Use; BIS free with "Source: BIS" attribution). The fifth adds two more open, commercial-safe official sources (OFR, U.S. Treasury, public domain; ECB Data Portal, free with attribution), consistent with the ROADMAP section-0 two-tier license wall. It is not investment advice; these are historical descriptive measures.
Long-format schema: measure, entity, date, value, label, source,
method. entity is USA for the FCI, an ISO3 for the credit measures, or a
FRED series_id for the panel. label carries the regime (FCI), the Basel III
signal zone (credit gap), or the source series description (panel).
1. Financial Conditions Index (FCI)
Definition and the benchmark it emulates
An FCI compresses many financial-market and credit indicators into one
standardized index of how tight or loose overall conditions are relative to
history. The canonical public benchmark is the Chicago Fed National Financial
Conditions Index (NFCI): a weekly weighted average of 105 measures of risk,
credit, and leverage, extracted by a large approximate dynamic factor model and
standardized to mean 0 and standard deviation 1, where positive values denote
tighter-than-average conditions (Brave, Scott, and R. Andrew Butters. 2011.
"Monitoring financial stability: A financial conditions index approach."
Economic Perspectives, Federal Reserve Bank of Chicago, 35(1): 22-43). The
FinWeave FCI targets the same object with a small, transparent, long-history
component set and the engine's own PCA construction; the NFCI (carried in the
panel, series NFCI) is used as the external validation benchmark (Section 5).
Construction the engine implements
compute_fci (engine layers/macro/fci.py), driven exactly:
- Component z-scores. Each component is standardized to a z-score over the
full surviving sample:
z = (x - mean) / std. Three components are sign-inverted first (INVERT_COMPONENTS) so that for every component higher z = tighter/more-stressed:term_spread_10y2y,term_spread_10y3m(a flatter/inverted curve is tighter) andreal_credit_growth(slower real credit growth is tighter). - PCA weights. The engine eigendecomposes the component correlation
matrix and takes the first principal component's loadings as the weights.
FCI_raw = Z @ pc1_loadings. - Re-standardize.
FCI = (FCI_raw - mean) / std, mean 0, sd 1, matching the NFCI's units. - Regime.
classify_fci_regime: EXPANSION (FCI < -0.5), NEUTRAL (-0.5 to 0.5), TIGHTENING (0.5 to 1.5), STRESS (> 1.5).
Orientation. The engine fixes the (arbitrary) PC1 sign by forcing a positive
loading on its designated credit-spread anchor hy_oas. hy_oas is absent from
the long-history set (see below), so this build replicates the SAME convention
with the credit-spread component it does carry, baa_aaa_spread: if the composite
correlates negatively with that component's z-score it is flipped, so tighter
credit spreads always map to a higher FCI. On this build the flip fired (raw
orient corr -0.759) and the oriented FCI reads +2.53 at the 2008Q4 GFC peak, the
correct sign. This orientation step lives in the build script, not the engine.
Component set (8 of the engine's 12 slots) and why
The engine defines 12 FCI component slots. Four are unusable for a multi-decade FCI and are deliberately excluded, each for a concrete, documented reason (the engine inner-join-drops any row with a NaN in any present component, so a short-history column would truncate the whole index):
| Engine slot | Fed series used | Sign | Note |
|---|---|---|---|
| baa_aaa_spread | BAA10Y (Moody's Baa corporate yield minus 10y Treasury, 1986-) | higher = tighter | Substituted for the engine's mapped BAMLC0A4CBBB (BBB OAS), which FRED truncated to 2023-07-10 (ICE licensing). BAA10Y is a real long-history credit-risk spread with the same sign; it is the FCI's credit-spread channel. |
| term_spread_10y2y | T10Y2Y (1976-) | invert | |
| term_spread_10y3m | T10Y3M (1982-) | invert | |
| vix | VIXCLS (1990-) | higher = stress | |
| sloos_ci_tightening | DRTSCILM (1990Q2-, quarterly) | higher = tighter | Senior Loan Officer survey, net % tightening C&I standards. |
| fed_funds | FEDFUNDS (1954-) | higher = tighter | |
| delinq_all | DRSFRMACBS (1991Q1-, quarterly) | higher = stress | Single-family residential mortgage delinquency rate. |
| real_credit_growth | derived: YoY % change of BUSLOANS / CPIAUCSL | invert | CPI-deflated C&I bank credit; supplied pre-computed as pct_change(4) on the quarterly frame (= YoY) so the engine does not recompute it at the wrong frequency. |
Excluded, with reason:
- hy_oas = BAMLH0A0HYM2 and the engine-mapped baa_aaa = BAMLC0A4CBBB:
both FRED-truncated to 2023-07-10 (see
data/raw/fred/SOURCE.md); including either would drop all pre-2023 history. The credit-spread channel is preserved via BAA10Y above. - ted_spread = TEDRATE: discontinued 2022-01-21; including it would drop all post-2022 history including the current value.
- broad_dollar = DTWEXBGS (2006-) and sloos_cre_tightening = DRTSCLCC (1996-): excluded only to keep the FCI's history as long as possible. The binding earliest start of the kept 8-component set is 1991Q1.
Frequency and window
Two of the eight components (SLOOS, mortgage delinquency) are quarterly-only, so the FCI is quarterly. Daily/monthly inputs are resampled to a quarterly mean (the average financial condition over the quarter). The z-score standardization, PCA weights, and re-standardization are computed over the full surviving sample, 1991Q1 to 2026Q1 (141 quarters). PC1 explains 44.0% of the components' common variance (above the engine's 25% common-factor warning threshold).
2. Credit-to-GDP gap (Basel III)
Definition and citation
The credit-to-GDP gap is the deviation of the private-non-financial-sector credit-to-GDP ratio from its long-run trend, and is the Basel III anchor variable for the countercyclical capital buffer: Basel Committee on Banking Supervision. 2010. Guidance for national authorities operating the countercyclical capital buffer. BIS; methodology in Drehmann, Mathias, Claudio Borio, Leonardo Gambacorta, Gabriel Jimenez, and Carlos Trucharte. 2010. "Countercyclical capital buffers: exploring options." BIS Working Paper No. 317. BIS computes the trend with a one-sided (real-time, recursive) Hodrick-Prescott filter, smoothing parameter lambda = 400,000 for quarterly data, precisely to avoid end-point look-ahead bias.
Engine construction and the BIS comparison
compute_credit_gap (engine layers/macro/credit_gap.py) is driven on BIS's own
credit-to-GDP ratio (actual data) series for each economy: it applies the
one-sided HP filter (lambda = 400,000), takes gap = ratio - trend, classifies
the Basel III signal zone (NORMAL < 2 pp, WATCH 2-6, ELEVATED 6-10, HIGH >= 10),
and computes the CCyB guide buffer rate from the BCBS (2010) Annex-1 piecewise
rule CCyB = min(2.5, max(0, (gap - 2) / 8 * 2.5)) (percent of risk-weighted
assets). Both the engine gap and BIS's own published gap (Credit-to-GDP gaps (actual-trend)) are stored, per economy, so the two can be compared directly.
Finding (Section 5): the engine gap reproduces BIS's published gap to ~5e-05 pp on every date BIS publishes. The engine is a faithful reimplementation of the Basel III one-sided-HP methodology. The only difference by construction is that BIS suppresses the first ~10 years of each series (its filter needs a burn-in before the trend is reliable), whereas the engine emits a value from the first quarter of the ratio. Those early engine-only values are real one-sided-HP gaps but should be read with the same caution BIS implies by withholding them.
Economies: USA, GBR, JPN, DEU, FRA, CAN, CHN, KOR, AUS (all confirmed present in
bis_credit_gap.parquet with both ratio and official-gap coverage). Bangladesh
is genuinely absent from BIS's ~43-economy set (a real coverage limit, not a load
failure; a BD gap would need a Bangladesh Bank series).
3. Credit impulse
Definition and citation
The credit impulse isolates the flow of new credit rather than its stock: it is the change in net new credit extension as a share of GDP, i.e. essentially the second derivative of the credit stock relative to GDP (Biggs, Michael, Thomas Mayer, and Andreas Pick. 2010. "Credit and Economic Recovery: Demystifying Phoenix Miracles." SSRN working paper). Because demand depends on the flow of credit, its acceleration (the impulse) leads GDP growth.
Engine construction, and how it relates to Biggs-Mayer-Pick
compute_credit_impulse(credit, gdp) (engine layers/macro/credit_impulse.py)
computes the second difference of the credit-to-GDP ratio: ratio = credit/gdp, flow = ratio.diff(), impulse = flow.diff(). This build feeds it
BIS's total-credit-to-GDP ratio for the private non-financial sector directly
(credit = the BIS ratio, gdp = 1), so the output is the quarter-on-quarter second
difference of the BIS credit-to-GDP ratio. This is a credit-to-GDP
acceleration measure in the Biggs-Mayer-Pick family, with two honest
differences from the original: it uses the broad BIS total-credit aggregate
(not bank lending only), and it takes a raw quarter-on-quarter second
difference (not a smoothed year-on-year flow), so it is noisier. The turning
points, not the individual quarters, carry the signal.
Why BIS total credit and not FRED TOTBKCR: (1) BIS total credit to the private non-financial sector is the canonical broad aggregate used across the credit-gap and credit-impulse literature and matches the credit-gap denominator above; (2) FRED has no GDP-level series in this repo to pair with TOTBKCR (a documented engine gap, ledger 2026-07-10), whereas BIS supplies the credit-to-GDP ratio already divided by its own consistent GDP; (3) using BIS keeps the US impulse methodologically identical to the major-economy cross-section.
4. Curated conditions panel (charting)
Passthrough series from FRED at native frequency, stored under measure='panel',
entity = series_id: T10Y2Y and T10Y3M (10y-2y and 10y-3m Treasury slopes,
daily), BAMLH0A0HYM2 (ICE BofA US High Yield OAS) and BAMLC0A0CM (ICE BofA US
Corporate/IG OAS) (both daily, FRED-truncated to 2023-07-10 onward, labelled as
such), NFCI (Chicago Fed NFCI, weekly, the FCI benchmark) and STLFSI4
(St. Louis Fed Financial Stress Index, weekly). ICE Data Indices hold copyright
on the OAS series (redistribution per FRED's terms).
5. Global stress panel: OFR FSI and ECB CISS
Two official daily systemic-stress indices, ingested unaltered from their own
publishers and read on /conditions directly from their parquet layers
(ofr_fsi.parquet, ecb_ciss.parquet), not recomputed by the engine. Full
retrieval detail, route evidence and per-area breakdown live in
docs/data_provenance.md ("FinWeave OFR Financial Stress Index layer" and
"FinWeave ECB CISS layer") and in the raw data/raw/{ofr,ciss}/SOURCE.md.
OFR Financial Stress Index
The U.S. Treasury Office of Financial Research's daily, market-based financial
stress index. It is constructed as a weighted sum of variable-level stress
measures such that zero indicates the long-run average level of stress,
positive is above-average stress, negative below. OFR publishes it decomposed in
two ways: by five categories (credit, equity valuation, funding, safe assets,
volatility) and by three regions (United States, other advanced economies,
emerging markets), with the category set and the region set each summing to the
composite. /conditions charts the composite full history (daily, 2000-present)
and shows the latest regional contributions (the region decomposition), plus the
composite's percentile against its own history. Verification anchors (from
scripts/build_ofr.py): composite all-time peak 2008-10-10 = 29.320 (GFC), COVID
peak 2020-03-19 = 10.266. Citation: Office of Financial Research, U.S. Department
of the Treasury, OFR Financial Stress Index, retrieved 2026-07-10; methodology
Monin, Phillip J. (2017), "The OFR Financial Stress Index," OFR Working Paper
17-04, and Bejarano, Jeremy (2023), "The Transition to Alternative Reference
Rates in the OFR Financial Stress Index." License: U.S. government work, public
domain (17 U.S.C. section 105).
ECB CISS (Composite Indicator of Systemic Stress)
The European Central Bank's composite indicator of systemic stress. CISS
aggregates fifteen raw market-stress measures across five segments (money,
bond, equity, financial-intermediary and foreign-exchange markets) and, crucially,
weights them by their time-varying cross-correlations, so the index is high
only when stress is simultaneous across segments. By construction it is bounded
in [0, 1], higher = more systemic stress. /conditions charts the euro-area
(U2) headline composite full history (daily; the ECB back-computes it to 1980)
and shows a latest-reading table for the fourteen areas that carry the daily
version (euro area plus AT, BE, CN, DE, ES, FI, FR, GB, IE, IT, NL, PT, US);
Greece has no daily version (only a monthly sovereign sub-index) and is absent by
construction, and China lags the others by a few days. The 2011-2012 euro
sovereign-debt crisis is a distinct hump in the euro-area series (peak
2011-10-04 = 0.7154), between the post-Lehman 2008 maximum (2008-11-20 = 0.9414)
and the March 2020 COVID shock (2020-04-01 = 0.6957). Citation: Hollo, D.,
Kremer, M. and Lo Duca, M. (2012), "CISS - A Composite Indicator of Systemic
Stress in the Financial System," ECB Working Paper No. 1426; data from the
European Central Bank, ECB Data Portal, dataset CISS, retrieved 2026-07-10.
License: free to use with attribution ("Source: European Central Bank").
Both in the comparison and the official-indices strip
Because both indices span 2008 and 2020 and are oriented higher = more-stressed, each contributes a row to the "how does today compare to 2007 and 2020" table (most-stressed reading in the 2007-01..2009-12 GFC window and the 2020 window, vs today) and a tile to the official-indices strip. The strip and the table both state plainly that the indices are on different, non-cross-comparable scales (OFR centered at zero; CISS bounded [0, 1]; NFCI/STLFSI4 standardized in standard deviations); only within-index comparisons over time are meaningful.
6. Long-run valuation: Shiller CAPE
A single passthrough series, not an engine computation. The Cyclically Adjusted
Price-to-Earnings ratio (CAPE, or P/E10) is the real (CPI-deflated) S&P Composite
price divided by the trailing ten-year average of real earnings, Robert Shiller's
standard measure of US equity valuation. It is read on /conditions directly from
shiller_ie_data.parquet (the cape column), never recomputed here.
- Source. Robert J. Shiller,
ie_data.xls, shillerdata.com (the data behind Irrational Exuberance). Full retrieval detail and the license disclaimer are indata/raw/shiller/SOURCE.mdanddocs/data_provenance.md("FinWeave Shiller long-run valuation layer"). - License. No explicit open-data license (e.g. no CC-BY). The data is freely downloadable, carries only Shiller's own no-warranty disclaimer, and is widely used in academic and practitioner research with attribution. FinWeave displays it as research data with citation to Shiller; it is not redistributed as a bulk file.
- Coverage / vintage. Monthly, January 1881 to September 2024 (1,725 monthly
observations with a CAPE value; the shipped
ie_data.xlsvintage was last modified September 2024). The "latest" reading on the page is the most recent published observation, explicitly dated, not today's market. - Displayed figures, all query-derived (no hardcoded numbers). The latest CAPE,
its percentile among all monthly observations (
avg(cape <= latest)), the count of observations, and the all-time high (44.2, December 1999, the dot-com peak) and all-time low (4.8, December 1920) are computed incapeHeader()insrc/lib/conditions.tsand re-derive on every data refresh. - What it is not. A descriptive valuation gauge, not a market-timing signal, a forecast, or investment advice. High CAPE has historically associated with lower subsequent long-run real returns, but the page makes no such claim on the reader's behalf.
7. US credit cycle: SLOOS demand vs standards, and Z.1 sectoral debt
Passthrough series, not engine computations. Read on /conditions directly
from data/parquet/fed_credit_cycle.parquet (29 Board of Governors series:
23 SLOOS, 6 Z.1; fetched by scripts/fetch_fed_credit_cycle.py, retrieved via
the FRED API 2026-07-10) plus the one SLOOS standards series DRTSCILM that
already lives in fred_conditions.parquet as an FCI component.
fed_credit_cycle deliberately excludes every series already in
fred_conditions.parquet or fred_macro.parquet (zero overlap verified by set
intersection), so the standards series is read from the existing spine, never
duplicated. Retrieval detail: data/raw/fed_credit_cycle/SOURCE.md and
docs/data_provenance.md ("fed_credit_cycle").
SLOOS and the net percentage
The Senior Loan Officer Opinion Survey on Bank Lending Practices (Board of
Governors of the Federal Reserve System; FRED release 191) asks a panel of
large domestic banks and US branches of foreign banks, each quarter, whether
loan demand is stronger or weaker and whether they are tightening or easing
credit standards, by loan category. Every published series is a net
percentage of banks: the share of respondents reporting stronger demand (or
tightening standards) minus the share reporting weaker demand (or easing),
bounded in [-100, +100]. It is a diffusion index over bank counts, not loan
volumes: a reading of +5 means the reporting banks that saw stronger demand
outnumber those that saw weaker demand by 5 percentage points of the panel,
and says nothing about dollar amounts (the SUBLPD..XWB.. variants in the
parquet are the balance-weighted alternatives).
/conditions charts the C&I demand series DRSDCILM (large and
middle-market firms) and DRSDCIS (small firms), both quarterly from 1991Q4,
against the C&I standards series DRTSCILM (net percentage tightening
standards for large and middle-market firms, from 1990Q2).
The demand-vs-standards distinction
Standards and demand are answers to different questions and measure different sides of the bank credit market. Standards are the supply side: a positive net percentage means banks are restricting credit on their own account. Demand is the borrower side: a negative net percentage means firms are asking for less credit. The two need not move together; reading one as the other misattributes the cycle. In the data, the sharpest net tightening of standards on record is the post-Lehman quarter (DRTSCILM +83.6, 2008Q4), while the weakest large-firm demand on record is the dot-com downturn (DRSDCILM -70.2, 2001Q4), two different crises dominating two different sides. The standards series is also an FCI component (Section 1); the demand series are new information the FCI does not carry.
Z.1 sectoral debt levels
The Z.1 Financial Accounts of the United States (Board of Governors; FRED release 52) record debt securities plus loans outstanding, by sector, as quarterly levels in millions of US dollars; the page divides by 1e6 and displays USD trillions. Observations are annual (Q4-dated) 1945-1951 and quarterly from 1952Q1 (verified in the parquet: 7 + 297 = 304 observations per series). Six series are carried:
| ID | Sector (liability: debt securities and loans, level) |
|---|---|
| TCMDO | All sectors (the economy-wide total) |
| CMDEBT | Households and nonprofit organizations |
| BCNSDODNS | Nonfinancial corporate business |
| TBSDODNS | Nonfinancial business, total |
| FGSDODNS | Federal government |
| SLGSDODNS | State and local governments |
/conditions charts CMDEBT, BCNSDODNS and FGSDODNS and shows latest TCMDO,
CMDEBT and BCNSDODNS in the stat row. TCMDO exceeds the sum of the four
domestic nonfinancial sectors in all 304 quarters (verified at build) because
it also includes the domestic financial sector and the rest of the world.
Query and type conventions
fed_credit_cycle.date is a DATE column while the fred_* views carry
TIMESTAMP dates, so every query in src/lib/creditCycle.ts casts explicitly
(CAST(date AS DATE)) before comparing or unioning; the SLOOS chart is a
union-then-pivot of fed_credit_cycle (demand) and fred_conditions
(standards) on the cast date.
Limitations
- Diffusion, not volume. SLOOS net percentages count banks, not dollars; a small bank and a large bank weigh equally in the charted series.
- Short demand history. The C&I demand series begin 1991Q4; there is no SLOOS demand reading for the 1990-91 recession (standards only).
- Nominal levels. The Z.1 chart is nominal debt outstanding, not deflated or scaled by GDP; over an 80-year span most of the visual rise is inflation plus real growth. The Basel III credit-to-GDP gap (Section 2) is the scaled complement.
Citations: Board of Governors of the Federal Reserve System, Senior Loan Officer Opinion Survey on Bank Lending Practices (FRED release 191, https://www.federalreserve.gov/data/sloos.htm) and Financial Accounts of the United States - Z.1 (FRED release 52, https://www.federalreserve.gov/releases/z1/), both retrieved via FRED, 2026-07-10. License: US federal-government works, distributed by FRED.
8. Money markets: SOFR, EFFR, and the FOMC target range
Definitions
SOFR (Secured Overnight Financing Rate) is a broad measure of the cost of borrowing cash overnight collateralized by US Treasury securities. It is the volume-weighted median of overnight Treasury repo transactions (tri-party repo, GCF repo, and FICC-cleared bilateral repo), published by the Federal Reserve Bank of New York in cooperation with the Office of Financial Research. SOFR is the Alternative Reference Rates Committee's chosen successor to USD LIBOR.
EFFR (Effective Federal Funds Rate) is the volume-weighted median rate on overnight unsecured lending of reserve balances between depository institutions in the federal funds market. Since 2016-03-01 both SOFR and EFFR (and OBFR, TGCR, BGCR) are computed under the FR 2420 Report of Selected Money Market Rates, the transaction-level data collection that replaced the old survey-based fed funds estimate; percentiles and volumes are published from that date. The FOMC target range is the Federal Open Market Committee's policy target for EFFR, published by the NY Fed alongside EFFR; the Fed moved from a single point target to a range on 2008-12-16, so the range's upper bound is null before that date.
The SOFR Averages (30-, 90-, and 180-day) are the compounded average of daily
SOFR over the trailing window, per the NY Fed methodology
(prod(1 + r_i * n_i / 360) - 1) * 360 / d; the SOFR Index measures the
cumulative compounded return since 2018-04-02. These support term SOFR products
without a forward-looking term rate.
Source, view, and the pre-2000 FRED DFF splice
View nyfed_rates (parquet data/parquet/nyfed_rates.parquet, long format, one
row per rate_type per date), built by scripts/build_nyfed_rates.py from the
NY Fed Markets Data API (markets.newyorkfed.org/api/rates), retrieved 2026-07-10.
Provenance and the full verification log are in
data/raw/nyfed_rates/SOURCE.md. nyfed_rates is the canonical FinWeave
SOFR/EFFR source and supersedes any single SOFR series carried on the FRED spine
(fred_conditions); the FRED SOFR series is retained in the data but is no longer
the display source anywhere on /conditions.
The NY Fed's own EFFR history begins 2000-07-03. Earlier EFFR is spliced from FRED
series DFF (Board of Governors H.15 daily federal funds effective rate, from
1954-07-01), tagged source = 'fred_dff_h15' in the parquet and used only for
dates before 2000-07-03. The splice is honest, not smoothed:
- DFF is a 7-calendar-day daily series (weekends and holidays carry the prior business day's rate, the H.15 convention); the NY Fed segment is business days only. To keep the long-history chart's index-spaced x-axis time-honest across this frequency change, the /conditions long-run EFFR chart is resampled to weekly (the last print of each ISO week), so a uniform 1954-present axis is drawn rather than one that silently over-weights the denser pre-2000 daily segment. The two colors on that chart are the two sources, not a break in the rate itself.
- The two sources were cross-checked on overlap dates (SOURCE.md): NY Fed EFFR equals FRED DFF on every sampled date (e.g. 2000-07-03 = 7.03 both; 2019-09-17 = 2.30 both). DFF is FRED's redistribution of the same rate.
License obligation (NY Fed reference-rate Use Restriction)
The NY Fed Terms of Use grant free use and redistribution (including commercial) of Content, but the reference-rate-specific Use Restriction requires that any REDISTRIBUTION of the rates carry a notice and disclaimer. FinWeave renders that notice verbatim in the money-markets section of /conditions:
The SOFR, the EFFR, and the SOFR Averages are subject to the Terms of Use posted at newyorkfed.org. The New York Fed is not responsible for publication of these rates by FinWeave, does not sanction or endorse any particular republication, and has no liability for your use.
No endorsement is claimed and no exclusive right in the rate names is asserted. The pre-2000 DFF segment is governed by the FRED Terms of Use (an H.15 product distributed openly via FRED).
Chart windows
- The SOFR vs EFFR vs target range chart opens 2016-01-01 (a recent decade),
the window that carries the three departures from the band: the 2019-09-17 repo
spike (SOFR 5.25%, 99th percentile 9.00%, far above the band), the March 2020 cut
to the zero lower bound (target 0-0.25%), and the March 2023 SVB week. The shaded
band is drawn directly from
target_rate_from_pct/target_rate_to_pct; SOFR is left-joined onto the EFFR business-day spine, so its line simply starts at the 2018-04-02 SOFR inception. - The long-run EFFR chart is the full 1954-present weekly series described above.
9. US household balance sheet: NY Fed Household Debt and Credit
Source and view
View nyfed_hhdc (parquet data/parquet/nyfed_hhdc.parquet, long format), built
by scripts/build_nyfed_hhdc.py from the Federal Reserve Bank of New York's
Quarterly Report on Household Debt and Credit data appendix
(hhd_c_report_2026q1.xlsx, 2026 Q1 release), retrieved 2026-07-10. Provenance and
spot-checks are in data/raw/nyfed_hhdc/SOURCE.md.
The underlying microdata is the New York Fed Consumer Credit Panel / Equifax, a nationally representative anonymized 5% sample of Equifax credit-report files. The aggregate tables used here are the report's own freely distributed published figures ("Source: New York Fed Consumer Credit Panel/Equifax"); the underlying Equifax microdata is not redistributed. Because the panel is a sample of credit- report data, the balances are those recorded on consumer credit reports (a slightly different universe from the Financial Accounts Z.1 household-debt aggregate in Section 7).
Measures and products
Two measure groups, both quarterly 2003Q1-present, national aggregates:
measure_group = 'balance'(unitusd_trillions): total debt balance by product. Products: mortgage, HE revolving (HELOC), auto loan, credit card, student loan, other, and total. Balances are end-of-quarter snapshots.measure_group = 'delinq90'(unitpercent): percent of each product's balance that is 90 or more days delinquent. Same product set (the workbook'sALLaggregate maps to producttotal).
The /conditions section charts the six product lines for both balances and delinquency (total/all is shown in the stat row and prose, not as a line). The stat row reports total debt, the mortgage share of balances, and the credit-card vs mortgage 90+ delinquency contrast, all for the latest quarter.
Caveats
- Nominal balances, not deflated or scaled by income or GDP.
- Student-loan delinquency is materially distorted by the pandemic-era federal payment pause (2020-2024), during which paused loans were not reported as delinquent; this is flagged on the chart's source note rather than adjusted away.
10. Lender of last resort: Federal Reserve discount window
Source and views
Views fed_discount_window_quarterly and fed_discount_window_monthly (parquets
of the same name), built by scripts/fetch_fed_discount_window.py from the Board
of Governors' loan-level discount-window disclosures (56 quarterly Excel
workbooks, 2010 Q3 through 2024 Q2), retrieved 2026-07-10. Provenance, per-file
hashes, and independent recomputations are in
data/raw/fed_discount_window/SOURCE.md.
These disclosures are a statutory public release mandated by the Dodd-Frank Wall
Street Reform and Consumer Protection Act, section 1103 (12 U.S.C. 248(s)),
published one quarter per workbook on a roughly two-year lag. The lag is why
coverage ends at 2024 Q2 (2024 Q3 onward is not yet published and is honestly
absent, not imputed). Aggregates are keyed by (period, credit_type) where
credit_type is Primary Credit, Secondary Credit, Seasonal Credit, or the All
total; per the task scope, only aggregates are produced and no borrower is ever
named (distinct borrowers are counted in memory during the build, and only the
count is stored).
The originations-vs-outstanding distinction (critical)
Each total_amount_usd is the sum of loan originations extended during the
period: a flow of new loans, NOT a point-in-time outstanding balance (a
stock). This distinction is essential and is stated explicitly on the page:
- Primary credit is dominated by overnight (one-business-day) loans that are re-originated daily. Summing those originations over a quarter therefore legitimately produces a figure far larger than the amount outstanding on any given day.
- Concretely, 2023 Q1 primary-credit originations sum to $3.14 trillion across 3,519 loans and 701 distinct borrowers (mostly the two FDIC bridge banks, Silicon Valley Bridge Bank and Signature Bridge Bank, after the March 2023 failures). Over the same window the Fed's H.4.1 release shows primary credit outstanding peaking near $153 billion (week ending 2023-03-15), more than twenty times smaller. Both numbers are correct; they measure different things (flow vs stock). The clean stock-to-stock anchor is the single largest bridge-bank loan of ~$127 billion, the same order of magnitude as the ~$153 billion system peak outstanding.
Blurring the two would be the kind of error that destroys credibility, so the page labels every discount-window value as originations summed over the quarter and states the H.4.1 outstanding contrast in prose and in a stat tile. The quarterly chart is in USD billions, and the 2023 Q1 primary spike ($3,141bn) is left visible and honestly labeled rather than clipped or log-scaled.
License
Publications of the Board of Governors are works of the United States federal
government, not subject to domestic copyright (17 U.S.C. section 105); this is a
statutorily mandated public disclosure. SOURCE.md documents honestly that the
Fed site carries no dedicated data-license page and that no access block was
encountered.
Parameter summary
| Setting | Value | Source |
|---|---|---|
| FCI components | 8 (of the engine's 12) | this build (Section 1) |
| FCI standardization | full-sample z-score | engine compute_fci |
| FCI weights | PC1 loadings of the component correlation matrix | engine compute_fci |
| FCI frequency | quarterly (quarterly-mean resampling) | binding: SLOOS + delinquency are quarterly |
| FCI regime cuts | -0.5 / 0.5 / 1.5 | engine classify_fci_regime |
| HP filter | one-sided (recursive), lambda = 400,000 | BIS quarterly / Basel III |
| Credit-gap signal cuts | 2 / 6 / 10 pp | engine _classify_gap_signal (Basel III) |
| CCyB rule | min(2.5, max(0, (gap-2)/8 x 2.5)) | BCBS (2010) Annex 1 |
| Credit impulse | 2nd difference of credit-to-GDP ratio, QoQ | engine compute_credit_impulse |
| Credit universe | BIS total credit, private non-financial sector, % of GDP | BIS |
| Economies (gap/impulse) | USA GBR JPN DEU FRA CAN CHN KOR AUS | BIS coverage |
Limitations (read before using)
- FCI is 8 of 12 components, quarterly. The two ICE OAS credit spreads and the TED spread that the engine's full FCI would use are FRED-truncated or discontinued, so the credit-spread channel rests on the single BAA10Y series; two components are quarterly, forcing a quarterly index that averages away sharp mid-quarter market spikes.
- Modest correlation with the NFCI benchmark (0.30 over 141 quarters). The FinWeave FCI is a coarse 8-indicator quarterly index; the NFCI aggregates 105 weekly, mostly market-based indicators. They agree strongly at the GFC extreme and on the qualitative 2020/2022 readings (Section 5) but diverge in the middle of the distribution. The FCI is a transparent, reproducible, long- history composite, not a replica of the NFCI; where a precise conditions read is needed, the NFCI (carried in the panel) is the authority.
- The C&I-loan-drawdown artifact.
real_credit_growthuses C&I bank loans (BUSLOANS), which spiked in 2020Q2 as firms drew down credit lines; the engine reads faster credit growth as looser, so this pulls the FCI down exactly when stress was high. Visible in the 2020Q2 component decomposition. - Conditions are not the policy stance. An FCI measures financial conditions/stress, not the monetary-policy stance. 2022 is the clearest case: the Fed hiked aggressively but financial conditions did not tighten by the NFCI's own reading (Section 5). A neutral-to-loose FCI in 2022 is a feature of what the index measures, not an error.
- Credit impulse is noisy and broad. It is the QoQ second difference of the broad BIS credit-to-GDP ratio, not the smoothed YoY bank-lending flow of the original Biggs-Mayer-Pick measure; its single deepest reading is the mechanical reversal of the 2020Q2 COVID credit spike, not a crisis signal.
- Credit gap early values. For the first ~10 years of each economy the engine emits one-sided-HP gap values that BIS withholds as unreliable burn-in; treat pre-publication-window values with that caution.
- BIS economy set. The credit gap/impulse cover BIS's reporting economies only; Bangladesh and most frontier markets are absent.
Validation (evidence: scripts/validate_conditions.py)
1. FCI anchors vs the Chicago Fed NFCI (quarterly-averaged)
| Quarter | FinWeave FCI | NFCI (quarterly avg) | Reading |
|---|---|---|---|
| 2008Q4 (GFC peak) | +2.53 (STRESS) | +2.77 | Joint extreme. STRONG PASS. |
| 2020Q1 (Mar-2020) | -0.13 (NEUTRAL) | -0.35 | Both not-tight. |
| 2020Q2 | +0.13 (NEUTRAL) | -0.08 | Both near zero. |
| 2022Q2 | +0.03 (NEUTRAL) | -0.29 | Both not-tight. |
| 2022Q4 | -1.02 (EXPANSION) | -0.16 | Both not-tight; FCI overshoots loose. |
- 2008Q4: strong pass. The FCI reads +2.53 (STRESS), its tightest quarter on record, against NFCI +2.77. The FCI's entire tight regime is 2008Q4-2010, the GFC and its aftermath.
- Mar-2020: the naive anchor does not fire, and that is NFCI-consistent. The weekly NFCI peaked at only +0.27 (2020-03-27) but its 2020Q1 average is -0.35: the COVID shock was violent, brief, and met with instant Fed easing, so quarterly averaging washes it out. The FCI (-0.13) matches the quarterly NFCI (-0.35). Reported as a quarterly-frequency limitation, not a defect.
- 2022: the naive anchor does not fire, and the NFCI itself never turned tight. The weekly NFCI's maximum in all of 2022 was -0.10 (2022-10-07): by the authoritative measure, financial conditions never tightened in 2022 even as monetary policy did. The FCI reading loose in 2022 overshoots the near-zero NFCI (driven by record-low mortgage delinquencies and still-strong real credit growth) but is directionally NFCI-consistent.
2. Engine credit gap vs BIS's own published gap
For all nine economies, correlation +1.0000 and maximum absolute difference ~5e-05 pp on the overlapping (BIS-published) window. The engine reproduces BIS's gap; it additionally emits ~40 early burn-in quarters per economy that BIS withholds. (Example, USA latest 2025Q4: engine gap -11.5 pp, BIS gap -11.5 pp.)
3. Credit impulse around the 2009 GFC deleveraging (USA)
The engine impulse is deeply negative in the GFC (trough 2008Q4 = -2.10 pp): the anchor holds. The series is noisy QoQ; its 4-quarter-smoothed trough is 2010Q2 (-0.80) and its full-sample raw trough is 2020Q3 (-4.72), the mechanical reversal of the 2020Q2 COVID credit spike.
4. Independent recomputation (no engine)
The engine one-sided-HP gap recomputed from scratch (numpy full-refit at each t) matches to 1.56e-08 pp over 313 USA quarters; the credit impulse recomputed as a plain second difference of the BIS ratio matches to 0.00e+00 over 311 quarters. The pipeline reproduces the engine's arithmetic exactly.
Verdict
The credit gap is an exact reimplementation of the Basel III one-sided-HP methodology (matches BIS to display precision), the credit impulse behaves correctly in the GFC, and the FCI agrees with the authoritative NFCI at the GFC extreme. Where the FCI's Mar-2020 and 2022 anchors do not fire, the reason is a real property of a quarterly conditions index (and is shared by the NFCI itself), reported honestly rather than papered over. The modest full-sample FCI-NFCI correlation is a stated limitation, not hidden.