Growth is solid
The broad activity factor is 0.45 s.d. above trend in September (3-month average +0.31), and the GDP nowcast for Q3 is about 3.3% annualized, between the NY Fed (2.7%) and GDPNow (3.6%). Leading indicators are above trend in 10 of 11 economies, but national cycles are unusually out of sync.
Inflation is cooling underneath
Core PCE is 3.0% over 12 months but only 2.05% annualized over the last 3 months. The common 'underlying' measure is 2.2%, and long-run market expectations (5y5y) are anchored at 2.33%. The regime model puts 78% on 'Goldilocks' (growth up, inflation decelerating) and 15% on a disinflationary slowdown.
Rates are the pressure point
The 10-year Treasury is 5.10% and the 5y5y forward rose 39 bp in a month to 5.52%. Most of the recent rise came from expected short rates (+40 of +47 bp), not term premium. The JGB 10-year is 2.95%. Policy reads neutral against r* but about 1.6 pp looser than the balanced Taylor rule.
Recession odds are low
Curve and credit models put the 12-month recession probability at 4–9% (the Fed's own EBP model: 9%). Growth-at-Risk puts the 5% worst case for the next year at +1.2% average growth, median 2.9%.
Financial stress is low
Our systemic-stress index is at the 35th percentile (ECB's US index: 37th). Funding stress is moderate (66th percentile): repo shows no pressure, but the Fed's reverse-repo buffer is drained to about zero.
Markets are calm but heavily hedged
Model volatility is below its long-run level (S&P 11.9% vs 16.6%), yet implied volatility is rich, SKEW is at the 98th percentile of 5 years (heavy crash-protection buying), and the 9-day VIX sits slightly above the 30-day. Stocks and bonds are moving together (+0.41), so bonds are not hedging.
Mood is gloomy, markets are not
The news/consumer/uncertainty sentiment factor is −0.97 s.d. (18th percentile) while market-implied mood is upbeat, so the mood gap is at the 80th percentile ('markets calmer than the news'). Recent FOMC and BOJ statements score hawkish.
Japan: repatriation, not a carry unwind
USD/JPY is 158 with a 2.86 pp two-year rate gap; carry fragility is low (6th percentile) and yen positioning isn't crowded. Japanese investors net sold ¥3.2 tn of foreign bonds over 13 weeks and Japan's Treasury holdings are down $116 bn over a year.
How do I read this page?
- Each card is a model: a set of rules that turns public data into a few numbers that summarize one part of the economy.
- A standard deviation is the typical size of a move. A reading of +1 standard deviation is a usual-sized move above average; +2 or more is unusual.
- A percentile ranks today against history. The 80th percentile means today's value is at or above about 80% of past readings.
- A model-implied probability is the chance a model assigns to an outcome given today's data. It depends on the model's assumptions and is not a certainty.
- The numbers describe current conditions and what the models imply. They are not forecasts of prices and not investment advice.
- Many series are revised after release, and each card lists its own assumptions and limits, so small changes deserve less weight than large, lasting ones.
Tap any reading to see what it means. Charts respond to hover or touch; use the 1Y to All buttons or drag across a chart to zoom.
How the models are checked: every model is reviewed by separate AI auditor agents that rebuild its numbers from the raw official data without using the model's own code, check its equations against published sources, and try to break its tests. Findings go back for fixes and re-review until nothing serious is open. Sarthak reviews the findings and signs off on every model change before it goes live: a human in the loop.
- Standard deviation
- The typical distance of a value from its average. It is used as a ruler for how unusual a reading is.
- Percentile
- The share of past readings at or below today's value, on a 0 to 100 scale.
- Z-score
- How many standard deviations a value is above (positive) or below (negative) its average.
- Nowcast
- An estimate of current economic activity, such as this quarter's growth, made before official figures are released.
- Yield curve
- A line showing interest rates on government bonds of different lengths, from months to decades. Its slope is often read as a sign of economic expectations.
- Basis point (bp)
- One hundredth of a percentage point. A rise from 4.00% to 4.25% is 25 basis points.
- Percentage point (pp)
- The simple difference between two percentages. Going from 2% to 3% is 1 percentage point.
- Volatility
- How much a price or rate swings up and down, usually stated as a yearly percentage.
- Recession probability
- A model's estimate of the chance the economy is in or enters a recession within a set period, based on today's data.
- Systemic stress
- Strain across the financial system as a whole, such as many markets falling and funding getting harder at the same time.
- Sentiment index
- A measure of mood, built from surveys or from the tone of news. Higher usually means more optimism.
- Annualized
- A change over a short period scaled up to show what it would be over a full year at the same pace.
- Correlation
- A number from -1 to +1 showing how closely two series move together, in the same direction (positive) or opposite directions (negative).
- Factor
- A single summary number that captures the common movement shared by many data series.
- One-sided (real-time style)
- Built using only data available up to each date, so past values do not use information from the future.
Is the economy growing?
This model combines many monthly US economic reports into one score that says whether business activity is growing faster or slower than its usual pace, and turns that score into an early estimate of GDP growth.
Why it matters
Official GDP figures arrive weeks after a quarter ends, so people making plans about jobs, hiring or spending are often working with old news. A single, up-to-date reading of the economy's pace helps show whether conditions are firming or softening before the official numbers land. It also shows how uncertain that early read is.
How it works
The model takes monthly reports on jobs, factory output, retail sales, incomes, spending, housing and jobless claims, and asks what single hidden trend could explain why they tend to rise and fall together. That hidden trend is the activity factor. A tool called the Kalman filter updates the estimate each time a new report arrives and fills in reports that are not out yet. Think of a doctor judging overall health from pulse, temperature and blood pressure: no single reading tells the whole story, but together they point to one underlying condition. The same factor is then linked to quarterly GDP to produce a growth estimate for quarters whose official figure is not yet published.
The latest readings
In September 2026 the activity factor is 0.45, meaning the combined monthly data show growth a bit under half a standard deviation faster than the average pace since 1990. A reading of zero would mean growth exactly at its usual pace, and negative readings mean slower than usual.
Simple exampleYou can tell how busy a shopping mall is from the full parking lot, the food court line and the crowded escalators, even without counting people. This gauge does the same with many monthly economic reports. Zero means the usual pace of growth, above zero faster than usual, below zero slower.
Model noteIn Sep 2026 the activity factor is estimated 0.44 standard deviations above its average (trend) growth pace.
Typical rangeBetween -0.475 and 0.393 in half of all readings since Jan 2000 (middle 50%; the outer 10th to 90th percentile band is -0.914 to 0.770). The latest reading sits at the 79th percentile.
Averaged over the last three months, the factor is 0.31 above zero, so the recent stretch is above its usual pace but less strong than September alone. The model's own uncertainty around this average is 0.29, which is close to the size of the reading itself.
Simple exampleOne hot day does not make a heatwave, so this averages the activity gauge over three months for a steadier picture. The uncertainty figure is like the margin of error on a poll: when it is about as big as the reading, the reading is a rough sign, not a precise measure.
Model noteOver the last three months the factor has averaged 0.30 s.d. above trend; the model's state uncertainty around that average is 0.29 s.d. (parameters held fixed).
Typical rangeBetween -0.267 and 0.207 in half of all readings since Jan 2000 (middle 50%; the outer 10th to 90th percentile band is -0.592 to 0.455). The latest reading sits at the 83th percentile.
The model puts a 14.5% chance on the three-month average actually being below its usual pace. This counts only uncertainty about the hidden factor with the model taken as given, so the true uncertainty is larger than this number suggests.
Simple exampleThis is the model's estimated chance that the economy has actually been growing slower than usual over the last three months, despite what the gauge shows. It only counts the model's own measuring fuzz, so like a bathroom scale that may itself be slightly off, the real uncertainty is larger.
Model noteGiven the model's state uncertainty alone there is a 14.6% probability that the factor averaged below trend over the last three months; this excludes parameter and model uncertainty and is therefore overly precise.
For the July to September 2026 quarter, which has ended but whose official GDP figure is not yet out, the model estimates growth of 3.3% at an annual rate, with a wide likely range of 1.1% to 5.6% (a 68% band, roughly a two-in-three chance range). Over the last 8 released quarters the model missed by 1.24 points on average, more than the 1.09 points from simply using the long-run average growth rate, so this estimate deserves caution.
Simple examplePicture a game that has ended, but the official score has not been posted yet. Using the highlights already seen, the model estimates the final score: here, how fast the economy grew last quarter. The wide range shows the guess can be off by quite a bit.
Model noteThe model puts 2026Q3 real GDP growth at 3.5% annualised (68% band 1.9 to 5.1, data through Sep 2026), but over the last 8 released quarters the held-out model nowcast was less accurate than simply using the long-run average growth rate (MAE 1.25 vs 1.09 pp).
Typical rangeBetween 1.25 and 3.51 in half of all readings since Jan 2000 (middle 50%; the outer 10th to 90th percentile band is -0.588 to 4.58). The latest reading sits at the 74th percentile.
For the current quarter (October to December 2026), the model estimates 3.1% annual-rate growth, with a 68% band of 0.5% to 5.8%. This uses data only through September, so it is mostly a projection, and the same track-record caveat applies (average miss 1.24 points versus 1.09 for the long-run average).
Simple exampleThis estimates growth for the quarter happening right now, like guessing a game's final score at halftime. Most of the game has not been played yet, so it leans heavily on how things were going, and the range around it is wide.
Model noteThe model puts 2026Q4 real GDP growth at 3.1% annualised (68% band 1.0 to 5.3, data through Sep 2026), but over the last 8 released quarters the held-out model nowcast was less accurate than simply using the long-run average growth rate (MAE 1.25 vs 1.09 pp).
Typical rangeBetween 1.25 and 3.51 in half of all readings since Jan 2000 (middle 50%; the outer 10th to 90th percentile band is -0.588 to 4.58). The latest reading sits at the 63th percentile.
The newest industrial production report pushed the September factor up by 0.30, the largest single push from any series. All of the newest reports together moved the factor up by 0.40.
Simple exampleWhen a soup tastes different, you can ask which ingredient changed it most. This names the newest report that moved the activity gauge the most, and by how much, along with the total push from all new reports combined.
Model noteThe latest industrial production print moved the Sep 2026 factor by +0.30 s.d. (total update from all latest prints +0.42).
Both lines show the activity factor, where zero is the average growth pace since 1990, above zero is faster than usual and below zero is slower. The smoothed line uses all data, including months that came later, while the one-sided line uses only data available up to each month, so it is closer to what could have been known at the time. Look for deep dips during recessions; values for the 2020 pandemic months are filled in by the model because those months were left out of the estimation.
Simple exampleBoth lines track the economy's activity gauge: above zero is faster growth than usual, below zero is slower. One line is like rereading a story once you know the ending, using all data. The other only uses what was known at each moment, like reading it chapter by chapter, so it shows what the gauge said in real time.
Each standardized monthly report equals its sensitivity to the common activity factor plus a part that is specific to that report.
Simple exampleEvery monthly report, like factory output or job numbers, is split into two parts: the share that moves with the economy's common mood, and a part unique to that report. Some reports follow the common mood closely, others only loosely.
- z_{i,t}growth of report i in month t, rescaled to have average 0 and spread 1 over the sample
- \lambda_iloading: how strongly report i moves with the common factor
- f_tthe hidden activity factor in month t
- e_{i,t}the part of report i not explained by the factor
This month's factor is a weighted mix of the last two months' values plus a new random shock, which captures the fact that the economy's momentum carries over.
Simple exampleThe economy has momentum, like a rolling ball that keeps some of its speed from the last couple of pushes. This month's activity is built from the past two months plus a fresh surprise nobody could predict.
- \phi_1, \phi_2weights on the factor one and two months ago, estimated from the data
- u_tnew, unpredictable shock to activity in month t
Quarterly GDP growth is tied to a weighted sum of the monthly factor over the last five months, which is how a quarter-on-quarter change builds up from monthly changes.
Simple exampleThink of a quarterly report card built from monthly quiz scores. This links the quarter's growth to the activity gauge over the last several months, because a three-month change is made up of month-to-month changes stacked together.
- z_{\text{GDP},t}standardized quarterly GDP growth, recorded in the last month of each quarter
- \lambda_Qhow strongly GDP growth moves with the factor
- e_{Q,t}monthly GDP-specific part not explained by the factor
The model's quarterly growth estimate is converted into an annual rate, the same way official GDP growth is usually reported.
Simple exampleIf you saved a bit each quarter and kept that pace all year, how much would you end up with? This converts a quarter's growth into that kind of yearly rate, which is how official growth numbers are usually reported.
- g_Qestimated quarter-on-quarter growth of real GDP in log-percent
- \text{SAAR}seasonally adjusted annual rate: the growth that would result if the quarter's pace lasted a full year
- Activity factor
- A single hidden number that best explains why many economic reports rise and fall together. Positive means faster-than-usual growth.
- Standard deviation (s.d.)
- A measure of typical spread around the average. A reading of 1 s.d. is a normal-sized swing; 0.45 is a bit under half of one.
- Trend
- Here, the average growth pace of each report over 1990-2026. It is a fixed average, not an estimate of how fast the economy can grow today.
- Nowcast and backcast
- A nowcast estimates the current quarter. A backcast estimates a quarter that has already ended but whose official figure is not yet published.
- Real GDP
- The total value of goods and services produced in the country, adjusted for inflation.
- Kalman filter
- A step-by-step method that updates a best guess of something hidden each time a new, noisy measurement arrives.
- 68% band
- A range the model expects the true value to fall inside about two times out of three. It ignores some sources of uncertainty, so the real range is wider.
- Mean absolute error (MAE)
- The average size of past misses, ignoring whether they were too high or too low.
Full technical specification (for specialists)
Model
Mixed-frequency dynamic factor model (US activity factor + GDP nowcast)
Specification
Transforms: x_{i,t} = 100*(ln X_{i,t} - ln X_{i,t-1}) for PAYEMS, INDPRO, RRSFS, W875RX1, DSPIC96, PCEC96, CMRMTSPL, HOUST, PERMIT, JTSJOL; x_{i,t} = X_{i,t} - X_{i,t-1} for UNRATE (pp), AWHMAN (hours) (TCU excluded: DEVIATION from the spec, see limitations); ICSA: X_m = (1/n_m) * sum_{w: week-ending date in month m} ICSA_w, then 100*dln; GDPC1: g_Q = 100*(ln GDP_Q - ln GDP_{Q-1}) (q/q %, not annualised). Differences are taken on a complete calendar grid, so a missing month (e.g. UNRATE/RRSFS 2025-10) makes both adjacent changes missing.Standardisation (statsmodels standardize=True): z_{i,t} = (x_{i,t} - mu_i)/s_i, mu_i and s_i = sample mean and s.d. of the available (post-COVID-mask) observations of series i over 1990-01..latest.Monthly measurement (Bańbura-Modugno 2014, Sec. 2): z_{i,t} = lambda_i f_t + e_{i,t}, i = 1..13 (monthly series; GDP is series 14); no additional measurement error (obs_cov = 0).Quarterly measurement (Mariano-Murasawa 2003 approximation; quarterly log-growth = (1/3)(m_t + 2m_{t-1} + 3m_{t-2} + 2m_{t-3} + m_{t-4}) of the latent monthly growth m), observed in the third month t of each quarter: z_{GDP,t} = lambda_Q (f_t + 2f_{t-1} + 3f_{t-2} + 2f_{t-3} + f_{t-4}) + (e_{Q,t} + 2e_{Q,t-1} + 3e_{Q,t-2} + 2e_{Q,t-3} + e_{Q,t-4}). DEVIATION (implementation, not substance): statsmodels uses weights (1,2,3,2,1) without the 1/3; the 1/3 is absorbed into the freely estimated lambda_Q and Var(v_Q), which is observationally equivalent.Factor (one global factor): f_t = phi_1 f_{t-1} + phi_2 f_{t-2} + u_t, u_t ~ N(0, sigma_u^2). State vector carries f_t..f_{t-4} for the quarterly link.Idiosyncratic: e_{i,t} = rho_i e_{i,t-1} + v_{i,t}, v_{i,t} ~ N(0, sigma_i^2), independent across i and of u_t (also for the latent monthly GDP error e_Q).Estimation = exact maximum likelihood: theta_hat = argmax l(theta), l = exact Gaussian log-likelihood from the Kalman filter with missing observations and the stationary initial state (prediction-error decomposition). DEVIATION from plain Bańbura-Modugno (2014) EM, with reason: in this specification (idiosyncratic AR(1) errors in the state, no measurement noise, obs_cov = 0) z_i,t = lambda_i f_t + e_i,t holds exactly at every observed t, so the E-step gives E[e_i,t f_t | Z] = z_i,t E[f_t | Z] - lambda_i,old E[f_t^2 | Z] and the closed-form loading M-step lambda_new = (sum_t z_i,t E f_t - sum_t E[e_i,t f_t]) / sum_t E f_t^2 returns lambda_old: EM cannot move the loadings (Bańbura-Modugno avoid this by adding a small fixed measurement-noise variance; that EM is then very slow in the loadings). Per start: (1) EM (statsmodels DynamicFactorMQ, E-step = Kalman smoother, closed-form M-steps for phi, sigma_u^2, rho_i, sigma_i^2; stop when 2|l_k - l_(k-1)|/(|l_k| + |l_(k-1)|) < 1e-06 or k = 1000) only as a warm start given the start loadings; (2) L-BFGS-B on -l(theta) with forward-difference gradients (step 1e-07*max(1,|theta_j|)), ftol 1e-12, gtol 0.001, up to 3000 iterations, restarted (max 2) after an abnormal line-search stop. Multi-start: statsmodels default (PCA-based) start + 15 seeded perturbations (loadings x U(0.3, 1.7) per series, idiosyncratic variances x U(0.2, 1.5), rho_i ~ U(-0.5, 0.9), phi_1 ~ U(0, 0.6), phi_2 ~ U(-0.1, 0.3)). The converged start with the highest l is selected (diagnostics.starts).Identified parameter vector theta = (lambda_1..lambda_14, atanh r_1, atanh r_2, atanh rho_1..rho_14, ln sigma_1^2..ln sigma_14^2) (44 parameters): AR(2) via partial autocorrelations, phi_2 = r_2, phi_1 = r_1 (1 - r_2) (Durbin-Levinson; bijection onto the stationarity triangle), rho_i = tanh(.), sigma_i^2 = exp(.). Scale identified by Var(f_t) = 1: sigma_u^2 = 1/gamma_0(phi; 1) with gamma_0(phi; sigma^2) = sigma^2 (1 - phi_2) / ((1 + phi_2)((1 - phi_2)^2 - phi_1^2)) (AR(2) unconditional variance); sign identified by lambda_INDPRO > 0 ((lambda, f) -> (-lambda, -f) leaves l unchanged). Box for L-BFGS-B: |lambda_i| <= 10, |atanh(.)| <= 5, 0.1 <= sigma_i^2 <= 25 for the 13 MONTHLY series (the lower bound is an ad hoc guard against a Heywood solution, chosen by us, not taken from the literature), 0.0001 <= sigma_GDP^2 <= 25 for the latent monthly GDP error (numerical guard only: sigma_GDP^2 is the innovation variance of a latent monthly error that enters GDP through the (1,2,3,2,1) sum, a different scale from the monthly uniquenesses). An estimate on a bound is a constrained MLE, verified by the KKT conditions (diagnostics.optimum_check.active_bounds; activity per start in diagnostics.starts[*].params_at_bounds). Warm starts are mapped to theta with the equivalent rotation f* = s f / sqrt(gamma_0), lambda* = s sqrt(gamma_0) lambda, sigma_u* = sigma_u / sqrt(gamma_0).GDP quarterly idiosyncratic share = Var(sum_k w_k e_Q,t-k) / [lambda_Q^2 Var(sum_k w_k f_t-k) + Var(sum_k w_k e_Q,t-k)], w = (1,2,3,2,1), Cov(f_t, f_t-h) = gamma_h (gamma_1 = phi_1 gamma_0/(1 - phi_2), gamma_h = phi_1 gamma_h-1 + phi_2 gamma_h-2), Cov(e_Q,t, e_Q,t-h) = sigma_GDP^2 rho_GDP^h/(1 - rho_GDP^2) (diagnostics.bounds.gdp_quarterly_idiosyncratic_share).Bound sensitivity (diagnostics.bounds.sensitivity): LR = 2 (l_unrestricted - l_restricted), each side re-maximised by L-BFGS-B from theta_hat; (i) every active variance bound relaxed to 0.0001; (ii) the monthly floor 0.1 imposed on the GDP error as well (previous version). One-sided restriction on one parameter: p = 0.5 P(chi2_1 > LR) (Self & Liang 1987).Optimum verification at theta_hat: g = central-difference gradient of l (step 1e-05*max(1,|theta_j|)), H = Hessian of -l (forward differences of g, step 0.0001*max(1,|theta_j|), symmetrised); required: H positive definite (strict local maximum), max|g| < 0.5, Newton decrement 0.5 g' H^-1 g < 0.0001 (predicted remaining gain in l) on the free coordinates; for coordinates on the box the KKT sign condition (gradient of -l >= -0.5 at a lower bound, <= 0.5 at an upper bound), and an L-BFGS-B restart from theta_hat gains < 0.1; up to 5 damped Newton steps theta <- theta - a H^-1 g are taken first if the decrement is larger. Failure raises an error (diagnostics.optimum_check).Standard errors (delta method): Cov(p_hat) = J V J', J = d p / d theta' (central differences), V = H^-1 (Hessian / observed information, reported as se_hessian, primary) or V = (sum_t s_t s_t')^-1 with s_t = d l_t / d theta (OPG, se_opg); p = statsmodels parameters at the normalisation above (sigma_u is a function of phi, so its s.e. comes from that of phi). Coordinates of theta on a bound of the box are held fixed at the bound (s.e. 0) and V is computed over the free coordinates only, V = (H_ff)^-1 resp. (S_f'S_f)^-1, so the other s.e.s are conditional on the fixed ones. Parameter uncertainty is not propagated into the factor bands or probabilities.Filtered factor: f_{t|t} = E[f_t | z_1..z_t] (one-sided Kalman filter, full-sample parameters). Smoothed factor: f_{t|T} = E[f_t | z_1..z_T]; factor_sd = sqrt(Var(f_t | z_1..z_T)).3-month average: fbar = w' a_T, w = (1/3, 1/3, 1/3) on the state block (f_T, f_{T-1}, f_{T-2}) of the smoothed state at T; sd(fbar) = sqrt(w' P_{T|T} w) (includes the cross-covariances); P(fbar < 0) = Phi(-fbar / sd(fbar)).GDP nowcast: g_Q = mu_GDP + s_GDP * E[z_{GDP,t_Q} | info] with t_Q = last month of quarter Q (forecast beyond the sample by iterating the transition matrix). SAAR = (exp(4 g_Q / 100) - 1) * 100. DEVIATION from the spec formula ((1 + g/100)^4 - 1)*100: g is a 100*log-difference, so (1 + g/100) is only a first-order approximation of GDP_Q/GDP_{Q-1} = exp(g/100); the exact form matches BEA's published SAAR ((GDP_Q/GDP_{Q-1})^4 - 1)*100 used for the actuals and the CONTRACT SAAR definition. The spec-formula values are reported in diagnostics (difference < 0.05 pp in the reported range).68% band: SAAR(g_Q -/+ sd(g_Q)), sd from the state covariance only (no parameter uncertainty).Actual GDP SAAR = ((GDP_Q / GDP_{Q-1})^4 - 1) * 100 from GDPC1 levels.Held-out nowcast for a released quarter Q: same (full-sample) parameters, data truncated at the last month of Q, GDP for Q set missing; MAE_8 = (1/8) sum |SAAR_nowcast - SAAR_actual| over the last 8 released quarters.News decomposition (Bańbura-Modugno 2014; Bańbura et al. 2013): E[f_T | Omega_new] - E[f_T | Omega_old] = sum_j b_j (y_j - E[y_j | Omega_old]), b = Cov(alpha_T, I | Omega_old) Var(I | Omega_old)^{-1} (row of f_T); contribution of series i = sum over its new observations j of b_j * news_j. Same formula with the GDP measurement row for GDP impacts. Omega_old = pseudo-vintage = every series minus its own latest observation (GDP included); parameters held fixed.Validation: corr(f_{t|T}, CFNAI_t) over 1990-01..latest common month, excluding calendar 2020.
Limitations
- In-sample: parameters are estimated on the full sample and data are the latest (revised) vintage; filtered factor and held-out nowcasts are therefore not real-time / point-in-time estimates.
- Exact-likelihood multi-start: 16 starts, 16 converged, 16 of them reach the selected maximum (within 1 log-likelihood unit); no other local maximum was found.
- No parameter is on a bound of the estimation box at the selected estimate (diagnostics.optimum_check.active_bounds is empty). The ad hoc monthly idiosyncratic-variance floor 0.1 does not bind on any monthly series (smallest monthly sigma_i^2 = 0.363, PAYEMS); it was introduced against the INDPRO/TCU Heywood case and does not bind now that TCU is excluded. The latent monthly GDP error is not subject to it (estimate sigma2_GDPC1 = 0.0427, rho_GDPC1 = -0.83; GDP is 37% idiosyncratic at the quarterly level). Imposing the 0.1 floor on it (previous version) would lower the log-likelihood by 14.7 (LR = 29.5, p = 3e-08), push rho_GDPC1 to -0.78 and the quarterly idiosyncratic share to 60%, and give a 2026Q3 68% band of 1.1 to 5.6 (vs 1.9 to 5.1 here).
- DEVIATION from the spec's series table: TCU (capacity utilization) is excluded. It is industrial production divided by capacity from the same Fed G.17 release (corr(dTCU, 100 dln INDPRO) = 0.963 over 431 months, 1990-latest ex-COVID mask; diagnostics.tcu_exclusion), and with it in the panel the likelihood is maximised at a Heywood solution in which INDPRO and TCU have ~zero idiosyncratic variance and the 'factor' is industrial production (with the 0.10 floor both sit on the floor). Without TCU no monthly variance bound binds.
- P(3m avg < 0) and the GDP 68% bands reflect state (signal-extraction) uncertainty only; they exclude parameter and model uncertainty.
- GDP nowcast accuracy is modest: over the last 8 released quarters the held-out nowcast (data through quarter end) has MAE 1.25 pp SAAR versus 1.09 pp for the constant full-sample mean growth (2.55% SAAR), i.e. it is less accurate than the long-run average over that window (diagnostics.nowcast_sanity).
- The ragged edge is handled by the Kalman filter, but the latest month is partly a projection for series not yet released (see diagnostics.data.raw_last_obs).
- Held-out nowcasts do not replicate the historical ragged edge or the GDP release lag; they overstate real-time accuracy.
- Missing interior months (e.g. October 2025 UNRATE and RRSFS, government shutdown) are treated as missing, so the adjacent monthly changes are missing too.
- Nothing here is investment advice; probabilities are model-implied states.
References
- Bańbura, M. & Modugno, M. (2014). Maximum likelihood estimation of factor models on datasets with arbitrary pattern of missing data. Journal of Applied Econometrics 29(1), 133-160.
- Mariano, R. S. & Murasawa, Y. (2003). A new coincident index of business cycles based on monthly and quarterly series. Journal of Applied Econometrics 18(4), 427-443.
- Stock, J. H. & Watson, M. W. (2002). Macroeconomic forecasting using diffusion indexes. Journal of Business & Economic Statistics 20(2), 147-162.
- Bok, B., Caratelli, D., Giannone, D., Sbordone, A. M. & Tambalotti, A. (2018). Macroeconomic nowcasting and forecasting with big data. Annual Review of Economics 10, 615-643.
- Bańbura, M., Giannone, D., Modugno, M. & Reichlin, L. (2013). Now-casting and the real-time data flow. In Handbook of Economic Forecasting, Vol. 2A, Elsevier, 195-237.
- Fulton, C. statsmodels DynamicFactorMQ (statsmodels 0.14): state-space form, Kalman filter/smoother, EM algorithm of Bańbura-Modugno (2014), quarterly link via Mariano-Murasawa (2003).
- Byrd, R. H., Lu, P., Nocedal, J. & Zhu, C. (1995). A limited memory algorithm for bound constrained optimization. SIAM Journal on Scientific Computing 16(5), 1190-1208.
- Barndorff-Nielsen, O. & Schou, G. (1973). On the parametrization of autoregressive models by partial autocorrelations. Journal of Multivariate Analysis 3(4), 408-419.
- Self, S. G. & Liang, K.-Y. (1987). Asymptotic properties of maximum likelihood estimators and likelihood ratio tests under nonstandard conditions. Journal of the American Statistical Association 82(398), 605-610.
- Federal Reserve Bank of Chicago. Chicago Fed National Activity Index (CFNAI), external validation series.
Is inflation under control?
This model checks how fast prices are rising, whether that rise is broad or limited to a few items, whether people expect inflation to stay near 2% in the long run, and how the Fed's interest rate compares with simple rules of thumb.
Why it matters
Inflation decides how far a paycheck or a savings balance goes, and the Fed's interest rate affects loan, mortgage and savings rates. Knowing whether inflation is cooling or spreading, and whether the policy rate is high or low compared with common benchmarks, helps explain the pressures on borrowing costs. These are descriptions of current conditions, not forecasts of what the Fed will do.
How it works
First the model measures price growth over 12 months and over the last 3 months, since the shorter window shows recent momentum. It then blends five different inflation measures into one common trend, using a method that finds what they share, so one unusual measure does not dominate. Next it reads market prices for inflation-protected bonds to see what inflation investors expect 5 to 10 years ahead. Finally it plugs inflation and slack in the job market into a simple formula, a policy rule, to see what interest rate that rule would suggest. The rule works like a thermostat setting: when the room (inflation) runs hot or the furnace (the job market) runs strong, the rule says turn the dial (the interest rate) up.
The latest readings
Core PCE prices, which leave out food and energy, are 3.01% higher than a year ago. That is 1.01 percentage points above the Fed's 2% target.
Simple exampleIf a basket of everyday things (leaving out food and fuel, which jump around a lot) cost $100 a year ago and $103 today, prices rose 3%. This number is that yearly rise. The Fed aims for about 2%, so a higher number means prices are climbing faster than it wants.
Model noteCore PCE prices are 3.01% above a year ago, +1.01pp versus the Fed's 2% target.
Typical rangeBetween 1.54 and 2.29 in half of all readings since Jan 2000 (middle 50%; the outer 10th to 90th percentile band is 1.28 to 3.22). The latest reading sits at the 87th percentile.
Over the last three months core PCE prices rose at a 2.05% annual pace, 0.96 points below the 12-month rate. A recent pace below the yearly pace means inflation momentum is slowing.
Simple exampleA runner's average speed over a whole race can differ from their speed on the last few laps. This is the price rise over just the last three months, stretched to a yearly pace. If it sits below the yearly figure, price growth has been slowing lately; above it, speeding up.
Model noteOver the last three months core PCE ran at a 2.05% annualized pace, below the 12-month rate by 0.96pp (decelerating momentum).
Typical rangeBetween 1.45 and 2.57 in half of all readings since Jan 2000 (middle 50%; the outer 10th to 90th percentile band is 1.13 to 3.56). The latest reading sits at the 56th percentile.
Blending five inflation measures into one common trend puts underlying inflation at 2.22%, modestly above the 2% target. Because the headline core PCE figure is 0.79 points above this broad trend, the extra inflation appears concentrated in a narrower set of prices rather than spread widely.
Simple exampleAsk five thermometers in the same room and each reads a bit differently. This blends five ways of measuring price rises and keeps the part they agree on, giving a steadier sense of the true trend. If the main measure is well above it, the extra may be coming from just a few items.
Model noteThe common component of five core/trimmed/median/sticky measures puts underlying inflation at 2.22% in core-PCE units (modestly above the 2% target), so reported core PCE is 0.79pp above the broad trend: the overshoot is narrow, not shared by the trimmed/median/sticky measures.
Typical rangeBetween 1.48 and 2.23 in half of all readings since Jan 2000 (middle 50%; the outer 10th to 90th percentile band is 1.14 to 3.12). The latest reading sits at the 74th percentile.
Bond market prices imply average inflation of 2.33% for the period 5 to 10 years from now, close to the roughly 2.25% that fits a 2% Fed target. By the model's yardstick this counts as anchored, though its z-score of +0.98 sits just under the threshold of 1, so it is near the edge of that range.
Simple exampleBond prices let you read what investors expect prices to do far ahead, here the average yearly rise from 5 to 10 years from now. It is like asking people how much they think a movie ticket will cost in a decade. Expectations close to the Fed's goal are called anchored.
Model noteMarket-implied CPI inflation 5-10 years ahead is 2.33%, +0.08pp from the ~2.25% consistent with a 2% PCE target; on the 2026-10 month-to-date average (11 trading days) its z vs the prior 10 years is +0.98 and its distance from 2.25% is 0.09pp, so long-run expectations look anchored, though close to the |z| = 1 threshold (anchored = |z| < 1 and distance < 0.25pp).
Typical rangeBetween 2.09 and 2.46 in half of all readings since Jan 2, 2003 (middle 50%; the outer 10th to 90th percentile band is 1.81 to 2.61). The latest reading sits at the 56th percentile.
Using a neutral rate of 1.09%, core inflation of 3.01% and an output gap of +0.58%, the balanced-approach rule suggests a policy rate of 5.19%. This is a mechanical benchmark, not a recommendation or a forecast of Fed decisions.
Simple exampleThink of a recipe for setting the Fed's interest rate: start from a neutral setting, add current inflation, then add more if prices rise faster than 2% or the economy runs hot. This number is what that recipe gives. It is a simple yardstick, not what the Fed must or will do.
Model noteWith HLW r* = 1.09%, core PCE at 3.01% and an Okun output gap of +0.58%, the balanced-approach rule prescribes a 5.19% policy rate.
Typical rangeBetween -0.364 and 5.17 in half of all readings since Jan 2000 (middle 50%; the outer 10th to 90th percentile band is -5.54 to 7.51). The latest reading sits at the 76th percentile.
The actual fed funds rate (3.63% average for the month) is 1.56 points below the balanced rule's suggestion. By that rule, policy is looser than the formula would set it.
Simple exampleThis compares the Fed's actual interest rate with what the simple recipe suggests. Like comparing a thermostat's setting to what a rule of thumb says it should be: below the recipe means policy is looser than the rule would set it, above means tighter.
Model noteThe effective fed funds rate (3.63% monthly average) is 1.56pp below the balanced-approach prescription, i.e. policy is looser than that rule.
Typical rangeBetween -1.89 and 0.647 in half of all readings since Jan 2000 (middle 50%; the outer 10th to 90th percentile band is -2.80 to 5.63). The latest reading sits at the 36th percentile.
After subtracting expected inflation, the fed funds rate is 0.90%, just 0.10 points below the estimated neutral rate of 1.01%. On this gauge policy is roughly neutral, neither clearly pressing on the economy nor clearly boosting it.
Simple exampleThe neutral rate is like coasting on a flat road: neither pressing the gas nor the brake on the economy. This takes the Fed's rate, removes expected inflation, and compares it to that neutral level. Above neutral leans toward braking, below leans toward pressing the gas, and near zero is close to coasting.
Model noteThe real fed funds rate (vs Cleveland Fed 1-yr expected inflation) is 0.90%, 0.10pp below HLW r* (1.01%), so policy is roughly neutral on this gauge (fed funds is a month-to-date average).
Typical rangeBetween -2.69 and -0.641 in half of all readings since Jan 2000 (middle 50%; the outer 10th to 90th percentile band is -3.57 to 0.572). The latest reading sits at the 84th percentile.
The lines show core PCE inflation over 12 months, the same index at a 3-month annualized pace, and the trimmed-mean measure that drops the most extreme price changes each month. Higher lines mean faster price growth; the 3-month line is the jumpiest and often turns first. When the 3-month line sits below the 12-month line, recent momentum is slowing.
Simple exampleEach line tracks how fast prices are rising. One uses the past 12 months, one uses just the last 3 months at a yearly pace, and one trims away the wildest price swings each month. The 3-month line is the jumpiest, like recent lap times, and often turns before the others.
The lines show the actual fed funds rate, the rate suggested by the balanced-approach rule, and the estimated neutral rate (HLW r*). When the fed funds line is below the rule line, policy is looser than the rule; when above, tighter. The gap between them is a rough measure of how far policy differs from this simple benchmark.
Simple exampleThree lines: the Fed's actual interest rate, the rate a simple recipe suggests, and the neutral rate that neither speeds up nor slows the economy. When the actual line sits below the recipe line, policy is looser than the rule; above it, tighter. The gap shows how far they differ.
These turn the price index into a 3-month pace stretched to a yearly rate and a plain 12-month change; momentum is the first minus the second.
Simple exampleThese two formulas turn a price list into speeds. One compares prices to a year ago; the other looks at the last three months and asks how big the rise would be if that pace lasted a whole year. Momentum is the difference, like recent lap speed minus average race speed.
- P_tseasonally adjusted price index in month t (for example core PCE)
- \text{SAAR3}_t3-month price change expressed as an annual rate
- \text{YoY}_tprice change versus the same month a year earlier
Five standardized inflation measures are combined with weights that capture what they have in common, and the result is rescaled into core-PCE percent units.
Simple exampleFive price measures are first put on the same scale, like converting scores from different tests to a common grade. Then the formula finds the pattern they all share and turns it back into ordinary inflation units, so the common trend can be read like a normal inflation rate.
- z_tthe five inflation measures in month t, each rescaled to average 0 and spread 1
- wweights from principal component analysis (the direction of greatest shared movement)
- f_tcommon inflation component in month t
- \hat{a}, \hat{b}regression coefficients that convert the component into core-PCE units
The output gap is estimated from the job market: each point of unemployment below its normal level counts as 2% of extra output.
Simple exampleThis uses the job market as a gauge of how busy the economy is, like judging a restaurant by how many tables are empty. Fewer people out of work than normal means the economy is running above its usual speed; more means below.
- u_tunemployment rate in month t
- u^{*}_tCBO estimate of the normal (noncyclical) unemployment rate
- \text{gap}_toutput gap: how far the economy is running above (positive) or below (negative) its potential, in percent
The balanced-approach rule sets a suggested policy rate equal to the neutral real rate plus inflation, plus extra when inflation is above 2% or the economy is running hot.
Simple exampleThis is the rate-setting recipe written out: start with the neutral rate, add inflation, then add extra when inflation is above 2% or the economy is running hot, and subtract when either is below. It is a benchmark for comparison, not an instruction.
- i_tpolicy rate suggested by the rule, in percent
- r^{*}neutral real interest rate (HLW estimate)
- \pi_tcore PCE inflation over the past 12 months
- \text{gap}_toutput gap from the unemployment-based formula above
- Core PCE
- A price index for what households pay for, excluding food and energy, which swing a lot. It is the Fed's preferred inflation gauge.
- Percentage point (pp)
- The plain difference between two percentages. Going from 2% to 3% is a rise of 1 percentage point.
- Trimmed-mean, median and sticky inflation
- Alternative inflation measures that drop extreme price changes or focus on prices that change slowly, to show the broad trend.
- Breakeven inflation (5y5y)
- The inflation rate implied by comparing regular and inflation-protected government bonds. The 5y5y version looks at the 5-year period starting 5 years from now.
- Anchored expectations
- When long-run inflation expectations stay near the central bank's target even as current inflation moves around.
- z-score
- How many standard deviations a value sits from its recent average. Here the window is the prior 10 years.
- Fed funds rate
- The overnight interest rate banks charge each other, which the Federal Reserve targets as its main policy tool.
- Neutral rate (r*)
- The inflation-adjusted interest rate that would neither speed up nor slow down the economy. It cannot be observed and is estimated with wide uncertainty; HLW refers to the Holston-Laubach-Williams estimate.
- Policy rule
- A simple formula that maps inflation and economic slack into a suggested interest rate. It is a benchmark, not what the Fed must do.
Full technical specification (for specialists)
Model
Inflation decomposition, expectations anchoring and policy-rule gaps
Specification
YoY_t = (P_t / P_{t-12} - 1) * 100; P_t = monthly SA price index (CPIAUCSL, CPILFESL, PCEPI, PCEPILFE).SAAR3_t = ((P_t / P_{t-3})^4 - 1) * 100; SAAR6_t = ((P_t / P_{t-6})^2 - 1) * 100.Momentum_t = SAAR3_t(core PCE) - YoY_t(core PCE), percentage points.Underlying inflation: x_t = [core CPI YoY, core PCE YoY, trimmed-mean PCE 12m, median CPI 12m, sticky CPI 12m]; z_jt = (x_jt - mean_j) / sd_j (sd with ddof=1); C = Z'Z/(n-1) (correlation matrix); C w = lambda_1 w with ||w||=1 and lambda_1 the largest eigenvalue, sign set so sum(w) > 0; f_t = z_t' w (PC1 score); variance share = lambda_1 / trace(C) = lambda_1 / 5; core_PCE_YoY_t = a + b f_t + e_t (OLS), underlying_t = a_hat + b_hat f_t (% in core-PCE units). One-sided version: mean_j, sd_j, w, a, b re-estimated each month on data from the start of the common sample through t only (expanding window, minimum 120 months), evaluated at t. Full-sample version uses the whole common sample (in-sample). The fitted value is invariant to the sign of w.Anchoring: m_t = calendar-month average of daily T5YIFR; anchor_z_t = (m_t - mean(m_{t-120..t-1})) / sd(m_{t-120..t-1}) (prior 120 months, ddof=1, current month excluded from the window); anchor_abs_dev_t = |m_t - 2.25|. Verdict (judgmental thresholds): anchored if |anchor_z| < 1 and anchor_abs_dev < 0.25pp; drifting if |anchor_z| < 2 and anchor_abs_dev < 0.5pp; otherwise not anchored.Daily-to-monthly conversion: X_m = (1/N_m) sum_{d in month m} X_d over the N_m available observations in the calendar month (arithmetic mean, not month-end); DFF is a 7-day series, so FF_m is the calendar-day average, the definition of the Fed Board's monthly FEDFUNDS.CBO output gap: ygap_q = 100 (GDPC1_q / GDPPOT_q - 1), percent of potential (spec). Deviation: the Fed 'Policy Rules and How Policymakers Use Them' page measures the gap as the log difference 100 ln(GDPC1/GDPPOT); the percent difference is kept because the spec mandates it; the two differ by about ygap^2/200 (0.01pp at a 1.4% gap; see diagnostics.convention_sensitivity).Okun output gap: ygap_t = -2 (UNRATE_t - NROU_q(t)), NROU_q(t) = CBO value of the quarter containing t. Deviation: Okun (1962) estimated about 3 (roughly 2.8-3.3 across his three methods); 2 is the modern Fed/CBO convention used in the spec. With it, the Taylor-1993 and balanced rules below equal the Monetary Policy Report's unemployment-gap forms, 1.0 (u* - u) and 2.0 (u* - u). Used because the unemployment rate is monthly and timely, unlike quarterly GDP.Taylor (1993), Taylor's eq. (1): i_t = r* + pi_t + 0.5 (pi_t - pi*) + 0.5 ygap_t, with pi_t = core PCE YoY, pi* = 2. Deviations from the paper: Taylor used the GDP-deflator inflation rate over the prior four quarters and real GDP's percent deviation from a 2.2% trend; here core PCE and the Okun gap are used (spec). Deviation from the Fed 'Policy Rules' page convention: there pi is the four-quarter LOG difference of the QUARTERLY-AVERAGE core PCE index; here pi is the 12-month PERCENT change of the MONTHLY index (spec; monthly timeliness). The measured difference is reported in diagnostics.convention_sensitivity (pi_diff_pp; the log-vs-percent part alone is about pi^2/200, 0.04pp at 3%). Variants: r* = 2 (taylor1993_r2) and r* = HLW (taylor1993_hlw).Balanced approach (Fed MPR): i_t = r* + pi_t + 0.5 (pi_t - pi*) + 1.0 ygap_t; r* = HLW; ygap = Okun (balanced_hlw_okun) or CBO (balanced_hlw_cbo).Inertial (Fed MPR, quarterly i_t = 0.85 i_{t-1} + 0.15 [balanced prescription]) converted to monthly: i_t = rho_m i_{t-1}^{actual} + (1 - rho_m) balanced_hlw_okun_t, rho_m = 0.85^(1/3) = 0.947268 (so rho_m^3 = 0.85: the weight on the rate three months earlier matches the quarterly rule); i_{t-1}^{actual} = previous month's average effective fed funds rate.Policy gap: gap_okun_t = FF_t - balanced_hlw_okun_t; gap_cbo_t = FF_t - balanced_hlw_cbo_t; FF_t = calendar-month average of daily DFF. Positive = policy tighter than the rule.Real policy rate_t = FF_t - EXPINF1YR_t; real-rate gap_t = real policy rate_t - r*_HLW,t.
Limitations
- All data are latest-vintage (revised); historical rule prescriptions, gaps and the one-sided underlying-inflation history include data revisions and are not real-time.
- HLW one-sided estimates in the NY Fed file are re-estimated with the latest data and parameters, so they are not real-time vintages either; r* is very imprecisely estimated (wide confidence bands).
- HLW estimates were first published in 2016 (Holston, Laubach & Williams, FEDS 2016-073), so the 6-month publication lag is stylized for all earlier history. The NY Fed suspended HLW updates from 2020-11-30 to 2023-05-19 (no 2020Q3 release; 2020Q3-2022Q4 first posted on 2023-05-19), so rstar_hlw and every r*-based rule and gap for 2021-01 to 2023-05 (29 months) use quarters that were not published at the time. rstar_hlw_published is the published-only variant (2020Q2 carried forward to 2023-05); diagnostics.alignment.hlw_suspension gives the size of the difference.
- The full-sample underlying-inflation series and full-sample loadings are in-sample; the 'underlying' column is the one-sided expanding-window version (identical at the last date).
- BLS published no October-2025 CPI or unemployment rate (2025 federal shutdown): CPI-based YoY for 2025-10 (and 2026-10 when it arrives), CPI SAARs spanning that month, the Okun gap and rules for 2025-10, and the underlying-inflation value for 2025-10 are missing (left null, not interpolated).
- Simple rules are benchmarks, not optimal policy; the Okun coefficient of 2 and the CBO potential output are themselves uncertain.
- GDP first-publication dates are ALFRED vintage dates (the St. Louis Fed's record of each release). If ALFRED lacks a release, the derived date is later than the true one (conservative: no look-ahead). Quarters already in ALFRED's earliest vintage (1958-12-21) have no exact date and get the fixed rule; none of them is used in any output month (diagnostics.alignment.cbo_publication_delays.months_using_quarter_without_first_release). Only the timing is real-time; the GDP values themselves are latest vintage.
- The anchoring z-score excludes the current month from its 10-year window; including it changes z slightly (diagnostics.latest_anchor.z_sensitivity_window_including_current_month). The anchoring verdict thresholds are judgmental.
- Breakeven-based measures include inflation risk and liquidity premia, so the 5y5y is not a pure expectation.
- The real-rate gap uses a 1-year expected inflation model (Cleveland Fed) while HLW r* is a longer-run concept.
References
- Taylor, J. B. (1993). Discretion versus policy rules in practice. Carnegie-Rochester Conference Series on Public Policy 39, 195-214.
- Board of Governors of the Federal Reserve System. Policy Rules and How Policymakers Use Them (Monetary Policy Principles and Practice), and Monetary Policy Report, 'Monetary Policy Rules' box (Taylor 1993, balanced-approach and inertial rule specifications).
- Holston, K., Laubach, T. & Williams, J. C. (2023). Measuring the Natural Rate of Interest after COVID-19. Federal Reserve Bank of New York Staff Report No. 1063 (one-sided estimates, NY Fed).
- Okun, A. M. (1962). Potential GNP: Its Measurement and Significance. Proceedings of the Business and Economic Statistics Section, American Statistical Association, 98-104.
- Congressional Budget Office. Budget and Economic Outlook: real potential GDP (GDPPOT) and noncyclical rate of unemployment (NROU).
- Dolmas, J. (2005). Trimmed mean PCE inflation. Federal Reserve Bank of Dallas Working Paper 0506.
- Bryan, M. F. & Cecchetti, S. G. (1994). Measuring core inflation. In N. G. Mankiw (ed.), Monetary Policy, NBER/University of Chicago Press, 195-215 (Cleveland Fed median CPI).
- Bryan, M. F. & Meyer, B. (2010). Are some prices in the CPI more forward looking than others? Federal Reserve Bank of Atlanta Economic Commentary 2010-2 (sticky-price CPI).
- Jolliffe, I. T. (2002). Principal Component Analysis, 2nd ed. Springer (correlation-matrix PCA).
What are interest rates signaling?
This model describes the shape of government bond interest rates in the US and Japan, splits recent moves in long-term rates into their likely causes, and estimates the chance of a US recession within a year.
Why it matters
Long-term government bond rates feed into mortgage rates, car loans and business borrowing costs. The gap between short and long rates has historically carried information about recession risk, which matters for job security and business planning. Knowing why long rates moved helps separate expected Fed policy from extra compensation lenders demand for uncertainty.
How it works
The model fits a smooth curve through interest rates at different loan lengths each day, summarizing it with three numbers: overall level, slope and a mid-range bend. It then uses published estimates from the New York Fed to split the 10-year rate into the average short-term rate investors expect and an extra term premium. Finally a probit model, a statistical tool for yes-or-no outcomes, learns from past decades how the slope of the curve, a measure of credit market stress and the inflation-adjusted Fed rate lined up with later recessions. It works a bit like a weather forecaster who has seen many past skies: today's pattern is compared with past patterns that came before storms.
The latest readings
The 10-year US Treasury yields 5.10%. This is the interest rate the US government pays to borrow for 10 years, and many long-term loan rates move with it.
Simple exampleWhen you lend a friend $100 for a year and they promise $105 back, the extra $5 is a 5% interest rate. This number is that rate for lending to the US government for 10 years. When it is higher, mortgages and other long loans usually cost more too.
Model noteThe 10-year Treasury (par CMT) yields 5.10%.
Typical rangeBetween 2.26 and 4.34 in half of all readings since Jan 3, 2000 (middle 50%; the outer 10th to 90th percentile band is 1.68 to 4.92). The latest reading sits at the 93th percentile.
The 10-year rate is 82 basis points (0.82 percentage points) above the 3-month rate, so the yield curve slopes upward. An upward slope is the usual shape; an inverted curve, with short rates above long rates, has often come before recessions.
Simple exampleUsually, tying your money up for longer earns you more, just as a 10-year savings deal normally pays more than a 3-month one. This gap compares the two. A positive gap is the normal shape; when short loans pay more than long ones, that unusual flip has often shown up before past recessions.
Model noteThe curve is upward sloping by 82 bp between 3 months and 10 years.
Typical rangeBetween 0.300 and 2.44 in half of all readings since Jan 7, 2000 (middle 50%; the outer 10th to 90th percentile band is -0.363 to 3.18). The latest reading sits at the 36th percentile.
The fitted curve's overall level is 5.45%, its slope is 1.25 points and its mid-range bend is -0.46 points. The smooth curve misses actual yields by 8.6 basis points on average, so it describes the curve closely.
Simple examplePicture interest rates for every loan length plotted as dots, then a smooth line drawn through them. Three dials shape that line: how high it sits, how steeply it tilts, and whether it bulges in the middle. The miss size tells you how closely the smooth line hugs the real dots.
Model noteDiebold-Li factors: level 5.45%, slope (-beta2) 1.25 pp, curvature (beta3) -0.46 pp; fit RMSE 8.6 bp.
Typical rangeBetween 3.01 and 5.00 in half of all readings since Jan 7, 2000 (middle 50%; the outer 10th to 90th percentile band is 2.39 to 5.70). The latest reading sits at the 85th percentile.
Japan's 10-year government bond yields 2.95%. Its curve also slopes upward, with the 10-year rate 1.30 points above the 1-year rate.
Simple exampleThis is the same idea as the US 10-year rate, but for lending to Japan's government for 10 years. Comparing countries is like comparing rent in two cities: it shows where borrowing for a long time costs more or less.
Model noteThe 10-year JGB yields 2.95%; the 10y-1y slope is 1.30 pp and NS -beta2 is 1.52 pp.
Typical rangeBetween 0.257 and 1.44 in half of all readings since Jan 4, 2000 (middle 50%; the outer 10th to 90th percentile band is 0.026 to 1.71). The latest reading sits at the 100th percentile.
By the ACM estimate, lenders get about 0.75% a year of extra return for lending to the government for 10 years instead of rolling over short-term loans. A second model, Kim-Wright, puts this term premium at 1.07%, a reminder that it is estimated, not observed.
Simple exampleLending for 10 years in one go is riskier than lending for one year and renewing each year, since a lot can change. The term premium is the extra pay lenders ask for that commitment, a bit like a longer phone contract sometimes costing more per month. It can even be negative. It is estimated, not seen directly, so different models disagree.
Model noteInvestors demand 0.75% a year of compensation for holding 10-year duration risk (ACM); Kim-Wright shows 1.07% as of 2026-10-09.
Typical rangeBetween -0.201 and 1.59 in half of all readings since Jan 3, 2000 (middle 50%; the outer 10th to 90th percentile band is -0.652 to 2.27). The latest reading sits at the 59th percentile.
Over the last three months the ACM term premium rose about 7 basis points. Of the +47 basis point rise in ACM's fitted 10-year yield, about +40 came from higher expected short-term rates and only +7 from the term premium, so most of the move reflects expectations about policy rates.
Simple exampleA long-term rate has two ingredients: what people expect short-term rates to be along the way, and the extra pay for committing long. This splits a recent move in the 10-year rate into those two pieces, like working out whether a bigger grocery bill came from pricier milk or a bigger basket.
Model noteSince 2026-07-15 ACM's fitted 10y zero-coupon yield moved +47 bp (10y par CMT: +55 bp): +40 bp from expected short rates and +7 bp from the term premium.
Typical rangeBetween -25.29 and 21.95 in half of all readings since Jan 3, 2000 (middle 50%; the outer 10th to 90th percentile band is -45.44 to 50.57). The latest reading sits at the 62th percentile.
Using only the slope of the yield curve, the model puts the chance of being in a recession in September 2027 at about 9%, with a 90% range of 4% to 13%. The New York Fed's similar model gives 13%.
Simple exampleLike a weather forecast saying 30% chance of rain, this is the model's estimated chance that the economy will be in a recession about a year from now, judged only from the gap between long and short interest rates. A higher number means the model sees more warning signs. It is an estimate, not a certainty.
Model noteThe term spread alone implies a 9% probability of recession in Sep 2027 (90% CI 4-13%; NY Fed model 13%).
Typical rangeBetween 1.54 and 15.79 in half of all readings since Jan 2000 (middle 50%; the outer 10th to 90th percentile band is 0.480 to 26.61). The latest reading sits at the 61th percentile.
Adding credit market stress and the inflation-adjusted Fed rate, the model puts the chance of a recession starting within the next 12 months at about 4%, with a 90% range of 0% to 7%. The Fed's own published estimate is 9%, so different models disagree by several points even though all are low.
Simple exampleThis forecast uses more clues than the slope alone: how nervous lenders are about lending to companies, and how high the Fed's rate is after inflation. Think of a doctor checking temperature, pulse and blood pressure instead of just one. Different forecasters often give somewhat different chances, and all are estimates.
Model noteSpread, excess bond premium and real policy rate imply a 4% probability of recession within 12 months (90% CI 0-7%; Fed's published estimate 9%).
Typical rangeBetween 0.785 and 26.59 in half of all readings since Jan 2000 (middle 50%; the outer 10th to 90th percentile band is 0.133 to 59.26). The latest reading sits at the 43th percentile.
Each line is a model's estimated probability of recession in the coming 12 months, on a scale from 0 (no chance) to 1 (certain). Two lines are this site's models and the third is the Fed's published estimate. Look for the lines climbing before and during past recessions; long stretches near zero mean the models saw little warning.
Simple exampleEach line is like a different weather forecaster's chance of rain, but for a recession in the coming year. Near the bottom means little chance, near the top means very likely. When the lines climb together, several forecasters are seeing the same warning signs; past recessions show how well they did.
The two lines are separate model estimates of the 10-year term premium: the extra yield lenders demand for lending for 10 years rather than rolling over short-term loans. A rising line means long-term borrowing is getting more expensive for reasons beyond expected Fed policy; a falling or negative line means lenders ask little or no extra. The two models often differ in level, so the shared direction of movement is more informative than either exact value.
Simple exampleTwo lines, two separate estimates of the extra pay lenders want for locking up money for 10 years. They are like two bathroom scales that give slightly different weights: the exact number matters less than whether both are going up or down. A climbing line means lenders are asking more for committing long.
The yield at each loan length is described by three numbers (level, slope and bend), fitted each day to the observed yields, with lambda fixed at 0.7308 per year.
Simple exampleThis is a recipe for drawing a smooth curve through interest rates at every loan length, using just three dials: overall height, tilt and middle bulge. Each day the dials are turned until the curve fits the real rates as closely as possible.
- y_t(\tau)yield in percent on day t for a loan of length tau years
- \beta_{1t}level: the long-run height of the curve
- \beta_{2t}slope factor (minus beta2 is the long-minus-short gap)
- \beta_{3t}curvature: the hump or dip in the middle of the curve
- \lambdafixed decay speed that sets where the bend peaks
- \varepsilon_t(\tau)fitting error
The 10-year yield is split into the average short-term rate investors expect over 10 years plus a term premium for lending long.
Simple exampleThink of a long-term rate as a bill with two lines: the average short-term rate people expect over the next 10 years, plus a tip for committing to lend that long. This formula simply says the total equals those two parts added together.
- y^{10}_tACM fitted 10-year zero-coupon yield
- y^{10,\text{RN}}_trisk-neutral yield: the expected average short-term rate
- \text{TP}^{10}_t10-year term premium
Model M1 turns the current yield-curve slope into a probability of being in recession exactly 12 months later.
Simple exampleThis works like a forecast machine with one input: the gap between long and short interest rates. It turns that gap into a chance between 0% and 100% that the economy is in recession a year later, using how that gap behaved before past recessions.
- \text{REC}_{t+12}1 if the US is in an official recession 12 months after month t, else 0
- S_tterm spread: 10-year yield minus the 3-month bill rate (bond-equivalent basis)
- \Phistandard normal cumulative distribution, which maps any number to a probability between 0 and 1
- a, bcoefficients estimated from past data
Model M2 adds credit market stress and the inflation-adjusted Fed rate to the slope to estimate the chance of any recession month in the next year.
Simple exampleSame forecast machine, but with three inputs instead of one: the rate gap, how worried lenders are about companies, and the Fed's rate after inflation. Each input gets a weight learned from history, and the total is converted into a chance between 0% and 100%.
- \text{EBP}_texcess bond premium: extra yield on corporate bonds beyond expected default losses, a gauge of credit stress
- \text{RFF}_treal fed funds rate: fed funds minus core PCE inflation over the prior year
- b_1, b_2, b_3coefficients estimated from past data
- Yield
- The annual interest rate a lender earns on a bond, given its current price.
- Basis point (bp)
- One hundredth of a percentage point. 82 bp equals 0.82 percentage points.
- Yield curve
- A line connecting yields on government bonds of different lengths, from months to decades.
- Term premium
- The extra yield lenders demand to lock money up for a long time instead of rolling over short loans. It cannot be seen directly and must be estimated.
- Nelson-Siegel (Diebold-Li) curve
- A formula that draws a smooth yield curve using just three numbers: level, slope and curvature.
- Probit model
- A statistical method that turns one or more inputs into the probability of a yes-or-no event, such as a recession.
- Excess bond premium (EBP)
- The part of corporate bond spreads not explained by default risk. Higher values signal more caution in credit markets.
- 90% interval
- A range the model expects to contain the true value 9 times out of 10, given its assumptions.
- JGB
- Japanese Government Bond, the debt issued by Japan's government.
Full technical specification (for specialists)
Model
Yield-curve factors, term premium and recession probits (US / Japan / euro area)
Specification
NS/Diebold-Li (DL 2006 eq. 3): y_t(tau) = b1_t + b2_t*[(1-exp(-lam*tau))/(lam*tau)] + b3_t*[(1-exp(-lam*tau))/(lam*tau) - exp(-lam*tau)] + e_t(tau); y_t(tau) yield in % at maturity tau (years), b1 level, b2 slope factor, b3 curvature, lam = 0.0609 per month * 12 = 0.7308 per year (curvature loading peaks at tau = 1.7932/0.0609 = 29.4 months). Estimated by OLS separately for each date t on the tenors observed that day (>= 6).Deviation from DL 2006: DL fit unsmoothed Fama-Bliss ZERO yields; here US = par CMT yields (DGS*), Japan = MoF par yields, euro area = ECB Svensson-fitted spot (zero) yields. Fitting NS to par yields treats them as zero yields (approximation; error grows with maturity and level).Fit error: rmse_bp_t = 100*sqrt( (1/n_t) * sum_i e_t(tau_i)^2 ), n_t = tenors observed on date t.slope_emp_t = y_t(10y) - y_t(3m) [Japan: y_t(10y) - y_t(1y), no 3m point]; neg_beta2_t = -b2_t (= y(inf) - y(0) in the NS model); curvature_emp_t = 2*y_t(2y) - y_t(short) - y_t(10y), short = 3m (US, EA) or 1y (Japan).lambda robustness: lam* = argmin_{lam in {0.10,0.11,...,2.00}} sum_t sum_i e_t(tau_i; lam)^2 over all fitted dates of a country (full-sample, in-sample).ACM identity (ACM 2013): ACMY10_t = ACMRNY10_t + ACMTP10_t; ACMY10 fitted 10y zero yield, ACMRNY10 risk-neutral (expected average short rate) yield, ACMTP10 term premium, all %. Change decomposition over h = 1, 3 months: dY = dRNY + dTP (+ identity residual), in bp, from the last obs on/before t - h months to t. dY is the change in ACM's fitted 10y ZERO-coupon yield, which differs from the change in the 10y par CMT yield (DGS10) of the us10y headline; the DGS10 change over the same dates is reported as d_dgs10_cmt_bp.BEY (Estrella-Trubin 2006): BEY_t = 100 * 365*d_t / (360 - 91*d_t), d_t = DTB3_t/100 (3-month bill discount rate in decimal); output in %.Term spread: S_t = mean_m(DGS10) - BEY(mean_m(DTB3)), calendar-month averages of daily data (BEY applied to the monthly average discount rate, as in the NY Fed workbook).M1 (Estrella-Mishkin 1998; Estrella-Trubin 2006): P(REC_{t+12} = 1 | S_t) = Phi(a + b*S_t), REC = NBER USREC 0/1, Phi standard normal CDF.M2 (spec; regressors after Favara et al. 2016): P(R_t = 1) = Phi(a + b1*S_t + b2*EBP_t + b3*RFF_t), R_t = 1 if USREC = 1 in any month t+1..t+12 (spec). M2 is the spec's specification, not a column of Favara et al. Table 1: their col. 2 also includes the predicted (default-risk) component of the GZ spread, which is omitted here (marginal effect -0.018, s.e. 0.057 in the paper); col. 1 uses the GZ spread + term spread + RFF and col. 3 EBP only. Their col. 2 marginal effects (term spread -0.092, EBP 0.300, RFF 0.017) are reported in diagnostics.recession_probit.M2 next to M2's marginal_effects_at_mean. Further deviations from the paper: Favara et al. define the window as months t..t+12 inclusive (here t+1..t+12, per the spec); Favara et al. do not state whether the bill rate is converted to a bond-equivalent basis (they define the term spread as the 10-year Treasury note yield minus the 3-month Treasury bill rate); this module uses the BEY conversion per the spec and the NY Fed. Their pseudo-R2 is McKelvey-Zavoina (reported here as mckelvey_zavoina_r2 alongside McFadden). EBP_t = Fed EBP file column `ebp` (pp). Validation-only replica: P(any REC in t..t+12) = Phi(a + b*EBP_t) (Favara et al. Table 1 col. 3) reproduces the Fed's published est_prob (corr ~0.9998).Real fed funds (Favara et al. 2016 definition): RFF_t = mean_m(DFF)_t - pi_{t-1}, pi_{t-1} = 100*[ln PCEPILFE_{t-1} - ln PCEPILFE_{t-13}] (core PCE log YoY lagged one month).Probit MLE: maximise logL(b) = sum_t [y_t ln Phi(x_t'b) + (1-y_t) ln Phi(-x_t'b)] by Newton-Raphson; score s_t = x_t*q_t*phi(q_t x_t'b)/Phi(q_t x_t'b), q_t = 2y_t-1.HAC covariance (Newey-West 1987): V = H^-1 S H^-1, H = -d2logL/db db', S = G0 + sum_{j=1}^{12} (1 - j/13)(Gj + Gj'), Gj = sum_t s_t s_{t-j}'.McFadden R2 = 1 - logL(b_hat)/logL_0, logL_0 = T[ybar ln ybar + (1-ybar) ln(1-ybar)]. AUC = (sum of ranks of p_hat among y=1 - n1(n1+1)/2)/(n1*n0). McKelvey-Zavoina (1975) R2 = Var(x_t'b_hat)/(Var(x_t'b_hat) + 1), variance over the estimation sample (ddof 0); the measure Favara et al. report.Current probability and 90% delta-method interval: p = Phi(x'b), se_p = phi(x'b)*sqrt(x' V_HAC x), CI = [p - 1.645 se_p, p + 1.645 se_p] clipped to [0,1].Real-time (one-sided) probabilities p_rt_T = Phi(x_T' b_hat(T)), b_hat(T) estimated on pairs with t <= T-12 (expanding window, >= 120 obs); a month whose fit does not converge is left null and listed in diagnostics.recession_probit.realtime.
Limitations
- NS factors and the lambda grid search are in-sample per date / full sample; the per-date OLS uses only same-day data (no look-ahead), but lambda* uses the full sample.
- Probit coefficients (p_m1, p_m2) are full-sample, in-sample estimates; p_m1_rt / p_m2_rt are one-sided expanding-window versions but still use latest-vintage data and ignore the NBER announcement lag.
- All data are latest vintage (revised): core PCE, EBP and USREC histories include revisions, so no historical value is point-in-time.
- Overlapping 12-month targets make observations serially dependent; HAC SEs address this but the effective number of recessions (8 since 1962) is small.
- ACM and Kim-Wright are third-party model outputs (NY Fed, Fed Board) taken as published; KW is published with a lag relative to ACM.
- The Fed's published est_prob is an EBP-only model on a t..t+12 window, so the spec's M2 is not expected to match it (corr ~0.66, below the spec's 0.7 expectation).
- With lambda fixed at the Diebold-Li value the JGB curve (long-end hump near 25-30y) gets a large negative beta3 and RMSE ~10-20bp; lambda* for Japan is much lower (see diagnostics).
- The ECB curve is itself a Svensson fit, so NS RMSE for the euro area mostly measures NS-vs-Svensson shape differences, not pricing errors.
- The tenor set changes across dates (cached data): US 1m starts 2001-07, 3m/6m 1981-09, 2y 1976-06, 7y 1969-07, 30y 1977-02, and the US 20y has a gap 1987-01 to 1993-09; Japan 10y starts 1986-07, 20y 1986-12, 15y 1991-08, 30y 1999-09, 40y 2007-11, and the JGB 1y/2y/3y have gaps in 1978-1980.
References
- Nelson, C. R. & Siegel, A. F. (1987). Parsimonious modeling of yield curves. Journal of Business 60(4), 473-489.
- Diebold, F. X. & Li, C. (2006). Forecasting the term structure of government bond yields. Journal of Econometrics 130(2), 337-364.
- Adrian, T., Crump, R. K. & Moench, E. (2013). Pricing the term structure with linear regressions. Journal of Financial Economics 110(1), 110-138.
- Kim, D. H. & Wright, J. H. (2005). An arbitrage-free three-factor term structure model and the recent behavior of long-term yields and distant-horizon forward rates. FEDS Working Paper 2005-33, Federal Reserve Board.
- Estrella, A. & Mishkin, F. S. (1998). Predicting U.S. recessions: financial variables as leading indicators. Review of Economics and Statistics 80(1), 45-61.
- Estrella, A. & Trubin, M. R. (2006). The yield curve as a leading indicator: some practical issues. FRBNY Current Issues in Economics and Finance 12(5).
- Gilchrist, S. & Zakrajsek, E. (2012). Credit spreads and business cycle fluctuations. American Economic Review 102(4), 1692-1720.
- Favara, G., Gilchrist, S., Lewis, K. F. & Zakrajsek, E. (2016). Recession risk and the excess bond premium. FEDS Notes, April 8, 2016, Federal Reserve Board.
- McKelvey, R. D. & Zavoina, W. (1975). A statistical model for the analysis of ordinal level dependent variables. Journal of Mathematical Sociology 4(1), 103-120.
- Newey, W. K. & West, K. D. (1987). A simple, positive semi-definite, heteroskedasticity and autocorrelation consistent covariance matrix. Econometrica 55(3), 703-708.
How bad could growth get?
This model estimates not just the most likely path for US economic growth over the next year, but also how weak growth could be in a bad-luck scenario, given today's financial conditions.
Why it matters
Averages hide risk: a typical forecast can look fine while the chance of a sharp slowdown quietly grows. For workers, students entering the job market and small-business owners, the downside matters as much as the middle case. This model focuses on that downside, the weak tail of possible outcomes.
How it works
The model looks back over decades of data and asks how growth over the next quarter or year related to two things known today: recent GDP growth and a financial conditions index, which rises when credit is tight and markets are stressed. Instead of fitting one average line, it uses quantile regression to fit separate lines for bad, middle and good outcomes. A smooth curve, called a skewed t distribution, is then fitted through those points to fill in the whole range of possibilities. Think of planning a commute: the average trip may be fine, but what matters on an important day is how long the worst 1-in-20 trips take, and that bad-day time grows when the roads are icy.
The latest readings
In 1 out of 20 situations like today, average real GDP growth over the next year would come in at or below about 1.17% a year, according to the model. This is the Growth-at-Risk figure, and since it is still positive, the model's bad-luck case is weak growth rather than shrinking output.
Simple exampleWeather forecasts sometimes give a cold-snap scenario as well as a typical day. This is the economy's version: in roughly 1 out of 20 situations like today, average growth over the next year would be this low or lower, by the model's estimate. A positive number means even that bad case is slow growth, not shrinking.
Model noteIn 1 of 20 cases like today, average real GDP growth over the next year would be at or below this (model-implied, NFCI + GDP growth).
Typical rangeBetween 0.471 and 1.33 in half of all readings since Jan 2000 (middle 50%; the outer 10th to 90th percentile band is -0.129 to 1.79). The latest reading sits at the 65th percentile.
The middle (median) estimate for average real GDP growth over the next four quarters is about 2.94% a year. Half of the model's outcomes are above this and half below.
Simple exampleLine up all the outcomes the model thinks are possible for growth over the next year, from worst to best, and pick the one in the middle. That is this number: half of the outcomes are higher and half are lower. It is an estimate, not a promise.
Model noteCentral (median) model-implied path for average real GDP growth over the next four quarters.
Typical rangeBetween 2.72 and 2.99 in half of all readings since Jan 2000 (middle 50%; the outer 10th to 90th percentile band is 2.53 to 3.11). The latest reading sits at the 69th percentile.
For the next quarter alone, the 1-in-20 bad case is growth of about -0.18% at an annual rate, meaning output would slightly shrink. Single quarters swing more than four-quarter averages, so this tail sits lower.
Simple exampleThis is the 1-in-20 bad case, but for just the next three months instead of a full year. A single quarter is like one game rather than a whole season: results swing more, so its bad case usually sits lower. A negative number means output would shrink in that bad case.
Model note5th-percentile model-implied annualized real GDP growth for the next quarter.
Typical rangeBetween -0.877 and -0.020 in half of all readings since Jan 2000 (middle 50%; the outer 10th to 90th percentile band is -1.54 to 0.502). The latest reading sits at the 62th percentile.
Averaging across the worst 5% of outcomes for the next year gives growth of about 0.66% a year. Treat this as approximate: the fitted curve hit a limit of its settings (nu = 30), and its 5% point is 1.14 versus 1.17 from the regression.
Simple exampleRather than only asking where the worst 1 in 20 outcomes start, this averages all of them, like averaging your five worst test scores instead of noting the cutoff. It shows how deep the bad cases go, and it rests on a fitted curve, so treat it as approximate.
Model noteAverage growth in the worst 5% of model-implied outcomes over the next year; approximate, because the fitted skewed t is at its nu = 30 bound and misses the four quantile-regression quantiles by 0.060 pp RMSE (its 5% quantile is 1.14 vs 1.18 from the regression).
Typical rangeBetween -0.906 and 0.819 in half of all readings since Jan 2000 (middle 50%; the outer 10th to 90th percentile band is -2.79 to 1.34). The latest reading sits at the 65th percentile.
When a measure of news and consumer sentiment is added to the model, the 1-in-20 bad case for next-year growth is about 1.51% a year. This version uses a shorter sample starting in 2002, so it rests on fewer observations.
Simple exampleThis is the same 1-in-20 bad case, but the model also listens to a measure of news and consumer mood, like asking how people feel in addition to checking the numbers. It uses a shorter history, so it rests on fewer examples.
Model noteSame 5% tail when the one-sided sentiment factor is added (2002-onward sample).
Typical rangeBetween 0.471 and 1.57 in half of all readings since Jan 2002 (middle 50%; the outer 10th to 90th percentile band is -0.894 to 2.16). The latest reading sits at the 68th percentile.
Adding sentiment improves the in-sample fit of the 5% bad-case line by 0.031 on a 0-to-1 scale, but random unrelated data improve it by a median of 0.010, and tests give p-values of 0.10 to 0.12. That means there is no statistically significant evidence that sentiment shifts the bad-case tail, and in a test on unseen data the gain was -0.050.
Simple exampleTo check whether a new clue really helps, compare it with adding random, meaningless data. If the new clue helps only a little more than random noise, as here, there is no solid evidence it adds anything. A test on data the model had not seen is the stricter check.
Model noteIn-sample improvement in the 5%-quantile fit from adding sentiment; it cannot be negative for nested models (irrelevant random regressors score a median 0.010), and against persistence-matched placebos and time-shifted sentiment its p = 0.10 to 0.12, i.e. no statistically significant evidence (5% level) that sentiment shifts the 5% tail (recursive out-of-sample quantile-score gain -0.050).
At each date, the three lines show the model's estimated 5th percentile (bad case), median (middle case) and 95th percentile (good case) for average real GDP growth over the following four quarters. A wider gap between the lines means more uncertainty, and a falling bottom line means a fatter downside tail. Look for the lower line dropping sharply when financial conditions tightened during past crises and recessions.
Simple exampleThree lines, like a forecast that gives the coldest likely day, a typical day and the warmest likely day. Here they are a bad case, the middle case and a good case for growth over the next year. When the lines spread apart, the future looks less certain; when the bottom line drops, the bad case looks worse.
The outcome being predicted is average real GDP growth over the next h quarters, expressed as an annual percent rate.
Simple exampleThis sets what is being predicted: the average yearly pace of economic growth over the next one or four quarters. It is like turning a trip's total distance into an average speed per hour, so short and long stretches can be compared fairly.
- y^{(h)}_{t+h}annualized average growth from quarter t to quarter t+h, in percent
- hhorizon: 1 quarter or 4 quarters
- \text{GDP}_treal GDP in quarter t
Quantile regression picks the line that best tracks a chosen percentile of outcomes by penalizing misses above and below it unequally.
Simple exampleMost methods aim a line through the middle of the data. This one aims it at a chosen level, like the bottom 5%, by charging different penalties for misses above and below, so the line settles where only about 1 in 20 outcomes fall under it.
- \tauthe percentile targeted, from 0.05 (bad case) to 0.95 (good case)
- x_tinputs in quarter t: a constant, the financial conditions index (NFCI) and current GDP growth
- \rho_{\tau}the check loss, which weights misses by tau or 1 minus tau depending on their sign
- \mathbf{1}\{u<0\}equals 1 if the miss is negative, otherwise 0
- \hat{\beta}_{\tau}estimated coefficients for percentile tau
Plugging today's inputs into each fitted line gives the predicted percentile of future growth; the 5% value is the Growth-at-Risk.
Simple exampleOnce the lines are fitted, today's conditions are plugged in, like entering today's numbers into a recipe. Each line gives one level of possible future growth; the bottom-5% one is the Growth-at-Risk figure.
- \hat{Q}(\tau \mid x_t)predicted tau-percentile of growth given today's conditions
Expected shortfall averages growth across the worst 5% of outcomes from the fitted skewed t distribution.
Simple exampleThis averages the outcomes in the worst 5% of the model's fitted range of possibilities, like averaging the scores of your worst 1 in 20 games, so you see how bad the bad cases are on average, not just where they begin.
- F^{-1}(u)the growth value at percentile u of the fitted skewed t distribution
- upercentile level running from 0 to 0.05
- Growth-at-Risk
- The growth rate that the model expects to be beaten 95% of the time; only in the worst 5% of cases would growth be lower.
- Percentile (quantile)
- A cut-off point in a range of outcomes. The 5th percentile is the value below which only 5% of outcomes fall.
- Median
- The middle outcome: half are higher and half are lower.
- Quantile regression
- A method that fits a line to a chosen percentile of outcomes instead of to the average.
- Financial conditions index (NFCI)
- A Chicago Fed index of how easy or hard it is to borrow and how stressed markets are. Higher means tighter conditions.
- Skewed t distribution
- A flexible bell-shaped curve that can lean to one side and have fatter tails, used to fill in the full range of outcomes.
- Expected shortfall
- The average outcome within the worst slice of cases, here the worst 5%.
- p-value
- How often a result this large would appear by chance if there were no real effect. Values above 0.05 are usually treated as not statistically significant.
Full technical specification (for specialists)
Model
Growth-at-Risk (quantile regressions + skewed t), sentiment-augmented
Specification
Target (ABG Sec. 2): y^{(h)}_{t+h} = (400/h)(ln GDPC1_{t+h} - ln GDPC1_t), h in {1,4}: annualized average real GDP growth in % between quarter t and t+h.Regressors x_t: baseline [1, NFCI_t, g_t]; sentiment model [1, NFCI_t, g_t, S_t]. NFCI_t = mean of the weekly NFCI observations dated in quarter t; g_t = 400(ln GDPC1_t - ln GDPC1_{t-1}) (% annualized log growth); S_t = mean of the three monthly one-sided sentiment factor values in quarter t (upstream sentiment.factor_onesided).Quantile regression (ABG eq. 1; Koenker-Bassett 1978): beta_tau = argmin_b sum_t rho_tau(y_{t+h} - x_t'b), rho_tau(u) = u(tau - 1{u<0}), tau in {0.05,0.10,0.25,0.50,0.75,0.90,0.95}; estimated with statsmodels QuantReg (IRLS, max_iter 5000, p_tol 1e-8) and checked against the exact LP optimum (HiGHS).Predicted quantile (ABG eq. 2): Q_hat(tau | x_t) = x_t' beta_tau.Rearrangement (Chernozhukov, Fernandez-Val & Galichon 2010): for each t the 7 predicted quantiles are sorted increasingly; on a finite tau grid this is the rearranged quantile curve.Kernel SEs (statsmodels QuantReg vcov='robust', kernel='epa', bandwidth='hsheather'): V = (X'X)^-1 X'DX (X'X)^-1, D = diag(d_i), d_i = (tau/f0)^2 if e_i > 0 else ((1-tau)/f0)^2, f0 = (1/(n b)) sum_i K(e_i/b) with Epanechnikov K and b = min(sd(y), IQR(e)/1.34)[Phi^-1(tau+h_HS) - Phi^-1(tau-h_HS)], h_HS = Hall-Sheather bandwidth. f0 is a single (homoskedastic) sparsity estimate, so these SEs ignore x-dependence of the conditional density.Bootstrap SEs: pairs bootstrap, B = 1000 iid row resamples (numpy default_rng(0)), se_boot = s.d. (ddof 1) of the B coefficient estimates. Each resample is re-solved EXACTLY (eq. 1 as an LP: dual min -y'a s.t. X'a = (1-tau)X'1, 0<=a<=1, beta = -multiplier) by a vectorized Frisch-Newton interior-point method with Mehrotra predictor-corrector (Portnoy & Koenker 1997) instead of statsmodels' IRLS, because IRLS does not converge on resamples with duplicated rows (cycling at the iteration cap) and is ~100x slower; tests verify the solver against HiGHS to 1e-9 relative objective. Preferred over kernel SEs here because GaR is a location-scale model (the conditional density at the quantile varies with NFCI).Koenker-Machado (1999) R^1(tau) = 1 - V_hat(tau)/V_tilde(tau), V_hat = sum rho_tau(y - x'beta_tau), V_tilde = min_b0 sum rho_tau(y - b0) (constant-only model, evaluated exactly over order statistics).R^1 gain = R^1_sentiment(0.05) - R^1_baseline(0.05) = (V_hat_base - V_hat_sent)/V_tilde, both estimated on the identical 2002Q1+ sample (h = 4). IN-SAMPLE and NESTED: the sentiment model can set its sentiment coefficient to 0, so V_hat_sent <= V_hat_base and the gain is >= 0 for any added regressor, including noise; it is not by itself evidence of tail information.R^1-gain inference (diagnostics.r1_gain_inference): Monte Carlo p = (1 + #{G*_b >= G})/(1 + N) (Davison & Hinkley 1997, Ch. 4; Phipson & Smyth 2010), y and [1, NFCI, g] held fixed (so the h=4 overlap in y is preserved), G*_b = in-sample gain (exact LP) of a placebo regressor. Null designs: (i) N = 2000 stationary Gaussian AR(1) placebos x_t = phi x_{t-1} + e_t on the contiguous quarterly grid of the sample (sampled at estimation rows, so the COVID gap is respected), phi = lag-1 autocorrelation of the OLS residual of sentiment on [1, NFCI, g] (the gain depends on sentiment only through that residual, since s and s - X c span the same augmented column space), seed 0; (ii) the same with phi = lag-1 autocorrelation of quarterly sentiment, seed 1; (iii) circular shifts of the actual sentiment series by 8..L-8 quarters. The headline quotes the range of the three p-values.Recursive pseudo-out-of-sample quantile score (descriptive): for each estimation row t with >= 40 rows s satisfying s + h <= t, re-estimate both models by LP on those rows; S_m = sum_t rho_0.05(y_t - x_t' beta_m,t); OOS gain = 1 - S_sent/S_base.Skewed t (ABG eq. 3; Azzalini-Capitanio 2003): f(y; mu,sigma,alpha,nu) = (2/sigma) t(z; nu) T(alpha z sqrt((nu+1)/(nu+z^2)); nu+1), z = (y-mu)/sigma; t, T = Student-t pdf and cdf; mu location, sigma > 0 scale, alpha shape (skewness), nu degrees of freedom (fatness).Quantile matching (ABG eq. 4): (mu,sigma,alpha,nu)_t = argmin sum_{tau in {.05,.25,.75,.95}} (Q_hat(tau|x_t) - F^-1(tau; mu,sigma,alpha,nu))^2. Deviation from ABG: ABG restrict nu to the positive integers; the spec (followed here) uses continuous nu in [2,30]; we also bound |alpha| <= 30. (mu,sigma) are concentrated out exactly by least squares for each (alpha,nu) - the objective is linear in them - which is numerically identical to joint minimisation; (alpha,nu) by L-BFGS-B from the 3 best of a 492-point start grid.F and F^-1: F(z) = int_{-inf}^{z} f(u) du computed with z = tan(theta) and composite Simpson on a uniform theta grid; F^-1 by interpolation then Newton steps with 8-point Gauss-Legendre local integrals. Grid sizes: inside the eq.-(4) optimiser F^-1 uses 1025 theta nodes and 2 Newton steps (speed); the reported fit (mu, sigma, rmse) and all reported quantiles, ES and density quantities re-evaluate F^-1 on 4097 nodes with 3 Newton steps (effect on parameters ~1e-6). Accuracy of this grid F^-1: the node values of F carry the cumulative-Simpson error, so |F(q) - tau| <= ~5e-9 at nu ~ 2 (much smaller for larger nu); this applies to the skew-t quantiles (fit residuals, es5_h4_fit_quality.skewt_q05) but not to ES, which uses a polished quantile (next item).Expected shortfall (ABG Sec. 3.2, 'SF'): ES_5% = (1/0.05) int_0^0.05 F^-1(u) du = mu + sigma (1/0.05) int_{-inf}^{q_z(0.05)} z f_z(z) dz, from the fitted skewed t; the tail moment is computed in theta = arctan(z) by adaptive Gauss-Kronrod quadrature (QUADPACK QAGS, abs. tol. 1e-14, rel. tol. 1e-13), because the integrand z f(z) sec^2(theta) ~ (theta + pi/2)^(nu-2) has a singular derivative for 2 <= nu < 3 where uniform Simpson is inaccurate. The upper limit q_z(0.05) is the grid F^-1 polished by Newton steps in theta on the QAGS CDF until |F(q) - 0.05| < 1e-12 (audit GAR-6: without the polish the grid quantile's |F(q) - 0.05| ~ 4e-9 at nu ~ 2.1 limited end-to-end ES accuracy to ~7e-7 pp). Accuracy: the tail-moment integral given q agrees with an independent closed form in z (skew-normal partial moment integrated over the chi2(nu) mixing variable) to < 1e-9; end-to-end, ES from the polished q agrees with that closed form evaluated at the exact quantile (brentq on an independent CDF) to < 1e-10 pp on every fitted row with nu < 3 and < 2e-10 pp on all rows (test tolerance 1e-8).Fit-quality flags in gar_history: skewt_rmse = sqrt(mean_tau (Q_hat_tau - F^-1(tau))^2) (pp); skewt_at_bound = nu in {2, 30} or |alpha| = 30; es05_skewt_misfit = skewt_rmse > 0.05 pp.Downside entropy (ABG eq. 5): L^D_t = - int_{-inf}^{F_t^-1(0.5)} (log g(y) - log f_t(y)) f_t(y) dy, f_t = fitted conditional skewed t, g = unconditional skewed t fitted (same eq. 4) to the constant-only quantile regression on the same estimation sample (ABG footnote 9). Units: nats.COVID exclusion: observation t is dropped from estimation if quarter t or any target quarter t+1..t+h lies in 2020Q1-2021Q2.
Limitations
- In-sample: coefficients are estimated on the full sample with latest-vintage (revised) GDP and NFCI, so the historical gar_history is NOT a real-time / point-in-time record.
- NFCI is itself re-estimated by the Chicago Fed every week; its history is revised.
- With h = 4 the targets overlap (MA(3) structure); both kernel and iid pairs-bootstrap SEs ignore this serial correlation and therefore understate uncertainty for h = 4.
- The current-quarter GDP growth regressor is a model nowcast, not data; its uncertainty (see dfm.gdp_nowcast 68% band) is not propagated into the quantiles.
- Skewed t with nu in [2, 30] cannot reproduce arbitrarily thin or thick quantile shapes; where the fit residual is non-zero, es05 is approximate. gar_history carries skewt_rmse, skewt_at_bound and es05_skewt_misfit (rmse > 0.05 pp) on every row; 191 of 632 rows are flagged, 275 are at a parameter bound.
- The R^1 gain is in-sample and non-negative by construction; its p-values (diagnostics.r1_gain_inference) treat the baseline regressors and y as fixed and model the added regressor as Gaussian AR(1) or a circular shift of sentiment, so they do not account for estimation of phi or for non-Gaussian sentiment dynamics beyond what the shift design captures.
- The density grid in density_now spans -10..+10 %; mass outside the grid is not shown.
- Kernel SEs use one homoskedastic sparsity estimate and are typically far smaller than the bootstrap SEs for the NFCI slope in the tails; read se_boot.
- The sentiment-augmented model has only ~85-90 observations for 4 parameters; its tail quantiles (tau = 0.05, 0.95) rest on ~4-5 observations each and its predicted quantiles cross often (see diagnostics.crossing); treat it as indicative.
References
- Adrian, T., Boyarchenko, N. & Giannone, D. (2019). Vulnerable Growth. American Economic Review 109(4), 1263-1289. (FRBNY Staff Report 794, revised Nov 2017: equation numbers cited from this version.)
- Koenker, R. & Bassett, G. (1978). Regression Quantiles. Econometrica 46(1), 33-50.
- Koenker, R. & Machado, J. A. F. (1999). Goodness of Fit and Related Inference Processes for Quantile Regression. Journal of the American Statistical Association 94(448), 1296-1310.
- Azzalini, A. & Capitanio, A. (2003). Distributions generated by perturbation of symmetry with emphasis on a multivariate skew t-distribution. Journal of the Royal Statistical Society B 65(2), 367-389.
- Chernozhukov, V., Fernandez-Val, I. & Galichon, A. (2010). Quantile and Probability Curves Without Crossing. Econometrica 78(3), 1093-1125.
- Portnoy, S. & Koenker, R. (1997). The Gaussian Hare and the Laplacian Tortoise: Computability of Squared-Error versus Absolute-Error Estimators. Statistical Science 12(4), 279-300 (Frisch-Newton interior point used for bootstrap refits).
- Davison, A. C. & Hinkley, D. V. (1997). Bootstrap Methods and their Application. Cambridge University Press, Ch. 4 (Monte Carlo tests).
- Phipson, B. & Smyth, G. K. (2010). Permutation P-values Should Never Be Zero: Calculating Exact P-values When Permutations Are Randomly Drawn. Statistical Applications in Genetics and Molecular Biology 9(1), Article 39.
- Piessens, R., de Doncker-Kapenga, E., Ueberhuber, C. W. & Kahaner, D. K. (1983). QUADPACK: A Subroutine Package for Automatic Integration. Springer (QAGS, used for the ES tail moment).
- Upstream modules: dfm (gdp_nowcast), sentiment (sentiment_monthly.factor_onesided).
Which economic season are we in?
This model places the US economy in one of four broad conditions, depending on whether growth is above or below its usual pace and whether inflation is speeding up or slowing down, and gives a probability for each.
Why it matters
The same headline number can mean different things depending on the backdrop: strong growth with cooling inflation feels very different from weak growth with rising prices. A simple four-way label helps non-specialists see the overall mix of conditions affecting jobs and living costs. The probabilities show how confident the classification is.
How it works
The model uses two measurements. For growth, it averages the last three months of the activity factor from the economy-wide growth model, where above zero means faster than usual. For inflation, it compares the last three months of core inflation with the last 12 months; a recent pace below the yearly pace means inflation is slowing. Each measurement comes with an uncertainty estimate, which is turned into a probability of being above or below zero, and the two probabilities are multiplied together to give the chance of each of the four combinations. It is like a map with a north-south line (growth) and an east-west line (inflation): the model estimates which corner the economy is in, while admitting the position is a bit blurry.
The latest readings
The model's most likely label is Goldilocks, meaning growth above its usual pace while inflation is slowing, with a probability of about 78.4%. The chance that growth is above trend is 83.5%, but this counts only part of the real uncertainty, so actual confidence should be lower.
Simple exampleThink of the economy's season, set by two questions: is growth faster than usual, and is inflation speeding up or slowing down? This shows which of the four combinations the model thinks is most likely, with its probability. A higher probability means more confidence, though the real uncertainty is larger than the model counts.
Model noteThe economy is classified as goldilocks with this model-implied probability (growth from the DFM activity factor, inflation from core PCE momentum); growth-side uncertainty is DFM signal-extraction only (P(growth above trend) = 84.6%), so it understates true growth uncertainty.
There is about a 78.4% model-implied chance that growth is above trend while core inflation is slowing. This is by far the largest of the four probabilities.
Simple exampleNamed after the porridge that was 'just right': growth faster than usual while price rises are slowing down. This is the model's estimated chance of that mix; higher means the model leans more strongly toward it.
Model noteProbability growth is above trend while core inflation is decelerating.
Typical rangeBetween 3.68 and 35.17 in half of all readings since Jan 2000 (middle 50%; the outer 10th to 90th percentile band is 0.164 to 58.67). The latest reading sits at the 99th percentile.
There is about a 5.2% chance that growth is above trend while core inflation is speeding up. The low number mainly reflects that recent inflation momentum is clearly negative.
Simple exampleLike a busy shop that keeps raising its prices: growth faster than usual with inflation speeding up. This is the model's estimated chance of that combination; a higher number means it is more likely by the model's reckoning.
Model noteProbability growth is above trend while core inflation is accelerating.
Typical rangeBetween 3.47 and 43.06 in half of all readings since Jan 2000 (middle 50%; the outer 10th to 90th percentile band is 0.353 to 68.42). The latest reading sits at the 31th percentile.
There is about a 1.0% chance of stagflation, meaning below-trend growth together with speeding-up inflation. Both of its conditions currently look unlikely to the model.
Simple exampleThe uncomfortable mix: the economy growing slower than usual while prices rise faster, like a town where fewer jobs are opening up but grocery bills climb quicker. This is the model's estimated chance of that combination.
Model noteProbability growth is below trend while core inflation is accelerating.
Typical rangeBetween 4.67 and 35.67 in half of all readings since Jan 2000 (middle 50%; the outer 10th to 90th percentile band is 0.999 to 60.00). The latest reading sits at the 10th percentile.
There is about a 15.5% chance of a disinflationary slowdown, meaning below-trend growth with slowing inflation. It is the second most likely label, because inflation is slowing and growth could plausibly be below trend.
Simple exampleGrowth below its usual pace with inflation easing, like a party winding down: fewer people arriving and the music turned down. This is the model's estimated chance of that mix; a higher number means the model leans more toward it.
Model noteProbability growth is below trend while core inflation is decelerating.
Typical rangeBetween 4.67 and 45.77 in half of all readings since Jan 2000 (middle 50%; the outer 10th to 90th percentile band is 0.667 to 68.88). The latest reading sits at the 44th percentile.
The growth reading is 0.26, the three-month average of the one-sided activity factor through August 2026. Positive means activity is growing faster than its average pace since 1990.
Simple exampleA speedometer for the economy, compared with its usual cruising speed. Above zero means activity is running faster than its long-run average; below zero means slower. The further from zero, the bigger the difference.
Model notePositive means activity growth is running above its post-1990 average.
Typical rangeBetween -0.251 and 0.217 in half of all readings since Jan 2000 (middle 50%; the outer 10th to 90th percentile band is -0.585 to 0.447). The latest reading sits at the 79th percentile.
The inflation momentum reading is -0.96 percentage points: the 3-month annualized core PCE pace is that much below the 12-month pace. Negative means inflation is slowing.
Simple exampleThis compares how fast prices rose in the last three months with how fast they rose over the last year, like checking whether a runner's latest lap beat their average lap. Positive means inflation is picking up speed; negative means it is slowing. Prices can still be rising when it is negative, just more slowly.
Model noteNegative means recent core inflation is running below its 12-month pace (decelerating).
Typical rangeBetween -0.361 and 0.374 in half of all readings since Jan 2000 (middle 50%; the outer 10th to 90th percentile band is -0.714 to 0.756). The latest reading sits at the 5th percentile.
The Goldilocks label has been the most likely one for 3 months in a row.
Simple exampleLike counting how many weeks a song has stayed at number one: this is how many months in a row the same season has been the model's top pick. A longer run means the picture has been steady.
Model noteHow long the current regime (argmax) has persisted.
Each line is the model's probability for one of the four conditions: Goldilocks, Reflation, Stagflation and Slowdown, and in every month they add up to 1. When one line sits near the top, the model is confident; when lines cross or bunch together, the picture is mixed. Look for switches into Slowdown or Stagflation around periods of economic stress, keeping in mind that the 2020 pandemic months rely on model-filled data.
Simple exampleFour lines, one per economic season, like four candidates' poll numbers that always add up to 100%. When one line rides near the top, the model is confident about that season; when lines cross or crowd together, the picture is mixed.
Growth is the three-month average of the one-sided activity factor, and inflation momentum is the 3-month annualized core PCE rate minus its 12-month rate.
Simple exampleTwo measuring sticks. For growth, average the last three monthly activity readings to smooth out bumps. For inflation, subtract the yearly price pace from the recent three-month pace to see whether prices are speeding up or slowing down.
- g_tgrowth axis: positive means above-average growth
- f_tone-sided (filtered) activity factor from the dfm model in month t
- m_tinflation axis: positive means inflation is speeding up
- \text{SAAR3}_t, \text{YoY}_t3-month annualized and 12-month core PCE inflation
The uncertainty of the growth reading combines the factor's monthly uncertainties, treating the three months as independent.
Simple exampleEach monthly growth reading comes with a margin of error, like a bathroom scale that can be a little off. This combines three months of those errors into one, and averaging several readings makes the overall wobble smaller.
- s_{g,t}standard deviation (uncertainty) of the growth axis
- \sigma_tone-sided standard deviation of the activity factor estimate in month t
Each reading is divided by its uncertainty and converted into the probability that the true value is above zero.
Simple exampleLike a weather forecaster turning a reading and its margin of error into a chance of rain. A reading far above zero compared with its uncertainty gives a probability near 100%; one sitting right at zero gives about 50%.
- \Phistandard normal cumulative distribution, mapping a number to a probability between 0 and 1
- s_{m,t}uncertainty of inflation momentum: the typical one-month surprise in 3-month inflation over the past 10 years
The chance of each quadrant is the product of the two separate probabilities, here growth above trend times inflation slowing; the other three quadrants use the other combinations.
Simple exampleLike the chance of getting heads on one coin and heads on another: multiply the two probabilities. The chance of growth above trend times the chance of inflation slowing gives the Goldilocks odds, and the other mixes work the same way.
- P(\text{Goldilocks})probability of above-trend growth with slowing inflation
- 1 - P(m>0)probability that inflation is slowing
- Regime
- A broad state of the economy, defined here by the direction of growth and inflation.
- Goldilocks
- Growth above its usual pace while inflation is slowing: not too hot, not too cold.
- Reflation
- Growth above its usual pace while inflation is speeding up.
- Stagflation
- Growth below its usual pace while inflation is speeding up.
- Disinflationary slowdown
- Growth below its usual pace while inflation is slowing.
- Inflation momentum
- Whether recent inflation (last 3 months, annualized) is running above or below the 12-month rate.
- One-sided estimate
- An estimate for a month that uses only data available up to that month, not later data.
- Independence assumption
- The model treats errors in the growth and inflation readings as unrelated, which keeps the math simple but may not be exactly true.
Full technical specification (for specialists)
Model
Growth x inflation regime quadrant (probabilistic)
Specification
Growth axis: g_t = (f_t + f_{t-1} + f_{t-2})/3, f = dfm.factor_filtered (one-sided Kalman-filtered activity factor, std units; 0 = sample-average growth).Growth uncertainty: s_g,t = sqrt( (sd_t^2 + sd_{t-1}^2 + sd_{t-2}^2)/3 / 3 ) = sqrt(mean(sd^2)/3), sd = dfm.factor_filtered_sd (filtered state s.d.), treating the three monthly state errors as independent. Deviation from the spec text ('from factor_sd'): factor_sd is the SMOOTHED s.d. (uses future data); we use the filtered s.d. to respect the spec's 'one-sided inputs only' rule and CONTRACT standard 3. The smoothed-s.d. variant and its effect on the probabilities and regimes are reported in diagnostics.growth_uncertainty.Inflation axis: m_t = SAAR3_t - YoY_t, SAAR3_t = ((P_t/P_{t-3})^4 - 1)100, YoY_t = (P_t/P_{t-12} - 1)100, P = core PCE price index (upstream inflation_policy.inflation_monthly).Inflation uncertainty: s_m,t = sqrt( sum_s e_s^2 / (120 - 2) ), e_s residuals of OLS SAAR3_s = c + phi SAAR3_{s-1} + e_s over the 120 months s = t-119..t (trailing 10 years, one-sided).P(g>0) = Phi(g/s_g), P(m>0) = Phi(m/s_m), Phi = standard normal cdf (complements computed as Phi(-x)).Quadrants (independence of growth and inflation errors): Goldilocks = P(g>0)(1-P(m>0)); Reflation = P(g>0)P(m>0); Stagflation = (1-P(g>0))P(m>0); Disinflationary slowdown = (1-P(g>0))(1-P(m>0)); they sum to 1. regime = argmax.Inflation level overlay: infl_gap_t = underlying_t - 2, underlying = upstream one-sided underlying inflation (core-PCE units, %).Transition matrix: P(i -> j) = N_ij / sum_j N_ij over consecutive calendar-month pairs from 1990 where neither month is COVID-masked.Asset returns: r_t = 100 ln(P_t^end / P_{t-1}^end) with P^end = last daily close of the month; annualized = 12 x mean(r_t | regime). UST10: 100 x (y_t^end - y_{t-1}^end) bp, x 12 per year. USD/JPY = DEXJPUS (yen per dollar; + = dollar appreciates).
Limitations
- Growth-axis uncertainty: s_g (DFM filtered state s.d. scaled to the 3-month average) has median 0.261 and latest 0.261 std units; P(g>0) lies strictly between 5% and 95% in 72.8% of months (median |g/s_g| = 1.01). This is signal-extraction uncertainty only (DFM parameters fixed), not uncertainty about the growth trend, the DFM parameters or data revisions, so it understates true growth uncertainty.
- Latest-vintage (revised) data: historical regimes include revisions and are not real-time classifications.
- In-sample history: the growth axis uses the one-sided (filtered) DFM factor, but the DFM parameters and the standardisation of its input series (means and s.d.s, which define the growth 'trend' g = 0) are estimated on the full 1990-latest sample, so historical quadrant classifications are in-sample, not real-time (CONTRACT standard 3).
- Trend for growth is the 1990-2026 average of the factor (in-sample standardization by the DFM), not a time-varying potential growth rate.
- Asset returns by regime are descriptive in-sample averages with small and unequal samples; they are not forecasts and nothing here is investment advice.
- Bridgewater's All Weather framework is a practitioner reference, not a peer-reviewed method; the quadrant axes here are changes (momentum), not levels.
References
- Ilmanen, A. (2011). Expected Returns: An Investor's Guide to Harvesting Market Rewards. Wiley (growth/inflation regime framework).
- Bridgewater Associates, 'All Weather' growth/inflation quadrant framework (practitioner reference; e.g. Dalio, R., 'The All Weather Story', Bridgewater Associates, 2012).
- Upstream models: dfm (activity factor, Banbura-Modugno 2014 / Mariano-Murasawa 2003) and inflation_policy (core PCE momentum, underlying inflation).
- NBER Business Cycle Dating Committee recession dates via FRED USREC (validation).
Is the financial system under stress?
This gauge measures how much stress US financial markets are under, and whether that stress is hitting many markets at the same time.
Why it matters
When stress hits several financial markets at once, banks tend to lend more cautiously and borrowing can get harder for families and small businesses. Widespread stress can also spill over into jobs and the value of savings. A low reading means markets are working smoothly; a high reading means strain is broad, not stuck in one corner.
How it works
The model watches five parts of the financial system: short-term lending (the money market), government bonds, stocks, corporate credit, and currencies. Each raw signal, such as how much stock prices swing, is turned into a score from 0 to 1 that says how unusual today's value is compared with all earlier values. Scores are averaged within each part, and the five parts get equal weight. The key twist is that the final number grows when the parts are stressed at the same time and stays small when stress is isolated. Think of smoke alarms in a building: one alarm might be burnt toast, but alarms going off on every floor at once points to a real fire.
The latest readings
This site's own US stress index is 0.037 on a scale from 0 (no stress) to 1 (extreme stress). The model describes this as low versus history.
Simple exampleThink of a smoke alarm system for the whole financial world. It reads 0 when everything is calm and climbs toward 1 when alarms are ringing in many places at once. A higher number means strain is wider and stronger.
Model noteSystemic stress in US markets is 0.037 on a 0-1 scale, low versus history.
Typical rangeBetween 0.028 and 0.124 in half of all readings since Jan 7, 2000 (middle 50%; the outer 10th to 90th percentile band is 0.013 to 0.341). The latest reading sits at the 33th percentile.
The latest reading is at or above 35% of daily readings since 1986. In other words, about two thirds of past days were more stressed than today.
Simple exampleThis is like being told where your height ranks in your class. If a reading sits at the 80th percentile, it is more stressed than 80 out of every 100 past days. A low percentile means most past days were more stressed.
Model noteThe latest reading (as of 2026-10-15) is at or above 35% of daily readings since 1986.
Typical rangeThis reading is itself a percentile of its own history, so its middle 50% is 25 to 75 by construction. The latest reading is 35.
This shows how much extra stress comes from markets moving together. It nets out to about zero (+0.000): pairs of markets moving together add +0.028, while the government bond market moving against the others subtracts -0.027, so there is no net spreading effect right now.
Simple exampleOne alarm ringing may just be burnt toast, but alarms on every floor at once mean real trouble. This number is the extra worry added because markets are stressed together. If one market stays calm while others ring, it can pull the extra back down.
Model noteCorrelations net to about zero (+0.000): positively correlated segment pairs add +0.028 and negatively correlated pairs -0.027 (government bond market moving against the other segments), so aggregate stress shows no net systemic amplification.
Typical rangeBetween -0.010 and 0.062 in half of all readings since Jan 7, 2000 (middle 50%; the outer 10th to 90th percentile band is -0.025 to 0.232). The latest reading sits at the 34th percentile.
The money market (short-term lending) accounts for 41% of today's stress reading, more than any other part. Its own score is 0.48, near the middle of the 0 to 1 range.
Simple examplePicture a team score broken down by player. The index adds up stress from five parts of the financial system, and this shows which part is contributing the biggest share of today's total, plus how stressed that part is on its own 0 to 1 scale.
Model noteMoney market (subindex 0.48) accounts for 41% of the composite stress reading.
The European Central Bank's own stress index for the United States is 0.018, at the 37th percentile of its history since 1990. It rose by 0.004 over the past month. It uses a different method, so its level is not directly comparable with this site's index.
Simple exampleThis is a second opinion, like seeing a different doctor who uses different tests. The European Central Bank builds its own US stress gauge from 0 (calm) to 1 (extreme). Because the recipe differs, compare whether the two move up and down together, not their exact levels.
Model noteThe ECB's United States CISS is 0.018, at the 37th percentile of its history since 1990 (+0.004 over one month).
Typical rangeBetween 0.014 and 0.129 in half of all readings since Jan 3, 2000 (middle 50%; the outer 10th to 90th percentile band is 0.006 to 0.265). The latest reading sits at the 31th percentile.
The European Central Bank's stress index for the euro area is 0.011, at the 16th percentile of its history since 1990. It fell by 0.023 over the past month.
Simple exampleThe same kind of stress thermometer, pointed at the countries that use the euro. It runs from 0 (calm) to 1 (extreme stress). The most useful comparison is with its own past readings: a higher percentile means more strain than usual for the euro area.
Model noteThe ECB's euro area CISS is 0.011, at the 16th percentile of its history since 1990 (-0.023 over one month).
Typical rangeBetween 0.023 and 0.231 in half of all readings since Jan 3, 2000 (middle 50%; the outer 10th to 90th percentile band is 0.009 to 0.403). The latest reading sits at the 13th percentile.
The European Central Bank's stress index for the United Kingdom is 0.003, at the 3rd percentile of its history since 1990, so it is near the calmest readings on record. It fell by 0.018 over the past month.
Simple exampleHere the stress thermometer is checking the United Kingdom. A reading near 0 means British markets are calm, and a reading near 1 means widespread strain. The percentile tells you how today compares with the UK's own history.
Model noteThe ECB's United Kingdom CISS is 0.003, at the 3rd percentile of its history since 1990 (-0.018 over one month).
Typical rangeBetween 0.013 and 0.135 in half of all readings since Jan 3, 2000 (middle 50%; the outer 10th to 90th percentile band is 0.005 to 0.331). The latest reading sits at the 5th percentile.
The European Central Bank's stress index for China is 0.001, below the 1st percentile of its history since 2006. It fell by 0.005 over the past month.
Simple exampleThis gauge checks financial stress in China, on the same 0 (calm) to 1 (extreme) scale. Its history is shorter than the others, so its percentile compares today only with the years it has been measured.
Model noteThe ECB's China CISS is 0.001, below the 1st percentile of its history since 2006 (-0.005 over one month).
Typical rangeBetween 0.019 and 0.100 in half of all readings since Oct 10, 2006 (middle 50%; the outer 10th to 90th percentile band is 0.008 to 0.201). The latest reading sits at the 0th percentile.
One line is this site's own US stress index and the other is the official US index from the European Central Bank, both averaged by week. Both run from 0 (calm) to 1 (extreme stress), so higher means more widespread strain. Look for the tall spikes, such as late 2008 and March 2020, and check whether the two lines rise and fall together, since the two are built differently and their exact levels differ.
Simple exampleThink of two thermometers in the same room built by different makers. Each line is a stress reading from 0 (calm) to 1 (extreme). When a line shoots up in a tall spike, stress was spreading widely. Watch whether the two climb and fall together, since their exact levels differ.
Each raw indicator is turned into a score between 0 and 1: its average rank among all values seen so far, divided by how many values there are.
Simple exampleLine up every past day from calmest to most stressed and see where today would stand. If today beats 70 out of 100 past days, it scores 0.7. This turns very different signals, like stock swings and loan costs, into one shared 0 to 1 scale.
- z_tthe 0 to 1 score for the indicator on day t
- x_tthe raw indicator value on day t, such as stock-price volatility or a credit spread
- \bar{r}_tthe rank of today's value among past values (tied values share the average rank)
- n_tthe number of values used; the first 5 years are ranked as one block, then the sample grows each day
Tracks how closely each pair of market segments has been moving together recently, giving more weight to recent days, and turns that into a correlation between -1 and 1.
Simple exampleThis keeps track of which pairs of markets have been moving in step lately, like noticing which two friends always laugh at the same jokes. Recent days count more than old ones, so the measure updates as habits change.
- s_{k,t}the average score of segment k (money, bond, equity, credit or currency) on day t
- \tilde{s}_{k,t}the segment score measured from the midpoint 0.5
- \lambdathe memory factor, 0.93 per day: higher values make the measure change more slowly
- \sigma_{kl,t}the recent co-movement of segments k and l (sigma_k,t is the same idea for one segment alone)
- \rho_{kl,t}the correlation between segments k and l
Combines the five equally weighted segment scores so that stress counts for more when segments are correlated with each other.
Simple exampleThis is the main recipe: add up the five parts' stress scores, giving each equal weight, but make the total bigger when parts are stressed at the same time. A crowd sounds much louder when everyone shouts together than when one section shouts alone.
- s_tthe list of the five segment scores on day t
- wthe weights, one fifth for each segment
- \circmultiply item by item
- C_tthe table of correlations between every pair of segments, with 1 on the diagonal
- \text{CISS}_tthe final stress index, between 0 and 1
Measures how much of today's stress comes from segments moving together, by comparing the index with what it would be if segments were unrelated.
Simple exampleThis works out how loud the crowd would be if every section cheered on its own, then subtracts that from the real total. What is left is the extra noise that comes purely from everyone moving together.
- \text{premium}_tthe correlation premium: positive means co-movement adds stress, near zero means no net effect
- w_k\, s_{k,t}the weighted score of segment k
- Systemic stress
- Strain that affects many parts of the financial system at the same time, rather than one market alone.
- Percentile
- The share of past readings that are at or below today's value. The 35th percentile means today is at or above 35% of past readings.
- Volatility
- How widely and quickly a price or interest rate moves up and down. Bigger swings mean higher volatility.
- Correlation
- A number from -1 to 1 showing how closely two things move together. Positive means they tend to move in the same direction; negative means opposite directions.
- Money market
- The market where banks, companies and the government borrow and lend cash for short periods, from overnight to a few months.
- Credit spread
- The extra interest that companies pay to borrow compared with the US government. It tends to widen when lenders get nervous.
- Segment subindex
- The average score of the indicators within one part of the financial system, from 0 (calm) to 1 (stressed).
- European Central Bank (ECB)
- The central bank for countries that use the euro. It publishes its own stress indexes for several economies, including the United States.
Full technical specification (for specialists)
Model
Composite Indicator of Systemic Stress (CISS), US own build + official ECB CISS
Specification
Money market raw 1: RV_t = sqrt( (252/22) * sum_{j=0}^{21} (dDTB3_{t-j})^2 ), dDTB3 = daily change in the 3m bill discount rate (pp); zero-mean realized volatility, annualized (pp/yr). Same formula for dDGS10, dDGS2 (bond) and for r_t = 100*ln(P_t/P_{t-1}) of NASDAQCOM, DEXJPUS, DEXUSEU, DTWEXBGS. DEVIATION from HKL (who use the weekly average of absolute daily changes on weekly data): the spec prescribes 22-day daily realized vol; the CDF transform is invariant to the sqrt(252) scaling. For the bp-quoted series (DTB3, DGS10, DGS2) the sum of squared changes is computed in exact integer basis points, RV = sqrt((252/22) * sum (dbp)^2) / 100, so that mathematically equal windows are exactly tied and receive the average rank required by the spec (floating-point rolling sums would break these ties arbitrarily). For the log-return series each window sum is math.fsum (correctly rounded, order-independent), so windows with the same multiset of returns are exactly tied too.Money market raw 2: |BEY_t - DFF_t|, BEY_t = 100 * 365 d_t / (360 - 91 d_t), d_t = DTB3_t/100 (bank-discount to bond-equivalent yield, 91-day bill), DFF_t = effective fed funds rate same day (pp).Equity CMAX_t = 1 - P_t / max(P_{t-503}, ..., P_t), P = NASDAQCOM, i.e. HKL Table 1's CMAX_t = 1 - x_t / max[x_{t-j}, j = 0..T] with T = 503 trading days (HKL: T = 104 weeks of weekly data); higher = more stress.Credit: BAA10Y_t, AAA10Y_t (levels, pp); EBP_m (monthly, pp) usable on day t only if t >= first day of month m+1 (no look-ahead), carried at most 62 calendar days.HKL eq. (1a)/(1b): z_t = F_{n_t}(x_t) = rbar_t / n_t, rbar_t = average rank of x_t among {x_1..x_{n_t}} (ties get the mean of the ranks they occupy, as in HKL). For the first 5 years of each indicator n_t = size of that whole initial window (eq. 1a, in-sample); afterwards n_t = t (expanding, eq. 1b). Transform applied at each series' native frequency (daily; monthly for EBP). Ties: rbar_t = (#{x_j < x_t} + (#{x_j = x_t} + 1)/2), HKL's example (3+4)/2 for a value at ranks 3, 4.Subindex (HKL Sec. 3.3, unnumbered): s_{k,t} = (1/N_{k,t}) sum_{i in k} z_{i,t}, mean over the N_{k,t} indicators of segment k available on day t; k in {money, bond, equity, credit, fx}. An indicator that starts after the CISS sample (VIX, DEXUSEU, DTWEXBGS) counts as available only after its own 5-year in-sample-ranked window has ended.HKL eq. (4): s~_{k,t} = s_{k,t} - 0.5; sigma_{kl,t} = lambda sigma_{kl,t-1} + (1-lambda) s~_{k,t} s~_{l,t}; sigma^2_{k,t} = lambda sigma^2_{k,t-1} + (1-lambda) s~_{k,t}^2; rho_{kl,t} = sigma_{kl,t}/(sigma_{k,t} sigma_{l,t}); lambda = 0.93 applied to DAILY data (spec). DEVIATION: HKL apply 0.93 to weekly data (half-life ~9.6 weeks vs ~9.6 trading days here); a sensitivity with lambda = 0.93^(1/5) is in diagnostics.lambda_sensitivity. Initialisation: sigma_{kl,-1} = mean of s~_k s~_l over the first calendar year of the CISS sample (HKL use the pre-recursion-period average). (The spec's 'HKL eq. 4-5' corresponds to HKL eq. (4) for the EWMA moments and eq. (3) for C_t.)HKL eq. (3): C_t = [rho_{kl,t}], the K x K matrix of the eq. (4) correlations with rho_kk = 1.HKL eq. (2): CISS_t = (w o s_t)' C_t (w o s_t), C_t from HKL eq. (3), w = (1/5,...,1/5). DEVIATION: HKL use real-impact (industrial production) weights; spec uses equal weights. CISS in [0,1] because C_t is PSD and |rho| <= 1.Contribution c_{k,t} = w_k s_{k,t} sum_l rho_{kl,t} w_l s_{l,t}; sum_k c_{k,t} = CISS_t; share_k = c_k/CISS.Correlation premium_t = CISS_t - sum_k (w_k s_{k,t})^2 = CISS_t minus the CISS that perfectly uncorrelated segments (C = I) would give. (HKL Fig. A.3 instead show CISS - (sum_k w_k s_k)^2, the difference vs perfectly correlated segments; reported in diagnostics as corr_contribution_hkl.) Gross parts: premium = P+ + P-, P+ = sum_{k != l, rho_kl > 0} a_k a_l rho_kl, P- = same over rho_kl < 0, a = w o s (diagnostics.corr_premium_parts_latest).Weekly series: arithmetic mean of daily values within weeks ending Friday (W-FRI); official US CISS averaged the same way.Percentile = 100 * share of history (daily, latest value included) with value <= latest value, i.e. the latest reading is at or above that share of readings.in_sample_t = 1 if t < max(end of the in-sample window of every indicator whose in-sample ranks reach the CISS, end of the correlation-initialisation year); such values depend on data observed after t.
Limitations
- Data are latest-vintage (revised); the history is not a real-time/point-in-time reconstruction.
- Start-up window: CISS values before 1991-01-02 are IN-SAMPLE (they depend on later data): the credit indicators needed to start the index in 1986 (baa10y, aaa10y) are ranked within their own first 5 years, and the correlations are initialised with 1986 moments. These rows carry in_sample = true in ciss_weekly (262 weeks) and ciss_daily_recent. From 1991-01-02 on the whole construction is one-sided (truncating every input at any later date leaves the earlier history unchanged; tested). ECDF values keep being re-based as history grows, so a given raw value maps to different z over time (HKL's intended 'real-time' property).
- Crisis validation (diagnostics.validation.crisis_top2pct.criterion): a month passes if its MAXIMUM weekly CISS is in the top 2% of weeks. 2008-10: 5 of 5 weeks qualify; 2020-03: only 2020-03-27 (1 of 4 weeks), so under the stricter 'every week in the top 2%' reading 2020-03 fails.
- Equal weights rather than HKL's real-impact weights; daily lambda = 0.93 gives much faster-moving correlations than HKL's weekly application.
- The US build lacks HKL's financial-intermediary equity measures, swap spreads, stock-bond correlation and interbank (LIBOR-OIS) spreads; the credit segment uses corporate spreads and the EBP, and the money-market segment has only two indicators (TED spread discontinued 2022).
- The official CISS uses a different (Chavleishvili-Kremer 2023) methodology and indicator set, so levels are not directly comparable; only co-movement is validated.
- The correlation premium is noisy at daily lambda = 0.93 and, because HKL's moments are taken around the fixed median 0.5 using the same s~ that enter w o s, it has a small positive bias (about +0.005 in simulation with independent iid segments); |premium| < 0.01 means no NET systemic amplification, which can hide large offsetting positive and negative correlations (see diagnostics.corr_premium_parts_latest).
- Weekly rows are labelled with the Friday ending the week; the last week can be partial (diagnostics.last_week_n_days).
- Descriptive state indicator, not a forecast; not investment advice.
References
- Hollo, D., Kremer, M. & Lo Duca, M. (2012). CISS - a composite indicator of systemic stress in the financial system. ECB Working Paper No. 1426.
- Chavleishvili, S. & Kremer, M. (2023). Measuring systemic financial stress and its risks for growth. ECB Working Paper No. 2842 (methodology of the official daily CISS published by the ECB).
- Gilchrist, S. & Zakrajsek, E. (2012). Credit spreads and business cycle fluctuations. American Economic Review 102(4), 1692-1720 (excess bond premium; series maintained by the Federal Reserve Board).
- Patel, S. A. & Sarkar, A. (1998). Crises in developed and emerging stock markets. Financial Analysts Journal 54(6), 50-61 (CMAX).
Is short-term borrowing strained?
This index shows whether banks and large firms are finding it harder or more expensive to borrow cash overnight or for a few months.
Why it matters
Banks and companies borrow huge sums every day just to keep operating. If that short-term borrowing gets tight, banks can pass the strain on through stricter loans to households and small businesses. Watching these markets shows whether the plumbing of the financial system is flowing or clogged.
How it works
The index tracks seven signals. They include the overnight repo rate compared with the interest the Federal Reserve (the Fed) pays banks on their reserves, the gap between short-term company IOUs and Treasury bills, and the size of bank reserves compared with bank assets. Each signal is ranked against its own history and turned into a score from close to 0 (calmer than almost every past day) to 1 (more strained than every past day). The index is the simple average of the scores that are available that day. It works like a doctor checking seven vital signs and noting how unusual each one is compared with the same patient's past checkups.
The latest readings
The index is 0.52 on a 0 to 1 scale, which the model labels moderate. All 7 of 7 indicators were available, so the reading uses the full set.
Simple exampleThink of a check-up with seven tests on how easily banks and big firms can borrow cash for a day or a few months. Each test gets a 0 to 1 score and they are averaged. Near 0 means borrowing is smooth; near 1 means it is unusually strained.
Model noteAverage rank of today's funding indicators versus their own history is 0.52 (moderate); 7 of 7 indicators available.
Typical rangeBetween 0.346 and 0.580 in half of all readings since Apr 6, 2018 (middle 50%; the outer 10th to 90th percentile band is 0.267 to 0.651). The latest reading sits at the 64th percentile.
The index is at the 66th percentile of its values since 2018-04-02, when all seven indicators first existed. That means it is higher than roughly two thirds of readings in that period.
Simple exampleThis ranks today against past readings, like a percentile on a school test. At the 70th percentile, today is more strained than 70 out of every 100 past days. A lower percentile means most past days looked more strained.
Model noteThe index sits at the 66th percentile of its values since all 7 indicators available at the as-of exist (2018-04-02).
Typical rangeThis reading is itself a percentile of its own history, so its middle 50% is 25 to 75 by construction. The latest reading is 66.
The overnight repo rate (SOFR) is 1 basis point below the rate the Fed pays banks on their reserves (IORB). Repo trading at or below that rate shows no sign of repo pressure.
Simple exampleBanks can earn a set interest rate just by leaving money at the Fed, like a safe savings account. If overnight loans backed by government bonds start costing more than that rate, cash is harder to find. At or below it means no sign of that squeeze.
Model noteSOFR is 1 bp below IORB (72nd percentile of its history), close to the administered rate and about 9 bp above its abundant-reserve norm (-10 bp); repo is firm though not above IORB.
Typical rangeBetween -10.00 and -1.00 in half of all readings since Apr 6, 2018 (middle 50%; the outer 10th to 90th percentile band is -10.00 to 3.00). The latest reading sits at the 72th percentile.
Across the day's repo trades, the highest rates were 12 basis points above the lowest (99th minus 1st percentile). A wider gap signals more uneven access to cash; this number has no fixed danger line here and enters the index as one of the seven ranked signals.
Simple examplePicture shoppers buying the same item. If everyone pays about the same price, the market is smooth. If some pay far more than others, access is uneven. This measures the gap between the highest and lowest rates paid for overnight cash on the same day.
Model noteThe 99th-1st percentile range of overnight repo rates is 12 bp (9th percentile of its history) - narrow; wide ranges signal uneven access to cash.
Typical rangeBetween 14.00 and 18.00 in half of all readings since Apr 6, 2018 (middle 50%; the outer 10th to 90th percentile band is 12.00 to 25.00). The latest reading sits at the 9th percentile.
On 2026-10-13, 3-month unsecured borrowing by highly rated financial firms (commercial paper) yielded about 1.08 basis points less than a 3-month Treasury bill, after putting both on the same yield basis. A value below zero means lenders asked for no extra yield over Treasury bills that day.
Simple exampleLending to a strong company for 3 months is a little riskier than lending to the US government. This is the extra interest the company has to pay. A bigger gap means lenders want more reward for that risk; zero or below means they are asking for no extra.
Model noteAA-rated financial issuers pay 1.1 bp less than Treasury bills for 3-month funding on a bond-equivalent basis (1st percentile of its history): no unsecured-funding premium over bills.
Typical rangeBetween 9.22 and 29.71 in half of all readings since Jan 7, 2000 (middle 50%; the outer 10th to 90th percentile band is 6.09 to 48.00). The latest reading sits at the 1th percentile.
Bank reserves held at the Fed equal 11.6% of commercial-bank assets. Lower readings mean reserves are scarcer relative to the size of the banking system; this number is ranked against its own long history rather than compared with a fixed cutoff.
Simple exampleBank reserves are like the cash a household keeps in its checking account, measured against the size of its whole budget. A lower share means less spare cash relative to the size of the banking system, which can make short-term borrowing tighter.
Model noteReserves are 11.62% of commercial-bank assets (H.8 assets of 2026-09-30; 11.58% with the newer 2026-10-07 assets), below the roughly 12-13% at which Afonso et al. (2022) find the reserve demand curve starts to slope; lower readings mean scarcer reserves.
Typical rangeBetween 5.17 and 14.46 in half of all readings since Dec 20, 2002 (middle 50%; the outer 10th to 90th percentile band is 0.109 to 17.09). The latest reading sits at the 44th percentile.
Only about $0.1 billion sat in the Fed's overnight reverse repo facility on 2026-10-16. Near-zero use means this buffer of extra cash has been drained. The model notes that this signal reads as strained whenever the facility is empty, even when markets are calm, so a version of the index without it is also computed.
Simple exampleThe Fed runs a parking lot where spare cash can sit overnight. When the lot is full, there is plenty of extra cash around; when it is nearly empty, that cushion has been used up. An empty lot can happen in calm times too, so it is not a warning by itself.
Model noteON RRP take-up is $0.1bn, near zero: the Fed's reverse-repo buffer of excess liquidity has been drained.
Typical rangeBetween 4.90 and 356.9 in half of all readings since Sep 23, 2013 (middle 50%; the outer 10th to 90th percentile band is 0.548 to 1,771). The latest reading sits at the 6th percentile.
The line is the funding stress index, from 0 (calm) to 1 (strained), shown from April 2018 when the repo-based signals begin. Higher means short-term borrowing conditions look more unusual compared with their own past. Look for jumps around quarter-ends and month-ends, such as late 2025, because the model does not remove these calendar effects; values before April 2020 are partly ranked within a start-up block and are less comparable.
Simple exampleThe line is a strain meter for short-term borrowing, from 0 (smooth) to 1 (strained). When it climbs, borrowing conditions look more unusual than in the past. Expect regular bumps around month-ends and quarter-ends, a bit like traffic jams before a holiday, because those calendar effects are left in.
The repo spread: the overnight repo rate minus the rate the Fed pays on bank reserves, multiplied by 100 to turn percent into basis points.
Simple exampleTake the interest rate on overnight loans backed by government bonds and subtract the rate banks earn just by parking money at the Fed. The leftover, in hundredths of a percent, shows whether cash is costing more than its safe parking rate.
- \text{SOFR}_tthe Secured Overnight Financing Rate, a broad overnight repo rate, in percent
- A_tthe rate the Fed pays on reserves: IOER up to 2021-07-28 and IORB from 2021-07-29
- I_{1,t}the spread in basis points; higher means repo is pricier than the Fed's floor rate
Measures how scarce bank reserves are: the smaller reserves are compared with bank assets, the larger this number becomes.
Simple exampleCompare bank reserves with total bank assets, like spare cash versus the size of a household's budget. The recipe flips the scale so that the scarcer reserves get, the bigger the number becomes.
- R_tbank reserves at the Fed divided by total assets of commercial banks
- \lnthe natural logarithm; the minus sign makes scarcer reserves give a higher stress value
Turns each signal into a 0 to 1 score equal to its rank among past values divided by the number of values, so the score says how unusual today is.
Simple exampleLine up every past day for a signal and see where today would stand. If today beats 60 out of 100 past days, it scores 0.6. This puts very different signals, like interest rates and dollar amounts, on one shared 0 to 1 scale.
- z_{k,t}the score of signal k on day t
- \bar{r}_{k,t}the rank of today's value among that signal's values (ties share the average rank)
- n_tthe number of values used: the first 2 years are ranked as one block, then all values up to day t
The funding stress index is the simple average of the scores of all signals available that day.
Simple exampleAdd up the scores from every signal available that day and divide by how many there are, exactly like averaging grades on a report card.
- A_tthe set of signals available on day t (up to 7)
- |A_t|how many signals are available
- \text{FSI}_tthe funding stress index, between 0 and 1
- Repo
- A very short-term loan, often overnight, where the borrower hands over Treasury securities as collateral and buys them back the next day.
- SOFR
- The Secured Overnight Financing Rate, a benchmark for the cost of overnight repo loans backed by Treasury securities.
- IORB
- Interest on reserve balances: the rate the Fed pays banks on money they keep at the Fed. Before July 2021 a similar rate was called IOER.
- Basis point
- One hundredth of a percentage point. 100 basis points equal 1 percentage point.
- Commercial paper
- Short-term IOUs that companies and banks issue to borrow cash without putting up collateral, usually for a few weeks or months.
- Treasury bill
- A short-term loan to the US government, usually seen as the safest short-term investment.
- Bank reserves
- Money that banks keep in accounts at the Fed. Banks use reserves to make payments to each other.
- Overnight reverse repo (ON RRP)
- A Fed facility where money market funds and others can park extra cash overnight and earn interest. Low use means less spare cash is sitting idle.
- Percentile
- The share of past readings at or below today's value.
Full technical specification (for specialists)
Model
Funding stress index (repo / fed funds / CP / reserve scarcity)
Specification
I1_t = 100 (SOFR_t - A_t); A_t = IOER_t for t <= 2021-07-28, IORB_t for t >= 2021-07-29 (spliced, no gap/overlap, nothing dated after the calendar end). Percent -> bp x100.I2_t = 100 (SOFR_p99,t - SOFR_p01,t) [bp].I3_t = 100 (EFFR_t - A_t) [bp], from 2008-10-09 (first IOER).I4_t = 100 (SOFR_t - TGCR_t) [bp]. DEVIATION (spec fallback): the ON RRP award rate is not cached. Economic content: SOFR covers tri-party plus centrally cleared bilateral (FICC DVP) repo while TGCR is tri-party only, so I4 is the premium paid in the dealer-intermediated segment over tri-party cash lenders, a gauge of dealer balance-sheet / intermediation strain and segmentation. It does NOT measure the level of repo rates against the Fed's floor (that is I1/I2): on 2019-09-17 SOFR = TGCR = 5.25%, so I4 = 0 while I1 = 315 bp.I5_t = BEY90(DCPF3M_t) - BEY91(DTB3_t) [bp]; BEY_n(d) = 100*365 d / (360 - n d), d = discount rate in decimal. DEVIATION from the spec's 'DCPF3M - BEY(DTB3)': FRED documents DCPF3M as quoted on a DISCOUNT basis, so the literal difference mixes a discount rate with a bond-equivalent yield and carries a rate-level-dependent bias d - BEY90(d) (about -9.7 bp at 4%, -13.4 bp at 5%, -17.6 bp at 6%, 0 at 0%) that would distort a ranking across rate regimes. Both legs are therefore converted (CP: 90-day paper, bill: 91-day). The spec-literal spread is reported in diagnostics.I6_t = -ln(R_t), R_t = WRESBAL_t ($bn; H.4.1 WEEK AVERAGE of daily reserve balances, week ending Wednesday, NSA) / TLAACBW027SBOG ($bn; H.8 total assets of all commercial banks, Wednesday level, SA) [ratio, shown in % in the table]. Point in time: the reserves week ending Wednesday t is used from t+1 (H.4.1, Thursday); the H.8 asset level used is the latest one published by then (Wednesday obs + 9 days).I7_t = -RRPONTSYD_t ($bn) from 2013-09-23 (first ON RRP day). Reasoning: take-up measures excess liquidity parked at the Fed; the less is parked, the thinner the liquidity buffer, so stress = minus take-up.z_{k,t} = ECDF transform (HKL eq. 1a): for the first n0 observations (the first 2 calendar years of indicator k) z = average-rank / n0 within that block (IN-SAMPLE); (eq. 1b) for t > n0, z_t = average-rank of x_t among x_1..x_t / t (one-sided, expanding). Ties get the average rank.FSI_t = (1/n_t) sum_{k in A_t} z_{k,t}, A_t = indicators available at t (n_t shown as n_avail; n_insample counts components still inside their in-sample block). fsi_ex_rrp drops I7 as a robustness variant.FSI percentile = 100 * percentileofscore(FSI history on dates when all indicators present at the as-of are available (all 7 for current runs), latest FSI, 'mean') = 100 * (#{h < f} + 0.5 #{h = f}) / N -- a full-sample descriptive rank, not a one-sided quantity.
Limitations
- In-sample block: the first two years of each indicator are ranked within the block, so FSI values before 2020-04 for the SOFR-based indicators (SOFR starts 2018-04) -- including the Sep 2019 episode -- are partly in-sample (see n_insample). Later values are one-sided.
- The expanding ECDF measures stress relative to the whole sample, which mixes regimes (pre-2008 scarce reserves, 2008-2021 abundant reserves, ZLB). The reserves indicator in particular ranks current ratios against a history that includes 2003-2007 (ratios <1%) and 2022 (peak abundance).
- ON RRP take-up was ~0 from 2013 to 2020 (then peaked ~$2.5tn in 2022-23), so I7 reads near its maximum whenever the facility is empty even when funding markets are calm; fsi_ex_rrp is provided as a robustness check.
- Quarter-end/month-end/tax-date calendar effects are not removed; SOFR-IORB and dispersion routinely spike on those dates.
- SOFR percentiles and TGCR are available only from 2018-04; the SOFR family cannot be extended further back (runs with an earlier as-of drop those indicators; see diagnostics.indicators_dropped). SOFR is a repo benchmark, not a funding cost for any single bank. SOFR - TGCR captures segment premia, not broad repo stress (it read 0 on 2019-09-17).
- EFFR methodology break on 2016-03-01: the NY Fed moved from a volume-weighted mean of brokered trades to a volume-weighted median of FR 2420 reported trades, so I3 ranks post-2016 values against a partly non-comparable pre-2016 history.
- H.15 financial CP quotes (DCPF3M) are missing on a large share of bill trading days in recent years (2023: 46%, 2024: 54%, 2025: 44%, 2026: 48%; see diagnostics); the CP ECDF is therefore computed on non-randomly missing quote days (quotes require enough eligible issuance), and the 3-month CP maturity is assumed to be 90 days.
- Latest-vintage data; not a real-time reconstruction (H.8 assets and WRESBAL carry revisions). Describes current state, not a forecast. Not investment advice.
References
- Afonso, G., Giannone, D., La Spada, G. & Williams, J. (2022). Scarce, abundant, or ample? A time-varying model of the reserve demand curve. Federal Reserve Bank of New York Staff Report 1019.
- Anbil, S., Anderson, A. & Senyuz, Z. (2020). What happened in money markets in September 2019? FEDS Notes, Board of Governors of the Federal Reserve System.
- Hollo, D., Kremer, M. & Lo Duca, M. (2012). CISS - A composite indicator of systemic stress in the financial system. ECB Working Paper 1426 (eq. 1a/1b recursive empirical CDF).
- Estrella, A. & Trubin, M. (2006). The yield curve as a leading indicator: some practical issues. Federal Reserve Bank of New York, Current Issues in Economics and Finance 12(5) (bond-equivalent yield).
How jumpy are markets?
This model estimates how much stock prices and the yen-dollar exchange rate are swinging compared with their usual level, and how tightly different markets move together.
Why it matters
Big swings in markets affect retirement accounts, college savings and what the dollar is worth abroad. When many markets move in lockstep, a shock in one place spreads more easily to others. Knowing whether today's swings are unusually large or small gives context for headlines about market turbulence.
How it works
The core tool is a GJR-GARCH model, a standard way to estimate volatility, meaning how widely prices swing. It assumes today's volatility depends on yesterday's volatility plus yesterday's surprise move, with down days raising it more than up days. It is like a weather forecaster who expects tomorrow to look like today but raises the storm odds after a sudden drop in air pressure. The model also compares the VIX, a measure of expected volatility taken from stock option prices, with its own forecast; the gap is called the variance risk premium. Finally, it measures how much of the movement in 13 assets is explained by just 3 common forces (the absorption ratio) and tracks whether stocks and bonds have been moving together.
The latest readings
The model puts S&P 500 volatility at 11.9% a year, about 0.71 times its long-run level of 16.6%, so swings are smaller than usual. This reading uses returns up to the prior session; after that day's -1.10% move, the model's next-day estimate rises to 14.5% (0.87 times long-run).
Simple exampleVolatility is how bumpy the ride is for stock prices, like checking how choppy the sea is before a boat trip. This is the model's estimate of how big daily swings are likely to be, stated per year. Higher than the long-run level means a bumpier ride than usual.
Model noteModel-filtered S&P 500 volatility for 2026-10-16 is 11.9% annualized, 0.71x its GJR long-run level of 16.6%; this uses returns through the prior session, and after that day's -1.10% move the next-day model vol is 14.5% (0.87x).
Typical rangeBetween 9.56 and 18.23 in half of all readings since Oct 21, 2016 (middle 50%; the outer 10th to 90th percentile band is 8.13 to 25.79). The latest reading sits at the 47th percentile.
16.6% a year is the normal level the model expects S&P 500 volatility to drift back toward over time. It is estimated from about 10 years of data, so it reflects that period only.
Simple exampleAfter a storm or a calm spell, the sea tends to settle back to its usual choppiness. This is that usual level for stock-price swings, as the model sees it. It is learned from roughly the past decade, so it describes that period, not all of history.
Model noteUnconditional volatility implied by the fitted S&P 500 GJR-GARCH(1,1)-t parameters (in-sample, ~10 years of data).
The yen-dollar exchange rate is swinging at about 8.6% a year, compared with a long-run level of 10.9% (0.79 times), so currency moves are calmer than usual. Including that day's move, the next-day estimate is 8.4%.
Simple exampleIf you swap dollars for Japanese yen on a trip, the exchange rate moves a little every day. This measures how big those moves are, per year. A reading below the long-run level means the exchange rate is calmer than usual; above means it is swinging more.
Model noteYen-dollar volatility for 2026-10-09 is 8.6% annualized versus a long-run 10.9% (0.79x), using data through the prior observation; including that day's move the next-day model vol is 8.4%.
Typical rangeBetween 7.77 and 11.02 in half of all readings since Jan 4, 2000 (middle 50%; the outer 10th to 90th percentile band is 6.49 to 12.89). The latest reading sits at the 38th percentile.
The VIX was 16.5, which is 3.2 volatility points above the model's expected volatility for the next 22 trading days. The model reads this as option prices building in more volatility than the model expects, which it calls rich.
Simple exampleOption prices act a bit like insurance against big swings. This compares the swings that insurance prices build in (the VIX) with the swings the model expects. A positive gap means the insurance is priced for more turbulence than the model forecasts, which is the usual case.
Model noteVIX of 16.5 is 3.2 vol points above GJR-expected 22-day vol, so implied vol looks rich versus the model.
Typical rangeBetween 0.195 and 4.00 in half of all readings since Nov 18, 2016 (middle 50%; the outer 10th to 90th percentile band is -2.13 to 6.31). The latest reading sits at the 69th percentile.
Three common forces explain 68% of how 13 assets move together, at the 53rd percentile since 2018. Higher means markets are more tightly linked, so shocks spread more easily; today's reading is near the middle of that history.
Simple examplePicture a stadium crowd. Sometimes everyone does the wave together; other times people move on their own. This measures how much of the movement of 13 assets is explained by a few shared forces. Higher means they move more like one crowd, so a shock can spread more easily.
Model noteThe top 3 principal components explain 68% of cross-asset correlation variance (53rd percentile since 2018); higher means more tightly coupled markets.
Typical rangeBetween 0.655 and 0.682 in half of all readings since Dec 7, 2018 (middle 50%; the outer 10th to 90th percentile band is 0.634 to 0.688). The latest reading sits at the 53th percentile.
Market linkage over the latest 15 observations is 0.71 standard deviations above its average over the prior 252. The method's authors flag jumps above +1 standard deviation as signs of fragility, so this is above average but below that line.
Simple exampleThis compares the last few weeks of crowd togetherness with the usual level over the past year, measured in typical-sized wiggles. A reading near zero is normal. A big jump upward means markets have suddenly started moving much more in lockstep.
Model noteCoupling is 0.71 standard deviations above its trailing 252-observation average (about 1.1 years of common trading dates); KLPR flag spikes above +1 s.d. as fragility signals.
Typical rangeBetween -1.19 and 1.12 in half of all readings since Jan 17, 2020 (middle 50%; the outer 10th to 90th percentile band is -1.73 to 1.54). The latest reading sits at the 63th percentile.
Over the last 63 trading days, stocks and Treasury bonds have had a correlation of +0.41. Positive means they tend to fall together, which happens when inflation and interest rates drive markets; negative would mean bonds tend to gain when stocks drop.
Simple exampleCorrelation tells you whether two things tend to move the same way, like ice cream and sunscreen sales both rising in summer. Here it is stocks and government bonds. Positive means they tend to rise and fall together; negative means bonds tend to go up when stocks go down.
Model noteStocks and Treasuries have a +0.41 63-day correlation; positive means they sell off together (inflation/rates-driven regime), negative means bonds hedge.
Typical rangeBetween -0.393 and 0.143 in half of all readings since Jan 20, 2017 (middle 50%; the outer 10th to 90th percentile band is -0.515 to 0.349). The latest reading sits at the 94th percentile.
The line is the model's daily estimate of S&P 500 volatility, stated as a yearly percentage. Higher means bigger expected daily swings in stock prices. Look for sharp spikes, such as March 2020, and for how the line slowly settles back toward its long-run level afterward.
Simple exampleThe line is a daily bumpiness meter for US stock prices. When it climbs, the model expects bigger daily swings; when it falls, calmer days. Tall spikes mark sudden storms, and the slow slide afterward shows the market settling back toward its usual choppiness.
The line is the VIX minus the model's expected volatility, in volatility points. Above zero means option prices build in more volatility than the model expects, which is the case on average over the sample; below zero means real turbulence has jumped past what options priced. Look for deep dips during sudden selloffs, such as March 2020.
Simple exampleThe line is the price of swing insurance minus the swings the model expects. Above zero, the insurance is priced for more turbulence than forecast. When it dives below zero, real turbulence has outrun what the insurance had priced in, which tends to happen in sudden selloffs.
Today's expected variance equals a baseline plus a share of yesterday's squared surprise (a bigger share after a down day) plus a share of yesterday's variance.
Simple exampleThis is a recipe for tomorrow's expected bumpiness: start with a small base amount, add a share of how big yesterday's surprise was (a bigger share if prices fell), and add a share of yesterday's bumpiness. Like a mood: today's news and yesterday's mood both carry over.
- \sigma^2_tthe expected variance of the daily return on day t (volatility squared)
- \varepsilon_{t-1}yesterday's surprise: the daily return minus its average
- \omegaa small baseline amount of variance
- \alphahow much any surprise raises variance
- \gammathe extra boost to variance after a down day
- \mathbf{1}[\varepsilon_{t-1} < 0]equals 1 if yesterday's surprise was negative, otherwise 0
- \betahow much of yesterday's variance carries over to today
Computes how long shocks linger and the long-run level that volatility drifts back to, then converts daily variance into a yearly volatility percentage.
Simple exampleFrom that recipe, this works out two things: how long a shock tends to linger before fading, and the normal level bumpiness settles back to. It then converts the daily figure into a per-year number, the same way a daily wage can be turned into a yearly salary.
- Ppersistence: closer to 1 means shocks fade more slowly
- \bar{\sigma}^2the long-run daily variance
- 252the number of trading days in a year, used to annualize
- \text{vol}_{\text{LR}}the long-run annualized volatility, in percent
The variance risk premium in volatility points: the VIX minus the model's expected volatility over the next 22 trading days, scaled to a yearly figure.
Simple exampleSubtract the model's own forecast of swings over the next month from the swings that option prices imply. The leftover is like the extra an insurer charges above the expected cost of claims.
- \text{VIX}_tthe VIX index on day t, the volatility implied by S&P 500 option prices
- E_t\!\left[RV_{t+1:t+22}\right]the model's forecast of total variance over the next 22 trading days
- 12the scaling factor that turns about one month of variance into a yearly figure
The absorption ratio: the share of the joint movement of 13 assets that is explained by the 3 strongest common forces.
Simple exampleThink of a song played by 13 instruments. This asks what share of the total sound comes from the 3 loudest common tunes. If those 3 explain most of it, the instruments are mostly playing together.
- \lambda_ithe strength of the i-th common force (an eigenvalue of the assets' correlation table), sorted from strongest
- AR_tthe absorption ratio, between 0 and 1; higher means assets move more in unison
- Volatility
- How widely prices swing up and down. It is usually stated as a yearly percentage.
- Annualized
- Rescaled to a one-year basis so that numbers measured over days or months can be compared.
- GJR-GARCH
- A statistical model that estimates volatility from past price moves, letting large moves and especially down moves raise expected volatility.
- VIX
- An index built from S&P 500 option prices that shows how much volatility the options market is pricing for the next 30 days.
- Variance risk premium
- The gap between the volatility priced into options and the volatility a model expects. A positive gap means options are priced for more turbulence than the model predicts.
- Volatility point
- One unit of a volatility index such as the VIX, equal to one percentage point of annualized volatility.
- Absorption ratio
- The share of the movement across many assets explained by a few common forces. High values mean markets are tightly linked.
- Standard deviation
- A common measure of how spread out numbers are around their average.
- Correlation
- A number from -1 to 1 showing how closely two things move together.
Full technical specification (for specialists)
Model
Volatility monitor: GJR-GARCH(1,1)-t, variance risk premium, absorption ratio, stock-bond correlation
Specification
A1 (mean equation): r_t = 100*ln(P_t/P_{t-1}) = mu + eps_t, eps_t = sigma_t*z_t, z_t iid standardized Student-t with nu > 2 degrees of freedom (unit variance); r_t in percent, P_t price level. DEVIATION (per the spec): constant mean. GJR (1993) estimate a richer mean (their eq. 7: a GARCH-in-mean term a1*v_{t-1} and additional regressors such as seasonal dummies); those terms are dropped here.A2 (GJR-GARCH(1,1): Glosten-Jagannathan-Runkle 1993 eq. 9; GARCH(1,1) recursion Bollerslev 1986 eq. 2): sigma2_t = omega + (alpha + gamma*1[eps_{t-1}<0])*eps_{t-1}^2 + beta*sigma2_{t-1}; sigma2_t = conditional daily variance (%^2) of r_t given information through t-1; 1[.] indicator. REPARAMETRIZATION: GJR eq. 9 puts the indicator on POSITIVE shocks, I_{t-1} = 1[eps_{t-1} > 0], i.e. g1*eps^2 + g2*I*eps^2; since 1[eps>0] = 1 - 1[eps<0] almost surely, alpha = g1 + g2 and gamma = -g2, so a leverage effect is gamma > 0 here but a negative coefficient on GJR's indicator (compare signs accordingly). GJR's other variance regressors are dropped per the spec. Recursion initialised by arch's backcast (EWMA, lambda=0.94, of the first 75 squared residuals). Estimated by Student-t MLE (arch 7.0) subject to alpha >= 0, alpha + gamma >= 0, beta >= 0, P < 1.A3: persistence P = alpha + beta + gamma/2 (valid because E[z^2 1(z<0)] = 1/2 for symmetric z).A4: long-run daily variance sigma_bar^2 = omega/(1-P) (%^2); long-run annualized vol = sqrt(252*sigma_bar^2) (%).A5: half-life = ln(0.5)/ln(P) trading days (decay of E_t[sigma2_{t+h}] - sigma_bar^2).A6: annualized conditional vol vol_t = sqrt(252*sigma2_t) (%); vol_now uses sigma2_T for the last date T (filtered state, F_{T-1}-measurable: it does NOT contain the return of day T); ratio = vol_now / long-run vol. vol_next_ann = sqrt(252*sigma2_{T+1|T}) includes the day-T return and is quoted next to vol_now in the headline interpretation.B1: IV2_t = VIX_t^2/12 (%^2 per month), VIX_t annualized implied vol in % (BTZ 2009 use the squared VIX on a monthly basis as implied variance).B2: E_t[RV_{t+1:t+22}] = sum_{h=1}^{22} E_t[sigma2_{t+h}] = 22*sigma_bar^2 + (sigma2_{t+1|t} - sigma_bar^2)*(1 - P^22)/(1 - P), with sigma2_{t+1|t} = omega + (alpha+gamma*1[eps_t<0])*eps_t^2 + beta*sigma2_t (uses r_t) and E_t[sigma2_{t+h}] = omega + P*E_t[sigma2_{t+h-1}] for h >= 2 (arch analytic forecast; closed form cross-checked in diagnostics). %^2. DATE ALIGNMENT: the row dated t pairs VIX_t (close of t) with the forecast made at origin t from SP500 returns through t. The forecast path is initialised by arch forecast()'s backcast (residuals at the estimated mu) rather than the fitted filter's backcast (sample-mean residuals); at forecast origins up to 2017-03-06 (95 origins) erv differs from the value implied by the published cond_vol path by up to 2.3e-02 %^2 (1.3e-02 vol pts; diagnostics.vrp_erv_vs_published_filter); afterwards they agree to < 1e-8 %^2.B3: VRP_t = IV2_t - E_t[RV_{t+1:t+22}] (%^2) is the model-EXPECTED premium; it corresponds to what Bollerslev-Tauchen-Zhou (2009) call the expected premium EVRP_t = IV_t - E_t(RV_{t+1}). VRP^rv_t = IV2_t - sum_{i=0}^{21} r_{t-i}^2 (%^2) is the realized version, BTZ's VRP_t = IV_t - RV_t (eq. 22 in the CREATES RP 2008-48 working-paper version) with RV over the PAST month. NAMING NOTE: our 'VRP' (headline) is BTZ's EVRP and our 'VRP^rv' is BTZ's VRP. DEVIATION: BTZ measure RV from high-frequency intraday returns; we use daily close-to-close squared returns, not demeaned, over the trailing 22 trading days. VRP in vol points = VIX_t - sqrt(12*E_t[RV_22]) (spec formula; x12 on a 22-day variance implies 264 trading days a year, see limitations; the 252-day-consistent VIX_t - sqrt((252/22)*E_t[RV_22]) is in diagnostics).C1 (Kritzman-Li-Page-Rigobon 2011, eq. 1 per the spec): AR_t = sum_{i=1}^{n} lambda_i / sum_{j=1}^{N} lambda_j, lambda_1 >= ... >= lambda_N eigenvalues of the exponentially weighted CORRELATION matrix of N = 13 daily asset changes over the trailing 500 COMMON-CALENDAR observations ending at t (dates on which all 13 series trade: ~230 a year, so the window spans ~2.17 calendar years), n = round(N/5) = 3. DEVIATION: KLPR use the covariance matrix of same-unit returns; we use the correlation matrix because the inputs mix log returns (%) and yield/spread changes (pp). With correlations sum_j lambda_j = N.C2: weights w_k = 0.5^(k/250) / sum_{m=0}^{499} 0.5^(m/250), k = 0 (observation t) ... 499; half-life 250 common-calendar observations (~1.08 calendar years); weighted mean m = sum_k w_k x_{t-k}; weighted covariance S = sum_k w_k (x_{t-k}-m)(x_{t-k}-m)'; correlation C = D^{-1/2} S D^{-1/2}, D = diag(S).C3 (KLPR eq. 2 per the spec): Delta_AR_t = (mean_{15}(AR) - mean_{252}(AR)) / sd_{252}(AR), trailing windows of AR observations ending at t, sample s.d. (ddof = 1). The windows count common-calendar observations: 15 obs ~ 3.4 weeks and 252 obs ~ 1.09 calendar years (not exactly one year).D1: rho_t = 63-day rolling Pearson correlation of r^SP_t = 100*ln(SP500_t/SP500_{t-1}) and -Delta DGS10_t (pp, bond-return proxy), on common SP500/DGS10 dates.
Limitations
- Data are latest-vintage FRED/publisher series; outputs include any revisions (no point-in-time claim).
- In-sample GARCH parameters: the filtered vol path is one-sided in data but not in parameters.
- SP500 on FRED covers only ~10 years, so the S&P GJR long-run vol and the VRP history reflect 2016-2026 only.
- Asynchronous closes (Tokyo for NIKKEI225, New York noon buying rates for H.10 FX, NY close for equities, EIA spot for oil) understate same-day cross-asset correlations, biasing the absorption ratio down; H.10 FX and the broad dollar index are published with about a week's lag, so the absorption ratio's as-of date trails the equity data.
- Single extreme observations (e.g., WTI April 2020) can dominate the weighted correlations inside their 500-day windows; no winsorization is applied (KLPR do not winsorize).
- Finite-window bias: sample top eigenvalues are biased upward, so the AR level is overstated by roughly 0.01 (Monte Carlo on a 13-asset block correlation with the 500-day/250-half-life weights: +0.013); the standardized shift is largely unaffected because the bias is near-constant over time.
- VIX is a risk-neutral 30-calendar-day expectation; the GARCH forecast is a physical-measure 22-trading-day expectation, so the VRP mixes horizon conventions.
- Annualization convention in the VRP (vol points): the spec formula sqrt(12*E[RV_22]) implies 12*22 = 264 trading days a year versus 252 elsewhere, overstating model vol by a factor 1.0235 (+2.35%) and biasing the VRP in vol points down: the 252-day-consistent VIX - sqrt((252/22)*E[RV_22]) is 3.54 vs 3.24 vol pts on 2026-10-15 (gap 0.30), and 2.48 vs 2.10 on the full-sample mean (gap 0.38).
- Absorption-ratio windows count common-calendar observations (all 13 series trading, ~230 a year, not 252): the 500-observation window spans ~2.17 years, the 250-observation half-life ~1.08 years, and the 252-observation shift baseline ~1.09 years.
- KLPR (2011) equation numbers (eqs. 1-2), the 500/250 window and half-life and the +1 s.d. fragility threshold are taken from the spec and were not verified against the primary text (paywalled).
- Boundary inference: estimates within 2 robust SEs of their lower bound 0 (SP500: alpha = 0.25 SE from 0; NASDAQCOM: alpha = 0.34 SE from 0) make Wald SEs and 2-SE statements non-standard (Andrews 1999, Econometrica 67(6)); treat SE-based inference on those parameters as unreliable. Persistence and long-run volatility are not materially affected.
- Model-implied states, not forecasts of prices; nothing here is investment advice.
References
- Bollerslev, T. (1986). Generalized autoregressive conditional heteroskedasticity. Journal of Econometrics 31(3), 307-327.
- Glosten, L. R., Jagannathan, R. & Runkle, D. E. (1993). On the relation between the expected value and the volatility of the nominal excess return on stocks. Journal of Finance 48(5), 1779-1801.
- Bollerslev, T., Tauchen, G. & Zhou, H. (2009). Expected stock returns and variance risk premia. Review of Financial Studies 22(11), 4463-4492. (Equation numbers cited from the working-paper version: CREATES Research Paper 2008-48, Aarhus University.)
- Andrews, D. W. K. (1999). Estimation when a parameter is on a boundary. Econometrica 67(6), 1341-1383.
- Kritzman, M., Li, Y., Page, S. & Rigobon, R. (2011). Principal components as a measure of systemic risk. Journal of Portfolio Management 37(4), 112-126.
- Sheppard, K. et al. arch: ARCH models in Python, version 7.0 (estimation software).
Are investors bracing for a shock?
This model reads stock option prices to see whether traders expect more turbulence soon than later, how unsure they are about turbulence itself, and how much they pay for crash protection.
Why it matters
Option prices reveal what large investors pay to protect themselves against market drops. When protection for the next few weeks costs more than protection for the next few months, it is read as a sign of near-term worry. These signals add context to news about market nerves, which can later show up in retirement and college savings balances.
How it works
The VIX family of indexes turns option prices into the volatility the market expects over different time spans: 9 days, 30 days, 3 months and 6 months. Normally the longer spans carry higher values, a pattern called contango. When a shorter span rises above a longer one, the curve is called inverted, which points to stress expected soon. Think of umbrella prices: an umbrella for the whole season normally costs more than one for this week, but if this week's umbrella suddenly costs more, people expect rain right now. The model also tracks VVIX, which shows how unsure traders are about the VIX itself, and SKEW, which shows how much extra traders pay for protection against a sudden crash.
The latest readings
The ratio of 1-month to 3-month expected volatility is 0.975, below 1, so the curve has its normal upward shape (contango). It is at the 88th percentile since 2009 (89th over 5 years), so the near term is priced closer to the longer term than on most days.
Simple exampleThink of a weather forecast for the next month versus the next three months. Normally there is less expected turbulence in the near term than over the longer stretch, so this ratio sits below 1. If it rises above 1, traders are pricing more trouble soon than later.
Model noteThe 1-month to 3-month implied-vol ratio is 0.975 (normal; contango), at the 88th percentile of its history since 2009 and the 89th of the last 5 years.
Typical rangeBetween 0.834 and 0.930 in half of all readings since Sep 18, 2009 (middle 50%; the outer 10th to 90th percentile band is 0.802 to 0.979). The latest reading sits at the 89th percentile.
The 9-day VIX (20.1) is just above the 30-day VIX (20.0), a ratio of 1.007, at the 76th percentile since 2011 (78th over 5 years). This ratio has been above 1 on 26% of days since 2011, often around scheduled events, so this is a modest front-end premium and not by itself a stress signal.
Simple exampleThis compares expected stock-market swings over the next 9 days with the next 30 days. It often pops above 1 around known events, like a big announcement on the calendar, much as a forecast spikes for a day a storm is already scheduled.
Model noteThe very front end is inverted at 1.007 (9-day vol 20.1 vs 30-day 20.0), the 76th percentile since 2011 and 78th over 5 years; VIX9D/VIX is above 1 on 26% of days since 2011, often around scheduled event risk (FOMC, CPI, earnings), so this is a modest front-end premium, not by itself a stress signal.
Typical rangeBetween 0.847 and 0.973 in half of all readings since Jan 7, 2011 (middle 50%; the outer 10th to 90th percentile band is 0.801 to 1.04). The latest reading sits at the 84th percentile.
Option prices imply volatility of 20.7 points for the window from 30 to 93 days ahead, a bit above the current VIX of 20.0. That is near the middle of its history: the 55th percentile over the full sample and the 45th over 5 years.
Simple exampleIf you know how bumpy a whole 3-month trip is expected to be, and how bumpy the first month is, you can work out the bumpiness of the remaining stretch. This is that leftover window, from about 1 to 3 months ahead, as option prices see it.
Model noteThe market-implied volatility for the window from 30 to 93 days ahead is 20.7 vol points versus 20.0 spot VIX (above spot); percentile 55th full / 45th 5y.
Typical rangeBetween 16.79 and 23.91 in half of all readings since Sep 18, 2009 (middle 50%; the outer 10th to 90th percentile band is 15.47 to 29.42). The latest reading sits at the 55th percentile.
VVIX, which measures uncertainty about the VIX itself, is 109.9, or 5.50 times the VIX. It is at the 85th percentile since 2006 (82nd over 5 years), so traders are more unsure than usual about where volatility is heading.
Simple exampleThe VIX is a forecast of how stormy stocks will be. VVIX measures how unsure people are about that forecast itself, like weather forecasters disagreeing a lot. Higher means more uncertainty about where turbulence is heading.
Model noteUncertainty about volatility itself is 109.9 (VVIX/VIX 5.50), 85th percentile since 2006 and 82nd over 5 years.
Typical rangeBetween 82.57 and 101.8 in half of all readings since Mar 17, 2006 (middle 50%; the outer 10th to 90th percentile band is 75.44 to 115.5). The latest reading sits at the 85th percentile.
SKEW is 168.6, where 100 would mean no extra pricing of crash risk and higher means more is paid for crash protection. It is at the 99.7th percentile since 1990 and the 98th over 5 years, below the record of 183.1 on 2025-02-18.
Simple exampleSKEW is like the price of insurance against a sudden big drop in stocks, compared with ordinary insurance. 100 means no extra charge for crash protection; higher means people are paying more for it. It shows demand for protection, not a forecast that a crash will happen.
Model noteSKEW is 168.6 (risk-neutral skewness S = -6.86; 100 = symmetric, higher = more priced crash protection), 99.7th percentile since 1990 and 98th over the last 5 years (record 183.1 on 2025-02-18).
Typical rangeBetween 117.1 and 133.6 in half of all readings since Jan 7, 2000 (middle 50%; the outer 10th to 90th percentile band is 112.8 to 145.5). The latest reading sits at the 100th percentile.
Over the last 5 years, SKEW has been at or below today's level about 98% of the time. The full-history rank (99.7th) looks even higher partly because SKEW has drifted upward since 2010.
Simple exampleRanking a number against its past is like comparing your height with past classes. If kids have been getting taller over the years, you look taller next to your grandparents' class than next to recent ones. SKEW has drifted up over time, so its long-history rank looks higher than its recent rank.
Model noteSKEW ranks at the 98th percentile of the trailing 5 years and the 99.7th of the full 1990-on history; the full-history rank is higher than the 5-year rank, which is consistent with the upward drift of SKEW since 2010 (full-history ranks overstate extremity).
Typical rangeThis reading is itself a percentile of its own history, so its middle 50% is 25 to 75 by construction. The latest reading is 98.
The 1-month versus 3-month curve is not inverted today (0 days in a row). It was last inverted on 2026-04-07 and was inverted on 13 of the last 252 trading days.
Simple exampleThis is a streak counter, like counting rainy days in a row. It counts how many trading days in a row near-term expected turbulence has been priced above longer-term turbulence, and how often that happened in the past year.
Model noteThe curve is not inverted today; last inverted 2026-04-07 (13 of the last 252 days).
Weeks with at least one inverted day had an average systemic stress reading (CISS) of 0.105, versus 0.061 in other weeks, a gap of 0.044. The gap is not statistically significant at the 5% level (t = 1.90), and only 26% of the highest-stress weeks were inverted, so the link is weak; part of it is built in, because the VIX is also an input to the CISS.
Simple exampleThis checks whether wider financial stress tends to be higher in weeks when near-term turbulence was priced above longer-term turbulence, a bit like checking whether days when people carry umbrellas really are rainier. Part of the link is built in, because both measures share an ingredient.
Model noteWeeks containing an inverted day had mean CISS 0.105 versus 0.061 otherwise (HAC t = 1.90 with 8 Newey-West lags, not significant at 5%; t = 1.71/1.66 with 26/52 lags), and only 26% of the top-decile-stress weeks were inverted, so the validation is weak (and partly mechanical: VIX is a CISS input).
One line is the VIX divided by the 3-month VIX, and the other is the 9-day VIX divided by the 30-day VIX. Below 1 is the normal shape; above 1 means near-term turbulence is priced higher than longer-term turbulence. Look for jumps above 1 during sharp selloffs, such as early 2020 and April 2025, and note that the 9-day line crosses 1 more often because of scheduled events.
Simple exampleEach line compares short-term expected turbulence with longer-term expected turbulence. Below 1 is the normal shape, like a calm near-term forecast. When a line jumps above 1, the near term is priced as stormier. The shorter 9-day line crosses 1 more often, usually around scheduled events.
Divides short-horizon expected volatility by longer-horizon expected volatility; a ratio above 1 means the curve is inverted, and below 0.9 the main ratio is labelled calm.
Simple exampleDivide the near-term turbulence forecast by the longer-term one. Below 1 means the near term looks calmer than the longer term, the normal pattern; above 1 means the order has flipped.
- \text{VIX9D}expected volatility over the next 9 days, from option prices
- \text{VIX}expected volatility over the next 30 days
- \text{VIX3M}expected volatility over the next 3 months (93 days)
- r_{\text{main}}the main 1-month to 3-month ratio used to judge inversion
Backs out the volatility that option prices imply for the stretch from 30 to 93 days ahead, by removing the first 30 days from the 93-day total.
Simple exampleA subtraction trick: take the expected bumpiness of the whole 93-day stretch, remove the part belonging to the first 30 days, and what remains is the bumpiness priced for days 30 to 93. Like working out the second half of a trip from the total and the first half.
- Fthe forward variance between day 30 and day 93
- 93,\ 30the horizons in calendar days of VIX3M and VIX
- \sigma_{\text{fwd}}the forward volatility, in volatility points
Converts the SKEW index back into the lopsidedness of expected 30-day S&P 500 returns that option prices imply; more negative means a bigger priced crash risk.
Simple exampleSKEW is a published score. This converts it back into a measure of how lopsided option prices make the next month look, meaning how much more weight they put on a sharp fall than a sharp rise. More negative means more crash protection is priced in.
- \text{SKEW}the Cboe SKEW index, where 100 means no lopsidedness
- Sthe option-implied skewness of 30-day returns
Tests whether systemic stress is higher in weeks when the VIX curve was inverted; b is the gap in average stress between inverted and other weeks.
Simple exampleSplit the weeks into two piles: weeks with at least one inverted day and all the others. Then compare the average stress level in each pile. The difference between the two averages is the gap the model reports.
- \text{CISS}_wthe average systemic stress index in week w
- D_wequals 1 if week w had at least one inverted day, otherwise 0
- bthe difference in average CISS between inverted and other weeks
- e_wthe part of stress not explained by inversion
- Option
- A contract that gives the right to trade something, such as a stock index, at a set price by a set date. Its price reflects how much movement traders expect.
- Implied volatility
- The amount of future price swinging that is built into option prices.
- VIX, VIX9D, VIX3M
- Indexes from Cboe that show implied volatility of the S&P 500 over the next 30 days, 9 days and 3 months.
- Contango
- The normal shape where expected volatility over longer periods is higher than over shorter periods.
- Inversion
- When short-term expected volatility rises above longer-term expected volatility, usually a sign of stress expected soon.
- VVIX
- An index of how volatile the VIX itself is expected to be: a measure of uncertainty about uncertainty.
- SKEW
- A Cboe index of how much option prices lean toward a sudden large drop. 100 means no lean; higher means more crash protection is priced.
- Forward volatility
- The volatility that option prices imply for a future window, such as from one month to three months ahead.
- Statistically significant
- A result unlikely to be due to chance alone. The t-statistic measures this; the larger it is, the stronger the evidence.
Full technical specification (for specialists)
Model
Volatility term structure, vol-of-vol and tail-risk pricing
Specification
r_short = VIX9D / VIX; r_main = VIX / VIX3M; r_long = VIX3M / VIX6M (same-day closes). Backwardation (inversion) flag: r_main > 1 (Johnson 2017 slope sign; Cboe convention).State: calm if r_main < 0.9; normal if 0.9 <= r_main <= 1.0; inverted if r_main > 1.0. Persistence = number of consecutive trading rows (days with both VIX and VIX3M) with r_main > 1.Term-structure regression, each day with all four tenors: IV(tau_i) = a + b * (tau_i/365) + e_i, tau = (9, 30, 93, 183) days for (VIX9D, VIX, VIX3M, VIX6M), OLS. ts_level = a + b*30/365 (fitted IV at 30d, vol pts); ts_slope = b * 30/365 (vol pts per 30 days).Implied total variance W(tau) = (IV(tau)/100)^2 * tau/365 (decimal variance x years; latest values in diagnostics.implied_total_variance_latest). Forward variance between 30d and 93d: F = (VIX3M^2 * 93 - VIX^2 * 30) / (93 - 30) (vol pts^2; = 100^2 * 365 * (W(93) - W(30)) / 63), forward vol = sqrt(F) (vol pts); F < 0 is flagged as a data error (0 such day(s) in the sample). Nominal tenors 30 and 93 calendar days are used as in the spec.Vol of vol: VVIX (level) and VVIX/VIX.Tail: S = (100 - SKEW)/10, the risk-neutral skewness of 30-day S&P 500 log returns (Cboe: SKEW = 100 - 10 S). More negative S = more priced left-tail.Percentile of metric m at its own last valid observation: 100 * share of observations of m (full available history, or dates within 5 calendar years of the last calendar date) that are <= the latest value; the latest value is included in its own sample.CISS link: weekly mapping to W-FRI weeks (the label/definition of ciss_weekly, a mean of daily CISS). A week is 'inverted' if >= 1 of its days has r_main > 1 (sensitivity: >= half of its days). Conditional means and the difference in means with a Newey-West (1987) HAC t-stat (Bartlett kernel, 8 lags; sensitivity 8, 26, 52 lags) from OLS of CISS on the inverted dummy; top decile = weeks with CISS >= the 90th percentile over the overlap weeks (also reported with the threshold from the whole non-start-up CISS history).DEVIATION: the spec lists VIX3M from 2007 (Cboe publishes VIX3M, formerly VXV, from 2007-12-04), but the cached Cboe file starts on 2009-09-18, so r_main, state and fwd_vol are undefined before that. For 2008-10 the sanity classification and the pre-2009 episodes use VIX/VIX6M > 1 as a labelled proxy (VIX6M from 2008-01-02; in inversion_episodes the column max_r_main then holds max VIX/VIX6M for rows whose basis is the proxy). Proxy quality: Over 4296 days from 2009-09-18 to 2026-10-16 where both rules can be computed, the proxy flags 274 days against 324 for VIX/VIX3M>1; 79.0% of main-rule inverted days are proxy-inverted and 93.4% of proxy-inverted days are main-inverted; episodes (>= 3 days): 22 proxy vs 29 main. The proxy is STRICTER than the main rule, so proxy-basis episode counts and lengths are not comparable with main-basis episodes. VIX9D starts 2011-01-04, so ts_level/ts_slope start then.DEVIATION: the calendar excludes 45 rows that have only a VIX close (32 of them US federal holidays; the other 13 are not federal holidays - special closures or days whose other closes are missing from the cached file: 1998-06-30, 2000-09-20, 2000-09-21, 2000-09-22, 2000-09-25, 2000-09-26, 2000-09-27, 2000-09-28, 2000-09-29, 2003-10-21, 2003-10-28, 2004-06-11, 2025-01-09) and 4 rows that have no VIX close (1991-03-01 (SKEW), 1997-01-31 (SKEW), 1997-11-26 (SKEW), 1999-12-31 (SKEW)), so those few SKEW-only closes are not in the SKEW percentile sample. VIX6M 2019-07-05 low>high OHLC row: only closes are used and the close 15.99 lies between its neighbours 15.74 and 16.36.
Limitations
- VIX3M is cached only from 2009-09-18, so inversion statistics miss 2008 (proxy VIX/VIX6M only, not comparable with the main rule) and earlier history; the 2009-2026 sample holds only a handful of independent large stress events (see inversion_episodes), so conditional statistics are noisy.
- The CISS link is partly mechanical: VIX is one of the CISS inputs (equity segment), so inversion is correlated with CISS by construction; non-equity segment means are reported separately in diagnostics. The validation is weak (weak = HAC |t| < 1.96 or not estimable, or fewer than 50% of top-decile CISS weeks inverted): the CISS gap has HAC t = 1.90 (8 lags; not significant at 5%) and falls to 1.71/1.66 with 26/52 lags (weekly CISS is very persistent), and only 26% of top-decile CISS weeks were inverted.
- The upstream CISS is built from latest-vintage (revised) input data, so the historical CISS-link statistics include revisions and are not real-time; the Cboe closes themselves are not revised.
- SKEW is a model-based index, not a pure measure of crash demand: it can fall in a selloff (S&P options for deep OTM puts get relatively cheaper as ATM vol spikes), shows an upward drift since ~2010 so full-history percentiles overstate extremity, and Cboe consulted in 2025 on changing its methodology; any change would break comparability with the cached history (no break is visible in the cached data through the last observation, but this is not verified against Cboe's notices).
- VIX before 22 Sep 2003 is a retrospective back-calculation of the current SPX-based model-free VIX to 1990 (Carr & Wu 2006), not values published in real time, and before 2014 it uses monthly SPX expiries only (no SPX weeklys); the old OEX-based index is VXO and is not used. VVIX is sparse before 2007.
- Forward vol is a model-free implied (risk-neutral) quantity, not a forecast; it contains the variance risk premium (Carr-Wu 2009). Term-structure level/slope from four points is a descriptive summary (no standard errors) and is mechanically tied to the endpoints.
- VIX9D/VIX > 1 is common (often scheduled event risk such as FOMC or CPI) and is read relative to its percentile, not as a stress signal on its own.
- State thresholds and percentiles are descriptive and in-sample; nothing here is a forecast or investment advice.
References
- Johnson, T. L. (2017). Risk premia and the VIX term structure. Journal of Financial and Quantitative Analysis, 52(6), 2461-2490.
- Cboe Global Markets. VIX, VIX9D, VIX3M, VIX6M, VVIX and SKEW index methodology white papers (SKEW white paper Jan 2011; SKEW = 100 - 10 S).
- Carr, P. & Wu, L. (2009). Variance risk premiums. Review of Financial Studies, 22(3), 1311-1341.
- Carr, P. & Wu, L. (2006). A tale of two indices. Journal of Derivatives, 13(3), 13-29 (2003 VIX redefinition, back-calculation to 1990, old index renamed VXO).
- Newey, W. K. & West, K. D. (1987). A simple, positive semi-definite, heteroskedasticity and autocorrelation consistent covariance matrix. Econometrica, 55(3), 703-708.
Are markets calm or stormy?
This model estimates the chance that the stock market is in a stormy, high-volatility phase rather than its usual calm phase.
Why it matters
Stock markets tend to stay calm for long stretches and then switch into turbulent spells. Knowing which phase the market seems to be in helps explain why retirement and savings balances may swing more or less than usual. The model also tests whether gloomy news makes a switch into the stormy phase more likely.
How it works
The model looks at weekly returns of the Nasdaq stock index and assumes each week comes from one of two hidden states: calm (smaller swings) or stress (bigger swings). It never sees the state directly, so it infers it from the size of recent moves and updates its belief every week. It is like guessing whether a friend is in a good or bad mood from their texts: one short reply means little, but a run of them shifts the guess. Some versions let the chance of switching depend on a news-mood index and on the systemic stress index (CISS). Statistical scores then decide which version fits the data best.
The latest readings
The best-fitting model puts a 3% probability on the Nasdaq being in its high-volatility state this week, so it sees the market as very likely in its calm state. The estimate uses data up to this week, with model settings fitted on the full history.
Simple exampleLike guessing whether it is storm season from the last few weeks of weather. This is the model's estimated chance that the Nasdaq stock index is in its stormy, big-swing state rather than its calm one. Near 100% means the model is fairly sure it is stormy; near 0% means it likely is not. It is an estimate, not a certainty.
Model noteThe M0 Markov-switching model puts a 3% probability on Nasdaq being in its high-volatility regime this week (one-sided filter given full-sample parameters).
Typical rangeBetween 0.019 and 0.617 in half of all readings since Jan 7, 2000 (middle 50%; the outer 10th to 90th percentile band is 0.014 to 0.953). The latest reading sits at the 37th percentile.
In the stress state, weekly Nasdaq returns swing at about 35% a year. This describes how turbulent the stormy state is on average, not today's level.
Simple exampleThink of the typical size of waves on a rough day at sea. This is how big the Nasdaq's yearly price swings usually are when the model's stormy state is in charge. It describes that state on average, not what is happening today.
Model noteIn the stress regime weekly Nasdaq returns have an annualized volatility of about 35%.
In the calm state, swings are about 14% a year, about 2.4 times smaller than in the stress state.
Simple exampleThe same wave-size measure, but for a calm day at sea. It shows how big Nasdaq swings typically are in the quiet state; the bigger its gap from the stormy number, the more different the two states are.
Model noteIn the calm regime annualized volatility is about 14%, 2.4x lower than in stress.
With today's switching odds, a calm spell lasts about 61 weeks on average. This is an average implied by the model's switching probability, not a forecast of when the calm ends.
Simple exampleIf a sunny spell has a small chance of ending each week, you can work out how long sunny spells last on average. This reading does that for the market's current state. It is an average, like an average bus wait, not a prediction of when the state will change.
Model noteWith transition probabilities at today's values, a calm spell lasts 61 weeks on average (1/(1-p_ii)).
In the version that adds news mood (M1), better news mood lowers the odds of switching from calm to stress: the coefficient is -1.12 (standard error 0.41, p = 0.006), significant at the 5% level. When the stress index is also added (M2), the effect is smaller at -0.80 (p = 0.014).
Simple exampleThis asks: does cheerful news make a calm market less likely to turn stormy? A negative number means better news mood goes with lower odds of switching to stress, and the further from zero, the stronger the link. A small p-value means a link this strong would be unlikely to appear by chance if there were no real effect.
Model noteBetter news mood lowers the odds of switching from calm to stress (coef -1.12, SE 0.41, p = 0.006: significant at 5%); in M2, with CISS added, -0.80 (SE 0.32, p = 0.014).
Adding news mood raises the model's fit score (log-likelihood) by 4.6, giving a likelihood-ratio statistic of 9.2 and p = 0.010. On this test alone, news mood improves the fit.
Simple exampleLike testing whether a new ingredient really improves a recipe. This compares the model with and without news mood: a small p-value means the version with news mood fits the data better than luck alone would easily explain.
Model noteAdding news mood to both transition equations raises the log-likelihood by 4.6 (LR = 9.2, p = 0.010).
The BIC score, which penalizes extra parameters, prefers the simplest model M0 (constant switching odds) by 4.7 points: 9215.8 versus 9221.7 for M1 and 9220.5 for M2, where lower is better. So the evidence on news mood is mixed: the likelihood-ratio test favors it, but the stricter BIC does not.
Simple exampleBIC is a judge that rewards a good fit but takes off points for every extra moving part, so simpler models get a fair chance. Lower scores win. This reading shows which version wins and by how many points; a bigger margin means a clearer winner.
Model noteBIC prefers M0 by 4.7 points; BIC: M0 9215.8, M1 9221.7, M2 9220.5.
The line is the best model's estimated probability, from 0 to 1, that the Nasdaq is in its high-volatility state each week, using data only up to that week (with settings fitted on the full history). Readings near 1 mean the model is nearly sure markets are stormy, and readings near 0 mean calm. Look for long stretches near 1 around 2000 to 2002 and 2008 to 2009, and shorter bursts such as March 2020.
Simple exampleThe line is the model's estimated chance, from 0 to 1, that the stock market is in its stormy state each week, like the 'chance of storm' on a weather app. When it climbs near 1, the model sees big, turbulent swings; near 0, it sees calm. Long stretches near the top mark drawn-out rough periods.
The weekly Nasdaq return is assumed to follow a bell curve whose average and spread depend on whether the hidden state is calm or stress.
Simple examplePicture two hidden machines that produce weekly returns: one makes small, tame moves and the other bigger, wilder ones. Each week's return is assumed to come from whichever machine is secretly switched on, and each has its own usual average and spread.
- y_tthe weekly Nasdaq return in percent
- P_tthe Nasdaq Composite closing level at the end of week t
- S_tthe hidden state in week t: calm or stress
- \mu_s,\ \sigma_s^2the average return and the variance of returns in state s
The chance of switching from calm to stress is an S-shaped function of last week's news mood and stress index (in model M0 it is a constant).
Simple exampleThink of a light switch that sometimes flips by itself: this sets the odds that calm turns into stress next week. In the simplest version the odds are fixed; in others they slide up or down with last week's news mood and financial stress readings, always staying between 0 and 1.
- p_{cs,t}the probability of moving from calm last week to stress this week
- z_{t-1}last week's inputs: a constant, plus standardized news mood (M1) and CISS (M2)
- \deltathe estimated weights on those inputs
- \Lambdathe logistic function, which turns any number into a probability between 0 and 1
Each week the model predicts the state odds from last week, then updates them according to how well each state explains this week's return.
Simple exampleA guess-then-check routine, like a detective. First predict this week's odds of calm or stress from last week's belief, then look at the actual return and shift the odds toward whichever state explains it better.
- \xi_{t|t}the probabilities of calm and stress in week t, using data up to week t (the filtered probability)
- \xi_{t|t-1}the predicted probabilities before seeing week t's return
- P_tthe table of switching probabilities between states
- \eta_thow likely this week's return is under each state
- \odotmultiply item by item; the bottom of the fraction rescales so the probabilities add up to 1
Gives the average length of a spell in a state from the chance of staying in it, and converts weekly variance into yearly volatility.
Simple exampleIf you stay in a state with a 98% chance each week, spells last about 50 weeks on average, because the chance of leaving is 2%. The second part scales the size of weekly swings up to a yearly figure so they are easier to compare.
- p_{ii}the probability of staying in state i from one week to the next
- E[D_i]the expected number of weeks a spell in state i lasts
- 52the number of weeks in a year
- \text{vol}_sthe annualized volatility of state s, in percent
- Regime
- A phase with its own typical behavior, here a calm phase with small swings or a stress phase with large swings.
- Markov switching model
- A model in which the hidden state can change from week to week, with a chance of switching that depends only on the current state and, in some versions, on outside inputs.
- Filtered probability
- The model's estimate of the current state using only data available up to that week.
- Transition probability
- The chance of moving from one state to another between one week and the next.
- News mood
- An index of how positive or negative news, consumer and uncertainty measures are, scaled so that 1 unit is one standard deviation.
- Coefficient
- A number showing how strongly an input pushes the result. A negative coefficient here means the input lowers the switching odds.
- p-value
- The chance of seeing a result at least this strong if the input truly had no effect. Below 0.05 is usually called significant at the 5% level.
- Log-likelihood
- A score for how well a model explains the data; higher is better.
- BIC
- The Bayesian information criterion, a fit score that penalizes extra parameters. Lower is better.
Full technical specification (for specialists)
Model
Markov-switching equity regimes with sentiment/stress-driven transition probabilities
Specification
Return: y_t = 100 * ln(P_t / P_{t-1}); P_t = NASDAQCOM close on the last trading day of W-FRI week t (Friday close; Thursday etc. when Friday is a holiday or not yet published).Measurement (Hamilton 1989 with switching intercept and variance): y_t | S_t = s ~ N(mu_s, sigma2_s), s in {calm, stress}. DEVIATION from Hamilton (1989), whose mean equation has AR(4) terms in (y - mu_{S}): the spec prescribes statsmodels MarkovRegression with trend='c', no autoregressive terms (weekly equity returns have negligible serial correlation).Transition (Diebold-Lee-Weinbach 1994 / Filardo 1994 logistic TVTP, 2 regimes): p_cs,t = P(S_t = stress | S_{t-1} = calm, z_{t-1}) = Lambda(z_{t-1}' delta), p_sc,t = P(S_t = calm | S_{t-1} = stress, z_{t-1}) = Lambda(z_{t-1}' gamma), Lambda(x) = 1/(1+exp(-x)); p_cc = 1 - p_cs, p_ss = 1 - p_sc. In statsmodels each from-regime i has the logit of moving to its regime 0, P(0|i,x) = Lambda(x' beta_i); delta and gamma are beta mapped to the calm/stress labels (sign flipped where the reference regime differs).Covariates: z_{t-1} = [1, (news_mood_{t-1} - m_news)/s_news, (ciss_{t-1} - m_ciss)/s_ciss] with full-sample (estimation-sample) means m and s.d. s; M0: p_cs, p_sc constant; M1: z = [1, news_mood]; M2: z = [1, news_mood, ciss].Hamilton filter (Hamilton 1994, eqs. 22.4.5-22.4.8): xi_{t|t-1} = P_t xi_{t-1|t-1}, eta_t(s) = phi(y_t; mu_s, sigma2_s), xi_{t|t} = (xi_{t|t-1} o eta_t) / 1'(xi_{t|t-1} o eta_t), ln L = sum_t ln 1'(xi_{t|t-1} o eta_t); P_t[j, i] = P(S_t = j | S_{t-1} = i). xi_{-1} = ergodic distribution of P_1 (statsmodels 'steady-state' initialization, first-period matrix under TVTP).Kim (1994) smoother (Hamilton 1994, eq. 22.4.14): xi_{t|T} = xi_{t|t} o { P_{t+1}' [ xi_{t+1|T} (/) xi_{t+1|t} ] }.Expected regime duration: E[D_i] = 1 / (1 - p_ii) weeks (geometric spell length, with p_ii frozen at the current covariates for TVTP models).Annualized regime volatility: vol_s = sqrt(sigma2_s) * sqrt(52) (% per year); SE by the delta method: se(vol_s) = sqrt(52) * se(sigma2_s) / (2 sqrt(sigma2_s)).Model comparison: AIC = 2k - 2 ln L; BIC = k ln(n) - 2 ln L (n = weekly observations); LR = 2 (ln L_unrestricted - ln L_restricted) ~ chi2(2) for M0 vs M1 and M1 vs M2.Wald test: z = b / se(b), p = 2 (1 - Phi(|z|)); se from the inverse numerical Hessian of ln L (statsmodels cov_type='approx').Sensitivity: p_cs(v) = Lambda(delta_0 + delta_k (v - m_k)/s_k + sum_{l != k} delta_l z_l,T) on a grid v from the 1st to the 99th percentile of covariate k, other covariates at their current values z_T; marginal effect dp_cs/dz_k = p_cs (1 - p_cs) delta_k.Current transition matrix: P(S_{T+1} | S_T, z_T) uses the latest week's covariates z_T (the transition from this week to next week).
Limitations
- SP500 on FRED covers only the last 10 years, so the long-history equity proxy is the Nasdaq Composite, a tech-heavy index whose volatility regimes (e.g. 2000-02) differ from the broad market.
- Parameters are estimated on the full sample (in-sample); filtered probabilities are one-sided only given those parameters and smoothed probabilities use future data. Covariate standardization also uses full-sample moments.
- Data are latest-vintage (revised); no point-in-time claim. The own CISS covariate is in-sample during its start-up window (to about 1991, see ciss model card) and news_mood uses rolling z-scores from upstream.
- The latest week may be incomplete (e.g. Friday close not yet published); its return then covers fewer trading days, and its covariates use the days available.
- Two Gaussian regimes are a coarse description of equity risk; P(stress) is a model-implied state probability, not a forecast of returns. Expected durations under TVTP freeze covariates at today's values. Nothing here is investment advice.
- Standard errors come from a numerical Hessian; with logit transition coefficients the likelihood can be flat (large SEs) when few transitions identify a slope.
References
- Hamilton, J. D. (1989). A new approach to the economic analysis of nonstationary time series and the business cycle. Econometrica 57(2), 357-384.
- Filardo, A. J. (1994). Business-cycle phases and their transitional dynamics. Journal of Business & Economic Statistics 12(3), 299-308.
- Diebold, F. X., Lee, J.-H. & Weinbach, G. C. (1994). Regime switching with time-varying transition probabilities. In C. Hargreaves (ed.), Nonstationary Time Series Analysis and Cointegration, Oxford University Press, 283-302.
- Duprey, T. & Klaus, B. (2017). How to predict financial stress? An assessment of Markov switching models. Bank of Canada Staff Working Paper 2017-32 / ECB Working Paper 2057.
- Kim, C.-J. (1994). Dynamic linear models with Markov-switching. Journal of Econometrics 60(1-2), 1-22.
- Hamilton, J. D. (1994). Time Series Analysis. Princeton University Press, ch. 22.
What do bond prices imply about future rates?
This model uses the Federal Reserve's zero-coupon Treasury curve to show the interest rates that bond prices build in for future years.
Why it matters
Treasury rates set the baseline for mortgages, car loans, student loans and savings account yields. Forward rates show what today's bond prices imply about borrowing costs in later years, including extra pay for the risk of lending for longer. A higher or steeper curve points to higher borrowing costs over longer horizons, all else equal.
How it works
A zero-coupon yield is the interest rate on a loan that is repaid in one lump sum at the end, with no payments in between. Fed researchers fit a smooth curve (the Svensson formula) through Treasury prices, and this model rebuilds that curve from the published formula settings and checks that it matches. From the curve it computes forward rates: the rate for a loan that starts in the future, such as a 5-year loan starting 5 years from now. Think of train tickets: comparing the fare from city A to city C with the fare from A to B reveals the implied fare for the B to C leg. The model also summarizes the curve's shape with three numbers: level, slope and curvature.
The latest readings
The 5-year rate built into bond prices for the period 5 to 10 years from now is 5.52% (5.67% with annual compounding). It includes term premia, the extra pay for lending for longer, so it is not a pure expectation of future rates.
Simple examplePicture agreeing today on the rent for an apartment you will move into in 5 years and keep for 5 years. This is the yearly interest rate that today's bond prices lock in for that future stretch. It also includes extra pay for tying money up longer, so it is not simply a guess about future rates.
Model noteThe 5-year rate implied for the period five to ten years ahead is 5.52% (continuous compounding, 5.67% annually compounded); it includes term premia, not pure expectations.
Typical rangeBetween 2.96 and 5.24 in half of all readings since Jan 7, 2000 (middle 50%; the outer 10th to 90th percentile band is 2.26 to 5.94). The latest reading sits at the 82th percentile.
The 1-year rate for the year starting 2 years from now is 5.13%, above today's 1-year zero yield of 4.49%. Because it includes term premia, it is not the expected path of the 1-year rate.
Simple exampleLike booking today the price of a one-year rental that starts two years from now. This is the interest rate bond prices imply for that single future year. Because it includes some extra pay for lending longer, it is not a pure forecast of where rates will be.
Model noteThe 1-year forward rate for the year starting two years ahead is 5.13%, above today's 1-year zero yield of 4.49%; it includes term premia, so it is not the expected path of the 1-year rate.
Typical rangeBetween 1.65 and 3.95 in half of all readings since Jan 7, 2000 (middle 50%; the outer 10th to 90th percentile band is 0.795 to 4.68). The latest reading sits at the 95th percentile.
The 10-year zero yield is 49 basis points above the 2-year, so the curve slopes upward. On the standard par Treasury curve the same gap is 0.44 percentage points.
Simple exampleThink of a staircase of interest rates by loan length. This is the 10-year rate minus the 2-year rate: positive means longer loans pay more, so the stairs go up; negative means short loans pay more. It is shown in basis points, hundredths of a percentage point.
Model noteThe zero-coupon curve is upward sloping by 49 bp between 2 and 10 years (par CMT 10y-2y: 0.44 pp on 2026-10-09).
Typical rangeBetween 0.270 and 2.19 in half of all readings since Jan 7, 2000 (middle 50%; the outer 10th to 90th percentile band is -0.055 to 2.70). The latest reading sits at the 32th percentile.
The fitted long-run level of zero yields is 5.87%, compared with 5.65% on par Treasury yields. The same fit gives a slope of 0.92 percentage points and a curvature of -2.67, with an average fit error of 8.8 basis points.
Simple exampleThink of the overall height of a hill rather than its shape. This summary number is roughly where interest rates settle for very long loans. Higher means rates for long loan lengths are higher overall.
Model noteDiebold-Li level on 1-30y zeros is 5.87% versus 5.65% on par CMT yields (slope 0.92 pp, curvature -2.67 pp, fit RMSE 8.8 bp).
Typical rangeBetween 3.32 and 5.36 in half of all readings since Jan 7, 2000 (middle 50%; the outer 10th to 90th percentile band is 2.67 to 6.06). The latest reading sits at the 85th percentile.
The fitted gap between very long and very short zero yields is 0.92 percentage points, compared with 1.49 on par yields. A positive value means long-term rates sit above short-term rates.
Simple exampleThis tells you how much the hill tilts: the gap between very long-term and very short-term rates. Positive means long loans pay more than short ones; negative means short loans pay more.
Model noteThe fitted long-minus-short zero slope is 0.92 pp versus 1.49 pp on par yields.
Typical rangeBetween -0.001 and 3.06 in half of all readings since Jan 7, 2000 (middle 50%; the outer 10th to 90th percentile band is -0.773 to 4.41). The latest reading sits at the 41th percentile.
The 5y5y forward rate rose by 39 basis points (hundredths of a percentage point) since 2026-09-09, about one month. That is the change in the rate built in for the period 5 to 10 years ahead.
Simple exampleLike checking how much a locked-in future rent price moved over the past month. This is how much the 5-year rate starting 5 years from now has changed in about a month, in basis points (hundredths of a percentage point). Positive means it rose.
Model noteThe 5y5y forward moved +39 bp since 2026-09-09.
Typical rangeBetween -18.39 and 16.44 in half of all readings since Jan 3, 2000 (middle 50%; the outer 10th to 90th percentile band is -33.05 to 36.31). The latest reading sits at the 91th percentile.
Rebuilding the curve from the Fed's published formula settings matches the published yields to within 0.038 basis points on all 16295 dates checked. This is a data-quality check confirming that the curve used here is computed correctly.
Simple exampleA quality check, like redoing a math problem to confirm you get the textbook's answer. The model rebuilds the Fed's published yields from its formula and measures the biggest mismatch. A tiny number means the rebuilt curve matches closely.
Model noteRe-building the curve from the published parameters matches SVENY01-30 to within 0.038 bp on every one of 16295 dates (100.00% below 1 bp).
One line is the 5y5y forward (the 5-year rate starting 5 years ahead) and the other is the 2y1y forward (the 1-year rate starting 2 years ahead), both in percent. Higher lines mean bond prices build in higher rates for those future periods, including term premia. Look for the drop in 2020 and the sharp climb from 2022 onward.
Simple exampleTwo lines show the interest rates that bond prices lock in for future periods: one for 5 years starting 5 years ahead, one for 1 year starting 2 years ahead. Think of them as today's price tags on loans that start later. When a line climbs, borrowing for that future stretch is priced higher.
The Svensson formula gives the zero-coupon yield for any maturity as a mix of a long-run level and three smooth humps and slopes; it is rebuilt from the Fed's published settings.
Simple exampleLike a flexible ruler bent to pass smoothly through dots on a page: a starting height plus a few gentle bends and humps. Feed in any loan length and it gives back the matching interest rate.
- y(t)the zero-coupon yield for maturity t years, in percent, continuously compounded
- \beta_0,\ \beta_1,\ \beta_2,\ \beta_3published weights for the level, short-end slope and two humps
- \tau_1,\ \tau_2published settings for where along the maturities the humps sit (the last term is dropped when tau_2 is not positive, as in pre-1980 curves)
The forward rate between years a and b is the rate that links the a-year and b-year zero yields: what the longer loan earns beyond the shorter one, per year.
Simple exampleThe train-ticket trick: if you know the fare from A to C and from A to B, you can work out the fare for the B to C leg. Here the long loan's rate and the short loan's rate reveal the rate for the stretch in between.
- y_a,\ y_bthe zero-coupon yields for a and b years
- f_{a,b}the forward rate for a loan starting in a years and ending in b years
- \text{5y5y}the 5-year rate starting 5 years from now
- \text{2y1y}the 1-year rate starting 2 years from now
A simpler Nelson-Siegel curve is fitted to the 1 to 30 year zero yields each day to summarize the curve with a level, a slope and a curvature.
Simple exampleDescribing a hill with three facts: how high it is, how steep it is, and whether it has a bump in the middle. A simpler curve is fitted each day to boil the whole rate curve down to those three numbers.
- \taumaturity in years
- Lthe level: where very long yields settle
- S'the short-end loading; the reported slope is minus this, the long yield minus the short yield
- Cthe curvature: a hump or dip in the middle maturities
- \lambdaa fixed shape setting of 0.7308 per year (Diebold-Li)
The 10-year minus 2-year zero yield; positive means the curve slopes upward.
Simple exampleSimply subtract the 2-year rate from the 10-year rate. Positive means longer loans pay more, like a staircase going up; negative means it slopes down.
- y_{10},\ y_{2}the 10-year and 2-year zero-coupon yields
- Zero-coupon yield
- The interest rate on a bond that makes a single payment at maturity, with no interest payments along the way.
- Par yield
- The yield on a regular bond that pays interest twice a year and sells at face value. The Treasury's standard (CMT) yields are par yields.
- Forward rate
- The interest rate that today's bond prices lock in for a loan starting at a future date.
- Term premium
- Extra yield that lenders demand for tying up money for longer, on top of expected future short-term rates.
- Continuous compounding
- A way of quoting interest as if it were added constantly. It gives slightly lower numbers than annual compounding for the same return.
- Basis point
- One hundredth of a percentage point. 100 basis points equal 1 percentage point.
- Level, slope, curvature
- Three numbers that summarize a yield curve: its overall height, how much higher long rates are than short rates, and whether the middle bulges or sags.
- Svensson curve
- A smooth formula for yields at every maturity that Fed researchers fit to Treasury prices and publish daily.
Full technical specification (for specialists)
Model
Zero-coupon curve factors and forwards (Fed GSW Svensson curve)
Specification
Svensson zero yield (GSW, FEDS 2006-28, eq. 22; Svensson 1994): y(t) = B0 + B1*[(1-exp(-t/T1))/(t/T1)] + B2*[(1-exp(-t/T1))/(t/T1) - exp(-t/T1)] + B3*[(1-exp(-t/T2))/(t/T2) - exp(-t/T2)]; t = maturity in years, y in % continuously compounded; B0..B3, T1, T2 = BETA0..BETA3, TAU1, TAU2.Instantaneous forward (GSW, FEDS 2006-28, eq. 21): f(t) = B0 + B1*exp(-t/T1) + B2*(t/T1)*exp(-t/T1) + B3*(t/T2)*exp(-t/T2) = d[t*y(t)]/dt.Forward from zeros, continuous compounding (GSW, FEDS 2006-28, eq. 9 with n = a, m = b - a; yield as average of forwards, eqs. 11-12): f_{a,b} = (b*y_b - a*y_a)/(b - a) = (1/(b-a)) * integral_a^b f(s) ds. 1y1y = f_{1,2}; 2y1y = f_{2,3}; 5y5y = f_{5,10}; 1y-forward curve at start k = f_{k,k+1}, k = 0..10 (k = 0 is the 1y zero); slope_10_2_zero = y_10 - y_2.Reconstruction error_t = 100*max_tau |y_recon_t(tau) - SVENYxx_t| (bp), tau = 1..30 where the publisher gives a value; same for SVENFxx. Published values are rounded to 4 decimals (0.005 bp). Validation passed iff share of dates with error_t < 1 bp >= 0.99.Compounding conversions (diagnostics only): annually compounded = 100*(exp(f/100) - 1); semiannual bond-equivalent = 200*(exp(y/200) - 1).Diebold-Li / NS on zeros (DL 2006 eq. 3): y_t(tau) = L_t + S'_t*[(1-exp(-lam*tau))/(lam*tau)] + C_t*[(1-exp(-lam*tau))/(lam*tau) - exp(-lam*tau)] + e_t(tau), lam = 0.0609*12 = 0.7308 per year, tau = 1..30 (available tenors, >= 6), OLS per date. level = L_t (beta1), slope = -S'_t (= y(inf) - y(0) = -beta2), curvature = C_t (beta3). rmse_bp = 100*sqrt(SSE/n).Spec clarification: factors are defined as in the rates module (level = beta1, slope = -beta2, curvature = beta3), so factor_compare uses rates.ns_country('US') for the par side (identical estimator and lambda, verified against rates.json to rounding). An extra row slope_10_2 compares the zero 10y-2y slope with par DGS10-DGS2.Matched-tenor comparison (extra, not in spec): NS fitted on the same eight tenors (1,2,3,5,7,10,20,30y) for zeros and for par yields, only on dates where all eight are available on both sides (excludes 1990-01-02..1993-09-30, when DGS20 is missing), isolates the par-vs-zero effect from the different maturity sets; a second variant converts cc zeros to semiannual bond-equivalent, y_sa = 2*(exp(y/2)-1), the CMT convention.Deviation: pre-1980 GSW curves are Nelson-Siegel only (BETA3 = 0, TAU2 = -999.99 sentinel); the fourth term is dropped when TAU2 <= 0 so the reconstruction applies to the full 1961-onward history.factor_compare samples: '1990+' and '2010+' (all common fitted dates from that start), and the two matched-tenor samples (common dates >= 1990-01-01 on which all eight tenors exist on both sides, i.e. from 1993-10-01). corr_par_vs_zero = Pearson correlation of the level series on common dates; mean_diff_bp = 100*mean(zero - par) (curvature and slope are in pp, so bp = 100*pp); corr_weekly_changes = correlation of Friday-to-Friday changes.
Limitations
- GSW is a staff research product: fitted (smoothed) curve, not observed yields; it can be revised or discontinued without notice. Latest vintage only, not point-in-time.
- Forwards embed term premia and convexity: the 5y5y, 2y1y, 1y1y and the 1y-forward curve (forward_curve table, labelled in its basis column) are NOT pure expectations of future short rates. An ACM-style expected-rate / term-premium split of these forwards is not available here (see rates.term_premium for the 10y ACM split).
- Svensson betas are sometimes on boundaries (BETA0 ~ 0 on about 6% of dates since 1961 and 7% since 2000, see diagnostics.svensson_parameters); individual beta values and tau parameters are not economically interpretable, only the fitted curve is.
- Par and zero NS factors differ by construction: par yields are coupon-weighted averages of zeros, GSW zeros are continuously compounded while CMT par yields are semiannual bond-equivalent (semiannual bond-equivalent exceeds cc by about y^2/4, ~6 bp at 5%), and the fits use different maturity sets (1m-30y par vs 1-30y zeros). The matched-tenor rows separate these effects; none of the differences is estimation noise.
- The par maturity set changes inside the 1990+ window: 9 CMT tenors from 1990-01-02 to 1993-09-30 (no 1m, no 20y), 10 from 1993-10-01 to 2001-07-30 (no 1m) and 11 from 2001-07-31. The zero-minus-par slope difference changes sign across these regimes (diagnostics.par_maturity_set_regimes_1990), so the pooled 1990+ main rows mix them; the 2010+ rows (constant 11-tenor set) and the matched-tenor rows (all eight tenors required) avoid it.
- Zero yields start at 1y, so the NS level/slope on zeros is not directly comparable to the par 3m-based short end; the fit extrapolates below 1y.
- Long-maturity (>= 20y) points are less reliably estimated and missing before the mid-1980s.
References
- Gurkaynak, R., Sack, B. & Wright, J. (2007). The U.S. Treasury yield curve: 1961 to the present. Journal of Monetary Economics 54(8), 2291-2304 (Fed staff research product FEDS 2006-28, not an official statistical release).
- Svensson, L. E. O. (1994). Estimating and interpreting forward interest rates: Sweden 1992-1994. NBER Working Paper 4871.
- Nelson, C. R. & Siegel, A. F. (1987). Parsimonious modeling of yield curves. Journal of Business 60(4), 473-489.
- Diebold, F. X. & Li, C. (2006). Forecasting the term structure of government bond yields. Journal of Econometrics 130(2), 337-364 (eq. 3, lambda = 0.0609 per month).
Could a yen shock spill over?
This model tracks how much extra interest US bonds pay compared with Japanese bonds, how big that gap is next to the usual swings in the dollar-yen exchange rate, and whether that trade has recently been under strain.
Why it matters
For years, many investors around the world borrowed in Japanese yen, where interest rates were very low, and parked the money in higher-paying US dollar assets. When that trade unwinds quickly, as it did in August 2024, the yen can jump and stock markets far from Japan can fall at the same time. Watching this one corner of the currency market helps explain sudden market moves that can reach retirement accounts, import prices and travel costs.
How it works
The model starts with the interest-rate gap between two-year US Treasury bonds and two-year Japanese government bonds (JGBs). It divides that gap by a model estimate of how much the dollar-yen rate typically swings in a year, giving a reward-per-unit-of-risk number called carry-to-risk. It also builds a running index of what the trade would have earned since 2000 (currency moves plus the interest gap) and measures recent losses and how closely the trade has moved with US stocks. Think of a landlord who borrows cheaply to pay for a building: the gap between rent and loan cost is the reward, and the chance of a sudden repair bill is the risk. A simple fragility score averages three standardized pieces: carry-to-risk, the size of the recent loss, and the link to stocks.
The latest readings
One US dollar is worth 158.34 yen, 2.78% more than 21 trading days earlier. A rising number means a weaker yen, which the output notes works in favour of the carry trade.
Simple exampleThis is a price tag: how many yen it takes to buy one US dollar, a bit like how many arcade tokens you get per dollar. When the number goes up, each yen buys less, so the yen has weakened. When it goes down, the yen has strengthened.
Model noteOne dollar buys 158.34 yen, +2.78% versus 21 trading days earlier (positive = weaker yen, which favours the carry trade).
Typical rangeBetween 104.2 and 120.7 in half of all readings since Jan 3, 2000 (middle 50%; the outer 10th to 90th percentile band is 89.22 to 146.4). The latest reading sits at the 98th percentile.
Two-year US Treasuries pay 2.86 percentage points more per year than two-year Japanese bonds. The short-term gap (3-month US bills versus 1-year JGBs) was 2.51 points on 2026-10-09; a wider gap means a bigger interest reward for borrowing in yen.
Simple exampleThink of two banks, one paying a little interest and one paying more. This is the difference between what a 2-year US government bond pays each year and what a 2-year Japanese one pays. A wider gap means a bigger reward for borrowing where money is cheap and putting it where it earns more.
Model noteTwo-year Treasuries yield 2.86 pp more than 2-year JGBs; the short-rate carry (3m bill BEY minus 1y JGB) was 2.51 pp on 2026-10-09.
Typical rangeBetween 0.575 and 3.44 in half of all readings since Jan 4, 2000 (middle 50%; the outer 10th to 90th percentile band is 0.255 to 4.30). The latest reading sits at the 67th percentile.
The rate gap is 0.34 times the model's expected yearly swing in the dollar-yen rate (8.6%), so the reward covers about a third of one typical year's currency risk. That ranks at the 72nd percentile of its history since 2000, meaning it is higher than on about 72% of past days; higher readings mean the trade looks more attractive and possibly more crowded.
Simple examplePicture a lemonade stand with a small profit, where one bad-weather day can wipe it out. This reading compares the interest reward with how much the dollar-yen rate usually jumps around in a year. Higher means more reward for each unit of currency risk; lower means normal wobbles could easily swallow the reward.
Model noteThe 2y differential is 0.34x the model-expected annualized USD/JPY vol (8.6%), a percentile rank of 72 (of 100) in its history since 2000 (with 1m realized vol: 0.50); higher means a more attractive, more crowded-looking carry.
Typical rangeBetween 0.059 and 0.360 in half of all readings since Jan 7, 2000 (middle 50%; the outer 10th to 90th percentile band is 0.028 to 0.488). The latest reading sits at the 72th percentile.
Over the last 21 trading days, a trade that borrowed yen to own dollars would have earned +2.94%, counting both the currency move and the interest gap. For scale, the worst 21-day stretch since 2000 lost 13.5%, from 2008-09-24 to 2008-10-24.
Simple exampleA monthly report card for the trade of borrowing yen to hold dollars. It adds up what the exchange-rate move and the interest gap would have earned or lost over roughly the last month of trading days. Positive means the trade made money over that stretch; negative means it lost.
Model noteOver the last 21 trading days the yen carry trade earned +2.94% (spot plus interest accrual); the worst 21-day loss since 2000 was 2008-09-24..2008-10-24 (-13.5%).
Typical rangeBetween -1.42 and 1.96 in half of all readings since Feb 4, 2000 (middle 50%; the outer 10th to 90th percentile band is -3.06 to 3.80). The latest reading sits at the 84th percentile.
The running carry index is 2.9% below its highest point since 2000, and also 2.9% below its peak of the past year. A drawdown near zero means the trade is close to its best level; a deep drawdown means recent losses.
Simple exampleThink of a hiker checking how far below the highest point of the trip they are right now. This shows how far the trade's running total sits below its best level so far. Zero means it is at the peak; a bigger number means it has slid further down.
Model noteThe carry index is 2.9% below its all-time (since 2000) peak and 2.9% below its 1-year peak.
Typical rangeBetween -16.40 and -3.50 in half of all readings since Jan 7, 2000 (middle 50%; the outer 10th to 90th percentile band is -26.11 to -0.746). The latest reading sits at the 77th percentile.
Over the last 63 days, daily carry returns had a correlation of -0.40 with the S&P 500, meaning they tended to move in opposite directions. The output reads this as the August-2024 pattern (yen unwinds and stock falls happening together) not being active now, while noting that daily figures are noisy and a timing-robust version is -0.19.
Simple exampleWatch two dancers: do they step the same way or in opposite directions? This measures whether the carry trade's daily gains and losses have tended to move with the US stock market or against it. Near +1 means together, near -1 means opposite, and near zero means little link.
Model noteDaily carry returns have a -0.40 63-day correlation with the S&P 500 (-0.42 with Nasdaq, +0.41 with VIX changes); this is negative: carry returns have recently moved opposite to equities, so the August-2024 channel (a yen unwind hitting equities at the same time) is not currently active; because FX is the noon New York rate while equities are closing prices, daily correlations are noisy, and the timing-robust version on 63 non-overlapping 2-day sums is -0.19.
Typical rangeBetween -0.065 and 0.307 in half of all readings since Jan 20, 2017 (middle 50%; the outer 10th to 90th percentile band is -0.235 to 0.441). The latest reading sits at the 2th percentile.
The fragility score is -0.89, and only 6% of days since 2001-03-30 scored at or below it, so by this measure strain is low compared with history. The output warns that the score mostly rises during an unwind rather than before one; only its carry-to-risk part looks ahead, and that part sits at the 80th percentile.
Simple exampleA stress gauge that blends three warning signs: how tempting the trade looks, how much it recently lost, and how tied it is to stocks. This ranks today's score against all past days. A high rank means more strain than usual, though the gauge tends to rise once trouble starts rather than before.
Model noteThe heuristic fragility score is -0.89 (mean of expanding z-scores of carry-to-risk, 21-day drawdown depth and Nasdaq coupling); 6% of days since 2001-03-30 scored at or below today (higher = more fragile or stressed); it is largely a coincident gauge because the drawdown and coupling components jump during an unwind, and only the carry-to-risk component is ex-ante (its z-score has a percentile rank of 80 of 100).
Typical rangeThis reading is itself a percentile of its own history, so its middle 50% is 25 to 75 by construction. The latest reading is 6.
Japan's 10-year government bond yields 2.95%, and the gap between its 10-year and 2-year yields is 1.03 points. The US 10-year yield is 2.15 points higher than Japan's 10-year.
Simple exampleThis is the yearly interest Japan's government pays when it borrows for 10 years, like the rate on a long loan. Higher means long-term borrowing in yen costs more. The reading also shows how much more a 10-year US government loan pays than Japan's, and how Japan's 10-year rate compares with its 2-year rate.
Model noteThe 10-year JGB yields 2.95% with a 10y-2y slope of 1.03 pp; US 10y minus JGB 10y is 2.15 pp.
Typical rangeBetween 0.257 and 1.44 in half of all readings since Jan 4, 2000 (middle 50%; the outer 10th to 90th percentile band is 0.026 to 1.71). The latest reading sits at the 100th percentile.
The line is the two-year US-minus-Japan interest gap divided by the model's expected yearly dollar-yen swing, shown since 2010. A higher line means more interest reward per unit of currency risk, which tends to draw more money into the trade. Look for sharp drops: they usually happen when currency swings suddenly get bigger, as during an unwind.
Simple exampleThe line is reward divided by bumpiness. It climbs when the US-Japan interest gap widens or the dollar-yen rate calms down, and falls when the gap shrinks or the rate starts jumping around. Sudden plunges often mark moments when currency swings spike and many people rush out of the trade at once.
One line is the 10-year Japanese government bond yield; the other is how much more the US 10-year Treasury pays than the Japanese 10-year. When Japan's yield rises or the US-Japan gap narrows, the interest reward behind the carry trade shrinks. Watch whether the two lines move toward each other over time.
Simple exampleOne line shows what Japan pays to borrow for 10 years; the other shows how much extra the US pays for the same length of loan. If Japan's line rises or the gap line falls, the two countries' rates are getting closer, like two shops narrowing their price difference, and the reward behind the carry trade gets smaller.
Carry-to-risk divides the two-year US-minus-Japan yield gap by the model's expected yearly volatility of the dollar-yen rate.
Simple exampleA recipe for reward per unit of worry: take the extra interest earned, then divide by how bumpy the exchange rate usually is. It is like rating a road trip by distance per bump: more distance or a smoother road makes the score go up.
- y^{US,2y}_tTwo-year US Treasury yield on day t, in percent
- y^{JP,2y}_tTwo-year Japanese government bond yield on day t, in percent
- \sigma_tExpected yearly swing of the dollar-yen rate, in percent, from a GJR-GARCH volatility model using data up to the day before
The daily carry return adds the percentage change in the dollar-yen rate to the interest gap earned over the days since the last observation.
Simple exampleEach day's result is two piles added together, like tallying a market stall: the gain or loss because the dollar's price in yen changed, plus the interest collected for the days since the last count.
- S_tYen per US dollar on day t
- i^{US}_{t-1}US 3-month bill rate (bond-equivalent basis) known the day before, in percent per year
- i^{JP}_{t-1}Japanese 1-year government bond yield known the day before, used as the yen borrowing rate
- D_tCalendar days since the previous observation (3 over a weekend)
The drawdown measures how far the running carry index is below its highest level so far, in percent.
Simple exampleLike checking how far you have fallen from your best-ever high score: compare today's level with the highest level reached so far and express the difference as a percentage.
- I_tCarry index on day t (100 at the end of 1999, then grown by the daily carry returns)
- \max_{s \le t} I_sHighest value the index has reached up to day t
The fragility score is the simple average of three standardized readings: carry-to-risk, the depth of the loss from the 21-day peak, and the 63-day correlation of carry returns with the Nasdaq.
Simple exampleThree warning lights are put on the same scale and averaged into one gauge, like averaging three test scores that were each graded on a curve. The lights are how tempting the trade looks, how much it lost from its recent high, and how closely it has moved with tech-heavy stocks.
- z_t(\cdot)Z-score using only history up to day t (needs at least 252 observations)
- DD^{21}_tPercent drop of the carry index from its highest level in the last 22 index readings
- \rho^{NDX}_{63,t}Correlation of daily carry returns with daily Nasdaq returns over the last 63 observations
- Carry trade
- A market strategy of borrowing in a currency with low interest rates and putting the money into a currency with higher rates, earning the gap. It loses money if the borrowed currency rises sharply.
- Yen carry trade
- The version of the carry trade that borrows Japanese yen. A sudden rise in the yen can force many of these positions to close at once, which is called an unwind.
- JGB
- Japanese Government Bond, a loan to Japan's government. Its yield is the interest rate it pays.
- Percentage point (pp)
- The plain difference between two percentages. Going from 2% to 3% is a rise of 1 percentage point.
- Carry-to-risk
- The interest gap divided by the expected currency swing. It is a reward-per-risk measure; higher means the trade looks more appealing to the market.
- Drawdown
- How far something has fallen from its highest past value, in percent.
- Correlation
- A number from -1 to +1 showing how two things move together. Positive means they tend to rise and fall together; negative means opposite directions.
- GJR-GARCH
- A statistical model that estimates how jumpy a price is likely to be, letting recent big moves raise the estimate. Here it gives the expected swing of the dollar-yen rate.
- Unwind
- When many holders of the same trade close it at roughly the same time, often pushing prices sharply.
Full technical specification (for specialists)
Model
Yen carry-trade fragility and US-Japan rates
Specification
Rate differentials (pp): d2_t = DGS2_t - JGB2Y_t; d10_t = DGS10_t - JGB10Y_t; dshort_t = BEY_t - JGB1Y_t. DGS* = US Treasury par CMT yields (%), JGB*Y = MoF JGB benchmark par yields (%). All on DEXJPUS observation dates, each yield = latest print on or before t (US <= 7, JGB <= 12 calendar days old, else missing).BEY_t = 100 * 365 d_t / (360 - 91 d_t), d_t = DTB3_t/100 (3-month bill discount rate, decimal); converts the discount-basis bill rate to a 365-day bond-equivalent yield in % (rates spec).Carry-to-risk: C2R_t = d2_t / sigma_t, sigma_t = upstream volatility.usdjpy_vol_daily = sqrt(252*h_t), h_t the GJR-GARCH(1,1)-t conditional variance of 100*dln(DEXJPUS) given information through t-1 (%). C2R^rv_t = d2_t / RV_t, RV_t = sqrt(252) * sd_{ddof=1}(r^fx_{t-20..t}), r^fx_t = 100 ln(S_t/S_{t-1}). Both ratios unitless (pp / % ann.). DEVIATION from Galati-Heath-McGuire (2007) / BIS: they divide by option-IMPLIED FX volatility (and typically a 3-month rate differential); no FX implied vol is cached, so a model-expected (GJR) vol and a realized vol are used, and the numerator is the 2y differential per the spec.Carry excess return, long USD / short JPY, % of notional per period: r^c_t = 100 ln(S_t/S_{t-1}) + (i^US_{t-1} - i^JP_{t-1}) * D_t / 365, S_t = DEXJPUS (JPY per USD), i^US = BEY(DTB3) (%), i^JP = JGB 1y par yield (%; proxy for the short JPY rate), D_t = calendar days between consecutive DEXJPUS observations (3 over a weekend). Mapping to Menkhoff, Sarno, Schmeling & Schrimpf (2012), Section II (Data and Currency Portfolios), eq. (3) (numbering of the accepted manuscript, Feb 2011; may differ in the published version), rx^k_{t+1} ~= i^k_t - i_t - ds^k_{t+1} (USD-based investor long foreign currency k, s^k = log units of k per USD): with k = JPY, s = ln(DEXJPUS), rx^JPY = i^JP - i^US - dln(DEXJPUS) is the return of long JPY / short USD, so r^c_t = -rx^JPY_t (x100, per-period accrual) is the long USD / short JPY carry trade. Equivalently, eq. (3) with JPY as the home currency, USD as the foreign currency and s = ln(USD per JPY). Daily frequency, actual/365 accrual of the rates known at t-1. If a rate is missing at t-1 the accrual is dropped and r^c_t = 100 ln(S_t/S_{t-1}) (FX-only), flagged in diagnostics.n_carry_return_fx_only / carry_return_fx_only_dates.Carry index: I = 100 at the last 1999 DEXJPUS observation (1999-12-31, the base price of the first 2000 return); I_t = 100 * exp( sum_{s<=t} r^c_s / 100 ) for t >= first 2000 date, so I on the first 2000 date = 100 exp(r^c_1/100) (r^c treated as a log return; the accrual term is a simple-interest approximation to ln(1 + i D/36500)).21-day carry return: ret21_t = sum_{k=0}^{20} r^c_{t-k} = 100 ln(I_t / I_{t-21}) (%, log), 21 observations.Drawdowns (%): DD_t = 100 (I_t / max_{s<=t} I_s - 1); DD1y_t = 100 (I_t / max_{s in (t-365d, t]} I_s - 1); DD21_t = 100 (I_t / max_{k=0..21} I_{t-k} - 1) (trailing 22 index levels = the 21 return intervals of ret21).Coupling: corr_eq63_t = Pearson corr over the trailing 63 observations of (r^c, r^NDX), r^NDX_t = 100 ln(NASDAQCOM_t/NASDAQCOM_{t-1}); corr_spx63 likewise with SP500 (available last ~10y); corr_vix63 with dVIX_t = VIXCLS_t - VIXCLS_{t-1}. Equity/VIX levels are sampled as of each DEXJPUS date so every return covers the same interval as r^c. Timing-robust check (diagnostics.coupling_timing): corr of 63 NON-overlapping k-observation sums (k = 2, 5) of (r^c, r^SPX) over the last 63k valid pairs, and the 63-obs corr of r^c_{t+1} with r^SPX_t. Interpretation bands for corr_spx63: >= +0.2 positive, <= -0.2 negative, otherwise near zero (descriptive thresholds, not a test).Expanding z-score: z_t(x) = (x_t - mean_{s<=t} x_s) / sd_{s<=t, ddof=1} x_s over the non-null history up to and including t, defined once >= 252 observations exist (one-sided, no look-ahead).Fragility (heuristic composite, not an estimated model): F_t = [ z_t(C2R) + z_t(-DD21) + z_t(corr_eq63) ] / 3, defined when all three are defined. Percentile_t = 100 * #{s<=t: F_s <= F_t} / #{s<=t} (weak rank incl. t, over all non-null F up to t), reported in carry_daily.fragility_pct only once >= 252 non-null F exist (NaN during the burn-in); carry_daily.c2r_pct is the same expanding weak rank of C2R with the same 252-observation burn-in. The headline percentile is that of the latest F within the full history. diagnostics.z_c2r_percentile = 100 * #{s: z_s(C2R) <= z_T(C2R)} / #{s} (the ex-ante component alone).Episodes: the 10 most negative ret21_t with pairwise |i - j| >= 21 observations (disjoint return windows), greedy in ascending order, candidates t >= 22nd 2000 observation (the window ending at the 21st has its base price on the 1999 row, so it is excluded); start = date of obs t-21 (base price), end = t; usdjpy_change_pct = 100 (S_end/S_start - 1); vix_change = VIX_end - VIX_start (vol pts).Headline USD/JPY change: fx21 = 100 (S_T / S_{T-21} - 1) (%, simple), 21 DEXJPUS observations back (diagnostics.fx21_pct, fx21_base_date).JGB block: slope_10_2 = JGB10Y - JGB2Y (pp; headline slope uses the JGB 2y print on or before the latest 10y date, <= 12 days old, else the run fails); us_jp_10y_spread = DGS10 - JGB10Y (pp, DGS10 as of the JGB date); ns_level_jp = beta1 and ns_slope_jp = -beta2 of the Nelson-Siegel/Diebold-Li fit to the JGB curve (upstream rates.ns_factors, country Japan).
Limitations
- Data are latest-vintage (revised) series; no point-in-time / real-time claim.
- The upstream GJR parameters are estimated once on the full sample (in-sample), so historical sigma_t, C2R and the fragility score use parameters fitted with later data even though the variance filter is one-sided.
- No FX option-implied volatility, positioning (CFTC IMM yen futures) or funding-flow data are used, so 'crowded-looking' is inferred from carry-to-risk only; BIS (2024) stresses positioning data unavailable here.
- Carry returns ignore transaction costs, forward points vs. bill/JGB basis, and use a 1y JGB proxy for the yen funding rate (overstates JPY funding cost when the curve is upward sloping, e.g. 2024-26).
- The fragility score is a heuristic composite with equal weights, not an estimated or validated crash model.
- The fragility score behaves mainly as a COINCIDENT stress gauge, not an ex-ante warning: the 21-day drawdown depth and the equity coupling rise during an unwind, while C2R typically FALLS as volatility jumps; only the C2R component is ex-ante. E.g. 2024-07-10 (before the unwind) C2R was at the ~95th percentile but the composite only at ~40; it reached 100 on 2024-08-05 (and 84 on 2008-09-15, 100 on 2008-10-24).
- Timing: DEXJPUS is a noon New York rate while SP500/NASDAQCOM/VIX are closes, so daily carry-equity correlations mix contemporaneous and next-day effects and can be noisy or even change sign over a 63-day window; diagnostics.coupling_timing reports 2-day / 5-day non-overlapping-sum and one-day-lead versions.
- DEXJPUS is published with a lag (weekly H.10 release), so FX-based headlines can be several days older than the rate headlines.
References
- Aquilina, M., Lombardi, M. J., Schrimpf, A. & Sushko, V. (2024). The market turbulence and carry trade unwind of August 2024. BIS Bulletin No. 90, Bank for International Settlements.
- Brunnermeier, M. K., Nagel, S. & Pedersen, L. H. (2008). Carry trades and currency crashes. NBER Macroeconomics Annual 23, 313-347.
- Menkhoff, L., Sarno, L., Schmeling, M. & Schrimpf, A. (2012). Carry trades and global foreign exchange volatility. Journal of Finance 67(2), 681-718.
- Galati, G., Heath, A. & McGuire, P. (2007). Evidence of carry trade activity. BIS Quarterly Review, September 2007, 27-41 (carry-to-risk ratio = interest differential / FX implied volatility).
- Estrella, A. & Trubin, M. R. (2006). The yield curve as a leading indicator: some practical issues. Federal Reserve Bank of New York, Current Issues in Economics and Finance 12(5) (bill BEY conversion).
Where are big investors positioned?
This model shows how heavily large leveraged investors are betting in yen, US stock-index and Treasury futures markets, and whether Japanese investors are moving money into or out of foreign bonds.
Why it matters
When many big investors make the same bet, a surprise can make them all exit at once, which can cause sharp market moves. Japan is one of the largest foreign owners of US government debt, so its money flows can affect US interest rates, which feed into mortgage and loan rates. This page shows whether those pressures look stretched compared with recent years.
How it works
Every week the US futures regulator (the CFTC) publishes how many contracts different trader groups own. The model takes leveraged funds (mostly hedge funds), subtracts their short contracts from their long ones, and divides by all open contracts, giving a net position as a percent of the market. It then compares that number with the last three years using a z-score and a percentile, and flags a market as crowded only when the z-score is beyond 2 in either direction. It is like checking how full one side of a boat is: a lopsided boat is not sinking, but it is easier to tip. Separately, it adds up weekly Japanese Ministry of Finance data on purchases of foreign bonds and monthly US Treasury data on Japan's Treasury stock.
The latest readings
Leveraged funds are net short yen futures equal to 9.0% of all open contracts, which is a bet on a weaker yen (the same direction as the carry trade). Its percentile rank over three years is 70, and with a z-score inside plus or minus 2 the model does not flag it as crowded.
Simple exampleBig leveraged funds, mostly hedge funds, can bet on the Japanese yen going up or down. This number takes their 'up' bets, subtracts their 'down' bets, and compares the difference with the size of the whole market. Below zero means they lean toward a weaker yen; above zero, a stronger one.
Model noteLeveraged funds are net short 9.0% of open interest (net short yen futures = short JPY = long USDJPY carry), 3-year percentile rank 70 (0-100), which is not extreme versus its 3-year history (|z| <= 2).
Typical rangeBetween -24.26 and 6.78 in half of all readings since Jan 8, 2008 (middle 50%; the outer 10th to 90th percentile band is -33.22 to 24.53). The latest reading sits at the 55th percentile.
The yen position is +0.47 standard deviations from its 3-year average, a fairly ordinary reading. It moved 13.3 percentage points of open interest toward short over the last four weeks; changes around quarterly contract rolls can partly reflect swings in total open interest.
Simple exampleLike comparing today's temperature with the usual range for your town, this shows how unusual the funds' yen bet is compared with the past three years. Near zero is ordinary, while readings beyond plus or minus 2 are rare, and the model then calls the market crowded.
Model notePositioning is +0.47 standard deviations from its trailing 3-year mean (-13.3pp over 4 weeks, report released 2026-10-16); for comparison, leveraged funds in euro futures are net short 7.8% of open interest with z -2.18 (report of 2026-10-13), a crowded short (z < -2 with a net short position), although the position itself is small (7.8% of open interest).
Typical rangeBetween -0.827 and 0.745 in half of all readings since Jun 3, 2008 (middle 50%; the outer 10th to 90th percentile band is -1.28 to 1.55). The latest reading sits at the 68th percentile.
Leveraged funds are net short 21.2% of S&P 500 e-mini open interest, at the 14th percentile of the last three years. These funds are usually net short here because of hedged trades against asset managers, so the level is read through its z-score; it is not flagged as crowded.
Simple exampleThe same 'up bets minus down bets' measure, now for futures on the S&P 500, a basket of large US companies. These funds usually lean toward 'down' here because they often use these contracts as one half of a paired trade, so a negative number is normal by itself.
Model noteLeveraged funds are net short 21.2% of open interest (against asset managers' net +47.4%: leveraged funds are structurally short e-minis via basis trades, so read it through its z-score, not its sign), 3-year percentile rank 14 (0-100), which is not extreme versus its 3-year history (|z| <= 2).
Typical rangeBetween -14.85 and -7.17 in half of all readings since Jan 8, 2008 (middle 50%; the outer 10th to 90th percentile band is -18.86 to -3.59). The latest reading sits at the 4th percentile.
The S&P 500 futures position is -1.23 standard deviations from its 3-year average, more short than usual but inside the crowding line of 2. It moved 9.2 points further short over four weeks.
Simple exampleBecause these funds usually lean the same way in stock futures, the useful question is whether they lean more or less than usual. This score answers that: zero is their typical lean over three years, and a big move away from zero in either direction means the position is unusually lopsided.
Model notePositioning is -1.23 standard deviations from its trailing 3-year mean (-9.2pp over 4 weeks, report released 2026-10-16).
Typical rangeBetween -0.750 and 0.636 in half of all readings since Jun 3, 2008 (middle 50%; the outer 10th to 90th percentile band is -1.41 to 1.56). The latest reading sits at the 14th percentile.
Leveraged funds are net short 37.9% of 10-year Treasury futures open interest, at the 42nd percentile of the past three years. That is close to the middle of its recent range and not flagged as crowded.
Simple exampleSame measure again, for futures on 10-year US government bonds, the IOUs the US government sells to borrow money. A more negative number means these funds hold more positions that gain when bond prices fall, often as one half of a paired trade rather than a simple bet.
Model noteLeveraged funds are net short 37.9% of open interest (against asset managers' net +49.8%: largely the cash-futures basis trade, so read it through its z-score, not its sign), 3-year percentile rank 42 (0-100), which is not extreme versus its 3-year history (|z| <= 2).
Typical rangeBetween -21.58 and 1.58 in half of all readings since Jan 8, 2008 (middle 50%; the outer 10th to 90th percentile band is -34.01 to 12.70). The latest reading sits at the 7th percentile.
The Treasury futures position is -0.35 standard deviations from its 3-year average, a small gap. It moved 3.2 points further short over four weeks.
Simple exampleThink of a report card that compares this term's grade with your own last three years. This score shows whether funds' bond-futures position is about normal for them (near zero) or unusually stretched (far from zero, especially beyond plus or minus 2).
Model notePositioning is -0.35 standard deviations from its trailing 3-year mean (-3.2pp over 4 weeks, report released 2026-10-16).
Typical rangeBetween -1.47 and 0.585 in half of all readings since Jun 3, 2008 (middle 50%; the outer 10th to 90th percentile band is -1.84 to 1.66). The latest reading sits at the 57th percentile.
Over the 13 weeks to 2026-10-10, large Japanese investors sold JPY 3.24 trillion more foreign bonds than they bought. The 3-year z-score of -1.18 says this outflow is larger than typical but not extreme.
Simple examplePicture large Japanese investors as shoppers for other countries' bonds. This adds up what they bought minus what they sold over the last 13 weeks. A positive total means they bought more foreign bonds than they sold; a negative total means they sold more than they bought.
Model noteDesignated Japanese investors sold a net JPY 3.24tn of foreign bonds over 13 weeks (3y z -1.18; week ending 2026-10-10, released 2026-10-16).
Typical rangeBetween -0.808 and 5.01 in half of all readings since Mar 29, 2014 (middle 50%; the outer 10th to 90th percentile band is -4.24 to 7.42). The latest reading sits at the 12th percentile.
Japan owns about $1068 billion of US Treasuries, which is 11.4% of all foreign-owned Treasuries. That stock is $116 billion lower than 12 months earlier (end-August 2026 data).
Simple exampleWhen the US government borrows, it sells IOUs called Treasuries, and Japan is one of the biggest foreign holders of them. This shows how much Japan holds, a bit like checking how much one big friend has lent you. A rising number means Japan holds more; a falling one means less.
Model noteJapan held $1068bn of Treasuries at end-Aug 2026 (11.4% of foreign holdings), a change in holdings of -116bn over 12 months that includes price/valuation effects and is not the same as net purchases (released 2026-10-16).
Typical rangeBetween 1,102 and 1,215 in half of all readings since Dec 2011 (middle 50%; the outer 10th to 90th percentile band is 1,067 to 1,266). The latest reading sits at the 10th percentile.
The line is leveraged funds' net position in yen futures as a percent of all open contracts, since 2018. Below zero means they are net short the yen (betting it weakens); above zero means net long. Watch for very deep dips, which mark heavy one-sided bets, and fast climbs back toward zero, which can signal positions being closed.
Simple exampleThe line tracks how lopsided big funds' bets on the yen have been over time. Below zero, they lean toward a weaker yen; above zero, toward a stronger one. A deep dip is like a crowd leaning to one side of a boat, and a quick climb back toward zero can mean many are stepping back at once.
The net position is leveraged funds' long contracts minus short contracts, as a percent of all open contracts.
Simple exampleCount the funds' 'up' contracts, take away their 'down' contracts, and compare what is left with the total number of contracts in the market. Using a percent lets a small market and a huge market be compared fairly.
- L_tLong futures contracts owned by leveraged funds in week t
- S_tShort futures contracts of leveraged funds in week t
- OI_tTotal open interest: all futures contracts outstanding in that market
The z-score compares this week's net position with the average and spread of the last 156 weeks (three years), including this week.
Simple exampleThis asks how unusual this week is. It measures how far this week's position sits from its three-year average, in units of the usual spread, like judging whether today's rain is a normal shower or a downpour for your town.
- \bar{x}_{t-155:t}Average net position over the last 156 weekly reports
- s_{t-155:t}Sample standard deviation over the same 156 weeks
The percentile is the share of the last three years of weeks whose net position was at or below this week's.
Simple exampleLine up the last three years of weekly readings from lowest to highest and see where this week lands. A rank of 70 means 70% of past weeks were at or below this week's level, much like a test score that ranks above 70% of past results.
- \#\{\cdot\}Count of weeks meeting the condition
- nNumber of weeks in the window
The 13-week flow adds up the last 13 weekly net purchases of foreign bonds by Japanese investors and converts them from units of 100 million yen to trillions of yen.
Simple exampleA running tally, like adding up the last 13 weeks of your pocket-money spending. It sums Japanese investors' weekly net purchases of foreign bonds, with net sales counting as negatives, then converts the total into trillions of yen so it is easy to read.
- f_{t-k}Net purchases of foreign long-term bonds in week t-k, in units of 100 million yen (negative means net sales)
- S^{13}_t13-week total in trillions of yen
- Futures contract
- An agreement to trade something at a set price on a future date. Traders use futures to bet on or protect against price moves.
- Leveraged funds
- A CFTC trader group made up mostly of hedge funds and similar managers that often use borrowed money.
- Long / short
- A long position gains when the price rises; a short position gains when the price falls.
- Net position
- Long contracts minus short contracts. A negative number means the group is net short.
- Open interest
- The total number of futures contracts that are still open in a market.
- Crowded
- Here, a statistical flag that a position is more than 2 standard deviations from its 3-year average. It describes a lopsided market, not a forecast.
- CFTC
- The Commodity Futures Trading Commission, the US agency that oversees futures markets and publishes weekly position reports.
- TIC data
- Treasury International Capital data from the US Treasury, showing how much US government debt each foreign country owns.
- Quarterly roll
- The period each March, June, September and December when traders switch from expiring futures to the next contract. Open interest briefly swells, which can distort percent-of-market measures.
Full technical specification (for specialists)
Model
Speculative positioning and cross-border flows monitor
Specification
CFTC: lev_net_pct_oi_t = 100 * (lev_long_t - lev_short_t) / OI_t; am_net_pct_oi_t analogous for asset managers; OI = total open interest (all reportable + non-reportable), futures only.z3y_t = (x_t - mean(x_{t-155..t})) / sd(x_{t-155..t}), x = lev_net_pct_oi, trailing 156 weekly observations INCLUDING t, sample sd (ddof=1), min 104 observations. No look-ahead. Sensitivity z3y_excl_t uses the 156 observations t-156..t-1 (current week excluded).pct3y_t = 100 * #{ s in t-155..t : x_s <= x_t } / n (trailing percentile rank, includes t).chg4w_t = x_t - x_{t-4} (percentage points of OI; 4 weekly reports back).crowded_t = 1 if |z3y_t| > 2 (spec rule, symmetric). Directional reading crowded_dir_t = +1 if z3y_t > 2 and x_t > 0 (crowded long), -1 if z3y_t < -2 and x_t < 0 (crowded short), else 0; |z| > 2 against the sign of the position is covering/liquidation, not crowding. Interpretations use the directional reading.Sign: leveraged funds net SHORT yen futures (x<0) = short JPY = long USDJPY (carry). For S&P e-mini and 10-year T-note futures, leveraged funds are structurally net short against asset managers' longs (cash-futures basis trades), so the level is read through its z-score, not its sign.MOF: flows in units of 100 million yen; tn_t = oku_t / 10,000 (1 tn yen = 10,000 x 100 mn yen). S4_t = sum of last 4 weekly outward net purchases, S13_t = sum of last 13. outward_* positive = net purchases of foreign securities by Japanese residents.MOF z-score: z3y = (S13_t - mean)/sd over the trailing 156 weeks within the same regime (pre / post Jan-2014), min 52 observations; windows whose 13 (or 4) weeks straddle the break are flagged (across_break_13w / across_break_4w = 1) and set to NaN, excluded from the statistics. z3y_ltdebt uses S13 of long-term debt; z3y_ltdebt_4w uses S4; z3y_equity_13w uses S13 of equity.TIC: japan_chg12m_t = H_t - H_{t-12 months} (US$ bn; change in holdings incl. valuation effects); china analogous; japan_share_t = 100 * H^Japan_t / H^All foreign_t.Release_date: CFTC = Friday of the as-of week (as-of normally Tuesday; Monday/Wednesday as-of in holiday weeks roll to that Friday), moved to the next business day when a US federal holiday falls on Wed-Fri of that week, replaced by the documented CFTC publication date for delayed reports (2013 lapse, Dec 2014 holidays, 5 Dec 2018 closure, 2018-19 lapse, 2023 ION incident, 9 Jan 2025 day of mourning, 2025 lapse), then a running maximum. MOF = 4th Japanese government business day after the Saturday week-end (Mon-Fri excluding Japanese national holidays and the 29 Dec - 3 Jan closure), i.e. Thursday, or Friday when a holiday falls Mon-Thu; when that day is after the Friday of the release week (Golden Week, Silver Week, year-end) the week is published together with the next week's release; running maximum. TIC = published Treasury release date for every cached data month (Dec-2011 .. Aug-2026; day 18 of month+2 only as a flagged fallback for months not yet in the table). Rows with release_date > as-of are dropped before any calculation.Deviation from spec: the spec's nominal CFTC lag (+3 days) is replaced by the actual publication calendar above (the +3-day rule dated some reports up to 47 days before publication); spec MOF '~Thursday (+5 days)' replaced by the Japanese business-day calendar above (the +5 rule dated 181 of 1136 weeks (about 8 a year) 1 day early and 59 combined Golden Week / Silver Week / year-end weeks (about 3 a year) 7-15 days early); spec TIC '~mid of month+2' implemented as the published Treasury dates. Additions beyond spec: am_z3y, crowded_dir, china_chg12m, equity 13w and 1w ltdebt columns, regime/across_break_4w/across_break_13w columns.
Limitations
- Net CFTC futures positions are a partial proxy for carry trades: they omit spot, forwards, options and swaps (the BIS estimates the total carry trade at roughly JPY 40tn, far above futures positions).
- Percent-of-open-interest measures jump around the quarterly contract rolls (March/June/September/December) when open interest temporarily inflates, so 4-week changes spanning a roll partly reflect the denominator.
- Leveraged-fund classification can change; open interest includes spread positions; futures-only data.
- The |z|>2 crowding flag is symmetric and relative to a 3-year window: after a long one-sided period it fires on near-flat positions (yen 13 Aug 2024: net -0.8% of OI, z +2.43, i.e. short covering, not a crowded long; 1 Oct 2024: +0.7%, z +2.36), and it missed the June-2024 yen peak short (-32.2% of OI, z -1.9987) by 0.0013; with the current week excluded from the window that z is -2.02 and the flag would fire. Flags near the threshold are therefore sensitive to window convention; interpretations use the directional reading (crowded_dir) and note when the position itself is small.
- 10-year T-note and S&P e-mini leveraged shorts are largely the cash-futures basis trade (asset managers long futures, leveraged funds short futures against long cash), so a large net short is the normal state and only its z-score is informative.
- Crowding is a statistical, descriptive flag, not a forecast of an unwind (Brunnermeier-Nagel-Pedersen link positioning to crash risk in the cross-section, not as a timing signal).
- TIC Major Foreign Holders mixes market values (long-term securities) and face values (bills), so 12-month changes in holdings include price/valuation effects and are not net purchases or sales.
- TIC custodial bias understates Japan and China holdings (third-country custody in Belgium, Luxembourg, Cayman, UK).
- MOF flows are weekly, noisy, and in nominal yen; they are not valuation-adjusted and cover designated institutions only.
- Historical values are latest-vintage, so release-date handling gives availability dates, not real-time vintages.
- Nothing here is investment advice; flags describe the current state of positioning.
References
- Aquilina, M., Lombardi, M., Schrimpf, A. and Sushko, V. (2024). The market turbulence and carry trade unwind of August 2024. BIS Bulletin No. 90, Bank for International Settlements, 27 August 2024.
- U.S. Commodity Futures Trading Commission. Traders in Financial Futures (TFF) report, explanatory notes (leveraged funds, asset managers).
- U.S. Commodity Futures Trading Commission. Commitments of Traders release schedule and Historical Special Announcements (2023 ION incident; 2025 lapse catch-up table of 9 Dec 2025); Press Releases 6745-13 (23 Oct 2013) and 7864-19 (29 Jan 2019).
- Brunnermeier, M. K., Nagel, S. and Pedersen, L. H. (2008). Carry trades and currency crashes. NBER Macroeconomics Annual 23, 313-348.
- Japan Ministry of Finance. International Transactions in Securities (weekly, designated major investors).
- U.S. Department of the Treasury. Treasury International Capital (TIC) System, Major Foreign Holders of Treasury Securities; Release Dates of TIC Data; TIC monthly press releases 2025-2026.
- U.S. Department of the Treasury. TIC note 'Estimating Holdings of Treasury Securities' (market vs face value in Major Foreign Holders).
How is the world economy doing?
This model combines leading indicators from 11 large economies to show whether global growth momentum is above or below normal, how many countries are improving, and which way central banks are moving interest rates.
Why it matters
Jobs, prices and business orders in one country depend on demand from the rest of the world. When most economies speed up or slow down together, the effects on exports, factory work and prices tend to be larger. Supply-chain strain also shows up later in what people pay for goods.
How it works
The OECD publishes a composite leading indicator (CLI) for each economy, where 100 means the economy is on its long-term trend. The model takes each country's 6-month change in that indicator, puts all countries on a common scale, and pulls out the single pattern they share most, using a method called principal component analysis. It is like listening to an orchestra and picking out the main melody that most instruments are playing. It also counts how many countries are rising or above trend, measures how closely their cycles move together, and tracks the share of central banks raising or cutting rates, a supply-chain pressure index, and credit-to-GDP gaps.
The latest readings
Global growth momentum is +0.26 standard deviations above its average, and it changed by only -0.08 over three months, which the model calls broadly stable. The OECD's GDP-weighted G20 indicator fell 0.17 points over six months, the opposite sign, because this factor weights countries by their shared pattern, not by economic size.
Simple exampleThink of 11 economies as runners in one group. This number tracks whether the group as a whole is moving faster or slower than its usual pace: above zero means faster than normal, below zero means slower. Countries that move with the pack count more here than the biggest ones do.
Model noteGlobal growth momentum is above average (+0.26 sd) and broadly stable over three months (-0.08 sd; moves within +-0.10 sd are called broadly stable). The OECD's GDP-weighted G20 CLI fell 0.17 points over six months, the opposite sign: the factor weights the standardized economies by PCA loadings, not by GDP.
Typical rangeBetween -0.500 and 0.544 in half of all readings since Jan 2000 (middle 50%; the outer 10th to 90th percentile band is -1.34 to 1.12). The latest reading sits at the 61th percentile.
73% of the 11 economies have a leading indicator higher than three months earlier. A share above half means more economies are improving than weakening.
Simple exampleLike asking a class whether each student's grades went up since last term, this is the share of countries answering yes for their economic outlook. More than half means more economies are improving than slipping; less than half means more are slipping.
Model note73% of the 11 economies with a published 2026-09 OECD leading indicator have a higher reading than three months earlier.
Typical rangeBetween 27.27 and 81.82 in half of all readings since Jan 2000 (middle 50%; the outer 10th to 90th percentile band is 9.09 to 90.91). The latest reading sits at the 64th percentile.
91% of the 11 economies are above their long-term trend. By phase, 8 are in expansion, 2 in downturn and 1 in contraction.
Simple exampleEvery economy has a normal cruising speed. This is the share of countries currently running faster than their own cruising speed. A high share means most economies are above their usual pace, even if some of them are starting to slow down.
Model note91% of the 11 economies have an above-trend leading indicator; phases (each economy's latest published month): contraction 1, downturn 2, expansion 8.
Typical rangeBetween 18.18 and 81.82 in half of all readings since Jan 2000 (middle 50%; the outer 10th to 90th percentile band is 9.09 to 90.91). The latest reading sits at the 80th percentile.
The average correlation between countries' 6-month indicator changes is 0.07, at the 6th percentile of its history since 1992 (median 0.48). In plain terms, national economies are moving much less in step than usual.
Simple examplePicture a choir: are the singers going up and down together, or each doing their own thing? A high number means countries' economies rise and fall in step. A low number means they are following separate paths, so good or bad news in one place is less often shared by the others.
Model noteThe average pairwise correlation of 6-month CLI changes is 0.07, at the 6th percentile of its history since 1992 (median 0.48): national cycles are currently unusually unsynchronized.
Typical rangeBetween 0.425 and 0.712 in half of all readings since Jan 2000 (middle 50%; the outer 10th to 90th percentile band is 0.172 to 0.776). The latest reading sits at the 0th percentile.
44% of the 9 tracked central banks raised interest rates over the last six months. The median change across all of them was +0 basis points.
Simple exampleCentral banks set the basic price of borrowing money, a bit like setting the rent on a loan. This is the share of tracked central banks that raised that price over the last six months. A higher share means borrowing is getting more expensive in more countries.
Model note44% of the tracked central banks raised rates in the past six months (median change +0 bp).
Typical rangeBetween 11.11 and 44.44 in half of all readings since Feb 2001 (middle 50%; the outer 10th to 90th percentile band is 0.000 to 64.44). The latest reading sits at the 67th percentile.
11% of the 9 tracked central banks cut interest rates over the last six months, so more banks have been raising than cutting.
Simple exampleThe flip side of the hiking count: the share of tracked central banks that lowered their main interest rate over the last six months. When many are cutting, borrowing for homes and businesses tends to get cheaper in more countries.
Model note11% of the tracked central banks cut rates in the past six months.
Typical rangeBetween 11.11 and 44.44 in half of all readings since Feb 2001 (middle 50%; the outer 10th to 90th percentile band is 0.000 to 66.67). The latest reading sits at the 17th percentile.
The New York Fed's supply-chain pressure index is +1.28 standard deviations above its historical average and rose 0.08 over three months. Positive readings mean shipping and supply conditions are tighter than normal.
Simple exampleA pizza that usually arrives in 30 minutes shows up late and costs more when roads are jammed and ingredients are scarce. This index measures that kind of strain for global shipping and supplies: above zero means tighter than normal, below zero means smoother than normal.
Model noteSupply-chain pressure is +1.28 sd from average and changed +0.08 over three months.
Typical rangeBetween -0.609 and 0.269 in half of all readings since Jan 2000 (middle 50%; the outer 10th to 90th percentile band is -0.818 to 1.28). The latest reading sits at the 90th percentile.
None of the 9 economies has a credit-to-GDP gap above 10 points, the zone where Basel rules point to the maximum bank capital buffer. Two more economies are in the middle band of 2 to 10 points (data for quarters ending 2026-03-31).
Simple exampleIf a family's borrowing grows much faster than its income, trouble can follow later. This counts countries whose private borrowing, compared with the size of their economy, is far above its usual trend, the zone where international bank guidelines point to the biggest safety cushion for banks.
Model note0 economies are in the Basel maximum-buffer zone (gap above 10pp) and 2 more are in the 2-10pp band using the latest published BIS gaps (quarters ending 2026-03-31).
One line is the global activity factor, the shared growth momentum of 11 economies; the other is the supply-chain pressure index. Both are in standard deviations, so zero is average and plus or minus 1 is a notable move. Look for when the factor crosses zero, and for rises in supply-chain pressure, which mean tighter shipping and supply conditions than normal.
Simple exampleTwo lines share this chart. One is the world's shared growth pace and the other is strain in global shipping and supplies, both scaled so zero means normal. When the growth line climbs above zero, economies together are running faster than usual; when the strain line rises, goods are harder or pricier to move than usual.
Each country's 6-month change in its leading indicator is standardized using that country's own average and spread of changes up to that month.
Simple exampleEach country is graded against its own past, like comparing a student's test score with their own usual results instead of with the whole class. The recipe takes how much a country's indicator changed over six months and asks whether that is a big change for that country or an ordinary one.
- CLI_{i,t}OECD composite leading indicator of economy i in month t (100 = long-term trend)
- m_i,\ s_iMean and standard deviation of economy i's 6-month changes over the data available up to t
The global factor is the first principal component of all countries' standardized changes, rescaled so that one unit equals one standard deviation over the data up to that month.
Simple exampleWhen every instrument in an orchestra plays a slightly different part, you can still pick out the main tune. This recipe blends all countries' graded changes into that one shared tune, then rescales it so zero is ordinary and each step of 1 is one typical-sized swing.
- LCountry weights (loadings) from the first principal component, signed so the US weight is positive
- F_tRaw factor score in month t: the weighted sum of standardized country changes
- G_tGlobal activity factor reported on the page
The diffusion index is the percent of economies whose leading indicator is higher than three months earlier.
Simple exampleA simple show of hands: count the countries whose indicator is higher than it was three months ago, then divide by the number of countries. It turns many separate stories into one percentage.
- N_tNumber of economies with readings in both months
Synchronization is the average correlation, across every pair of countries, of their 6-month indicator changes over the last 36 months.
Simple exampleFor every pair of countries, check how closely their ups and downs matched over the last three years, like checking whether two friends' moods tend to rise and fall on the same days. Then average all those pairs into one number.
- \Delta x_i6-month change in economy i's leading indicator
- \operatorname{corr}_{36}Correlation over the 36 months ending at t (needs at least 24 shared months)
- NNumber of economies, so N(N-1)/2 is the number of pairs averaged
- Composite leading indicator (CLI)
- An OECD index built from data that tend to turn before the economy does, such as orders and confidence. A value of 100 means the economy is on its long-term trend.
- Principal component analysis (PCA)
- A method that finds the single pattern shared most strongly by many data series. Its first component is the main common movement.
- Diffusion index
- The share of countries (or industries) that are improving. Above 50% means most are getting better.
- Synchronization
- How much countries' economic cycles rise and fall together, measured by their average correlation.
- Global Supply Chain Pressure Index (GSCPI)
- A New York Fed index of shipping costs and supply delays, in standard deviations from its average. Higher means more strain.
- Credit-to-GDP gap
- How far a country's total private borrowing, as a share of its economic output, is above its long-run trend. Large positive gaps have been linked to banking stress.
- Policy rate
- The main short-term interest rate set by a central bank to steer borrowing costs.
- Expansion, downturn, contraction, recovery
- The four OECD phases. Expansion is above trend and rising, downturn is above trend but falling, contraction is below trend and falling, and recovery is below trend but rising.
Full technical specification (for specialists)
Model
Global cycle: activity factor, diffusion, synchronization, policy-rate cycle, supply chains, credit gaps
Specification
Dx_{i,t} = CLI_{i,t} - CLI_{i,t-6} (6-month change in index points, i = 11 economies); Z_{i,t} = (Dx_{i,t} - m_i)/s_i with m_i, s_i the mean and sd of the observed Dx_i over the window [start..t] (expanding).Z = F L' + e with one factor (Stock-Watson 2002): L = first right singular vector of Z (unit norm), F = Z L; missing cells (CHN before 1992-11, IND before 1994-10) are EM-imputed (Stock-Watson 2002b, App. A): start at 0, replace by the rank-1 fit s1 u1 v1' until max change < 1e-9. The SVD is UNCENTERED (the filled panel is not re-centred; observed cells have mean 0 by construction; the effect on the factor is <= 0.014 sd). A country enters a window only with >= 36 observed changes.global_factor_t = F_t / sd(F_{start..t}) using only rows <= t (one-sided; last row of each expanding PCA, min 60 rows); sign chosen so L_USA > 0. Variance share = s1^2 / sum_k s_k^2.Diffusion: rising_t = 100 * #{i: CLI_i,t > CLI_i,t-3} / #{i: CLI_i,t and CLI_i,t-3 observed}; above100_t = 100 * #{i: CLI_i,t > 100} / #{i: CLI_i,t observed}.Phase (OECD convention, direction on the 3m change): CLI>100 & chg>0 expansion; CLI>100 & chg<=0 downturn; CLI<=100 & chg<=0 contraction (OECD 'slowdown'); CLI<=100 & chg>0 recovery. Deviation: the OECD uses the 1-month change; the 3-month change is used here (consistent with the diffusion index and less noisy).sync36_t = mean over pairs i<j of corr(Dx_i, Dx_j) on the 36 months ending at t (pairwise-complete, >= 24 overlapping months).Policy cycle: d_{b,t} = r_{b,t} - r_{b,t-6}; hiking share = 100 * #{b: d>0.005pp}/#{b: d observed}, cutting share likewise for d<-0.005pp; median change = 100 * median_b d (bp); differentials US-JP, US-XM in pp.Credit gap_{c,q} = credit-to-GDP ratio - one-sided HP trend (lambda = 400,000), published by the BIS; band: <2pp, 2-10pp, >10pp. CCyB guide buffer = 2.5% * min(max((gap-2)/8, 0), 1) (Basel III linear guide).GSCPI_t as published (sd from average); 3m change = GSCPI_t - GSCPI_{t-3}.
Limitations
- Latest-vintage data: the OECD revises the whole CLI history every month and end-points most; the lags above model publication timing but NOT vintages, so historical values are not real-time.
- The CLI is designed to anticipate turning points of OECD reference activity ~6-9 months ahead; it is not a nowcast of current growth.
- Each expanding-window PCA is re-fitted, so the factor at t is one-sided but the scale (window sd) and loadings drift as data accumulate; differences across time mix signal and re-standardization.
- sync36 uses 36 months of overlapping 6-month changes, i.e. only about 6 independent observations per window, so the pairwise correlations are noisy; read it against its own history (percentile and median are reported) rather than as a precise level.
- The global factor weights the standardized economies by PCA loadings (CHN loading about 0.22), not by GDP, so it can differ in sign from the GDP-weighted OECD G20 CLI (the two disagree in sign in about 14% of months); the headline flags such cases.
- Only 9 central banks / BIS economies are covered; policy rates are not comparable in definition across countries.
- BIS credit gaps are revised when GDP or credit is revised and are published ~3+ months after quarter end; euro-area gap starts only 2009; the gap says nothing about timing of a credit downturn.
- GSCPI is re-estimated each month (latest vintage used here); not point-in-time.
- Model-implied state descriptions, not forecasts and not investment advice.
References
- OECD (2023). Composite Leading Indicators: methodology (amplitude-adjusted CLI; 100 = long-term trend).
- Benigno, G., di Giovanni, J., Groen, J. & Noble, A. (2022). The Global Supply Chain Pressure Index: A New Barometer of Global Supply Chain Pressures. Federal Reserve Bank of New York Staff Report 1017.
- Drehmann, M. & Tsatsaronis, K. (2014). The credit-to-GDP gap and countercyclical capital buffers: questions and answers. BIS Quarterly Review, March.
- Stock, J. H. & Watson, M. W. (2002a). Forecasting using principal components from a large number of predictors. Journal of the American Statistical Association 97(460), 1167-1179 (principal-components factor).
- Stock, J. H. & Watson, M. W. (2002b). Macroeconomic forecasting using diffusion indexes. Journal of Business & Economic Statistics 20(2), 147-162, Appendix A (EM algorithm for PCA of an unbalanced panel).
How do people feel about the economy?
This model measures the mood in economic news, consumer surveys and uncertainty indexes, checks whether financial markets share that mood, and scores how hawkish recent Federal Reserve and Bank of Japan statements sound.
Why it matters
How people feel about the economy affects how much they spend, hire and invest. When markets are calm but the news is gloomy (or the reverse), one of the two may be missing something. The tone of central-bank statements hints at where interest rates on loans and savings are heading.
How it works
Five monthly inputs are combined: a daily news-sentiment index, a consumer-sentiment survey, US and global policy-uncertainty indexes, and a geopolitical-risk index (the last three are flipped so that higher always means a better mood). Each is standardized, and the model extracts the one pattern they share most, giving a single sentiment factor. Separately, it builds a daily news mood from three news-based measures and a market mood from stock volatility (VIX), corporate bond spreads and a financial-conditions index, and subtracts one from the other. Think of a weather report versus how people are dressed: if the forecast says storm but everyone is in shorts, the two signals disagree. Finally, it counts phrases like 'inflation rising' (hawkish) or 'growth slowing' (dovish) in central-bank statements.
The latest readings
The combined mood factor is -0.97 standard deviations, below average, based on 3 of its 5 inputs this month. It sits at the 18th percentile of the full 1997-2026 history but the 44th of the one-sided history, which drifts downward over time (its average in expansion months is -0.73), so the change matters more than the level.
Simple exampleThink of a class mood score built from several surveys at once: news tone, how shoppers feel, and how worried people are about policy and world events. Above zero means a brighter mood than usual, below zero a gloomier one. Because this score drifts lower over the years, its changes say more than its exact level.
Model notePC1 of news, consumer, policy-uncertainty and geopolitical mood is -0.97 sd (higher = better mood; 3 of 5 inputs this month), the 18th percentile of the 1997-2026 full-sample factor but the 44th of the one-sided history, which drifts down (one-sided expansion-month mean -0.73).
Typical rangeBetween -1.48 and -0.095 in half of all readings since Dec 2001 (middle 50%; the outer 10th to 90th percentile band is -1.97 to 0.305). The latest reading sits at the 43th percentile.
The news mood is -0.15, a slightly below-normal reading compared with each source's past three years. It is at the 39th percentile of business days since 1990.
Simple exampleA weather reading for the headlines: are news stories sounding cheerful or worried compared with the past few years? A higher number means more upbeat coverage; a lower number means gloomier coverage than normal.
Model noteThe average 3-year rolling z-score of the news-based mood components is -0.15 (39th percentile of business days since 1990).
Typical rangeBetween -0.552 and 0.490 in half of all readings since Jan 7, 2000 (middle 50%; the outer 10th to 90th percentile band is -1.11 to 0.886). The latest reading sits at the 43th percentile.
The market-implied mood is +0.74, meaning low volatility, narrow credit spreads and easy financial conditions compared with the past three years. It is at the 73rd percentile of business days since 1990.
Simple exampleInstead of asking people, this reads the mood from markets, like judging a crowd's nerves by how jumpy it is. Calm stock prices, little extra interest demanded on company loans and easy borrowing push it higher. A lower reading means markets are acting more nervous than usual.
Model noteThe average 3-year rolling z-score of -VIX, -Baa spread and -NFCI is +0.74 (73rd percentile of business days since 1990).
Typical rangeBetween -0.314 and 0.826 in half of all readings since Jan 7, 2000 (middle 50%; the outer 10th to 90th percentile band is -1.35 to 1.18). The latest reading sits at the 71th percentile.
The gap between market mood and news mood is about 0.9, positive, so markets are calmer than the news flow. The output labels this the complacency side.
Simple examplePicture the forecast calling for a storm while everyone walks around in shorts. This is market mood minus news mood: positive means markets are calmer than the headlines, negative means markets are more nervous than the news suggests.
Model noteMarkets are calmer than the news flow (complacency side).
Typical rangeBetween -0.337 and 0.839 in half of all readings since Jan 7, 2000 (middle 50%; the outer 10th to 90th percentile band is -1.06 to 1.31). The latest reading sits at the 78th percentile.
The gap is at or above its level on 80% of business days since 1990. So markets being calmer than the news is more pronounced than usual.
Simple exampleThis ranks today's gap against every past business day, like saying you are taller than 90 out of 100 classmates. A high rank means markets are unusually calm compared with the news; a low rank means unusually nervous compared with it.
Model noteThe gap is at or above its level on 80% of business days since 1990.
Typical rangeThis reading is itself a percentile of its own history, so its middle 50% is 25 to 75 by construction. The latest reading is 80.
The latest Federal Reserve (FOMC) statement scored +1, with 2 hawkish phrases and 0 dovish ones. Because recent statements are short, a few phrases can push the score to its maximum of +1.
Simple examplePicture counting words in a coach's speech: 'we need to tighten up' versus 'let's ease off'. This score counts phrases in the US Federal Reserve's statement that point to rising prices or strong activity (hawkish) against those pointing to weakness (dovish). It runs from -1, all dovish, to +1, all hawkish.
Model noteLatest FOMC statement has 2 hawkish vs 0 dovish phrases (+1 = all hawkish).
The FOMC tone was unchanged (+0.00) compared with the 2026-07-29 statement.
Simple exampleThis compares the latest Federal Reserve statement's tone with the one before it, like noticing whether a teacher's comments got stricter or softer since last term. Positive means more hawkish wording, negative means more dovish, and zero means no change.
Model noteTone moved +0.00 vs the 2026-07-29 statement (unchanged).
The latest scored Bank of Japan statement had 16 hawkish phrases and 0 dovish ones, a tone of +1. That means its wording leaned fully toward strength in prices or activity.
Simple exampleThe same word-counting score, applied to the Bank of Japan's statements. Near +1 means its wording leans toward strong prices or activity; near -1 means it leans toward weakness. It is a count of phrases, not a full reading of the bank's intentions.
Model noteLatest scored BOJ statement has 16 hawkish vs 0 dovish phrases.
The line is the one-sided US sentiment factor since 2000, built only from data available up to each month. Higher means a better mood across news, consumers, uncertainty and geopolitics. Because the model notes a downward drift, focus on sharp drops and recoveries rather than the overall level.
Simple exampleThe line is one combined mood score, like a running temperature reading of how upbeat the country feels. When it climbs, news, shoppers and worry measures together point to a better mood; when it dives, the mood has soured. Since the line slowly drifts down over the years, the sudden drops and rebounds matter most.
One line is the news mood and the other is the market-implied mood, each an average of 3-year rolling z-scores since 2023. When the market line is above the news line, markets are calmer than the headlines. Look for how wide the gap gets and whether the lines start to converge.
Simple exampleTwo thermometers: one reads the mood of the headlines, the other the mood of the markets. When the market line sits above the news line, markets are calmer than the news; when it dips below, markets are more nervous. The wider the space between them, the more the two disagree.
The sentiment factor is a weighted sum of the standardized mood inputs available that month, rescaled so the factor has a standard deviation of one.
Simple exampleLike blending several judges' scores into one final mark: each mood input is put on the same scale, given a weight, and added up. The total is then stretched or squeezed so that a typical swing equals one unit.
- z_{A,t}Standardized values of the inputs available in month t (at least 3 of 5)
- w_AFirst-principal-component weights for those inputs, signed so consumer sentiment has a positive weight
- \lambda_1Largest eigenvalue: how much variation the shared pattern explains
The news mood averages the 3-year rolling z-scores of the SF Fed news-sentiment index and the flipped, logged 7-day averages of policy uncertainty and geopolitical risk.
Simple exampleA recipe with three ingredients: how positive the news reads, how low policy worries are, and how low war and conflict worries are. Each is compared with its own past three years so they share a scale, then averaged.
- z(\cdot)Z-score against the trailing 3 years of that series
- \text{EPU}^{7d}_t7-day average of the daily US economic policy uncertainty index
- \text{GPR}^{7d}_t7-day average of the daily geopolitical risk index
The mood gap is the market mood (the average of flipped z-scores of the VIX, the Baa corporate bond spread and the Chicago Fed financial conditions index) minus the news mood.
Simple exampleTake the market's calmness score, built from stock jumpiness, the extra interest riskier companies pay and how easy borrowing is, then subtract the news mood. It compares what the crowd's behavior says with what the announcer is saying.
- \text{VIX}_tExpected 30-day S&P 500 volatility from option prices
- \text{Baa}_tYield on Baa-rated corporate bonds minus the 10-year Treasury yield
- \text{NFCI}_tChicago Fed National Financial Conditions Index (higher means tighter)
Statement tone is hawkish phrase count minus dovish phrase count, divided by their total, so it runs from -1 (all dovish) to +1 (all hawkish).
Simple exampleA tally sheet: count the phrases pointing to rising prices or strength, subtract the ones pointing to weakness, and divide by the total. All hawkish gives +1, all dovish gives -1, and an even mix gives 0.
- HNumber of hawkish phrases, such as a word for rising paired with inflation
- DNumber of dovish phrases, such as a word for slowing paired with growth
- Sentiment factor
- A single number summarizing the shared movement of several mood measures. Higher means a better mood.
- Economic policy uncertainty (EPU)
- An index built from how often newspapers discuss uncertainty about government economic policy. Higher means more uncertainty.
- Geopolitical risk (GPR)
- An index counting newspaper articles about wars, terrorism and international tensions. Higher means more risk in the news.
- VIX
- A measure of how much traders expect the S&P 500 to swing over the next 30 days, taken from option prices. Often called the fear gauge.
- Credit spread
- The extra interest companies pay over the government to borrow. Wider spreads mean lenders see more risk.
- Hawkish / dovish
- Hawkish language stresses strong prices or growth and points toward higher interest rates. Dovish language stresses weakness and points toward lower rates.
- FOMC
- The Federal Open Market Committee, the Federal Reserve group that sets US interest rates.
- One-sided
- Calculated using only data available up to each date, so no later information leaks into past values.
- Mood gap
- Market mood minus news mood. Positive means markets look calmer than the news.
Full technical specification (for specialists)
Model
World sentiment factor, news-vs-market mood gap, central-bank text tone
Specification
A1 (monthly inputs, month m, first-of-month dates): x1 = mean_{d in m} SFFED_d; x2 = UMCSENT_m; x3 = -ln USEPUINDXM_m; x4 = -ln GEPUCURRENT_m; x5 = -ln(mean_{d in m} GPRD_d). Monthly means use calendar months fully covered by the daily data. Sample 1997-01 to latest.A2 (full-sample): z_it = (x_it - mean_i)/sd_i over the whole sample; C = cov(Z_bal) on the balanced block; C w = lambda1 w, ||w|| = 1, sign s.t. w_UMCSENT > 0; F_t = (w_A' z_At)/(w_A' w_A)/sqrt(lambda1), A = inputs observed at t (>= 3 required). For balanced rows this equals the PC1 score w'z_t/sqrt(lambda1).A3 (one-sided): for each month t, z_it|t = (x_it - mean_{s<=t} x_is)/sd_{s<=t}(x_is) (>= 60 obs); w_t, lambda1_t from the balanced block of {z_s|t, s<=t} (>= 60 months); F^os_t = (w_At' z_At|t)/(w_At' w_At)/sqrt(lambda1_t). Variance share = lambda1/sum(lambda).B1 (rolling z): z_t = (y_t - mean_{s in (t-1096d, t]} y_s)/sd_{s in (t-1096d, t]} y_s, ddof = 1, on each series' own observation dates; undefined in the first 365 days of a series.B2 (news mood): News_t = mean of available {z(SFFED_t), z(-ln MA7(USEPUINDXD)_t), z(-ln MA7(GPRD)_t)}, MA7 = trailing 7-calendar-day mean of the level (log taken after averaging).B3 (market mood): Market_t = mean of available {z(-VIXCLS_t), z(-BAA10Y_t), z(-NFCI_t)}; NFCI for the week ending Friday F is dated F + 5 days (Wednesday release), or F + 6 days (Thursday) when a US federal holiday falls on Monday-Wednesday of the release week, before the z-score and forward fill. The moods are averages of z-scores, not themselves standardized (sd since 1990 in diagnostics.mood).B4: Gap_t = Market_t - News_t (> 0: markets calmer than news). Percentile_T = 100 x #{t <= T: Gap_t <= Gap_T} / #{t <= T}. Each mood needs >= 2 of 3 components; components are forward-filled onto business days with tolerance 7 days (14 for NFCI).C1 (pairs): sentences are split into clauses at commas and at the conjunctions and/or/but/with/while/whereas/although/though. For modifier token m with direction d(m) in {+1 (UP), -1 (DOWN)}, its paired noun n is the nearest target noun within +/-3 word tokens (numbers and the conjunction count as words) in the same clause (ties: the following noun); the pair is hawkish if d(m) p(n) > 0 and dovish if < 0, where p(n) = +1 for inflation/prices/wages/growth/activity/employment/labor market/spending/demand/consumption/job gains and p(unemployment) = -1. Pairs with a negator between m and n or in the 3 same-clause tokens before the earlier of them are dropped. H, D = counts per statement. Deviation from a bare +/-3-word window (spec): the clause limit stops systematic cross-clause pairs such as 'expanding at a moderate pace and labor market conditions ...' (moderate -> labor market, dovish); it removes about 7% of corpus pairs, almost all of them mis-paired.C2: Tone = (H - D)/(H + D), undefined if H + D = 0. Deviation from Apel & Blix Grimaldi (2012, p.9): the paper's Net Index is (H - D)/(H + D) + 1 on adjacent adjective-noun pairs in Swedish minutes; we follow the spec (no +1 shift, which only relocates the index; +/-3-word window; verb forms; negation filter; statements rather than minutes).C3 (validation): corr(Tone_k, DGS2(first obs >= date_k) - DGS2(last obs < date_k)) and corr(Tone_k, DFF(last obs <= date_k + 6m) - DFF(last obs <= date_k)), Pearson, with n and p-values; date_k = printed release date. DFF on date_k predates a decision announced that afternoon (effective the next day), so the second change INCLUDES the decision announced in statement k; a variant with base DFF(first obs > date_k) measures subsequent policy only. HAC: slope of z(y) on [1, z(x)] (= r) with Newey-West (1987) s.e., Bartlett weights 1 - l/(L+1), L = 6 statements, normal p-value.A4 (factor validation): Welch t-test of recession vs expansion months, and F_t = a + b USREC_t + e_t with Newey-West (1987) s.e., L = 12 months, no df correction; one-sided p for b < 0 from N(0,1).Lexicon: UP modifiers: above, accelerate, accelerated, accelerates, accelerating, acceleration, elevated, fast, faster, firm, firmer, firming, high, higher, highest, increase, increased, increases, increasing, rise, risen, rises, rising, robust, rose, solid, strength, strengthen, strengthened, strengthening, strong, stronger, strongest, tight, tightened, tightening, tighter, upward. DOWN modifiers: below, decelerate, decelerated, decelerating, deceleration, decline, declined, declines, declining, decrease, decreased, decreases, decreasing, downward, ease, eased, eases, easing, fall, fallen, falling, falls, fell, low, lower, lowered, lowest, moderate, moderated, moderates, moderating, moderation, slow, slowdown, slowed, slower, slowing, slows, sluggish, soft, softened, softening, softer, softness, subdued, weak, weakened, weakening, weaker, weakest, weakness. Target nouns with polarity p(n): inflation (+), inflationary (+), prices (+), price (+), wages (+), wage (+), growth (+), activity (+), employment (+), labor market (+), labor markets (+), spending (+), demand (+), consumption (+), job gains (+), unemployment (-). Negators: cannot, neither, never, no, nor, not, without and any token ending in n't. Window +/-3 tokens within a clause: sentences are split at commas and at the conjunctions although, and, but, or, though, whereas, while, with (numbers count as words). 'price stability' and 'growth potential' are non-target compounds.
Limitations
- All data are latest-vintage (revised); historical values include revisions and are not point-in-time (NFCI and EPU are revised; SF Fed and GPR indices are re-estimated).
- Full-sample factor and full-sample z-scores are in-sample (use future data); use factor_onesided for real-time comparisons.
- Dictionary tone counts phrases; it cannot read forward guidance, conditionality or sarcasm, and treats 'moderate' as dovish even when it describes a pace of growth. Within a clause the +/-3-word window can still mis-pair a modifier used as a noun (BOJ 'prices of cost increases' scores hawkish) or a modifier of a non-target noun with a nearby target noun. Correlations with market moves are expected to be weak because tone levels are largely anticipated.
- Reported Pearson and Welch p-values treat observations as independent; the monthly factor (AR(1) ~ 0.9) and statement tone (AR(1) ~ 0.7) are persistent and 6-month horizons overlap, so those p-values are too small. Use the Newey-West (HAC) t-statistics reported next to them.
- NFCI has been published in real time only since May 2011; earlier values are a historical reconstruction, so release-date alignment before 2011 is notional (and all values are latest vintage). The Thursday holiday rule is an assumption about the Chicago Fed calendar, not read from release vintages.
- BOJ statements in Outlook-Report months (Jan/Apr/Jul/Oct, recent years) contain only the policy guideline, so many score no phrases (tone null); early-2000s 'unchanged' announcements are one or two sentences.
- BOJ PDF text extraction is best-effort (layout order, footnotes); statements failing a text quality check are listed in diagnostics.cb_tone.coverage.
- The mood-gap percentile is relative to 1990-present; early market mood (1990) omits VIX.
- EPU and especially Global EPU trend upward since 1997, so -ln EPU inputs drift down; the factor therefore has a downward drift, and the one-sided factor (expanding standardization) averages below zero even in expansions (see diagnostics.factor.validation_nber). Read changes and recession contrasts rather than the level alone.
- Net tone is discrete and saturates at +/-1 when a statement has only a few scored phrases (recent FOMC statements are short); hawkish_hits/dovish_hits are reported alongside.
- Nothing here is investment advice; probabilities/levels are model-implied descriptions of the current state.
References
- Shapiro, A. H., Sudhof, M. & Wilson, D. J. (2022). Measuring news sentiment. Journal of Econometrics 228(2), 221-243 (SF Fed Daily News Sentiment Index).
- Baker, S. R., Bloom, N. & Davis, S. J. (2016). Measuring economic policy uncertainty. Quarterly Journal of Economics 131(4), 1593-1636.
- Caldara, D. & Iacoviello, M. (2022). Measuring geopolitical risk. American Economic Review 112(4), 1194-1225.
- Apel, M. & Blix Grimaldi, M. (2012). The information content of central bank minutes. Sveriges Riksbank Working Paper No. 261 (published as 'How informative are central bank minutes?', Review of Economics 65(1), 2014, 53-76).
- Shah, A., Paturi, S. & Chava, S. (2023). Trillion dollar words: a new financial dataset, task & market analysis. Proceedings of ACL 2023.
- Chicago Fed NFCI release schedule: weekly, Wednesdays 8:30 ET, for the week ending the previous Friday (Thursday in weeks with a federal holiday early in the week).
- Newey, W. K. & West, K. D. (1987). A simple, positive semi-definite, heteroskedasticity and autocorrelation consistent covariance matrix. Econometrica 55(3), 703-708.
What is the mood around the world?
This model reads the average tone of economic news in six major countries plus a global feed, and shows whether the world's news mood is upbeat or gloomy compared with the last two years, and whether the US stands out.
Why it matters
News shapes how households and businesses feel, which affects spending and hiring. Seeing whether gloom is local or worldwide helps separate a US story from a global one. Geopolitical risk in the news can also affect energy and import prices that reach ordinary budgets.
How it works
The GDELT project machine-scores the tone of news articles about the economy, inflation, recession and interest rates. For the US, Japan, China, Germany, the UK, India and a global feed, the model smooths daily tone into a 7-day average and compares it with that country's own past two years, giving a z-score. Comparing each country only with itself matters because some countries' news is always more positive or negative. It is like grading each student against their own past tests rather than against classmates. The model then finds the common pattern across all seven series to make one world factor, and separately reports geopolitical-risk and policy-uncertainty indexes from newspapers.
The latest readings
The world economic-news tone factor is +0.05 standard deviations, close to its recent norm; its common pattern explains 63% of the movement in the 7 series. It is dated 2026-10-06, 11 days before the last stored GDELT day (2026-10-17), because recent days are missing.
Simple exampleComputers read economic news stories from around the world and score how cheerful or gloomy the words are. This number blends those scores into one world mood reading. Above zero means the news sounds brighter than its recent normal; below zero means gloomier.
Model noteThe world economic-news tone factor is +0.05 sd, close to its recent norm (z-scores are vs each country's own trailing 2 years; PC1 captures 63% of the variance of the 7 series); it is dated 2026-10-06, 11 days before the last cached GDELT day (2026-10-17), because recent GDELT days are missing.
Typical rangeBetween -0.216 and 0.967 in half of all readings since Feb 8, 2019 (middle 50%; the outer 10th to 90th percentile band is -0.974 to 1.37). The latest reading sits at the 33th percentile.
Current world news tone is at or above 33% of the days observed since 2019-02-01. So about two-thirds of past days had a more positive tone than today.
Simple exampleThis places today's world news mood on a ladder of all the days the model has recorded. A reading of 80 would mean today sounds at least as upbeat as 80% of past days; a low reading means most past days sounded more positive.
Model noteCurrent world news tone exceeds or equals 33% of the days observed since 2019-02-01.
Typical rangeThis reading is itself a percentile of its own history, so its middle 50% is 25 to 75 by construction. The latest reading is 33.
Relative to each country's own two-year norm, US news tone is running better than the rest of the world, with a gap of +1.12. That is at the 94th percentile of its history, an unusually wide difference.
Simple exampleEach country's news mood is first graded against its own usual tone. This number then subtracts the average grade of five other big countries from the US grade. Above zero means US economic news sounds relatively brighter than the others; below zero means relatively gloomier.
Model noteRelative to each country's own two-year norm, US news tone is running better than the rest of the world (divergence +1.12; 94th percentile of its history).
Typical rangeBetween -0.514 and 0.472 in half of all readings since Jan 12, 2018 (middle 50%; the outer 10th to 90th percentile band is -0.898 to 0.855). The latest reading sits at the 95th percentile.
China has the weakest news tone compared with its own two-year norm, at -1.31 standard deviations. Its raw 7-day tone of +1.27 is still positive on GDELT's scale, because Chinese outlets tend to be more positive in level, which is why only the z-score is compared.
Simple exampleNames the country whose economic news sounds gloomiest compared with its own usual tone. Some countries' news always sounds upbeat or downbeat, the way some people always talk cheerfully, so each one is judged against its own habit rather than against the others.
Model noteCN has the weakest news tone relative to its own two-year norm (-1.31 sd; 7-day tone +1.27 on GDELT's scale).
The global geopolitical-risk index, measured from 10 US, UK and Canadian newspapers, is +0.63 standard deviations above its 10-year average in September 2026. That means somewhat more coverage of conflict and tension than usual.
Simple exampleLike counting how often newspapers mention wars, terrorism and international tension. Above zero means such stories are showing up more than usual; below zero means less. It measures how much the news talks about these risks, not how likely any event is.
Model noteGlobal GPR (measured from 10 US, UK and Canadian newspapers) is +0.63 sd above its 10-year trailing mean in the latest published month (2026-09).
Typical rangeBetween -0.241 and 1.14 in half of all readings since Jan 2017 (middle 50%; the outer 10th to 90th percentile band is -1.00 to 1.94). The latest reading sits at the 53th percentile.
Over 92 months, the world news-tone factor and the US sentiment factor from the sentiment model have moved together with a correlation of +0.54. That is a moderate positive link: they often agree, but not always.
Simple exampleShows how closely two mood gauges move together, like two friends whose moods tend to rise and fall on the same days. Close to +1 means they almost always move together, near 0 means no clear link, and below 0 means they tend to move in opposite directions.
Model noteOver 92 months the world news-tone factor co-moves +0.54 with the one-sided US sentiment factor from the sentiment module.
The line is the world news-tone factor since 2019, built from seven z-scored tone series using only past data. Above zero means economic news is more positive than its recent norm; below zero means more negative. Look for sharp dips, which often reflect major news shocks, and remember that a long stretch of low tone gets normalized away after about two years.
Simple exampleThe line is the world's economic-news mood, blended from seven country and global news feeds. Above zero means news sounds brighter than its recent normal; below zero means gloomier. Sharp dips often line up with big news shocks, and because 'normal' is based on the past two years, a long gloomy stretch slowly comes to count as normal.
Each country's daily news tone is smoothed into a trailing 7-day average, using only the valid days in that week (at least 4).
Simple exampleDaily news mood jumps around, like daily temperatures. This recipe averages the last seven days, the way a weekly weather summary smooths out one odd hot or cold day, and it skips weeks without enough days of data.
- \text{tone}_{c,s}GDELT average tone of economic news from outlets in country c on day s
- nNumber of valid days in the 7-day window
The smoothed tone is compared with the average and spread of that same country's 7-day averages over the past 730 days.
Simple exampleGrades each country against its own past two years, like asking whether today is warm for your own city rather than comparing it with a tropical one. The result says how far above or below its usual mood a country's news is.
- \mu_{c,t}Mean of country c's 7-day tone over the trailing 730 days
- \sigma_{c,t}Sample standard deviation over the same window (at least 365 values needed)
The world factor is a weighted sum of the seven standardized tone z-scores, using weights from the first principal component fitted only on data from before the current month.
Simple exampleLike mixing seven paints into the one color that best represents the whole set: each mood score gets a weight and they are blended into one world number. The weights are worked out only from older data, so the recipe is not shaped by the very days it is measuring.
- \tilde{z}_tThe seven tone z-scores, re-standardized with the fitting sample's mean and spread
- wWeights from the largest eigenvector of the correlation matrix, signed so they sum to a positive number
- \lambdaLargest eigenvalue; dividing by its square root gives the factor unit variance
The US divergence is the US tone z-score minus the average z-score of Japan, China, Germany, the UK and India.
Simple exampleTake the US mood score and subtract the average mood score of Japan, China, Germany, the UK and India. It is like asking whether one player is having a better day than the rest of the team, with each player judged against their own usual form.
- z_{US,t}US news-tone z-score on day t
- z_{c,t}News-tone z-score of each of the five other countries (the global feed is excluded)
- GDELT
- A public project that collects news from around the world and uses software to score each article's tone from negative to positive.
- News tone
- A machine-made score of how positive or negative the words in news articles are.
- Moving average
- An average over a sliding window, here the last 7 days, used to smooth out daily noise.
- World factor
- A single number capturing the shared ups and downs in news tone across all seven series.
- Divergence
- How far one country's reading is from the others. Here, US tone z-score minus the average of five other countries.
- Geopolitical risk (GPR)
- An index of newspaper coverage of wars, terrorism and international tensions, here from 10 US, UK and Canadian papers.
- Variance explained
- The share of all the movement in a set of series that one common pattern captures. Here it is 63%.
Full technical specification (for specialists)
Model
World news sentiment, geopolitical risk and policy uncertainty
Specification
tone_{c,t}: GDELT DOC 2.0 average tone of articles matching (economy OR inflation OR recession OR "interest rates") from outlets in country c on UTC day t. Exact 0.0 values are set to missing (GDELT returns 0 when no article matches). Partial-coverage screen: if some but not all of the 7 series are missing on day t, day t is set to missing for all 7 series.MA_{c,t} = mean of tone_{c,s} over the 7 calendar days s = t-6..t, requiring >= 4 valid days (trailing, one-sided).z_{c,t} = (MA_{c,t} - mu_{c,t}) / sigma_{c,t}, mu and sigma = mean and sample std (ddof=1) of the MA values dated in (t-730d, t], requiring >= 365 valid values.Percentile_{c,t} = 100 * share of MA values in (t-730d, t] that are <= MA_{c,t}.World factor: Zs = (z_t - m)/s over the 7 series (c in US,JP,CN,DE,GB,IN,GLOBAL), R = corr matrix of Zs, w = unit eigenvector of the largest eigenvalue lambda of R (sign so that sum(w) > 0), F_t = w'Zs_t / sqrt(lambda) (unit variance in the estimation sample). Variance share = lambda / 7. DEVIATION (one-sided): the headline F_t uses w, m, s fitted only on complete rows dated before the first day of the month of t (>= 365 rows) so that no future information enters; the full-sample (in-sample) factor is exported as world_factor_fullsample.Factor percentile = 100 * share of all one-sided F_s (s <= t, s with a valid one-sided factor) that are <= F_t.US-minus-rest_t = z_{US,t} - (1/5) * sum over c in JP,CN,DE,GB,IN of z_{c,t} (GLOBAL excluded; all six must be valid). Its percentile = share of its own history <= current value.Monthly tone_{c,m} = mean of valid daily tone in calendar month m (>= 15 valid days and month complete). GPR_{c,m} (gprc_*): Caldara-Iacoviello country GPR = share of ALL articles in the 10 US/UK/Canadian newspapers of the GPR index that both meet the GPR criterion and mention country c or its major cities (the US/UK/Canadian press perspective on risks posed by or involving c, NOT the country's own press); gpr_global = the global GPR index from the same 10 newspapers. EPU_{c,m}: Baker-Bloom-Davis news-based EPU for JP, CN (SCMP), DE, GB; for the US the FRED series USEPUINDXM, which is the THREE-COMPONENT overall index (news coverage + tax-code expirations + forecaster disagreement), a different construct from the news-only indices; GLOBAL = GEPUCURRENT (GDP-weighted average of national EPU).Release lag (point-in-time): monthly value of month m is used at as-of date T only if first day of (m + k months) + d days <= T, with (k, d) = (1, 7) for GPR, EPU_INTL and USEPUINDXM and (3, 0) for GEPUCURRENT. The as-of month itself is never used.Monthly z: x_z,m = (x_m - mean)/std (ddof=1) over the trailing 120 calendar months ending at m inclusive (>= 24 valid observations; missing months count as missing), computed separately within each country and indicator.Comparison: corr over complete months of mean_m(F_t) (>= 15 valid days) with sentiment.sentiment_monthly.factor_onesided on the same month label (Pearson; Spearman and first-difference correlations also reported). DEVIATION from the spec's '2017->': the one-sided window starts only after the burn-in (365 valid MA days for the z-scores, then 365 complete rows for the first one-sided PCA fit); the in-sample full-sample-factor comparison from the first complete month is also reported (diagnostics.comparison_with_upstream_us_sentiment.fullsample_comparison).
Limitations
- GDELT tone is machine-scored from article text matched on English query terms; outlet-country (not topic-country) based; scoring pipeline and source mix changed over time, so levels across years are not strictly comparable. Tone levels differ by country (CN is structurally positive, DE negative) -> only z-scores are comparable.
- The cache has no article counts, so one cannot weight by volume. 41 calendar days are missing for ALL 7 series (GDELT source outages or fetch gaps; 37 of them since 2025, e.g. 2025-06-15..07-01 during the June-2025 Israel-Iran war); they are not interpolated, and months they leave with < 15 valid days have a null monthly tone (diagnostics.data_quality.months_with_null_tone_due_to_outages).
- Latest cached day is 2026-10-17 but the world factor is valid only to 2026-10-06 (11 days earlier) because of missing recent days.
- Country GPR series (gprc_*) are shares of articles in 10 US/UK/Canadian newspapers that discuss adverse geopolitical events AND mention the country: they measure the Anglo-American press perspective on risks posed by or involving that country, not the country's own press; they are not comparable in level to the global index or to other countries; India is not covered. (The data catalog's wording 'share of a country's major newspapers' articles' differs from the publisher's definition used here.) EPU scales differ per country; the US EPU is the three-component index while the others are news-only; China SCMP EPU ends 2026-01.
- GPR/EPU/GDELT data are latest-vintage (revised); no real-time accuracy is claimed even though publication lags are applied. The full-sample factor is in-sample; the headline factor is one-sided but its PCA loadings are re-estimated monthly and can drift.
- Trailing-2y z-scores make the factor a relative (anomaly) measure: a persistent regime of low tone is normalised away after ~2 years.
- Descriptive state of the news mood; not a forecast and not investment advice.
References
- Leetaru, K. & Schrodt, P. (2013). GDELT: Global data on events, location and tone, 1979-2012. ISA Annual Convention (GDELT DOC 2.0 tone methodology).
- Caldara, D. & Iacoviello, M. (2022). Measuring geopolitical risk. American Economic Review 112(4), 1194-1225.
- Baker, S., Bloom, N. & Davis, S. (2016). Measuring economic policy uncertainty. Quarterly Journal of Economics 131(4), 1593-1636.
Valuations, the AI build-out and the money behind it
The next eight sections look at how stretched stock prices are, how the AI build-out is being paid for, whether money is moving in loops between the same companies, whether real-economy demand matches the spending, and which indicators warned before past crashes. They describe conditions from official data and company filings. They do not forecast a crash or say when one might happen.
Are stock prices stretched?
This page compares several measures of stock market valuation, household stock holdings, borrowing to buy stocks and AI-related investment with their own histories, to describe how stretched conditions look today.
Why it matters
Most families own stocks directly or through retirement accounts, so the price of the market touches savings and pensions. When prices, borrowing and investment all run far ahead of the economy's size, the system can be more sensitive to bad news. This page describes those conditions; it does not predict what happens next and is not investment advice.
How it works
Each indicator is lined up against its own past, using only data that would have been public at each date. For every reading the model asks what share of past readings were lower, which gives a percentile between 0 and 1 (or between 0 and 100 on the headline cards). Percentiles from the different indicators are averaged with equal weight into one pressure score, and the model also counts how many indicators sit in the top tenth of their own history. It is like checking a child's height against growth charts: the chart does not say what happens next, it only shows where the child stands compared with earlier measurements. The Shiller CAPE, one of the indicators, comes from an academic source rather than an official statistic.
The latest readings
This compares the market value of US nonfinancial companies' stock with the size of the economy (GDP). A higher reading means stock values are large relative to what the economy produces in a year, a gauge that Warren Buffett once called one of the best single measures of valuation.
Simple exampleImagine the town's whole economy makes a certain amount of money in a year, and you add up what everyone would pay to buy all the local shops. This compares those two numbers. When the shops' price tag is much bigger than the yearly money the town makes, shop prices look stretched.
Model noteNonfinancial corporate equities stood at 255.0% of GDP in Q2 2026, the highest reading since the series begins in 1947 and above its 2000 peak of 162.6% of GDP and above its 2021 peak of 218.7% of GDP.
Typical rangeBetween 105.9 and 155.7 in half of all readings since Mar 31, 2000 (middle 50%; the outer 10th to 90th percentile band is 92.92 to 204.3). The latest reading sits at the 100th percentile.
This divides the market value of company stock by the economy-wide profits companies earn after tax. A higher reading means investors are paying more for each dollar of profit; a lower one means less. Because the top and bottom cover slightly different groups of companies, it is a rough gauge.
Simple exampleSuppose a lemonade stand earns $1 a year and you pay $10 to own it. You are paying 10 times its yearly earnings. This is that idea for all companies together. A bigger number means people pay more for each dollar of profit.
Model noteEquity value relative to economy-wide after-tax corporate profits was 21.4x in Q2 2026, at the 98th percentile of its history since 1947 and below its 2000 peak of 27.0x and above its 2021 peak of 20.2x.
Typical rangeBetween 12.13 and 16.82 in half of all readings since Mar 31, 2000 (middle 50%; the outer 10th to 90th percentile band is 10.11 to 19.91). The latest reading sits at the 96th percentile.
This is the portion of households' and nonprofits' financial assets that is held in corporate stock. A higher reading means more family wealth rides on stock prices; a lower one means more is held in cash, bonds and other assets.
Simple exampleThink of a family's piggy bank split into jars: cash, bonds and stocks. This shows how much of it sits in the stock jar. A fuller stock jar means the family's savings go up and down more when stock prices move.
Model noteCorporate equities made up 48.2% of household and nonprofit financial assets in Q2 2026, the highest reading since the series begins in 1945 and above its 2000 peak of 38.7% and above its 2021 peak of 41.0%.
Typical rangeBetween 28.55 and 35.14 in half of all readings since Mar 31, 2000 (middle 50%; the outer 10th to 90th percentile band is 25.70 to 40.70). The latest reading sits at the 100th percentile.
Margin debt is money investors borrow from brokers to buy securities. This measures how fast it grew over the past 12 months after removing inflation. Fast growth means more borrowing against stock holdings, which can make price swings larger in either direction; a negative reading means margin debt is shrinking.
Simple exampleMargin debt is like borrowing your big sister's money to buy more trading cards. If the amount borrowed grows fast, people are using more borrowed money. That can make prices swing bigger, up or down, because loans must be paid back.
Model noteInflation-adjusted FINRA margin debt changed by 26.7% over the 12 months to September 2026, at the 80th percentile of its history since 1998 and below its 2000 peak of 73.9% and below its 2021 peak of 67.2%.
Typical rangeBetween -9.21 and 21.76 in half of all readings since Jan 2000 (middle 50%; the outer 10th to 90th percentile band is -23.82 to 33.25). The latest reading sits at the 82th percentile.
The Shiller CAPE, from an academic source and not an official statistic, divides the stock market's price by its average inflation-adjusted earnings over the past ten years. A higher reading means investors are paying more for each dollar of long-run profits than they did in earlier periods; a lower one means less.
Simple exampleImagine judging a farm not by one year's harvest but by the average of ten harvests, so one lucky or unlucky year does not fool you. This ratio does that for the stock market. A bigger number means the price is high compared with long-run profits. It comes from a university professor's data.
Model noteThe Shiller CAPE (academic source, not an official statistic) was 40.7x in October 2026, at the 99th percentile of its history since 1881 and below its 2000 peak of 44.2x and above its 2021 peak of 38.6x (latest month provisional: Shiller uses a month-to-date price).
Typical rangeBetween 24.01 and 31.38 in half of all readings since Jan 2000 (middle 50%; the outer 10th to 90th percentile band is 21.00 to 37.34). The latest reading sits at the 97th percentile.
This is how much the Nasdaq-100, an index of large technology-heavy companies, has risen or fallen in price over the past two years. Researchers have studied cases where such an index more than doubled in two years, so the page checks how close the reading is to that run-up threshold.
Simple exampleThis is like checking how much a plant grew in two years. Researchers noticed that when a group of company shares more than doubled in two years, it was a special kind of fast run. This measures how far along that road the index is.
Model noteThe Nasdaq-100 two-year price change was 48.5% on 15 Oct 2026, at the 67th percentile of its history since 1988 and below its 2000 peak of 306.5% and below its 2021 peak of 115.5%; it is below the 100% two-year run-up threshold studied by Greenwood, Shleifer and You (2019).
Typical rangeBetween 7.66 and 51.83 in half of all readings since Jan 7, 2000 (middle 50%; the outer 10th to 90th percentile band is -25.07 to 78.46). The latest reading sits at the 72th percentile.
This is the share of the US economy spent on information-processing equipment and software, the category that includes computers, data centre hardware and software. A higher reading means businesses are putting a bigger slice of national output into this kind of investment.
Simple exampleIf a country is like a big household, this shows how much of its yearly spending goes on computers and software, the tools for building smart machines. A bigger share means more of the family budget is going to new tools.
Model noteInvestment in information-processing equipment and software was 5.1% of GDP in Q2 2026, the highest reading since the series begins in 1947 and above its 2000 peak of 4.5% of GDP and above its 2021 peak of 4.3% of GDP.
Typical rangeBetween 3.56 and 4.04 in half of all readings since Mar 31, 2000 (middle 50%; the outer 10th to 90th percentile band is 3.45 to 4.30). The latest reading sits at the 100th percentile.
This counts how many of the page's indicators are in the top tenth of their own history. A higher count means more of the measures look stretched at the same time; a lower count means they are mixed or ordinary. It describes conditions and is not a signal about timing.
Simple examplePicture a row of warning lights on a car dashboard, each lighting up when one gauge is in its highest tenth ever. More lights mean more gauges are high at the same time. The lights describe how things look; they do not say what comes next.
Model noteAs of 2026-10-18, 9 of 12 indicators are in the top decile of their own history (ai_capex_gdp, cape, concentration, excess_cape_yield, hh_equity_share, margin_gdp, mv_gdp, pe_econ, q_ratio); the equal-weight average percentile is 0.94.
Today against past peaks
| Indicator | Now | 2000 peak | 2007 peak | 2021 peak | Rank vs own history |
|---|---|---|---|---|---|
| Nonfinancial corporate equities / GDP (% of GDP) | 255.0 | 162.6 | 120.8 | 218.7 | 100% |
| Economy-wide price/earnings (equities / after-tax profits, IVA+CCAdj) (x) | 21.42 | 26.99 | 14.48 | 20.18 | 98% |
| Tobin's q (equities / net worth at market value) (x) | 2.12 | 1.47 | 0.909 | 1.75 | 100% |
| Household equity share of financial assets (%) | 48.23 | 38.71 | 33.51 | 40.98 | 100% |
| Broker-dealer margin loans / GDP (% of GDP) | 2.28 | 2.65 | 2.08 | 2.14 | 98% |
| FINRA margin debt, real 12-month change (%) | 26.68 | 73.91 | 58.96 | 67.16 | 80% |
| Shiller CAPE (academic source) (x) | 40.71 | 44.20 | 27.55 | 38.58 | 99% |
| Excess CAPE yield (100/CAPE minus 10y real yield) (pp) | -0.316 | -1.58 | 0.800 | 2.63 | 98% |
| Nasdaq-100 two-year price change (%) | 48.49 | 306.4 | 43.18 | 115.5 | 67% |
| Nasdaq-100 vs Composite, log ratio rebased 1986-01-02 (log points) | 102.1 | 90.39 | 67.00 | 95.22 | 99% |
| Information-processing equipment + software investment / GDP (% of GDP) | 5.05 | 4.46 | 3.61 | 4.29 | 100% |
| Nonfinancial corporate debt / GDP (% of GDP) | 48.21 | 46.27 | 45.14 | 62.22 | 87% |
| Nasdaq Composite two-year price change (%) | 45.85 | 192.5 | 37.70 | 106.8 | 72% |
| All corporate equities held (all sectors) / GDP (% of GDP) | 379.8 | 209.7 | 187.8 | 320.7 | 100% |
| Economy-wide price/earnings (profits without IVA/CCAdj) (x) | 19.40 | 28.79 | 12.46 | 18.59 | 94% |
Rank is the share of the indicator's own history below today's value. For the excess CAPE yield, lower means more stretched.
Two lines show the value of US corporate stock divided by GDP, one for nonfinancial companies only and one for all corporations, measured as a percent of GDP. When a line rises, stock values are growing faster than the economy; when it falls, they are shrinking relative to the economy. Compare the line with its earlier highs around 2000 and 2021 to see how today's level sits against history.
Simple exampleThink of the economy as a pie and company stock as a price tag on the whole bakery. The lines show how big the price tag is compared with the pie. When a line climbs, the price tag is growing faster than the pie. Look at old high points to compare.
This line shows what share of households' financial assets is held in corporate stock. A rising line means families hold more of their wealth in stocks and are more exposed to price changes. Falling lines usually appear when stock prices drop or when families shift into other assets.
Simple exampleImagine a line showing how full the stock jar is in families' piggy banks. Going up means more of their savings sit in stocks. Going down means the jar has emptied, either because stock prices fell or because families moved money elsewhere.
This single line is the Shiller CAPE, from an academic source, which compares the stock market's price with ten years of average inflation-adjusted earnings. Higher means stock prices are high relative to long-run profits. Because earnings are averaged over a decade, the line moves more slowly than ordinary price-to-earnings ratios.
Simple exampleThis line shows the price of the stock market compared with ten years of average profits, like a farm's price compared with ten harvests. A high line means a big price for the harvests. It moves slowly because ten years are averaged together.
This line shows spending on information-processing equipment and software as a percent of GDP. A rising line means more of the economy's output is going into computers, data centres and software. Look at the earlier climb in the late 1990s to compare with the recent one.
Simple exampleThis line shows what slice of everything the country makes is spent on computers and software. When it goes up, a bigger slice of the family budget goes to new tools. Compare it with the climb in the late 1990s, when the internet was new.
Stock value to GDP is the market value of nonfinancial companies' equities divided by GDP, shown as a percent. The 1000 converts dollars in millions to dollars in billions so the two match.
Simple exampleDivide the price tag of all the bakeries by the size of the whole town's yearly baking. If the bakeries are worth twice a whole year of town baking, the answer is 2, or 200 percent. Bigger means the price tags are large next to the economy.
- E_tmarket value of nonfinancial corporate equities at the end of quarter t, in millions of dollars
- Y_tgross domestic product at an annual rate, in billions of dollars
The excess CAPE yield is the stock market's earnings yield (the inverse of the CAPE) minus the inflation-adjusted yield on 10-year government bonds. A lower value means stocks pay less extra over safe bonds, which the model treats as more stretched.
Simple exampleCompare two ways to earn money: owning stocks or lending to the government. This subtracts what the safe loan pays from what stocks earn for each dollar. If stocks pay only a little extra over the safe choice, the number is small.
- \text{CAPE}_dShiller cyclically adjusted price/earnings ratio (academic source) for the latest month available on day d
- r_dexpected inflation-adjusted 10-year Treasury yield on day d
- \text{ECY}_dexcess CAPE yield, in percentage points
For each indicator, the percentile is the share of past readings that were no more stretched than the latest reading. Only history that was already public at the date is used.
Simple exampleLine up all your past test scores and see what share were lower than today's. If 9 out of 10 were lower, you are at the 90th percentile. This does the same for each measure, using only the past that people could already see.
- x_1,\dots,x_nthe indicator's released history, with x_n the latest reading
- s_idirection sign: +1 when higher means more stretched, -1 when lower does
- F_{i,t}percentile of indicator i at date t, between 0 and 1
The pressure score is the plain average of the available indicators' percentiles. The lights count tallies how many indicators sit at or above the 90th percentile of their own history.
Simple exampleAverage the ranks of all the measures to get one score, like averaging your marks across subjects. Then count how many subjects are in your top tenth ever. Each subject counts the same, and the cut-off was picked ahead of time.
- N_tnumber of indicators with enough history at date t
- \mathbf{1}\{\cdot\}equals 1 when the condition inside is true and 0 otherwise
- 0.90fixed top-tenth cut-off, chosen in advance and not tuned to past events
- GDP
- Gross domestic product, the total value of goods and services the US economy produces in a year.
- Percentile
- The share of past readings that were lower than today's. A reading at the 90th percentile is higher than 90 percent of its own history.
- Shiller CAPE
- Cyclically adjusted price/earnings ratio: stock prices divided by ten-year average inflation-adjusted earnings. It is an academic series created by economist Robert Shiller, not an official statistic.
- Margin debt
- Money that investors borrow from their broker to buy securities, with the securities as collateral.
- Excess CAPE yield
- The stock market's earnings yield (the inverse of the CAPE) minus the inflation-adjusted bond yield. Lower values mean stocks offer less extra return than bonds.
- Concentration
- How much of the market's value sits in a small group of very large companies.
- Top decile
- The highest tenth of an indicator's own past readings.
- Z.1 Financial Accounts
- A quarterly Federal Reserve publication that tallies assets, debts and equity holdings across US households, companies and government.
Full technical specification (for specialists)
Model
Bubble watch: valuation, leverage, concentration and the AI build-out
Specification
mv_gdp_t = E_t / (Y_t x 1000) x 100, E = NCBEILQ027S nonfinancial corporate equities at market value ($ millions, end of quarter), Y = GDP ($ billions SAAR).mv_gdp_all_sectors_t = A_t / (Y_t x 1000) x 100, A = BOGZ1FL893064105Q (diagnostic alternative).pe_econ_t = E_t / (Pi_t x 1000), Pi = CPATAX after-tax profits with IVA and CCAdj ($ billions SAAR); pe_econ_cp uses CP (no adjustments) instead.q_ratio_t = E_t / NW_t, NW = TNWMVBSNNCB net worth at market value ($ millions); Tobin (1969) q proxy (equity-only numerator, net-worth denominator, as in Z.1 B.103).hh_equity_share_t = BOGZ1FL153064486Q (%, published directly).margin_gdp_t = M_t / (Y_t x 1000) x 100, M = BOGZ1FL663067003Q broker-dealer receivables from customers (margin loans and other receivables), $ millions.margin_yoy_real_m = [(D_m / CPI_m) / (D_{m-12} / CPI_{m-12}) - 1] x 100, D = FINRA debit balances.cape_m = Shiller P/E10: real price / 10-year average of real earnings (taken as published, academic).excess_cape_yield_d = 100 / CAPE_(latest month available at d) - r_d; r_d = DFII10_d from 2003-01-02; before, r_d = DGS10_d - pi10_d with pi10 = ((CPI_m / CPI_{m-120})^(1/10) - 1) x 100 using the latest CPI released by d. Lower = more stretched (sign flipped in the composite).nasdaq_2y_d = (P_d / P_(d - 2 calendar years, last obs on or before) - 1) x 100 for NASDAQ100 and NASDAQCOM; gsy_flag = 1{nasdaq_2y > 100} (Greenwood, Shleifer and You 2019 run-up threshold).runup_share_12m_d = ln(P_d / P_(d-1y)) / ln(P_d / P_(d-2y)), defined when ln(P_d / P_(d-2y)) > 0.concentration_d = 100 x [ln(NDX_d / COMP_d) - ln(NDX_0 / COMP_0)], day 0 = 1986-01-02; concentration_3y_chg_d = concentration_d - concentration_(d-3y), the lag being the last common trading day on or before d minus 3 calendar years (log points).ai_capex_gdp_t = A679RC_t / Y_t x 100; ai_capex_gdp_4q_chg_t = ai_capex_gdp_t - ai_capex_gdp_(t-4) (pp); contrib_ai_pp_t = Y034RY2_t + B985RY2_t (pp of real GDP growth, annual rate).corp_debt_gdp_t = BCNSDODNS_t / (Y_t x 1000) x 100.Recursive ECDF (Hollo, Kremer and Lo Duca 2012): for indicator i with released history x_1..x_n at date t, F_i,t = #{j <= n : s_i x_j <= s_i x_n} / n, s_i = +1 (higher = stretched) or -1 (excess_cape_yield); reported only when the released history spans >= 10 years (initial block).bubble_pressure_t = (1 / N_t) sum_{i available at t} F_i,t (equal weights, N_t = number available); lights_on_t = sum_i 1{F_i,t >= 0.90}.Release filter: value for period p is usable at t iff t >= min(end(p) + lag, cache date); lags: Z.1 70 d, NIPA (and any ratio to GDP, and pe_econ) 90 d, FINRA 21 d, CPI 20 d (margin_yoy_real uses max(21, 20)), Census C30 35 d, daily prices 0 d; Shiller month m: min(end(m), cache date).pct_rank_now = 100 x F computed on the full released history at the as-of date (direction-adjusted). Headline sentences print it as a whole-number ordinal (1st, 2nd, 3rd, 4th, ..., 11th-13th, 21st, ...), rounded half up and clamped to 1..99 for any reading that is not the all-time extreme (a record reading is described as 'the highest/lowest reading since the series begins in <year of first_date>'). When the released history spans less than the composite's 10-year initial block (as_of < first_date + 10 years, possible only in historical runs), the sentence gives no percentile or record claim and says the history is too short to rank, consistent with composite_now.ecdf = null; the peaks-table pct_rank_now is still reported on that short history.Headline sentence numbers (value, 2000 and 2021 peaks) are rounded once, to 1 decimal, from the unrounded values (the peaks table stores 4-decimal values); a reading equal to an episode's extreme is described as 'equal to its <year> peak'. Periods are printed as 'Q<q> <yyyy>' (quarterly), '<Month yyyy>' (monthly) or '<d Mon yyyy>' (daily) of the indicator's latest released period label.market_daily.cape_d = CAPE of the latest Shiller month released by d (same release rule as the composite), forward-filled onto the union of the NASDAQCOM and DGS10 trading calendars; excess_cape_yield_d is defined only on DGS10 days (null on bond-market holidays when stocks trade).peak_K (peaks table) = max (min for excess_cape_yield) of the released values whose period label lies in the peak window W_K: W_2000 = 1999-01-01 to 2000-12-31; W_2007 = 2006-01-01 to 2007-12-31; W_2021 = 2020-01-01 to 2021-12-31. Likewise all_time_max / max_date are the all-time max (min for excess_cape_yield) of the released history and its period label; the peaks column extreme_type says which ('maximum', or 'minimum (lower = more stretched)' for excess_cape_yield), so the column names peak_K / all_time_max / max_date mean 'most stretched' extreme, not literally the maximum, on that row.
Limitations
- All data are latest vintage (revised): Z.1, NIPA, FINRA and Shiller revisions are included in every historical value, so the one-sided history is point-in-time only with respect to release timing, not to data revisions.
- Fixed release-lag conventions can be off by days to weeks (e.g. delayed releases during the 2025 lapse in appropriations); the October 2025 CPI was never published, so real margin growth is undefined for that month and 12 months later.
- Known cases where the conventions were EARLIER than the actual release (so a historical as-of run in the stated window shows a quarter before it was public; the published run as of a later date is unaffected). Z.1 (Federal Reserve Z.1 release-dates page): 2025Q1 released 12 Jun 2025 vs the 70-day convention 9 Jun; 2025Q2 11 Sep 2025 vs 8 Sep; 2025Q3 9 Jan 2026 vs 9 Dec 2025 (31 days late, after the 2025 lapse in appropriations); 2025Q4 19 Mar 2026 vs 11 Mar; 2026Q1 11 Jun 2026 vs 9 Jun; 2026Q2 11 Sep 2026 vs 8 Sep. Z.1-only indicators (hh_equity_share, q_ratio) are therefore shown 2-8 days early in those quarters and 31 days early for 2025Q3 (as-of 2025-12-09..2026-01-08); the Z.1-numerator ratios on the 90-day convention (mv_gdp, pe_econ, margin_gdp, corp_debt_gdp, mv_gdp_all_sectors, pe_econ_cp) show 2025Q3 11 days early (as-of 2025-12-29..2026-01-08). BEA (release schedule): 2025Q3 is not an early case: the initial estimate with preliminary corporate profits came 23 Dec 2025, before the 90-day convention (29 Dec 2025); the updated estimate of 22 Jan 2026 differs only by vintage (latest vintage is used throughout). The 2025Q4 third estimate, the first release with 2025Q4 corporate profits (the advance estimate of 20 Feb 2026 and the second of 13 Mar 2026 had none), came 9 Apr 2026, 9 days after the 90-day convention (31 Mar 2026): as-of runs in 2026-03-31..2026-04-08 show pe_econ and pe_econ_cp for 2025Q4 before any 2025Q4 profits estimate was published, and every ratio to GDP and ai_capex_gdp 9 days before the third estimate (earlier GDP estimates were public). The 2026Q2 third estimate came 30 Sep 2026, 2 days after the convention (28 Sep), affecting every ratio to GDP, pe_econ and ai_capex_gdp in 2026-09-28..2026-09-29. The actual calendars are not modelled (the spec permits the convention).
- Shiller CAPE is an academic series, not an official statistic; its recent earnings are estimates and are revised.
- Broker-dealer receivables in Z.1 include receivables other than margin loans; FINRA debit balances before 2010 are NYSE member-firm data carried in FINRA's file.
- The excess CAPE yield splices two real-yield measures (trailing-inflation proxy before 2003, TIPS after); the level can shift at the splice.
- The composite's coverage grows over time (indicators enter after a 10-year initial block, e.g. FINRA-based from 2008, Nasdaq-100 from 1998), so early values average fewer indicators (n_available column).
- Several valuation indicators trend upward over decades (e.g. hh_equity_share, mv_gdp), so expanding-window percentiles are naturally high when levels are at records; this describes extremeness, not timing.
- pe_econ divides the market value of NONFINANCIAL corporate equities (NCBEILQ027S) by economy-wide after-tax profits of ALL corporations (CPATAX: includes financial corporations and profits from the rest of the world), as the spec prescribes; numerator and denominator therefore differ in coverage, so the level is not a conventional P/E and only its movement relative to its own history is interpreted.
- Historical (as-of) runs are supported from 1998-02-21 only: FINRA debit balances start in January 1997, so the first released 12-month real change of margin debt is January 1998 (released 1998-02-21), and the headline may never be null. An earlier as-of raises a ValueError naming this date.
- Nothing here predicts returns or crashes; it is not investment advice.
References
- Buffett, W. and Loomis, C. (2001). Warren Buffett on the stock market. Fortune, 10 December 2001 (market value of equities relative to GNP).
- Shiller, R. J. (2015). Irrational Exuberance, 3rd ed. Princeton, NJ: Princeton University Press.
- Campbell, J. Y. and Shiller, R. J. (1998). Valuation ratios and the long-run stock market outlook. Journal of Portfolio Management 24(2), 11-26.
- Tobin, J. (1969). A general equilibrium approach to monetary theory. Journal of Money, Credit and Banking 1(1), 15-29.
- Greenwood, R., Shleifer, A. and You, Y. (2019). Bubbles for Fama. Journal of Financial Economics 131(1), 20-43.
- Kaminsky, G., Lizondo, S. and Reinhart, C. M. (1998). Leading indicators of currency crises. IMF Staff Papers 45(1), 1-48 (signal-extraction framework; used downstream by crash_watch, not estimated here).
- 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 (recursive empirical-CDF transform).
- Board of Governors of the Federal Reserve System. Financial Accounts of the United States (Z.1): B.103 (nonfinancial corporate business balance sheet: equities FL103164105, net worth at market value FL102090005, debt securities and loans FL104104005), L.223 (corporate equities; all sectors FL893064105), B.101.e (household equity share FL153064486), security brokers and dealers (receivables due from customers FL663067003).
- U.S. Bureau of Economic Analysis. NIPA Tables 1.1.5 (GDP, line 1), 1.12 (corporate profits after tax with IVA and CCAdj, line 15; without adjustments, line 45), 5.3.5 (private fixed investment in information processing equipment and software, lines 31, 10, 17), 1.5.2 (contributions to percent change in real GDP, lines 31 and 38).
- FINRA. Margin Statistics: debit balances in customers' securities margin accounts (monthly).
- U.S. Census Bureau. Construction Spending (C30): value of private construction put in place, data center, SAAR.
- U.S. Bureau of Labor Statistics. CPI-U all items, seasonally adjusted (CPIAUCSL); Federal Reserve H.15 (DGS10, DFII10); Nasdaq indices via FRED (NASDAQ100, NASDAQCOM).
- Shiller, R. J. Online data: ie_data.xls (shillerdata.com; formerly econ.yale.edu/~shiller/data) - academic source, not an official publisher.
How are the AI giants paying for the build-out?
This page tracks how much five of the largest US technology companies spend on buildings and equipment, whether their own cash flow covers it or borrowing fills the gap, and how sales and unpaid bills look at the leading AI chip supplier, Nvidia.
Why it matters
AI data centres cost very large sums, and who pays for them shapes how resilient the whole technology sector is. Following these company filings shows how the mix of operating cash and borrowing is changing. It describes conditions only; it does not rank companies or offer a view on any company's securities.
How it works
The model reads each company's official quarterly and annual filings with the US Securities and Exchange Commission (SEC). It converts the year-to-date numbers in cash flow statements into single quarters, then adds four quarters at a time so seasonal swings wash out. It sums Microsoft, Alphabet, Amazon, Meta and Oracle into one group, and compares capital spending with cash generated by operations and with new borrowing. It also tracks Nvidia's sales and its days sales outstanding, which counts how many days of sales are still waiting to be paid. It works like a household checking whether a big renovation is being paid from salary or from a growing loan.
The latest readings
This adds up what Microsoft, Alphabet, Amazon, Meta and Oracle spent on property and equipment such as data centres and servers over the latest four quarters. Higher means more is being invested in physical capacity. It counts all capital spending, not only AI.
Simple exampleImagine five big companies building new workshops and buying machines. This adds up everything they spent on workshops and machines over the last year. A bigger number means they are building more.
Model noteMicrosoft, Alphabet, Amazon, Meta and Oracle together spent $566 bn on property and equipment in the four quarters to 2026-06-30.
Typical rangeBetween 50.97 and 157.7 in half of all readings since Dec 31, 2014 (middle 50%; the outer 10th to 90th percentile band is 28.32 to 295.9). The latest reading sits at the 100th percentile.
This compares the latest four quarters of capital spending with the four quarters before. A positive reading means spending is growing; a negative one means it is shrinking. Large positive readings mean the build-out is expanding quickly.
Simple exampleIf you spent $10 on new toys last year and $20 this year, your toy spending doubled. This compares the last year with the year before for the five companies. Bigger means they are building faster than before.
Model noteThat trailing-year capital spending is 81% higher than in the four quarters a year earlier.
Typical rangeBetween 17.90 and 50.55 in half of all readings since Dec 31, 2015 (middle 50%; the outer 10th to 90th percentile band is 5.66 to 69.98). The latest reading sits at the 99th percentile.
This divides capital spending by the cash the five companies generate from running their businesses. Below 100 percent, operations cover the spending; above 100 percent, spending is bigger than operating cash, so other sources such as savings or borrowing must fill the gap.
Simple exampleSay you earn $100 from a paper route and spend $80 on a new bike. You used 80 percent of your earnings. If you spent $120, you would need savings or a loan for the other $20. This is that comparison for the five companies.
Model noteCapital spending used 82% of the five companies' operating cash flow; a reading above 100% would mean capex exceeded the cash their operations generated.
Typical rangeBetween 35.63 and 48.13 in half of all readings since Dec 31, 2014 (middle 50%; the outer 10th to 90th percentile band is 27.49 to 58.41). The latest reading sits at the 98th percentile.
This starts with operating cash, subtracts capital spending, then subtracts buybacks and dividends paid to shareholders. A positive amount means cash remained after all of that; a negative amount means spending and payouts went beyond what operations produced.
Simple exampleFrom your paper route money, you pay for a new bike and also give some to your friends as gifts. What is left in your pocket is this number. If it is below zero, you paid out more than you earned.
Model noteAfter capex, buybacks and dividends the five companies' combined cash flow was a surplus of $35 bn over the last four quarters.
Typical rangeBetween 26.46 and 55.01 in half of all readings since Sep 30, 2015 (middle 50%; the outer 10th to 90th percentile band is -10.50 to 81.24). The latest reading sits at the 39th percentile.
This is money the five companies raised by borrowing minus money they repaid, over the latest four quarters. A positive reading means debt grew from cash flows; a negative reading means they paid down more than they borrowed. Lease payments are left out.
Simple exampleThis counts money borrowed minus money paid back in a year. If you borrow $50 from a bank and pay back $20, you net borrowed $30. A bigger number means the companies took on more borrowing than they repaid.
Model noteDebt proceeds minus debt repayments in the five cash-flow statements, excluding finance-lease payments (including the $2.5 bn Alphabet reports inside its debt repayments), were $242 bn over the four quarters to 2026-06-30.
Typical rangeBetween -3.16 and 33.31 in half of all readings since Sep 30, 2015 (middle 50%; the outer 10th to 90th percentile band is -11.28 to 48.48). The latest reading sits at the 100th percentile.
This measures how much the group's long-term borrowing, such as bonds and term loans, has changed compared with a year earlier. Higher means debt is growing faster. Commercial paper and leases are not included, so it covers only part of total obligations.
Simple exampleIf you owed your parents $10 last year and owe $20 now, your debt doubled. This compares what the five companies owe in long-term loans now with a year ago. Bigger means the pile of loans is growing faster.
Model noteCombined long-term debt (notes and other borrowings including current maturities; commercial paper and leases excluded) was $484 bn, 100% more than a year earlier.
This compares Nvidia's sales over the latest four quarters with the four quarters before. Higher means its sales are growing faster. Nvidia is the leading supplier of AI chips, so its sales give a read on how much customers are buying.
Simple exampleThink of a lemonade stand that sold $10 of lemonade last year and $15 this year. This tells how much faster sales grew. Nvidia makes the chips that many AI computers use, so its sales hint at how much the buyers are buying.
Model noteNvidia's trailing-year revenue of $303 bn to its fiscal quarter ending 2026-07-26 is 83% above the prior year.
Typical rangeBetween 7.06 and 57.07 in half of all readings since Mar 31, 2011 (middle 50%; the outer 10th to 90th percentile band is -0.814 to 83.38). The latest reading sits at the 90th percentile.
Days sales outstanding shows how many days of sales are still waiting to be paid by customers. A higher number means customers take longer to pay. A rise alongside rising sales is something to watch, not proof of anything.
Simple exampleIf you sell cookies and your neighbours say they will pay next week, the number of days you wait for money is like this number. A long wait means customers take longer to pay. A long wait together with more sales is worth watching, but it is not proof of a problem.
Model noteNvidia's receivables equal 60 days of its latest quarter's sales; a rise alongside rising sales is a condition to watch for customer financing strain, not a conclusion.
Typical rangeBetween 37.59 and 50.54 in half of all readings since Mar 31, 2010 (middle 50%; the outer 10th to 90th percentile band is 33.89 to 56.98). The latest reading sits at the 93th percentile.
The lines show two yearly totals for Microsoft, Alphabet, Amazon, Meta and Oracle combined: money spent on property and equipment (capex), and cash earned from running the businesses. When the capex line is below the cash line, operations cover the spending. When it rises above, spending outruns operating cash. Each point covers the latest four quarters.
Simple exampleImagine two lines: how much money a family spends on a new house extension, and how much it earns from its jobs. If the spending line is under the earnings line, the jobs pay for it. If the spending line goes higher, the family needs other money to cover it.
One line shows net new borrowing, and the other shows free cash left after capital spending, buybacks and dividends. If the cash line is positive and borrowing is small, spending is mostly self-funded. A rising borrowing line while spare cash shrinks means borrowing is playing a larger role. Each point covers the latest four quarters.
Simple exampleOne line shows how much money was borrowed, and the other shows the cash left over after spending and giving money to shareholders. Lots of cash left and little borrowing means building is mostly paid from their own money. Rising borrowing with shrinking leftover cash means loans do more of the work.
A trailing-twelve-month (TTM) figure adds the latest four quarters, which smooths out seasonal swings and one-off quarters.
Simple exampleTo avoid being fooled by one busy month, add up the last four quarters, like adding up a whole year of pocket money. That way holiday spikes and quiet spells get smoothed out, and each point on the chart covers a full year.
- X_tthe value for calendar quarter t, such as capital spending or operating cash flow
- \text{TTM}_t(X)the sum of the four most recent quarters ending at t
Capital spending as a percent of operating cash flow shows how much of the cash generated by the businesses is used for buildings and equipment. A value over 100 means capex is larger than operating cash.
Simple exampleDivide what you spent on a new bike by what you earned from your paper route, then turn it into a percent. Under 100 percent means your earnings covered it. Over 100 percent means you needed other money too.
- \text{Capex}^{\text{TTM}}_tpayments for property and equipment over the last four quarters
- \text{OCF}^{\text{TTM}}_tnet cash from operating activities over the last four quarters
Free cash flow after payouts is what remains of operating cash after capital spending and after returning money to shareholders, all measured over four quarters.
Simple exampleStart with your paper-route earnings, take away the bike, then take away the money you gave to friends as gifts. What is left in your pocket is the answer. If it ends up below zero, you paid out more than you earned.
- \text{Buybacks}_tmoney spent repurchasing the company's own shares
- \text{Dividends}_tcash paid to shareholders as dividends
- \text{FCF}^{\text{after}}_tcash remaining, in billions of dollars
Days sales outstanding converts unpaid customer bills into days of sales: receivables divided by the quarter's revenue, times about 91 days in a quarter.
Simple exampleTake the money customers still owe you and divide it by how much you sold in a quarter, then multiply by the number of days in a quarter. The answer tells how many days of selling are still waiting to be paid.
- AR_taccounts receivable at the end of the quarter: sales billed but not yet paid
- \text{Revenue}_tsales during the quarter
- 91.25average days in a quarter (365 divided by 4)
- Capex
- Capital expenditure: money spent on long-lasting assets such as buildings, servers and equipment.
- Operating cash flow (OCF)
- Cash a company generates from running its business, before investing or financing.
- Free cash flow
- Operating cash flow minus capital spending: the cash left after the company pays to keep and grow its equipment.
- Buyback
- When a company uses cash to repurchase its own shares from investors.
- Net debt issuance
- Money raised from new borrowing minus money used to repay debt in the same period.
- Days sales outstanding (DSO)
- How many days of sales are waiting to be collected from customers.
- Trailing twelve months (TTM)
- The sum of the latest four quarters, used to smooth out seasonal swings.
- SEC filing
- Official reports such as the 10-K (annual) and 10-Q (quarterly) that public US companies submit to the Securities and Exchange Commission.
Full technical specification (for specialists)
Model
AI spenders' cash-flow funding and supplier balance sheet (SEC filings)
Specification
Discrete quarter from year-to-date (YTD) cash-flow facts sharing fiscal-year start s: X_Q1 = YTD3(s,e1); X_Q2 = YTD6(s,e2) - YTD3(s,e1); X_Q3 = YTD9(s,e3) - YTD6(s,e2); X_Q4 = FY(s,e4) - YTD9(s,e3). Cash-flow lines (capex, OCF, depreciation, buybacks, dividends, finance-lease principal, debt components): 10-Q cash-flow statements are year-to-date, so YTD differencing ranks first whenever the YTD chain exists and a 10-Q 3-month fact (possibly a note value) is used only where no chain exists; the quarters then add up to the filed YTD facts (e.g. Nvidia Q2 FY2027 dividends = H1 6.290 - Q1 0.243 = 6.047, not the 3-month fact 6.000). Income-statement lines (revenue, cost of revenue): a 10-Q 3-month fact (a statement value) ranks first, YTD differencing next. A 3-month fact from a 10-K quarterly-data note ranks last (such notes carry known context-date tagging errors, e.g. Amazon Q4 2011). Disagreements are counted in diagnostics.direct_3m_vs_ytd_difference_mismatches.Flow lines (buybacks, dividends, finance-lease principal, each debt component): the alternative us-gaap tags of a line are merged at the fact level (for each (start, end) the first listed tag with a fact supplies it), so a tag switch inside a fiscal year keeps the YTD chain (Oracle FY2026: Q1 ProceedsFromIssuanceOfLongTermDebt, H1 ProceedsFromIssuanceOfSeniorLongTermDebt; Alphabet 2026: Q1 PaymentsOfDividends, H1 PaymentsOfOrdinaryDividends). Per quarter the candidate with the best derivation wins across tags: YTD difference > 10-Q 3-month fact > YTD difference over absent YTDs > 10-K quarterly-note 3-month fact; ties go to a single-tag chain (earlier tag first), then to the merged chain differenced within one tag, and last to a merged difference across two tags (so a quarter is differenced across tags only when no derivation of equal rank exists within a tag). Re-presented fiscal years (audit AIS-R14-02): where a later filing revised a fact of the line's tags in a fiscal year and the selected quarters of some component do not add up to its FY fact, every component's quarters of that year are its merged year-to-date chain X_m = Y_m - Y_{m-3} (Y = merged fact at horizon m, an absent Y being the last reported one, Y_0 = 0; diagnostics.flow_representation_chain). A re-presentation re-splits the line between components but leaves the line total at each horizon unchanged, so each quarter is then a difference of two line totals that each come from one presentation. Applied once: Amazon 2019, whose Q2 2020 10-Q split 'short-term debt, and other' out of 'long-term debt and other' and restated 2019 H1/9M (FY in the FY2020 10-K) while Q1 2019 kept the old presentation. Amazon 2019 line totals: Q1 = 0.190 - 0.351 + 0 = -0.161 (old presentation, short-term flows inside the long-term rows); H1 = 0.166 - 0.101 - 0.056 = 0.009; 9M = 0.453 - 0.115 + 0.018 = 0.356; FY = 0.871 - 1.166 + (1.402 - 1.518) = -0.411 (10-K 0001018724-22-000005); quarters -0.161, 0.170, 0.347, -0.767. Check: Amazon's own 12-month 10-Q facts (proceeds - repayments over its components) give TTM 2019-06-30 = 0.239, 2019-09-30 = 0.628, 2020-03-31 = -0.224 against the model's 0.239, 0.626, -0.224 (diagnostics.net_debt_ttm_vs_filer_12m_facts); the previous per-component choice gave 0.008, 0.395, -0.248.Filer-extension cash-flow rows (not in the companyfacts API) are read from the filing's own SEC-rendered cash-flow statement, current and (where listed) comparative column (diagnostics.statement_supplement). Oracle's short-term debt component is ONE quantity at every horizon (audit AIS-R3-01): ST = commercial paper, net + short-term financing related to capital expenditures, net (borrowing that Oracle reports in financing activities; its H1/9M FY2026 10-Qs show the two as one row 'commercial paper and other short-term financing, net'). FY2026: Q1 = -0.238 (RepaymentsOfCommercialPaper, 0001193125-25-200095) + 1.958 (restated Q1 comparative of orcl:ProceedsFromRepaymentsOfShort-TermFinancingRelatedToCapitalExpendituresNet, 10-Q 0001193125-26-389274) = 1.720; H1 = 0.886 (0001193125-25-315925); 9M = 2.279 (0001193125-26-101045); FY = -2.285 + 3.345 (orcl:ProceedsFromShort-TermFinancingRelatedToCapitalExpendituresNet, 10-K 0001193125-26-277521) = 1.060; Q1 FY2027 = 0 - 0.830 (0001193125-26-389274). Hence Oracle net debt issuance FY2026: Q1 = 0 - 1.052 + 1.720 = 0.668; Q2 = 17.880 - 1.070 + (0.886 - 1.720) = 15.976; Q3 = 26.664 - 0.071 + (2.279 - 0.886) = 27.986; Q4 = 1.549 - 4.749 + (1.060 - 2.279) = -4.419; FY = 46.093 - 6.942 - 2.285 + 3.345 = 40.211; Q1 FY2027 = 0 - 4.202 - 0.830 = -5.032. FY2025 uses the latest presentation (the FY2026 10-K's restated comparative: commercial paper 1.889 + capex-related short-term financing 1.422, which the original FY2025 10-K had inside 'other financing activities'), so FY2025 net debt issuance = 1.889 + 1.422 + 19.548 - 15.841 = 7.018 (original presentation 5.596); the 9M FY2025 comparative of the combined row (-0.396) equals the commercial-paper-only 9M fact, so the 1.422 falls in Q4 FY2025. Implementation: virtual tags (VIRTUAL_TAGS) merge each component's alternative tags before the two components are added at the fact level. Amazon (audit AIS-R14-01): 'Proceeds from / Repayments of short-term debt, and other' are tagged with Amazon extension elements in the FY2020 and FY2021 10-Ks, so companyfacts has no us-gaap fiscal-year fact for FY2018-FY2020; they are read from the FY2020 10-K (0001018724-21-000004: 2020 6.796 / (6.177), 2019 1.402 / (1.518), 2018 0.886 / (0.813)) and the FY2021 10-K comparatives (0001018724-22-000005: the same 2020 and 2019 values), repayments stored with the XBRL sign (SUPPLEMENT_DISPLAY_SIGN). Hence Amazon Q4 2020 = (10.525 - 9.994) - (1.553 - 1.439) + ((6.796 - 6.177) - (4.361 - 3.886)) = 0.561 and net debt issuance FY2020 = 10.525 - 1.553 + 6.796 - 6.177 = 9.591; Q4 2019 short-term = -0.116 - 0.018 = -0.134; FY2018 = 0.182 - 0.155 + 0.073 = 0.100 (the original FY2018 10-K: 0.768 - 0.668 = 0.100, short-term flows inside the long-term rows), the FY2018 short-term flow being placed in Q4 2018 by the absent-YTD rule (no us-gaap 2018 quarter facts; the 2018 10-Qs carried these flows inside the long-term rows, so the line's Q4 2018 = FY - 9M of the line total, 0.270).Absent YTD facts of flow lines (filers leave nil rows untagged): at a fiscal period end the company reported (capex/OCF YTD facts exist), an absent YTD equals the last reported YTD of that fiscal year (0 if none yet): X_m = YTD_m - YTD_k, k = last reported horizon before m (YTD_0 = 0); e.g. Meta Q2 2026 debt proceeds = H1 24.910 - 0 (no Q1 fact); Meta Q4 2025 debt proceeds = FY 29.906 - 9M 0. Not applied when the filer reported a non-zero 3-month value for a quarter in between (incomplete chain). A quarter whose own YTD fact exists is never set to 0; the four quarters of a fiscal year add up to its 10-K FY fact (diagnostics.flow_fy_invariant_sum_of_quarters_equals_fy). Quarters derived this way are listed in diagnostics.prior_ytd_absent_taken_as_zero; quarters with no fact at their own horizon are 0 and listed in diagnostics.imputed_zero.Capex, OCF, revenue, depreciation and cost of revenue are NOT differenced across tags (their alternative tags differ in definition or vintage, e.g. ASC 605 vs 606 revenue): per period the first alternative that yields a value on its own tag is used.Durations classed by inclusive day count: 3m 80-100, 6m 170-200, 9m 260-290, 12m 350-380 days (covers 52/53-week fiscal years).Restatements: for each (start, end) keep the latest-filed fact (current vintage; the latest-vintage tag priority of each line applies). Point-in-time (first-release) capex and OCF (audit AIS-R5-01): per fiscal quarter, the derivation that became known FIRST across ALL alternative tags of the line, each tag's facts deduplicated to the first-filed value, plus the earliest-filed facts merged over the tags (so a YTD difference may span a tag switch between two filings, as a reader differencing the filed statements would compute it; listed in diagnostics.pit_cross_tag_quarters with the later-vintage value of the subtracted YTD under the new tag); known from = the latest filing date of the facts that derivation uses; ties: YTD difference > 10-Q 3-month fact, then the line's tag order; 10-K quarterly-note 3-month facts only when nothing else exists. E.g. Amazon Q4 2016 = FY 6.737 (10-K 0001018724-17-000011, PaymentsToAcquirePropertyPlantAndEquipment) - 9M 4.731 (0001018724-16-000324) = 2.006, known 2017-02-10, not the re-tagged 2018 comparative FY 7.804; Amazon Q2 2017 = H1 4.362 (PaymentsForProceedsFromProductiveAssets, 0001018724-17-000100) - Q1 1.861 (PaymentsToAcquirePropertyPlantAndEquipment, 0001018724-17-000051) = 2.501, known 2017-07-28.Calendar alignment: fiscal quarter ending on date e is assigned to calendar quarter end CQ(e) = last day of the calendar quarter containing e (e.g. Oracle 2025-08-31 -> 2025-09-30, Nvidia 2026-01-25 -> 2026-03-31, Microsoft 2025-06-30 -> 2025-06-30).TTM_t(X) = X_t + X_{t-1} + X_{t-2} + X_{t-3} over four consecutive calendar quarters (null if any is missing; for capex/OCF/revenue/depreciation a reported 12-month fact ending at that fiscal quarter end is used instead and listed in diagnostics.ttm_from_reported_12m_fact).capex_yoy_t = (capex_ttm_t / capex_ttm_{t-4} - 1) x 100 (%).capex_to_ocf = capex_ttm / ocf_ttm x 100 (%); above 100% capex exceeds operating cash flow.fcf_ttm = ocf_ttm - capex_ttm; fcf_after_payouts_ttm = fcf_ttm - buybacks_ttm - dividends_ttm ($ bn).net_debt_issuance = sum of debt proceeds - sum of debt repayments + net short-term/commercial-paper flows, using each company's own cash-flow tags (diagnostics.tags_used); debt only, finance-lease principal excluded for every company (audit AIS-R12-01; Amazon before 2014: see limitations). The other four spenders do not include finance-lease principal in their debt rows (Amazon and Meta show it as a separate statement row; Microsoft and Oracle disclose it in a note); Alphabet reports it inside 'Repayments of debt' (RepaymentsOfDebtAndCapitalLeaseObligations / RepaymentsOfDebt; lease note: 'Financing cash flows used for financing leases are included within financing activities as repayments of debt'), so for Alphabet net_debt_issuance = ProceedsFromDebtNetOfIssuanceCosts - repayments of debt + FinanceLeasePrincipalPayments (e.g. 2025: 64.564 - 32.427 + 1.988 = 34.125, 2024: 13.589 - 12.701 + 0.405 = 1.293, 10-Ks 0001652044-26-000018 / 0001652044-25-000014; TTM to 2026-06-30 add-back 2.526 = FY2025 1.988 - H1 2025 0.302 + H1 2026 0.840); quarters added back are listed in diagnostics.net_debt_finance_lease_add_back. External check: at each checked fiscal-year end, net_debt_issuance_ttm equals the sum, with displayed signs, of the 10-K statement's debt rows selected by label, for Alphabet plus the lease note's 'financing cash flows used for finance leases' of the same 10-K and year (diagnostics.external_check_10k_cash_flow_statement).total_debt = notes and other long-term borrowings (senior notes, term loans, convertible and other borrowings), noncurrent + current portion, EXCLUDING commercial paper and lease liabilities, for every company (audit AIS-R10). Each component is the first alternative whose every tag is reported at that date (DEBT_NONCURRENT_ALTS / DEBT_CURRENT_ALTS): noncurrent = LongTermDebtNoncurrent > LongTermNotesAndLoans > LongTermNotesPayable (Oracle FY2010-FY2016); Alphabet 2020-09-30 to 2024-09-30 (exc. 2023-12-31), which tagged its noncurrent debt only as LongTermDebtAndCapitalLeaseObligations (notes + noncurrent finance leases): that tag - (FinanceLeaseLiability - FinanceLeaseLiabilityCurrent), e.g. 2024-09-30 12.297 - (2.785 - 1.368) = 10.880. Current portion = LongTermDebtCurrent > DebtCurrent - CommercialPaper > ConvertibleDebtCurrent, with company rules: Alphabet never uses DebtCurrent (its 'Short-term debt' line = commercial paper + current notes + current capital leases) but LongTermDebtCurrent > the notes' current portion read from the 10-Q debt note (Q2 2020: 3.625% notes due May 2021, 0.999, 10-Q 0001652044-20-000032, where the only balance-sheet tag LongTermDebtAndCapitalLeaseObligationsCurrent 1.136 adds finance leases) > LongTermDebtAndCapitalLeaseObligationsCurrent - CapitalLeaseObligationsCurrent (2014-2016; e.g. 2015-12-31 1.225 - 0.225 = 1.000, so total_debt = 1.995 + 1.000 = 2.995, 10-K 0001652044-16-000012); Meta's NotesPayableCurrent (a promissory note in accrued liabilities, 2015) is not debt; Oracle's 'notes payable and other borrowings, current' (NotesPayableCurrent > DebtCurrent > NotesAndLoansPayableCurrent) minus its commercial paper CP_t (e.g. May 31 2026: 122.342 + 7.199 - 1.468 = 128.073; May 31 2025: 85.297 + 7.271 - 2.294 = 90.274). Oracle CP_t (cp_schedule, diagnostics.commercial_paper_schedule): the disclosed balance (borrowings-note 'Commercial Paper' instrument row of the 10-K, else us-gaap CommercialPaper, else the amount stated in the filing text, quotes verified verbatim, diagnostics.debt_component_sources); else 0 when the balance at the preceding fiscal-year end is 0 and no commercial-paper flow is reported in the fiscal year; else the preceding fiscal-year-end balance + the fiscal-year-to-date net commercial-paper cash flow, used only in fiscal years where that roll-forward reproduces the disclosed fiscal-year-end balance within 0.02 (FY2024 diff -0.005, FY2025 -0.004); else unknown. Where a reported component cannot be separated (a +1 tag reported, no alternative complete: Oracle 2025-08-31, 2025-11-30 and 2026-08-31, whose commercial paper is neither disclosed nor reproducible from flows) total_debt is null and listed in diagnostics.debt_component_not_separable, never assumed 0. A current portion with no tag at all is 0 (diagnostics.current_debt_not_reported_assumed_zero); diagnostics.debt_reclassification_signature lists any such quarter whose noncurrent balance fell by more than the quarter's net repayment + max(0.05, 1%) (a maturity reclassified to current but not tagged; none as of this run). Check: diagnostics.debt_reconciliation compares total_debt with the filer's own total where one is reported (us-gaap LongTermDebt; Alphabet LongTermDebtAndCapitalLeaseObligationsIncludingCurrentMaturities less FinanceLeaseLiability; Oracle borrowings-note total DebtLongtermAndShorttermCombinedAmount or DebtAndCapitalLeaseObligations less CP_t): residual = 0 for carrying-amount totals and between minus the unamortised discount (face-value totals, at most 1.5%) and 0 otherwise. Fallback where no noncurrent instant is reported: us-gaap LongTermDebt + the current portion tagged separately at that date (same order), else LongTermDebt alone; filers use LongTermDebt for different balance-sheet lines: Nvidia FY2015-FY2019 tagged its noncurrent 'Long-term debt' line as LongTermDebt and its 'Convertible debt, short-term' line as ConvertibleDebtCurrent (e.g. 10-K 0001045810-17-000027: Jan 29 2017 1.983 + 0.796 = 2.779; Jan 31 2016 0 + 1.413), so the separately tagged current portion is added (listed in diagnostics.debt_fallback_plus_current). Commercial paper and other short-term borrowings are published separately as short_term_borrowings = CommercialPaper, the face amount from the debt note where reported, else ShortTermBorrowings, the balance-sheet carrying amount (the two are within 1.5% where both exist, under 0.5% at all but one date: Microsoft 2015-03-31 1.7 vs 1.725; e.g. Microsoft 2017-09-30 8.2 vs 8.17); Alphabet 2015-2016 10-Qs: DebtCurrent - LongTermDebtAndCapitalLeaseObligationsCurrent; Oracle: CP_t above. Nil balance-sheet row: where no long-term debt instant exists at a reported fiscal period end, long-term debt = 0 only if the last long-term debt instant reported before it is 0 and every fiscal quarter in between reports zero net debt issuance (Meta 2012 Q1-Q3, 2014-2021 and 2022 Q1-Q2 after reporting 0 at 2011-12-31, 2013-12-31 and 2021-12-31; listed in diagnostics.debt_assumed_nil); otherwise null and listed in gaps. debt_growth_yoy = (total_debt_t / total_debt_{t-4} - 1) x 100. Deviation from spec wording 'LongTermDebt + LongTermDebtCurrent': in the us-gaap taxonomy LongTermDebt is defined to include the current portion, so the primary rule adds the current portion to the NONCURRENT tag; LongTermDebt is used only as the fallback above (as of this run only by Nvidia, fiscal period ends 2013-01-27 to 2020-07-26). Before audit AIS-R10 Alphabet 2014-2016 and 2018-03-31 included commercial paper and capital leases (DebtCurrent), Alphabet 2020-09-30 to 2024-09-30 noncurrent finance leases, Oracle its commercial paper and Meta 2015-12-31 a promissory note.lease_liabilities = OperatingLeaseLiability + FinanceLeaseLiability; null where one component is absent although the company reported it (non-zero) at either adjacent fiscal-year end (e.g. Alphabet 2021-2024 10-Qs without OperatingLeaseLiability; Alphabet 2019 10-Qs and Microsoft FY2016 Q4 without FinanceLeaseLiability, reported at the following FY end only; diagnostics.lease_component_absent); a component zero or unreported at both adjacent fiscal-year ends (Nvidia finance leases) counts as nil.capex_to_revenue = capex_ttm / revenue_ttm x 100 (%); capex_to_depreciation = capex_ttm / depreciation_ttm (times).capex_incl_fl_ttm = capex_ttm + finance-lease principal repayments_ttm (FinanceLeasePrincipalPayments); reported alongside capex for every company where the tag exists (material for Amazon); quarters without the tag count 0 (Alphabet: annual facts only for FY2022-FY2023, none before 2022; see limitations).Aggregate (Microsoft, Alphabet, Amazon, Meta, Oracle): sums of company TTM values at calendar quarter t, computed only when all five have the line; ratios are ratios of sums.Nvidia: revenue_yoy = (revenue_ttm_t / revenue_ttm_{t-4} - 1) x 100; DSO = AR_end / revenue_q x 91.25; inventory_days = inventory_end / cost_of_revenue_q x 91.25 (91.25 = 365/4).
Limitations
- Because each (start, end) fact is taken from its latest filing, a restatement that revises a fiscal year but not the earlier 9-month YTD lands entirely in Q4 (diagnostics.fy_invariant_* list the few pre-2019 cases).
- Oracle FY2025 net debt issuance follows the FY2026 10-K's re-presentation (7.018, of which 1.422 capex-related short-term financing first shown separately in that 10-K); the original FY2025 10-K shows 5.596 (both in diagnostics.external_check_10k_cash_flow_statement). Before FY2025 Oracle reported no such row, so earlier years are commercial paper only.
- Latest-vintage data: tables use the latest filed value of each fact, including restatements. The aggregate_pit table gives first-release capex and OCF with the date they became known (known_from = latest first-release filing date of the 20 company-quarters in the TTM; company_quarterly.filed = first-release date of the quarter's capex; supplier_quarterly.filed = latest first-release date of the row's Nvidia revenue, cost of revenue, receivables and inventory, not of capex); a first-release TTM sums each quarter's own first release, so earlier quarters in it may have been revised by known_from, and quarters spanning a filer's tag or definition change mix the old and new definitions (e.g. Amazon capex 2017: Q1 1.861 as first filed, 2.148 as restated in 2018). Where companyfacts has no us-gaap fact from the quarter's original filing, known_from is the first XBRL filing available in companyfacts, not the original release (diagnostics.pit_first_release_late: quarters first available more than 120 days after the fiscal period end; Alphabet 2014-12-31 to 2015-09-30, filed by Google Inc. under another CIK, which makes aggregate_pit known_from 2016-08-04 for 2015-09-30 to 2016-03-31; Meta pre-IPO 2011-2012; Oracle and Nvidia early XBRL 2010-2012; Nvidia capex of FY2022 Q4, FY2023 Q4 and FY2024 Q1-Q3, calendar 2022-03-31, 2023-03-31 to 2023-12-31, whose original filings had no us-gaap capex fact in companyfacts).
- The aggregate starts when all five spenders have four quarters of data (Alphabet's companyfacts under CIK 1652044 begin in 2013; Google Inc.'s earlier filings under a different CIK are not used).
- Aggregate total_debt starts at 2014-12-31 and is null at 2015-03-31 and 2015-06-30 (Alphabet's balance sheets for those quarters were filed by Google Inc. under another CIK); debt_growth_yoy therefore starts at 2015-12-31 and is null at 2016-03-31 and 2016-06-30, and is continuous from 2016-09-30 to 2025-06-30. Aggregate total_debt is also null at 2025-09-30 and 2025-12-31 (debt_growth_yoy there and, once reached, a year later): Oracle's commercial paper at 2025-08-31 and 2025-11-30 is not disclosed and the FY2026 roll-forward from cash flows does not reproduce the disclosed May 2026 balance (Oracle reported commercial paper together with other short-term financing in H1/9M FY2026), so its current debt cannot be separated from commercial paper (likewise Oracle 2026-08-31). Oracle commercial paper stated in the filing text is rounded ($1.9 bn at 2022-11-30 and 2023-02-28, $3.8 bn at 2026-02-28: up to 0.05 in total_debt); FY2024-FY2025 10-Q balances are roll-forward estimates (within 0.005 of the disclosed year-end balances). Meta had no long-term debt between its 2013 term-loan repayment and its August 2022 bond issue and left the row untagged; those quarters are nil rows (diagnostics.debt_assumed_nil).
- Capex is total capital spending, not AI-specific spending; companies do not report AI capex separately.
- Alphabet's finance-lease principal (inside its 'Repayments of debt' row) can be added back to net debt issuance only where tagged: quarterly from 2024, annually for FY2022 (0.586) and FY2023 (0.705), which the absent-YTD rule places in Q4, and not at all for 2016-2021 (the lease note's supplemental cash-flow table did not disclose it; Alphabet's finance-lease liability was about 1.2 bn at the end of 2020). Alphabet's and the aggregate's net_debt_issuance therefore still include Alphabet's finance-lease principal in 2016-2021 and in Q1-Q3 of 2022-2023 (by up to about 0.7 in a non-year-end TTM of 2022-2023), so the aggregate is on one debt-only definition from 2024 and at year ends from 2022 (diagnostics.net_debt_finance_lease_add_back).
- Alphabet tagged finance-lease principal only annually before 2024 (FY2022 0.586 and FY2023 0.705 are placed in Q4 by the absent-YTD rule; 2014-2021 untagged and counted 0, diagnostics.imputed_zero.Alphabet.finance_lease_principal), so Alphabet's finance_lease_principal_ttm and capex_incl_fl_ttm (and the aggregate's) are consistent only at year ends before 2024: understated in Q1-Q3 TTMs of 2022-2023 (by up to about 0.7) and throughout 2019-2021 by the untagged amounts. Oracle's finance_lease_principal for Q4 FY2026 and Q1 FY2027 (calendar 2026-06-30 and 2026-09-30) is counted 0 (diagnostics.imputed_zero.Oracle.finance_lease_principal): its us-gaap FinanceLeasePrincipalPayments facts stop at 9M FY2026 (0.286; quarters 0.086, 0.113, 0.087); the FY2026 10-K reports finance-lease payments under an Oracle extension element (orcl:FinanceLeasePrincipalAndInterestPayments, by its name principal and interest combined, so not a principal amount) that companyfacts does not carry, and the Q1 FY2027 10-Q has no us-gaap fact either. Oracle's and the aggregate's finance_lease_principal and capex_incl_fl_ttm at 2026-06-30 (and Oracle's at 2026-09-30) are therefore understated by the untagged quarters (about 0.1 per quarter at the Q1-Q3 FY2026 rate); capex, capex_ttm and the headline are unaffected (audit AIS-R14-04).
- total_debt excludes commercial paper and other short-term borrowings (shown separately where reported) and excludes lease liabilities (shown separately), for every company (audit AIS-R10); off-balance-sheet commitments such as leases not yet commenced and purchase obligations are not captured.
- Microsoft depreciation is available only at fiscal-year ends (us-gaap Depreciation in the 10-K); Alphabet depreciation only from 2021; capex_to_depreciation is null elsewhere.
- Nvidia capex (not a spec measure for the supplier; shown in company_quarterly only) is unavailable for fiscal Q4 of FY2013-FY2021 (calendar 2013-03-31 to 2021-03-31) and for FY2023 Q1-Q3 (calendar 2022-06-30 to 2022-12-31): those 10-Ks/10-Qs carried the capex row under a filer extension tag that is absent from companyfacts, so Q4 = FY - 9M cannot be formed (diagnostics.gaps.Nvidia.capex_q). Nvidia capex_ttm, capex_to_ocf, capex_to_revenue and capex_to_depreciation are therefore null for most of 2013-2022 (39 of 40 quarters).
- Company-specific extension tags are not in the companyfacts API, so an absent us-gaap YTD fact can hide a non-zero value. The cases found are read from the filings' own statements (diagnostics.statement_supplement): Oracle FY2026 H1/9M commercial paper and other short-term financing; Oracle's capex-related short-term financing row in the FY2026 10-K and Q1 FY2027 10-Q with their restated FY2025 / Q1 FY2026 comparatives; Amazon's 'short-term debt, and other' rows of FY2018-FY2020 (FY2020 and FY2021 10-Ks; before the fix Amazon's Q4 2019 and Q4 2020 short-term flows, -0.134 and +0.144, were counted 0, audit AIS-R14-01). An undetected case is not harmless: where the extension element carries an intermediate YTD, the flow is misplaced between quarters of a fiscal year (quarters derived over absent YTDs are listed in diagnostics.prior_ytd_absent_taken_as_zero); where it carries the fiscal-year fact, the Q4 component is counted 0 (diagnostics.imputed_zero, '_partial_group') and the fiscal-year TTM differs from the 10-K. Checks that would show such a case: the external check against 10-K statements (diagnostics.external_check_10k_cash_flow_statement, 11 company-years incl. Amazon 2019, 2020 and 2024) and, for Amazon, its own 12-month 10-Q facts (diagnostics.net_debt_ttm_vs_filer_12m_facts).
- Amazon re-presented its debt cash-flow rows twice. (1) Before its FY2014 10-K the repayment row was 'repayments of long-term debt, capital lease, and finance lease obligations' (RepaymentsOfLongTermDebtAndCapitalSecurities), so Amazon's net_debt_issuance for 2010-2013 includes capital- and finance-lease principal (FY2013: 1.011 in that row against 0.231 of debt and 0.775 of capital-lease principal in the FY2014 10-K's restated comparative); the TTMs to 2014-03-31, 2014-06-30 and 2014-09-30 mix that definition with debt-only 2014 quarters and differ from Amazon's own 12-month facts (0.154, 0.293, 0.257 against -0.465, -0.147, 0.027), as do 2011 Q1-Q3 by up to 0.03 (diagnostics.net_debt_ttm_vs_filer_12m_facts.companies.Amazon.mismatches); from 2014-12-31 every TTM matches those facts. Amazon's and the aggregate's net debt issuance before 2014 are therefore not debt-only. (2) From its Q2 2020 10-Q 'short-term debt, and other' is a separate row (previously inside 'long-term debt and other', restated for 2018-2019): Amazon's short-term component is absent (counted 0, diagnostics.imputed_zero.Amazon.net_debt_issuance_partial_group) for 2010 to 2018 Q3 because those flows are inside the long-term rows, and fiscal 2019 is quarterised with the representation chain (equations; diagnostics.flow_representation_chain).
- Some older XBRL debt-flow facts are internally inconsistent (e.g. Nvidia FY2018-FY2019 3-month facts of $1.98 bn in each 10-Q against 9-month and FY comparatives of 0; Microsoft FY2011 debt proceeds missing from the H1 10-Qs; Amazon 2012-2013 repayments, whose quarters are in the pre-2014 lease-inclusive definition and whose FY facts in the debt-only one); they are listed in diagnostics.flow_fy_invariant_sum_of_quarters_equals_fy and make Nvidia's 2017-2019 quarterly debt flows unreliable.
- Tag splicing across taxonomy changes can introduce small definitional breaks (e.g. Amazon's capex tag change in 2016-2017, revenue under ASC 606 from 2018); diagnostics.tags_used gives date ranges.
- Rising Nvidia DSO alongside rising sales is a condition to watch, not evidence of customer financing strain by itself. Nothing here is a forecast or investment advice; companies are not ranked.
References
- U.S. Securities and Exchange Commission. EDGAR Application Programming Interfaces: XBRL companyfacts endpoint, https://data.sec.gov/api/xbrl/companyfacts/CIK##########.json (10-K and 10-Q facts, accessed per diagnostics.sec_fetch.fetched_at).
- U.S. Securities and Exchange Commission. EDGAR filing archives, rendered financial statements (R pages listed in FilingSummary.xml), used for the external check.
- Financial Accounting Standards Board. Accounting Standards Codification Topic 230, Statement of Cash Flows (definitions of operating, investing and financing cash flows).
- Gilchrist, S. and Zakrajsek, E. (2012). Credit Spreads and Business Cycle Fluctuations. American Economic Review 102(4), 1692-1720. doi:10.1257/aer.102.4.1692 (context: credit conditions and debt-financed investment).
- Doms, M. (2004). The Boom and Bust in Information Technology Investment. Federal Reserve Bank of San Francisco Economic Review 2004, 19-34 (1999-2001 IT and telecommunications over-investment).
- Gilchrist, S., Himmelberg, C. P. and Huberman, G. (2005). Do Stock Price Bubbles Influence Corporate Investment? Journal of Monetary Economics 52(4), 805-827. doi:10.1016/j.jmoneco.2005.03.003.
How much of the AI boom is real cash?
This page uses companies' own SEC filings to show how much of the reported profit of AI-related companies arrives as cash, and how much of their spending on chips and data centres is paid for with borrowed or newly raised money.
Why it matters
The AI build-out involves very large spending on chips, data centres and power. Whether that spending is paid for from cash earned from customers, or with borrowing, new shares and gains on investments, changes how exposed companies and their lenders are if conditions shift. Laying out the mix from filed numbers helps readers see how the build-out is being financed, without guessing at anyone's intentions.
How it works
The model covers about two dozen companies across cloud, chips, chip equipment, neoclouds, data centres, power and networking. For each one it reads the cash-flow and income statements in SEC filings and adds up four quarters at a time so seasonal swings wash out. It then compares operating cash flow, after subtracting stock-based pay, with reported net income, compares net borrowing and share sales with capital spending, and compares growth in unpaid customer bills with growth in sales. Group figures add up dollar amounts across companies, so larger companies count for more. It is a bit like comparing a household's pay slips with what actually reached the bank account, and asking how much of a new house was paid from savings versus a loan.
The latest readings
Compares the cash the companies' operations generated, after subtracting the value of shares handed out as employee pay, with the net income they reported, adding dollars across the group. A figure near or above 100% means reported profit was matched by cash; a lower figure means less of the profit showed up as cash over the same four quarters.
Simple exampleImagine a lemonade stand that says it earned $100 on paper, but only $90 of it is in the cash jar after you subtract the lemonade you gave your helper as payment. This number checks how much of the profit is really in the jar.
Model noteAcross 24 companies, operating cash flow minus stock-based compensation equalled 98% of reported net income over the four quarters to 2026-06-30.
Typical rangeBetween 124.2 and 155.4 in half of all readings since Mar 31, 2010 (middle 50%; the outer 10th to 90th percentile band is 119.0 to 166.4). The latest reading sits at the 0th percentile.
Adds each company's net new borrowing plus net share issuance (counted only where it is positive) and divides by the group's total capital spending. Higher means more of the building was matched by outside money rather than the companies' own cash, and the figure can exceed 100%.
Simple exampleSay you buy a $100 bike. You pay $40 from savings and $60 comes from a loan and from friends chipping in. This number asks what share of the building bill was paid by loans and new shares rather than money already earned.
Model noteNet borrowing plus net share issuance (counted only where positive) equalled 52% of the 26 companies' capital spending over the same period.
Typical rangeBetween 15.00 and 43.54 in half of all readings since Mar 31, 2010 (middle 50%; the outer 10th to 90th percentile band is 10.22 to 83.51). The latest reading sits at the 79th percentile.
Gains and losses on equity investments that companies record in income, as a share of their pre-tax income, for the companies that report them. These come from changes in the recorded value of stakes, not from selling products, so higher means more pre-tax income from that source and negative means net losses.
Simple exampleIf a card you own gets more valuable, you feel richer even though you have not sold it. Companies record gains like that on shares they own in other firms. This number shows how much of their income comes from that kind of price change.
Model noteGains and losses on equity investments recognised in income were 19.0% of pre-tax income for the 12 companies that tag them.
Typical rangeBetween 1.25 and 5.05 in half of all readings since Jun 30, 2010 (middle 50%; the outer 10th to 90th percentile band is 0.527 to 7.91). The latest reading sits at the 100th percentile.
Growth in customers' unpaid bills (receivables) minus growth in revenue over the past year, weighted by company size. A gap above zero means unpaid bills grew faster than sales, which can reflect longer payment terms or timing; near zero means the two moved together.
Simple exampleSuppose a shop's sales grow, but the amount of money friends still owe it for things sold on credit grows even faster. This gap compares those two growth rates. A big gap means more of the sales are still waiting to be paid.
Model noteRevenue-weighted, receivables grew 31.7 percentage points faster than trailing-year revenue across 25 companies.
Typical rangeBetween -0.029 and 6.53 in half of all readings since Jun 30, 2010 (middle 50%; the outer 10th to 90th percentile band is -2.90 to 9.93). The latest reading sits at the 100th percentile.
Total spending on property, equipment and data centres by the group over the latest four quarters, along with how it compares with a year earlier for companies reporting in both periods. Higher means a bigger build-out.
Simple exampleThink of everything a town spends in a year on new buildings and machines. This is the same kind of total for these companies, covering what they spent on chips, servers and data centres over the last year.
Model noteThe 26 companies reported $656 bn of capital spending over the four quarters to 2026-06-30, 74% more than a year earlier for the 26 companies reporting in both periods.
Debt the group raised minus debt it repaid, taken from the cash-flow statements, over the latest four quarters. Positive means total borrowing grew; negative means more was repaid than borrowed.
Simple exampleIt is the money you borrowed in a year minus the money you paid back. If you borrowed $50 and repaid $20, you now owe $30 more. This adds up the same thing for all these companies.
Model noteDebt proceeds minus repayments in the companies' cash-flow statements were $265 bn over the four quarters to 2026-06-30.
How much US commercial-bank lending to nondepository financial institutions (lenders and investment firms that are not banks) has grown versus a year earlier, after removing breaks that the Federal Reserve documents when banks reclassified loans. Higher means faster growth of this lending, which funds many kinds of nonbank lenders, not only data centres.
Simple exampleBanks lend money to other money-lending businesses, a bit like a big shop lending to smaller shops. This shows how much faster or slower that lending is than a year ago. It does not show what the money was used for.
Model noteCommercial-bank loans to nondepository financial institutions were $2064 bn, 19% above a year earlier after removing breaks documented in the H.8 notes (20% as reported; September 2026 average, released 2026-10-09).
Typical rangeBetween 10.06 and 18.29 in half of all readings since Jan 2016 (middle 50%; the outer 10th to 90th percentile band is 7.66 to 21.02). The latest reading sits at the 78th percentile.
How much private spending on building data centres in the US, from the Census Bureau, has changed versus a year earlier, measured as a seasonally adjusted annual rate. Higher means faster growth in construction, and the latest months are preliminary and get revised.
Simple exampleData centres are giant buildings full of computers. This compares how much was spent building them this year with the same time last year, like asking whether your town built more playgrounds than before.
Model notePrivate data-centre construction ran at a $85 bn annual rate, 73% above a year earlier (Census, August 2026, released 2026-10-01; preliminary).
Typical rangeBetween 17.91 and 56.09 in half of all readings since Jan 2015 (middle 50%; the outer 10th to 90th percentile band is 4.21 to 73.52). The latest reading sits at the 89th percentile.
By group, four quarters to Tue, Jun 30
| Group | Companies | Profit arriving as cash | Capex funded from outside | Profit from paper gains | Receivables vs revenue growth | Capex |
|---|---|---|---|---|---|---|
| Chip equipment | 3 | 81% | 0% | 19% | +14.4 pp | $4.0 bn |
| Chips | 7 | 91% | 45% | 14% | +61.1 pp | $48.9 bn |
| Cloud and AI spenders | 5 | 101% | 49% | 21% | +17.4 pp | $566.4 bn |
| Data centres | 1 | 223% | 40% | — | +0.8 pp | $5.4 bn |
| Foreign filers | 1 | 90% | 13% | 9% | -40.0 pp | $0.6 bn |
| Neoclouds | 1 | — | 98% | — | -83.9 pp | $20.6 bn |
| Networking and servers | 5 | 85% | 162% | 6% | +81.8 pp | $6.9 bn |
| Power and cooling | 3 | 191% | 295% | — | +26.4 pp | $3.1 bn |
| Whole ecosystem | 26 | 98% | 52% | 19% | +31.7 pp | $655.9 bn |
Paper gains are counted only for companies that tag them in their filings. Groups with no reporting company show a dash.
Two lines, both in percent, for the group's combined filings quarter by quarter. One shows operating cash flow after stock-based pay as a share of reported net income. The other shows net new debt and share money as a share of capital spending. When the first line is high and the second low, profit and spending are mostly covered by cash earned; the reverse means outside money plays a larger part. Group membership changes as companies list, so earlier years cover fewer companies.
Simple exampleOne line is like the share of your allowance that is still in your piggy bank. The other is the share of a big purchase paid for by loans and new shares. Watching both over time shows whether building is paid mostly from savings or from outside help.
Two lines, both showing growth versus a year earlier in percent. One is US bank lending to nonbank financial firms, adjusted for documented reclassifications; the other is US spending on building data centres. Read them for direction and timing: lines rising together show both growing at a similar pace. They do not show that the loans paid for data centres, because that lending reaches many kinds of nonbank lenders.
Simple exampleThink of two plants growing in a garden. One is how fast bank lending to other lenders grows, the other is how fast data-centre building grows. If they rise together, they grow in a similar way, but that alone does not show one feeds the other.
Add up each company's operating cash flow minus its stock-based pay, divide by the group's total reported net income, and express it as a percent. Each sum covers the latest four quarters.
Simple exampleYou earn $100 helping neighbors, but you also paid your little brother $10 in stickers to help. Only $90 of the money is really yours. We divide that by the profit you wrote down to see how much of the profit is real money in hand.
- \text{OCF}_ioperating cash flow of company i: cash its business operations brought in over four quarters
- \text{SBC}_istock-based compensation of company i: pay given in shares rather than cash
- \text{NI}_inet income of company i as reported
- \sum_isum over the companies that have all the needed numbers
Each company's outside money is net borrowing plus shares sold minus shares bought back. Only positive amounts are counted, summed, and divided by the group's total capital spending.
Simple exampleYou buy a $100 toy. You borrowed $30 and your cousins gave you $20 in exchange for a small share of the toy. That is $50 of outside money for a $100 toy, so half. We do this sum for all the companies together.
- D_inet debt issuance: debt raised minus debt repaid
- E_icash raised by issuing shares
- B_icash spent on buying back shares
- \text{Capex}_icapital expenditure: spending on property, equipment and data centres
- \max(x,\,0)x if it is positive, otherwise zero
Growth in unpaid customer bills over four quarters, in percent, minus revenue growth over the same time. The group figure weights each company by its share of revenue.
Simple exampleYour friend sold more lemonade this year than last, up 10%. But the money friends still owe from earlier sales grew 30%. The gap is 20 points, which says unpaid bills grew faster than sales.
- R_treceivables (money customers owe) at quarter t
- R_{t-4}receivables four quarters earlier
- \text{Revenue growth}_tpercent change in trailing four-quarter revenue over the year
Add up the gains (or losses) companies booked on their equity investments, divide by the same companies' total pre-tax income, and express it as a percent.
Simple exampleSay you earned $100 this year, and $5 of it is only because a collectible card you own went up in price. You have not sold the card. This sum shows what share of the earnings comes from that kind of price rise.
- G_igains or losses on equity investments recorded in income by company i over four quarters
- P_ipre-tax income of company i over the same four quarters
- Operating cash flow
- Cash a company's day-to-day business brought in during a period, as shown in its cash-flow statement. It differs from net income because of timing and non-cash items.
- Stock-based compensation
- Pay given to employees in shares or share rights rather than cash. It is an expense, but it does not use cash when granted, so it is subtracted here for a more cautious comparison.
- Capital expenditure (capex)
- Money spent on long-lasting assets such as chips, servers, buildings and equipment.
- Receivables
- Amounts customers owe a company for goods or services already delivered but not yet paid for.
- Net income
- Reported profit after all expenses and taxes, following accounting rules rather than cash received.
- Trailing four quarters
- The most recent four quarters added together, so each figure covers a full year and seasonal swings cancel out.
- Paper gains
- Increases in the recorded value of investments in other companies, booked in income without any cash from selling them. They can also be losses.
- Nondepository financial institution
- A lender or investment firm that is not a bank taking deposits, such as a private credit fund, an insurer or a finance company. Banks lend to many of them.
Full technical specification (for specialists)
Model
AI ecosystem cash quality: reported profit, cash, financing and paper gains (SEC filings)
Specification
Discrete quarters from year-to-date facts sharing a fiscal-year start s: X_Q1 = YTD3, X_Q2 = YTD6 - YTD3, X_Q3 = YTD9 - YTD6, X_Q4 = FY - YTD9 (ai_spenders.discrete_quarters, imported read-only). Cash-flow lines rank the YTD difference above a 10-Q 3-month fact; income-statement lines (revenue, net income, pre-tax income, paper gains) rank the 10-Q 3-month fact first. 10-Q 3-month facts are rounded to the filing's unit (usually $ millions), so a TTM of four 3-month facts can differ from the YTD difference of the same filings by a few $ millions per quarter (e.g. Amazon, Meta paper gains: 0.003-0.04 $bn).Single-row lines (OCF, capex, SBC, revenue, net income, pre-tax income): per period the first listed alternative tag with a value (OCF: NetCashProvidedByUsedInOperatingActivities; capex: the company's statement capex element(s), most recent first; SBC: ShareBasedCompensation then AllocatedShareBasedCompensationExpense; net income: NetIncomeLoss then ProfitLoss), from the latest filing that presents the period: a 10-Q's fact counts only if it ends on the 10-Q's own period end or the prior-year comparative end (355-375 days earlier), or is a quarter inside its current or prior-year year-to-date period (equity-statement roll-forward); a 10-K's only if it ends inside its three fiscal years (audit ACQ-D2-02; dropped facts in diagnostics.single_row_facts_outside_filing_period, with the reason: misdated_duplicate, restated_in_later_10q, outside_10k_years -- a restated earlier quarter that a later 10-Q presents, e.g. Qualcomm's ASC 606 figures in its Q1-FY2019 10-Q, is not adopted; audit ACQ-D3-04). Never differenced across tags.Vintage review of the single-row lines (audits ACQ-D3-03, ACQ-D4-03/04/05): at each fiscal-year end e, S_e = X(e_{k-3}) + ... + X(e_k) is compared with the latest-filed 12-month fact F_e of the line (the latest 10-K reporting the year under the quarters' tag or a higher-ranked alternative; zero values ignored); if |S_e - F_e| > max(2.5 $m, 0.05% x |F_e|), TTM(e) = F_e and the six windows ending at e_{k-3..k-1} and e_{k+1..k+3} are marked vintage_mixed -- also when S_e equals the company's own 10-K O_e (reason own_10k_superseded: a later 10-K re-presents the year, e.g. Microsoft FY2016 revenue 85.320 -> 91.154 after ASC 606); at a Q1-Q3 end e, S_e is compared with F_{prev FY} + YTD(e) - YTD(e - 1 year), the year-to-date pair taken from one alternative tag (F's, the quarters', then the others) or else from the alternatives merged at the fact level, and a difference marks the window; windows without a pair or fiscal-year fact are listed (diagnostics.vintage_review windows_unchecked) and not marked (company_quarterly.vintage_mixed lists the lines; diagnostics.vintage_review).Growth of one vintage (audit ACQ-D4-03): at a fiscal-year end with the previous fiscal year on the grid, revenue_yoy_t = (FY_t / FY_{t-1} - 1) x 100 with both fiscal-year facts from the latest 10-K that reports both years under one alternative tag (so a later re-presentation of one year and not the other never enters); at other quarter ends it is the ratio of the two TTMs, null when either window is marked vintage_mixed for that line. Likewise ocf_yoy and capex_yoy.Zero-valued alternatives (audit ACQ-D4-01): a zero duration fact of a single-tag alternative of OCF, revenue, net income, pre-tax income or SBC is dropped when the same filing reports a non-zero value for the same period under another alternative (Eaton's FY2013-FY2016 10-Ks tag Revenues = 0 next to SalesRevenueNet 16.049-22.552 $bn); a zero no alternative of its filing contradicts is kept.Pre-combination shells (audit ACQ-D4-02): the 10-K/10-Q filings of a CIK whose own-period revenue is zero while a later filing reports revenue for the same periods (a special-purpose acquisition company whose CIK the operating company took over: Vertiv, CIK 1674101; Eaton plc's first 10-Q) are a different entity and are dropped with their statement pages; windows needing their quarters are null.Paper gains, one definition per TTM window: alternatives in order (1) EquitySecuritiesFvNiGainLoss (total, ASC 321), (2) EquitySecuritiesFvNiUnrealizedGainLoss + EquitySecuritiesFvNiRealizedGainLoss, (3) the broader GainLossOnInvestments / DebtAndEquitySecuritiesGainLoss -- the one shown on the company's own cash-flow statement first --, (4) EquitySecuritiesFvNiUnrealizedGainLoss (unrealised only, last resort); each alternative is quarterised on its own; paper_gains_ttm(e) = the 4-quarter sum of the first alternative that covers all four fiscal quarters of the window ending at e, else the first alternative's reported 12-month fact ending at e. Tags are never mixed inside a window (diagnostics.paper_gains_definition lists broad-tag and unrealised-only windows; statement rows are checked in external_check, line 'paper_gains', model = - displayed adjustment).Multi-row lines (debt_net, equity_issued, buybacks, withholding, stakes_bought), statement first (audit ACQ-D1-01/02): for each fiscal year s and horizon h in {3, 6, 9, 12} months, YTD_h = L_h, the whole line in the (h, end_h) column of the latest-filed cash-flow statement (10-Q year-to-date columns including the next year's comparatives; 10-K fiscal-year columns) that shows a row of the line: L_h = sum over its us-gaap rows classified into the line or confirmed for it on any statement (gross payment elements as coef x |displayed|, except a column the same filing tags negative and displays positive, an inflow, valued -coef x |displayed|; proceeds and net elements with the displayed sign; debt_net: +1 ProceedsFrom*, -1 Repayments*; ProceedsFromDerivativeInstrumentFinancingActivities and ProceedsFromRepurchaseOfEquity count as equity issued only on rows whose label names shares, stock or warrants issued) + its filer-extension rows whose label fits the line (labels read after removing a 'net of ...' qualifier; a label shown on two rows is replaced by the extension element's name). Self-closing cells of the rendered page are expanded before parsing; financing rows the filer shows only in dimensional '[Member]' blocks (below the statement, or as side-by-side note-member columns dated like the company's own column; an operating-partnership column with its own totals is never read) or below the cash reconciliation are added to the statement when, and only when, they close the gap between its financing rows and its financing total within rounding, as displayed or with the statement's display-sign slips reversed (a row whose displayed sign contradicts its direction: ProceedsFrom* shown negative, Payments*/Repayments* or a label starting 'Purchase', 'Repayment', 'Redemption', 'Accelerated share repurchase'... shown positive; member_supplement, audit ACQ-D3-01; exact repeats of a row count once). In a financing column that adds up only with its slips reversed, a slipped row of a line counts with its direction's sign (Intel's 9M-2020 ASR payment shown +2,000 on its Q3-2021 10-Q). For a financing line, the latest statement of a column is replaced by the latest earlier statement of the same column that shows the same financing total and adds up, when the latest does not add up (diagnostics.statement_page_not_adding_up_skipped). Where no cached statement shows the column, YTD_h = F_h = sum_e coef_e x value_e over the confirmed elements as reported in the latest filing that reports any of them for that period, a filing whose statement is cached contributing only the elements and periods its statement shows. Quarters: X_Q1 = YTD_3, X_Qh = YTD_h - YTD_{h-3}, X_Q4 = YTD_12 - YTD_9; an absent YTD (no row, no fact) is a nil row (= last reported YTD of that fiscal year; 0 if none); a quarter with no value at its own horizon is 0 (diagnostics.imputed_zero). diagnostics.multi_row_facts_vs_statement lists every horizon where L_h and the facts differ by more than 1.5 $m.Fiscal years whose annual statement shows a filer-extension row of a multi-row line with a non-zero amount, and the years after the latest such statement while the row may continue: a horizon with no statement column has no value, so its quarter and the next are null (never 0); a statement column without a row of the line is a nil row (diagnostics.statement_supplement).Calendar alignment: a fiscal quarter ending on e belongs to the calendar quarter containing e - 7 days (52/53-week quarters ending on the 1st-7th of Jan/Apr/Jul/Oct -- AMD, Intel -- sit in the preceding calendar quarter). TTM(e_k) = X(e_k) + X(e_{k-1}) + X(e_{k-2}) + X(e_{k-3}) over four consecutive fiscal quarters of the company's own grid (each step 75-105 days), then placed on the calendar quarter of e_k. Only when the four-quarter chain is absent is a reported 12-month fact ending at e_k used (diagnostics.ttm_from_reported_12m_fact); otherwise null.revenue_yoy_t = (revenue_ttm_t / revenue_ttm_{t-4} - 1) x 100; ocf_yoy likewise (prior value > 0); at fiscal-year ends the pair is taken from one 10-K and windows marked vintage_mixed give null (growth of one vintage, below).cash_conversion = ocf_ttm / net_income_ttm (times; only for net_income_ttm > 0).accrual_ratio = (net_income_ttm - ocf_ttm) / ((assets_t + assets_{t-4}) / 2) x 100: total accruals measured from the cash-flow statement, NI - CFO (Hribar and Collins 2002), scaled by average total assets as in Sloan (1996), whose own accruals are balance-sheet based (Richardson et al. 2005 extend the balance-sheet measure to changes in net operating assets).receivables_gap = (receivables_t / receivables_{t-4} - 1) x 100 - revenue_yoy_t (pp); DSO = receivables_t / revenue_q_t x 91.25 (Dechow et al. 2011 use changes in receivables relative to assets; the gap and DSO are the spec's sales-relative versions).sbc_share = sbc_ttm / ocf_ttm x 100 (ocf_ttm > 0); ocf_ex_sbc = ocf_ttm - sbc_ttm.capex_to_ocf = capex_ttm / ocf_ttm x 100 (ocf_ttm > 0); fcf = ocf_ttm - capex_ttm; fcf_ex_sbc = fcf - sbc_ttm.external_financing = debt_net_ttm + (equity_issued_ttm - buybacks_ttm); external_to_capex = external_financing / capex_ttm x 100 (capex_ttm > 0). Spec definition; Bradshaw et al. (2006) additionally subtract cash dividends from equity financing, which the spec does not.paper_gains_share = paper_gains_ttm / pretax_ttm x 100 (pretax_ttm > 0).rpo_to_revenue = RPO_t / revenue_ttm_t (times = years of trailing revenue).Aggregates (group and ecosystem; quarterly filers with OCF and capex TTM in the quarter): cash_backed_share = sum_i(ocf_i - sbc_i) / sum_i ni_i x 100; externally_funded_capex_share = sum_i max(ext_fin_i, 0) / sum_i capex_i x 100; paper_gains_share = sum_i pg_i / sum_i pretax_i x 100; receivables_gap = sum_i (rev_i / sum_j rev_j) gap_i; each over the companies with all its inputs (members per measure in diagnostics; ratios null when the denominator sum is <= 0).Headline capex yoy = sum capex_ttm_t / sum capex_ttm_{t-4} - 1 over companies reporting in both quarters (constant membership).Bank loans to NDFIs: yoy_t = (L_t / L_{t-12} - 1) x 100; yoy_ex_breaks_t = ((L_t - L_{t-12}) - (B_t - B_{t-12})) / L_{t-12} x 100, B_t = sum_k a_k x s_k(t), a_k = amount added to the line by the break documented in the H.8 notes for the week ending d_k, s_k(t) = share of month t's days on or after d_k - 6 (monthly levels are pro-rata averages of Wednesday levels).Data-centre construction: Census C30 'Data center', $ millions SAAR / 1000 = $ bn SAAR; yoy = (V_t / V_{t-12} - 1) x 100.Release lags (point in time for a historical as-of): H.8 month m is used once released, on the Friday nine days after the first Wednesday on or after the last day of m; Census C30 month m on the first business day of month m+2; an H.8 break note dated week ending d once d + 9 days has passed.
Limitations
- Latest-vintage data: each period uses its latest filed value (restatements included); 'filed' gives the date the quarter's operating cash flow was first reported (first-filed vintage of the facts it is derived from).
- Intra-ecosystem flows (who pays whom: vendor financing, circular purchases, stakes in customers) cannot be measured from structured filings and are not estimated; stakes_bought and paper gains capture only what each company reports in aggregate.
- Companyfacts omits filer-extension elements and dimensional facts: lines a company tags only that way are null or partial (diagnostics.not_tagged_lines, untagged_statement_rows; e.g. Amazon's and Dell's stakes bought, which they show only in extension rows, Amazon's mixed with business acquisitions, and Alphabet's tax withholding row); leases not yet commenced are unavailable for every company in this source.
- Paper gains are tagged inconsistently: some companies tag only unrealised gains or a broader investment-gain line that also contains gains on debt securities (diagnostics.paper_gains_definition), several not at all; the ecosystem share covers only companies that tag them.
- Cash-flow statements of filings before mid-2011 have no rendered (HTML) cash-flow page in the SEC filing index, only XML report files (diagnostics.statement_supplement_interim_pages, statements_used): their periods use the us-gaap facts, which omit filer-extension rows and rows tagged with elements no cached statement shows (diagnostics.unused_line_elements lists such elements and the horizons they could affect; none after 2010). When a later statement folds a small row into 'other', the latest statement still showing the row is used; when a 10-K shows no row that its 10-Qs show, the fourth quarter is a nil row (external_check notes 'no_row'). Mixing vintages across horizons (10-Q comparatives filed a year later, 10-K columns up to two years later) can move amounts between quarters of a year; for the multi-row lines fiscal-year totals are those of the latest statement. Single-row lines sum the latest-filed fact of each quarter: across a re-presentation (spin-offs, discontinued operations, ASC 606, restatements) the four quarters of a window can come from filings on both sides and match no filing (Hewlett Packard Enterprise FY2016 revenue: quarters 34.472 $bn against 50.123 in its own 10-K and 30.280 in the latest). Fiscal-year windows whose quarters differ from the latest 10-K's 12-month fact (matching neither 10-K, or only the company's own 10-K, which a later 10-K re-presents: Microsoft FY2016 revenue, Equinix FY2012 pre-tax) take the latest 12-month fact (HPE FY2016 revenue 30.280, pre-tax 3.860; Oracle FY2018 pre-tax; Equinix FY2011-2012 revenue; Dell FY2016 pre-tax; AMD FY2016/2017/2020 pre-tax; Eaton FY2014 net income) and the windows sharing their quarters, or whose quarters do not reconcile with the year-to-date facts, are marked in vintage_mixed (diagnostics.vintage_review); their values and the ratios built on them mix vintages, and their growth rates are null. Windows the review cannot check (no fiscal-year fact or year-to-date pair) are listed in diagnostics.vintage_review but not marked, so the marks cover only the windows that could be checked. Fiscal-year growth rates come from one 10-K, so they can differ from the ratio of the published (each latest-vintage) TTMs. Shell filings of a CIK that later became an operating company (Vertiv before February 2020) are excluded, which leaves that company without TTMs for the windows that would need them.
- company_quarterly carries the spec columns and the inputs of every measure; measures one arithmetic step from them (fcf_ex_sbc, sbc_share, capex_to_ocf, paper_gains_share, rpo_to_revenue, ocf_ex_sbc, receivables_yoy) are published in `latest` only, to keep the table under ~1 MB.
- A few rendered cash-flow statements do not add up as filed (diagnostics.financing_section_identity): AMD's display-sign slip of an 'Other' row (4 $m, no line affected) and unsigned FY2023 total (2022-2023 statements, used as filed), AMD's 2012 10-Qs' 2011 comparatives (the own 2011 10-Qs, which add up, are used), HPE's 2017-2018 separation transfers (their FY2017-FY2018 columns are re-presented and used as filed, so HPE's financing lines of those years may omit amounts the filer shows elsewhere), and Digital Realty columns that omit rows (the Q2-2012 10-Q's 6M-2011 and 6M-2012 comparatives without the purchase of noncontrolling interests, the Q2-2015 10-Q's 6M-2014, the Q3-2017 10-Q's 9M-2016/9M-2017 without the common-stock issuance, the FY2024 10-K's FY2022 comparative), none of which is used: each such horizon comes from an earlier statement of the same column that adds up to the same total (diagnostics.statement_page_not_adding_up_skipped) or from a later one. Digital Realty's 2010-2013 revolver, term-loan and note borrowings shown only in member blocks or member columns are added where they close the financing total (diagnostics.statement_rows_added, with the rule used).
- Group composition changes over time (IPOs and spin-offs: CoreWeave 2025, GE Vernova 2024, Arm 2023, Vertiv 2020); aggregates are sums over the members with data in each quarter, listed per row.
- Fiscal years differ; calendar alignment puts e.g. Nvidia's quarter ending in late January into the March quarter and Intel's quarter ending 1 April 2023 into the March 2023 quarter.
- H.8 levels contain breaks (reclassifications after the Dec-2024 Call Report instruction clarification, thrift-to-bank conversions); the break-adjusted growth uses only breaks documented in the H.8 notes, allocated by days, and is approximate. Bank loans to NDFIs fund many kinds of nonbank lenders, not only those financing data centres.
- Census monthly construction values are revised; the latest months are preliminary.
- Nothing here is a forecast or investment advice; companies are not ranked.
References
- Sloan, R. G. (1996). Do Stock Prices Fully Reflect Information in Accruals and Cash Flows about Future Earnings? The Accounting Review 71(3), 289-315. doi:10.2308/tar-9608042309
- Richardson, S. A., Sloan, R. G., Soliman, M. T. and Tuna, I. (2005). Accrual reliability, earnings persistence and stock prices. Journal of Accounting and Economics 39(3), 437-485. doi:10.1016/j.jacceco.2005.04.005
- Hribar, P. and Collins, D. W. (2002). Errors in Estimating Accruals: Implications for Empirical Research. Journal of Accounting Research 40(1), 105-134. doi:10.1111/1475-679X.00041
- Dechow, P. M., Ge, W., Larson, C. R. and Sloan, R. G. (2011). Predicting Material Accounting Misstatements. Contemporary Accounting Research 28(1), 17-82. doi:10.1111/j.1911-3846.2010.01041.x
- Bradshaw, M. T., Richardson, S. A. and Sloan, R. G. (2006). The relation between corporate financing activities, analysts' forecasts and stock returns. Journal of Accounting and Economics 42(1-2), 53-85. doi:10.1016/j.jacceco.2006.03.004
- Financial Accounting Standards Board. Accounting Standards Codification Topic 230 (Statement of Cash Flows), Topic 606 (Revenue from Contracts with Customers), Topic 321 (Investments-Equity Securities), Topic 718 (Compensation-Stock Compensation), Topic 842 (Leases).
- U.S. Securities and Exchange Commission. EDGAR XBRL companyfacts API (https://data.sec.gov/api/xbrl/companyfacts/) and EDGAR filing archives (rendered cash-flow statements, FilingSummary.xml).
- Board of Governors of the Federal Reserve System. H.8 Assets and Liabilities of Commercial Banks in the United States: loans to nondepository financial institutions, all commercial banks (FRED LNFACBM027SBOG) and the H.8 release notes (https://www.federalreserve.gov/releases/h8/h8notes.htm).
- U.S. Census Bureau. Value of Construction Put in Place (C30), private, seasonally adjusted annual rate: data center (https://www.census.gov/construction/c30/xlsx/privsatime.xlsx).
Is AI money going around in circles?
This page uses companies' own SEC filings to show how large a few AI-related money links are: Nvidia's stakes in other companies and its purchase commitments, and the contracted future revenue (backlog) of big cloud and computing providers.
Why it matters
In a big build-out, the same dollars can pass between suppliers, customers and investors, so a company's size alone does not show how interlinked it is. Putting stakes, commitments and backlogs next to each company's own revenue shows how large they are in scale. The filings show amounts and, only where a company's own filing names it, the counterparty; the page does not infer links the filings do not state.
How it works
The model reads figures that companies tag in their SEC filings: Nvidia's equity stakes (listed shares, private shares and equity-method investments), upward revaluations of its private stakes, and its purchase commitments, plus the remaining performance obligations (contracted revenue not yet recognised) of Oracle, Microsoft, Alphabet, Amazon and CoreWeave. It adds four quarters together to get a full-year revenue figure and divides each item by it, so amounts can be read against company size. It also lists the US-listed holdings in Nvidia's quarterly 13F form. A counterparty appears only where a company's own filing names it, and nothing is guessed from outside sources. It works like reading a household's loan agreements and receipts: the amounts are on paper, but who lent to whom is shown only when the document says so.
The latest readings
The recorded value of Nvidia's equity stakes in other companies: publicly listed shares, private shares and equity-method investments combined. Higher means a larger set of holdings on its books, and private stakes are carried at accounting values rather than market prices.
Simple exampleSuppose you own small pieces of several friends' lemonade stands. This number is the combined recorded worth of all the little pieces a big company owns of other companies. Some are on the stock market and some are private.
Model noteNvidia's filings show $98.9 bn of equity stakes in other companies (listed 47.7, private 47.9, equity-method 3.3) at the end of the quarter.
Nvidia's stakes in other companies measured against what it sold over the latest four quarters, to put the stakes in scale. Higher means the stakes are larger relative to its sales.
Simple exampleIf you own $20 of pieces of other stands and sold $100 of lemonade, the pieces are one fifth of your sales. This ratio puts the pieces next to what the company sells, so you can tell if they are big or small for it.
Model noteThose stakes equal 33% of the $303 bn Nvidia sold over the last four quarters.
The share of Nvidia's pre-tax income over the latest 12 months that came from raising the recorded value of private stakes after observable price events. Higher means more income comes from re-pricing holdings rather than from selling products.
Simple exampleSay a rare card you own is now worth $5 more because someone offered to pay it. Counting that as extra income is not the same as selling lemonade. This number shows how much of the income came from price changes like that.
Model noteUpward revaluations of private stakes added $9.5 bn over 12 months, 4.2% of pre-tax income; this income comes from re-pricing holdings, not from selling products.
The amount Nvidia reports it has committed to pay for supply and manufacturing capacity, with commitments to buy cloud computing shown separately. Higher means larger promised future payments, and it measures obligations, not whether they will ultimately be used.
Simple exampleIt is like promising a bakery to buy a hundred cakes next year. The promise is written down even though the cakes have not been bought yet. This number adds up the written promises to pay suppliers and cloud providers.
Model noteNvidia reports $279 bn of supply and capacity commitments (92% of 12-month revenue); separately it has committed $29 bn to cloud service agreements and $36 bn under AI cloud agreements, i.e. to pay for computing capacity from cloud providers.
Remaining performance obligations are revenue that Oracle has contracted for but not yet recognised as revenue. Higher means a larger contracted backlog, though contracts differ in how firmly they bind the customer.
Simple exampleImagine you have signed up to mow lawns all summer, and the neighbors have promised to pay you but you have not mowed them yet. The signed promises are your backlog. This is the size of the promised work a company still has to do.
Model noteOracle reports $664 bn of contracted revenue not yet recognised as revenue, 46% more than a year earlier.
Oracle's backlog divided by its revenue over the latest four quarters, expressed in years. A higher number means the backlog is large relative to current sales and would take longer to turn into revenue at the current pace.
Simple exampleIf you earn $10 a month mowing and you have signed deals worth $120, you have about a year of work already lined up. This number tells how many years of today's sales the signed deals add up to.
Model noteOracle's backlog equals 9.3 years of its last-12-month revenue ($72 bn).
CoreWeave's contracted backlog divided by its revenue over the latest four quarters, expressed in years. A higher number means the backlog is large relative to current sales.
Simple exampleSame idea as a lawn-mowing list: it asks how many years of the company's current sales are already promised by signed deals. A young, fast-growing company can have a long list compared with what it earns today.
Model noteCoreWeave's $104 bn backlog equals 13.7 years of its last-12-month revenue ($7.6 bn).
The sum of the latest reported backlog of Microsoft, Alphabet, Amazon and Oracle. Each company's quarter ends on a different date and their definitions differ, so the total is a rough size, and higher means more contracted future revenue.
Simple exampleIf four neighbors each have a list of signed lawn jobs, you can add the lists up to see the total work promised. The lists were counted on different days and the neighbors count jobs in slightly different ways, so it is a rough total.
Model noteMicrosoft, Alphabet, Amazon and Oracle together report $2,364 bn of contracted future revenue in total (Microsoft 684.0 (as of 2026-06-30), Alphabet 519.5 (as of 2026-06-30), Amazon 496.0 (as of 2026-06-30), Oracle 664.0 (as of 2026-08-31); each company's latest quarter, total RPO as tagged).
What the companies' own filings say
Quoted word for word from SEC filings. The page does not infer relationships a filing does not state.
SB Energy Corp. guarantees – In August 2026, we entered into guarantees, capped at a total of $105 billion, to provide credit support on a land, power, and shell buildout with affiliates of SB Energy Corp. (SB Energy) on behalf of a customer, an affiliate of OpenAI Group PBC (OpenAI), related to leases for approximately 4.25 gigawatts of IT load ...
Under these agreements, AI clouds procure our data center infrastructure products and we commit to cloud service agreements, which the AI clouds can unilaterally stop providing to us and sell to third-party customers at more advantageous rates.
Investment commitments are $6.5 billion as of October 26, 2025, including $5 billion in Intel Corporation which is subject to regulatory approval.
In November 2025, we entered into an agreement, subject to certain closing conditions, to invest up to $10 billion in Anthropic.
In January 2026, we entered into a securities purchase agreement with NVIDIA Corporation for a private placement of approximately 23 million shares of our Class A common stock at a purchase price of $87.20 per share, for aggregate gross proceeds of $2.0 billion.
We also invested $15.0 billion in Series C Preferred Stock of OpenAI and entered into an equity commitment letter agreement (the “Letter Agreement”), pursuant to which we agreed to purchase additional shares of Series C Preferred Stock (the “Commitment Shares”) with an aggregate purchase price of $35.0 billion (the “Commitment Amount”).
In Q1 2026, AWS and OpenAI Group PBC (“OpenAI”) announced an expansion of the existing $38.0 billion multi-year commitment and commercial arrangement with OpenAI by $100.0 billion over 8.0 years, which includes contractual obligations related to the performance of AWS chips.
Warrants In October 2025 and February 2026, the Company issued warrants to OpenAI OpCo, LLC (OpenAI) and Meta Platforms, Inc. (Meta), each entitling the holder the right to purchase up to 160 million shares of the Company’s common stock at an exercise price of $0.01 per share (the OpenAI Warrant and the Meta Warrant, respectively).
Under the new agreement, OpenAI has contracted to purchase an incremental $250 billion of Azure services, and Microsoft will no longer have a right of first refusal to be OpenAI's compute provider.
Nvidia's largest listed holdings (Form 13F, Tue, Jun 30)
| Company | Value | Share of reported total |
|---|---|---|
| Intel Corp | $30.0 bn | 47.3% |
| Space Exploration Techn Corp | $21.0 bn | 33.1% |
| Coreweave Inc | $4.7 bn | 7.4% |
| Coherent Corp | $3.1 bn | 4.8% |
| Nokia Corp | $2.2 bn | 3.5% |
| Synopsys Inc | $2.2 bn | 3.4% |
| Nebius Group N.V. | $0.3 bn | 0.5% |
| Generate Biomedicines Inc | $0.0 bn | 0.0% |
Each line is one company's contracted backlog, quarter by quarter, in billions of dollars: Oracle, Microsoft, Alphabet, Amazon and CoreWeave. A rising line means more contracted future revenue was added than was recognised as revenue in that period. Compare shapes more than exact levels, since companies define backlog differently and their quarters end on different dates.
Simple exampleEach line is one company's list of signed jobs it has not finished yet. When a line goes up, more jobs were signed than finished that quarter. Look at the shapes, since each company counts its list a little differently.
One line: the combined recorded value of Nvidia's listed, private and equity-method stakes at each quarter end, in billions of dollars. A rising line means the recorded holdings grew, through purchases or revaluation. The chart shows amounts only and names no counterparty, and private holdings are carried at accounting values.
Simple examplePicture a line showing how much a collection of small pieces of other businesses is worth on paper, each quarter. When it goes up, the collection grew, either because more pieces were bought or because pieces were re-priced. The line does not say whose pieces they are.
Nvidia's total equity stakes are its listed shares, plus its private shares, plus its equity-method investments, all as recorded in its filing. Equity-method is counted as zero when not reported.
Simple exampleIf you own $5 of shares that anyone can trade, $3 of shares in a friend's private club, and $1 of a joint project, your collection is $9. The total is just the three kinds of pieces added together.
- L_tpublicly listed shares held, at fair value
- V_tprivate shares, whose carrying value follows an accounting method that uses observable prices
- M_tinvestments accounted for under the equity method
Total stakes divided by revenue over the latest four quarters, as a percent, to show size relative to the business.
Simple exampleIf your pieces are worth $20 and you sold $100 of lemonade this year, the pieces are 20% of your sales. This simply divides one number by the other to make the size easier to picture.
- \text{Stakes}_ttotal equity stakes at quarter end t
- \text{TTM}_t(\text{Revenue})revenue summed over the four quarters ending at t
Upward revaluations of private stakes over four quarters, divided by pre-tax income over the same time, as a percent.
Simple exampleIf you earned $50 this year and $5 came from a card you own going up in price, that is 10% of the earnings. The sum shows what share of income came from price changes rather than selling.
- \text{TTM}_t(\text{Upward adjustments})increases in recorded value of private stakes over the four quarters ending at t
- \text{TTM}_t(\text{Pre-tax income})income before tax summed over the same four quarters
Contracted revenue not yet recognised, divided by revenue over the latest four quarters. The result is the number of years of current revenue that the backlog equals.
Simple exampleIf you have $120 of signed jobs and you earn $60 a year, the signed jobs equal two years of your usual earnings. We divide the signed total by a year of earnings to get the number of years.
- \text{RPO}_tremaining performance obligations: contracted revenue not yet recognised, at quarter end t
- \text{TTM}_t(\text{Revenue})revenue summed over the four quarters ending at t
- Remaining performance obligations (RPO)
- Revenue a company has contracted to earn in future periods but has not yet recognised. It is often called backlog, and companies include different kinds of contracts in it.
- Equity stake
- Ownership of shares in another company. It can be in a publicly listed company or a private one.
- Equity-method investment
- A stake large enough to give real influence but not control, where the holder records its share of the other company's results in its own books.
- Private stake revaluation
- For private shares without a market price, companies may adjust the recorded value after an observable event such as a new funding round. A write-up raises recorded income without any cash from a sale.
- Purchase commitment
- A contractual promise to pay for goods, manufacturing capacity or services in the future. Filings report the total promised amount.
- Form 13F
- A quarterly filing in which large investment managers, including companies that manage investments, list their US-listed shareholdings. It is filed up to 45 days after quarter end and does not show private holdings or say which holdings are customers.
- Vendor financing
- When a supplier helps a customer pay for its products, for example by lending to it or investing in it. This page does not label any company's arrangement as vendor financing; it shows only amounts that filings disclose.
- Trailing twelve months (TTM)
- The most recent four quarters added together, so a figure covers a full year and seasonal swings cancel out.
Full technical specification (for specialists)
Model
AI money loops: supplier stakes, capacity buy-backs and contracted backlogs (SEC filings)
Specification
Discrete fiscal quarter of a flow X: X_Q1 = YTD_3m; X_Q2 = YTD_6m - YTD_3m; X_Q3 = YTD_9m - YTD_6m; X_Q4 = FY - YTD_9m (a 10-Q 3-month fact, when tagged, is used directly).TTM_t(X) = X_q(t) + X_q(t-1) + X_q(t-2) + X_q(t-3), four consecutive fiscal quarters (80-100 days apart) of ONE line definition; otherwise null.stakes_total_t = listed_equity_t + private_equity_t + equity_method_t (equity_method = 0 when not tagged); listed = publicly held equity securities at fair value (all balance-sheet locations; for AMD the Level 1 'Long-term investments' of the recurring fair-value table plus Level 1 marketable equity securities in short-term investments when tagged, us-gaap:InvestmentsFairValueDisclosure); private = equity securities without readily determinable fair value (ASC 321 measurement alternative). listed_equity_sale_restricted (us-gaap:EquitySecurityFvNiContractualSaleRestriction) is the subset of listed equity under contractual sale restrictions and is not added to the total.stake_purchases_ytd_t = the fiscal year-to-date cash paid for stakes ending at t (longest 3/6/9/12-month fact of the first line definition that has one), reported as tagged with its months and basis.stakes_pct_revenue_t = 100 x stakes_total_t / TTM_t(revenue).private_upward_pct_pretax_t = 100 x TTM_t(upward price adjustments on private stakes) / TTM_t(pre-tax income). TTM_t(upward) is the four-quarter sum when derivable; otherwise a tagged 12-month (fiscal-year) fact ending at t, which is itself the trailing twelve months at the fiscal-year end (private_upward_adj_ttm_method = 'four_quarters' or 'tagged_12m_fact'; AMD at 2025-12-27 uses its FY2025 10-K fact); otherwise null and listed in diagnostics.not_tagged.purchase_commitments_pct_revenue_t = 100 x purchase_commitments_t / TTM_t(revenue).rpo_to_revenue_t = RPO_t / TTM_t(revenue) (years of current revenue under contract).yoy_t(x) = x_t / x_{t'} - 1, t' = the period end 350-380 days before t.cloud_rpo_combined = sum over {Microsoft, Alphabet, Amazon, Oracle} of each company's latest RPO.13F pct_of_reported_total = 100 x value_i / sum_j value_j over the period's table: the latest of the original 13F-HR and its RESTATEMENT amendments, plus the rows of every NEW HOLDINGS amendment filed after it (amendment type read from the 13F cover page, primary_doc.xml amendmentInfo/amendmentType).
Limitations
- Filers change tags and line definitions between quarters (e.g. Nvidia's commitments note and equity-purchase cash-flow line); series can break where a definition changes, and those breaks are left as nulls or labelled by `stake_purchases_basis`.
- Remaining performance obligations (ASC 606-10-50-13) are contracted revenue not yet recognised as revenue (including amounts already billed and held as deferred revenue); they are not comparable across companies: some include cancellable or usage-based contracts differently, and Meta does not report RPO.
- Leases not yet commenced are tagged with different elements and members by each company; the value is checked against the filing text (leases_text_verified) but definitions (operating vs finance, undiscounted payments) differ.
- Equity stakes and upward revaluations of private holdings (ASC 321 measurement alternative) reflect observable transactions that may be few; they are carrying values, not market prices.
- The 13F lists only U.S.-listed (13(f)) securities at the quarter end, and is filed up to 45 days later; it does not show private holdings.
- Data are latest-vintage filings; history uses restated values where companies restated (no strict point-in-time claim beyond the `filed` column).
- No source on 1999-2001 telecom vendor financing (Lucent, Nortel) was verified for this module; the analogy is descriptive only.
- Describes disclosed facts only: no claim of wrongdoing, no forecast, no view on any security.
References
- U.S. Securities and Exchange Commission, EDGAR XBRL companyfacts API (https://data.sec.gov/api/xbrl/companyfacts/), 10-K and 10-Q filings of NVIDIA, Advanced Micro Devices, Oracle, CoreWeave, Microsoft, Alphabet, Amazon and Meta Platforms.
- U.S. Securities and Exchange Commission, EDGAR inline-XBRL primary documents of the same 10-K/10-Q filings and their SEC-rendered XBRL pages (R files) (https://www.sec.gov/Archives/edgar/data/).
- U.S. Securities and Exchange Commission, Form 13F-HR information tables filed by NVIDIA Corp (CIK 1045810).
- FASB Accounting Standards Codification 606-10-50-13 (disclosure of remaining performance obligations).
- FASB Accounting Standards Codification 321 (investments in equity securities, including the measurement alternative for equity securities without readily determinable fair values).
- FASB Accounting Standards Codification 440-10-50 (unconditional purchase obligations).
- FASB Accounting Standards Codification 842-20-50-3(b) (lessee disclosure of leases that have not yet commenced but that create significant rights and obligations for the lessee; see also 842-20-50-7).
- Doms, M. (2004). The Boom and Bust in Information Technology Investment. Federal Reserve Bank of San Francisco Economic Review 2004, 19-34 (1999-2001 IT and telecommunications over-investment).
Is AI demand showing up in the real economy?
This page lines up official statistics on business use of AI, imported computer hardware, electricity sales, prices, productivity and GDP, so you can see what the real economy shows alongside the spending on AI.
Why it matters
Companies are spending very large sums on AI equipment and data centers, and that spending shapes stock markets, jobs and electricity bills. Official data on how many firms actually use AI, how much hardware is arriving and how fast output per worker is growing show whether activity on the ground is moving along with the spending. Past technology waves, such as the late-1990s telecom build-out, show that investment and measured payoffs can arrive at very different times.
How it works
The page collects public statistics from the Census Bureau, the Energy Information Administration, the Bureau of Labor Statistics, the Bureau of Economic Analysis, the Federal Reserve and the San Francisco Fed. Most readings are simple year-over-year changes: this month compared with the same month a year earlier, which avoids seasonal swings. For growth, it takes official real GDP growth and subtracts the pieces contributed by investment in computing equipment and software, a bit like asking how a team scored if you set aside one player's points. For electricity, it compares sales growth in five states with many data centers (Virginia, Texas, Georgia, Arizona and Oregon) against the whole country. Each number only appears on the date it would actually have been public. The page describes conditions and makes no forecasts.
The latest readings
The share of US employer businesses that tell the Census Bureau's biweekly survey they use AI in at least one business function, plus the share that expect to within six months. A higher share means AI is reaching more firms; each firm counts equally, however small.
Simple exampleImagine asking every shop on a long street whether they use a new gadget. This is the share that say yes, and the share that plan to soon. A bigger share means the gadget has reached more shops.
Model noteIn the two weeks to 20 Sep 2026, 23.8% of U.S. employer businesses reported using AI in at least one business function (Census BTOS), compared with 17.3% in the first period asked with this wording (16 Nov 2025); 27.7% expect to use it within six months.
How much more or less the US imported, in dollars, of advanced-technology computers, network gear and chips compared with the same month a year earlier. A higher reading means more hardware is arriving; the category is broader than AI hardware alone.
Simple exampleThink of delivery trucks bringing computers into the country. This compares this month's truckloads with the same month last year. A bigger number means more computer equipment arrived than a year ago.
Model noteU.S. imports of advanced-technology information-and-communications and electronics products (computers, servers, network equipment, semiconductors) were $95.1 billion in Aug 2026, 96.2% higher than a year earlier (Census FT-900, not seasonally adjusted); advanced-technology imports from Taiwan were +45.8% and from Mexico +91.1% year on year.
Typical rangeBetween 6.49 and 33.55 in half of all readings since Jan 2021 (middle 50%; the outer 10th to 90th percentile band is -8.97 to 56.60). The latest reading sits at the 99th percentile.
The difference in yearly growth of business electricity sales between five states with many data centers and the US as a whole, in percentage points. A positive gap means those states are growing faster than the country, though weather and how utilities classify big customers also matter.
Simple exampleData centers are like giant computer rooms that use lots of electricity. This compares how fast electric use is growing in five states with many of them against the whole country. A positive number means those states are growing faster.
Model noteCommercial-sector electricity sales in Virginia, Texas, Georgia, Arizona and Oregon combined were +10.0% year on year in Jul 2026 versus +4.3% for the U.S. as a whole, a gap of +5.7 pp (12-month-sum basis: +3.4 pp; EIA-861M).
Typical rangeBetween 0.165 and 3.36 in half of all readings since Jan 2011 (middle 50%; the outer 10th to 90th percentile band is -0.833 to 5.02). The latest reading sits at the 94th percentile.
The change over 12 months in the prices providers receive for data processing, hosting and related services. A higher reading means these services cost more than a year ago, a lower one means they cost less; the index adjusts for quality changes.
Simple exampleThis is like checking whether renting space on someone else's computers costs more than it did last year. Up means pricier, down means cheaper. It is the price that providers get, adjusted so better quality does not look like a price rise.
Model noteBLS producer prices for data processing, hosting and related services were 2.8% higher in Sep 2026 than a year earlier (not seasonally adjusted), compared with a 12-month change of +3.6% a year before.
Typical rangeBetween 0.286 and 1.57 in half of all readings since Jan 2010 (middle 50%; the outer 10th to 90th percentile band is -0.096 to 2.60). The latest reading sits at the 91th percentile.
The change over 12 months in the prices makers receive for semiconductors and related devices, adjusted for quality. A positive reading means chip prices are higher than a year ago; a negative one means lower, which can happen as chips get better for the same price.
Simple exampleChips are the tiny brains inside computers. This checks whether makers get more or less money for them than a year ago. Prices can drop even when chips get better, like phones getting faster without costing more.
Model noteBLS producer prices for semiconductors and related devices were 2.2% lower in Sep 2026 than a year earlier (not seasonally adjusted), compared with a 12-month change of -3.4% a year before.
Typical rangeBetween -4.74 and -0.817 in half of all readings since Jan 2010 (middle 50%; the outer 10th to 90th percentile band is -7.63 to 1.19). The latest reading sits at the 67th percentile.
How much more output each hour of work produced in the nonfarm business sector than a year earlier, plus a second measure of efficiency gains that adjusts for how hard capital and labor were being used. Higher readings mean more is produced from the same effort.
Simple exampleIf you can fold 10 paper boats in an hour this year and 11 next year, you got more productive. This measures how much more the whole country makes per hour of work compared with last year.
Model noteOutput per hour in the nonfarm business sector was 2.2% higher in Q2 2026 than a year earlier (BLS); over eight quarters it grew at a 2.2% annual rate, and utilisation-adjusted TFP (SF Fed) changed -0.1% over the four quarters to Q2 2026.
Typical rangeBetween 0.979 and 2.92 in half of all readings since Jan 2000 (middle 50%; the outer 10th to 90th percentile band is 0.212 to 4.28). The latest reading sits at the 61th percentile.
The growth rate of the US economy after removing the part contributed by investment in information-processing equipment and software. The gap between this and headline GDP growth shows how much of growth came from those investment lines; imports of that equipment are not netted out.
Simple exampleImagine a school bake sale where some cakes were made with a brand-new oven. This asks how big the sale would have been without the oven's cakes. It shows how much of the economy's growth came from computer equipment and software.
Model noteReal GDP grew at a 2.2% annual rate in Q2 2026; excluding the 0.52 pp contributed by investment in information-processing equipment and software, growth was 1.68% (BEA; imports of that equipment, which subtract from GDP, are not netted out).
Typical rangeBetween 0.958 and 3.30 in half of all readings since Jan 2000 (middle 50%; the outer 10th to 90th percentile band is -1.06 to 4.35). The latest reading sits at the 37th percentile.
The portion of total real GDP growth over the last four quarters that came from investment in information-processing equipment and software. A higher share means growth leaned more on those investment lines.
Simple exampleIf a class's total points grew by 10 and one team earned 3 of them, that team made up 30% of the growth. This is that same idea for computer equipment and software spending over the past year.
Model noteOver the four quarters to Q2 2026, investment in information-processing equipment and software contributed 3.01 pp of the 8.8 pp sum of quarterly annualised real GDP growth rates, or 34.2% of it (BEA Table 1.5.2).
Typical rangeBetween 8.53 and 17.39 in half of all readings since Jan 2000 (middle 50%; the outer 10th to 90th percentile band is 3.35 to 25.23). The latest reading sits at the 97th percentile.
Two lines show quarterly real GDP growth at an annual rate, one as officially reported and one with the contribution of information-processing equipment and software investment taken out. The distance between the lines is how much those investment lines added or subtracted that quarter. Dips below zero mean the economy shrank in that quarter.
Simple exampleOne line is how fast the whole economy grew, and the other is how fast it would have grown without the computer equipment and software spending. When the lines are far apart, that spending made a big difference that quarter.
One line shows the percentage of employer businesses that say they use AI, and the other shows the percentage that expect to use it within six months. Higher means more firms. The survey changed its AI question in late 2025, so the older and newer wordings are separate lines and are not joined together.
Simple exampleThis is like a classroom poll about who has tried a new game. One line shows how many businesses say yes now, and the other shows how many say they will soon. Taller lines mean more businesses.
Two lines show yearly growth in business electricity sales: the five data-center states combined and the US total. Each point compares the latest 12 months of sales with the 12 months before, which smooths out weather. When the data-center line sits above the US line, those states are growing faster.
Simple exampleOne line is how fast five states with many data centers are using more electricity, and the other is the whole country. Using a full year at a time keeps hot summers and cold winters from fooling you.
A year-over-year change compares a value with the value from the same month one year earlier, expressed as a percent.
Simple exampleTo see how much something changed, compare it to the same month last year. If you had 20 stickers last June and 25 this June, that is 25% more. This formula does exactly that.
- \text{yoy}_tthe year-over-year change in percent
- x_tthe value this month
- x_{t-12\text{m}}the value in the same month one year earlier
GDP growth without the AI-era investment lines is reported GDP growth minus the contributions of information-processing equipment and of software.
Simple exampleThe economy's growth is like a pizza made of slices. This formula takes the total growth and removes the slices that came from computer equipment and software, so you can see what is left.
- g^{\text{ex}}_treal GDP growth excluding those two investment lines, annual rate in percent
- g_treported real GDP growth, annual rate in percent
- c^{\text{IPE}}_tpercentage points of growth contributed by information-processing equipment investment
- c^{\text{SW}}_tpercentage points of growth contributed by software investment
The share of growth from these investment lines adds up their contributions over four quarters and divides by the total of GDP growth over the same four quarters.
Simple exampleAdd up how much growth came from computer equipment and software over four quarters, then divide by all the growth in those quarters. If 3 of 10 points came from them, the share is 30%.
- \text{share}_tpercent of recent GDP growth from the two investment lines
- c^{\text{IPE}}_{t-j} + c^{\text{SW}}_{t-j}combined contribution of equipment and software in quarter t-j
- g_{t-j}real GDP growth in quarter t-j
- jcounts back over the latest four quarters
The power gap is yearly growth in commercial electricity sales in the five data-center states minus yearly growth for the whole US, in percentage points.
Simple exampleTake how fast electricity use is growing in five states with many data centers and subtract how fast it is growing everywhere. If the answer is above zero, those states are growing faster.
- \text{gap}_tdifference in growth, in percentage points
- \text{yoy}(\text{DC5})_tyearly growth of commercial sales in Virginia, Texas, Georgia, Arizona and Oregon combined
- \text{yoy}(\text{US})_tyearly growth of commercial sales across the 50 states and DC
- BTOS
- The Business Trends and Outlook Survey, a regular Census Bureau survey of US employer businesses that includes questions about AI use.
- Year over year (yoy)
- A comparison of a value with the same period one year earlier, which removes regular seasonal swings.
- Percentage point (pp)
- The simple difference between two percentages. Going from 2% to 5% is a rise of 3 percentage points.
- Real GDP
- The total output of the economy adjusted for price changes, so that it measures quantities produced rather than dollars.
- PPI (Producer Price Index)
- A measure from the Bureau of Labor Statistics of the prices sellers receive, adjusted for changes in quality.
- Labor productivity
- Output produced per hour worked. Rising productivity means more is produced from the same work time.
- TFP (total factor productivity)
- A measure of how efficiently labor and capital are used together, after adjusting for how intensely they were being used.
- Advanced-technology products (ATP)
- A Census trade category covering high-tech goods such as computers, communications gear and electronics, broader than AI hardware alone.
Full technical specification (for specialists)
Model
AI reality check: adoption, hardware, power, prices, productivity and GDP
Specification
yoy_t = 100 x (x_t / x_{t-12m} - 1), t-12m the same calendar month (or quarter) one year earlier; undefined if that observation is missing (no interpolation).Labour productivity 8-quarter annualised rate: 100 x ((P_t / P_{t-8})^(4/8) - 1), P = OPHNFB.TFP (Fernald): d_t = 400 x dln TFP_t (utilisation-adjusted, dtfp_util). k-quarter compound annual rate = 100 x (exp(sum_{j<k} d_{t-j} / 400 x 4/k) - 1); k = 4 gives the 4-quarter percent change.gdp_ex_ai_t = g_t - c^IPE_t - c^SW_t, g = real GDP growth (% SAAR, A191RL), c^IPE, c^SW = contributions (pp, SAAR) of information-processing equipment (Y034RY) and software (B985RY) investment.ai_contribution_t = c^IPE_t + c^SW_t.ai_share_of_growth_4q_t = 100 x sum_{j<4} ai_contribution_{t-j} / sum_{j<4} g_{t-j}; not reported when |sum_{j<4} g_{t-j}| < 0.4 pp.Hardware total_t = ATP Information and Communications imports_t + ATP Electronics imports_t ($ millions, NSA).Power: DC5_t = sum of commercial-sector sales in VA, TX, GA, AZ, OR; US_t = sum over 50 states + DC; gap_t = yoy(DC5)_t - yoy(US)_t (pp); 12-month basis uses trailing 12-month sums S_t = sum_{j<12} x_{t-j}.Telecom analogy: telecom_share_t = 100 x C275RC_t / A191RC_t (communication-equipment investment / nominal GDP); dot-com IT share = 100 x A679RC_t / A191RC_t; AI share = bubble_watch ai_capex_gdp (information-processing equipment + software investment / GDP). event_quarter = quarters between t and the anchor quarter (telecom: maximum over 1990Q1-2005Q4; AI: maximum since 2015Q1 among released quarters).Release filter: a value for period p is usable at t iff t >= min(R(p), cache date), R(p) = the actual publication date where RELEASE_OVERRIDES lists p (diagnostics.release_lags_days.overrides), else end(p) + lag; BTOS uses the publication date printed in the Census file unless Census documents another date (period 202520: 20 Nov 2025).
Limitations
- Data are latest vintage (revised); historical values include later revisions, so the release filter gives release timing but not real-time values.
- The BTOS AI question changed in November 2025 from use 'in producing goods or services' to use 'in any of its business functions'; the two series are different questions and are shown separately, not spliced. No BTOS data exist for 6 Oct - 16 Nov 2025 (funding lapse).
- BTOS covers employer businesses and is weighted by firm count, so a small firm counts as much as a large one; employment-weighted use rates are higher (Bonney et al. 2024).
- Some utilities classify large data centres as industrial rather than commercial customers, and commercial sales are weather-sensitive; the state comparison is a coarse proxy for data-centre load.
- ATP imports are Census-basis, not seasonally adjusted and in current dollars; 2026 months come from monthly releases that precede the annual revision. ATP categories are broader than AI hardware.
- Subtracting the investment contributions does not remove the import content of that equipment (imports subtract from GDP), so gdp_ex_ai understates and ai_contribution overstates the net domestic-output effect; data-centre structures are not in these BEA lines.
- The telecom alignment is illustrative: the AI anchor is the maximum to date, not an identified peak, and communication-equipment investment is a narrower category than information-processing equipment plus software.
- PPIs for data processing and semiconductors are quality-adjusted price indexes and are not measures of volumes or demand.
- Describes conditions only; contains no projections, valuations of individual companies, or advice.
References
- U.S. Census Bureau (2026). Business Trends and Outlook Survey Methodology, Version 5 (last updated 13 August 2026). census.gov/hfp/btos/downloads/methodology/Business_Trends_and_Outlook_Survey_Methodology_V6.pdf
- Bonney, K., Breaux, C., Buffington, C., Dinlersoz, E., Foster, L., Goldschlag, N., Haltiwanger, J., Kroff, Z. & Savage, K. (2024). Tracking Firm Use of AI in Real Time: A Snapshot from the Business Trends and Outlook Survey. U.S. Census Bureau, Center for Economic Studies Working Paper CES 24-16 (March 2024).
- Brynjolfsson, E., Rock, D. & Syverson, C. (2021). The Productivity J-Curve: How Intangibles Complement General Purpose Technologies. American Economic Journal: Macroeconomics 13(1), 333-372 (why measured productivity gains can lag investment).
- Doms, M. (2004). The Boom and Bust in Information Technology Investment. Federal Reserve Bank of San Francisco Economic Review 2004, 19-34 (1999-2001 IT and telecommunications over-investment).
- Fernald, J. (2014). A Quarterly, Utilization-Adjusted Series on Total Factor Productivity. Federal Reserve Bank of San Francisco Working Paper 2012-19 (April 2014); data file quarterly_tfp.xlsx.
- U.S. Bureau of Labor Statistics. Handbook of Methods: Producer Prices; Productivity Measures: Business Sector and Major Subsectors.
- U.S. Energy Information Administration. Form EIA-861M (monthly electric power industry report), sales and revenue data; Electric Power Monthly.
- U.S. Bureau of Economic Analysis. NIPA Table 1.1.1 (real GDP), Table 1.5.2 (contributions to percent change in real GDP, expanded detail, lines 31 and 38), Table 5.3.5 (private fixed investment by type, line 31) and Table 5.5.5 / 5.5.5U (communication equipment, line 5).
- U.S. Census Bureau and U.S. Bureau of Economic Analysis. U.S. International Trade in Goods and Services (FT-900): Advanced Technology Products by technology group and selected countries.
- Board of Governors of the Federal Reserve System. G.17 Industrial Production and Capacity Utilization.
Who is selling, and who is exposed?
This page tracks several disclosed facts connected to the AI build-out: stock sales by company insiders, how much new stock companies issue, how often filings mention AI, stress at listed private-credit funds, and how sensitive big cloud companies' profits are to how long they say servers last.
Why it matters
AI spending is financed by company cash, stock sales, borrowing and loans from private lenders, so these filings show who is paying for it and how the financing looks. Some readings also show how much reported profit depends on accounting choices and how much of the US stock market is held by investors abroad. None of them is a verdict on any company or a signal about where prices go next, but together they give a fuller picture of the conditions around the build-out.
How it works
Most readings come from public documents. Insider sales come from Form 4 filings that executives and directors must file with the SEC, added up and compared with a rough size of those companies. Stock issuance comes from the Federal Reserve's Financial Accounts, and the mention count comes from counting how many SEC filings contain the phrase artificial intelligence. Private-credit stress comes from the quarterly reports of large listed business development companies (BDCs), which lend to mid-sized firms. The server-life figure is a what-if: it asks how much yearly depreciation, the gradual write-off of equipment cost, would rise if servers were written off over 3 years instead of the longer lives companies state. It is a sensitivity exercise, not a restatement and not an accusation. Insider selling is common for ordinary reasons, such as pre-planned 10b5-1 sales, tax bills and diversification, and is not evidence of anything on its own. The page describes conditions and makes no forecasts.
The latest readings
Stock sold by officers and directors of AI-related companies over the last four quarters, minus their purchases, as a share of those companies' rough combined market value. Insider selling is common and often reflects pre-planned 10b5-1 sales, tax needs or diversification, so a higher or lower reading is not evidence of anything by itself.
Simple exampleGrown-ups who run a company sometimes sell some of their company shares, like selling a few trading cards to pay for something or to keep a mix of things. People do it for many ordinary reasons, so this number alone does not tell you anything is wrong.
Model noteOfficers and directors of up to 26 AI-ecosystem companies with a market value proxy reported sales of stock, net of purchases, of $15.1 bn (Form 4 codes S and P) over the four quarters to 2026-09-30, equal to 0.066% of those companies' combined market value proxy (issuers without a proxy are left out of both amounts).
Typical rangeBetween 0.175 and 0.439 in half of all readings since Jun 30, 2010 (middle 50%; the outer 10th to 90th percentile band is 0.105 to 0.644). The latest reading sits at the 8th percentile.
Of all the new money US nonfinancial companies raised over four quarters from stock and debt combined, this is the part from stock. A higher share means firms leaned more on selling stock; a negative value means they retired more stock than they issued.
Simple exampleA company can raise money by selling pieces of itself or by borrowing. Imagine a lemonade stand raising money from friends: some give you money for a share of the profits, others lend it. This is the share that came from selling pieces.
Model noteNet equity issuance was 3.6% of net equity plus net debt issuance by U.S. nonfinancial corporations over the four quarters to 2026-06-30 (Z.1 net flows; negative means net retirement).
The number of original S-1 and F-1 registration statements filed on the SEC's EDGAR system over four quarters. Many of these are companies planning to sell shares to the public, but the count also includes resale, SPAC and other registrations, so it is not a count of IPOs.
Simple exampleBefore a company can sell shares to the public, it has to fill out official paperwork, like signing up before joining a sports league. This counts how many sign-up forms were turned in over the past year, though some are for other reasons.
Model note1429 original S-1 and F-1 registration statements were filed on EDGAR in the four quarters to 2026-09-30 (all registrations, not only IPOs).
Typical rangeBetween 873.0 and 1,338 in half of all readings since Mar 31, 2000 (middle 50%; the outer 10th to 90th percentile band is 584.0 to 1,522). The latest reading sits at the 84th percentile.
The share of annual, quarterly and current reports filed with the SEC in the latest quarter that contain the phrase artificial intelligence. A higher share means the topic appears in more company filings; it measures how much companies write about AI, not how much they use it.
Simple exampleImagine counting how many school newsletters use the word robot. This counts how many company reports use the phrase artificial intelligence. A bigger share means more companies are talking about it, not necessarily using it.
Model note3339 of 21041 annual, quarterly and current reports filed in the quarter to 2026-09-30 contain the phrase "artificial intelligence" (15.9%).
Typical rangeBetween 0.060 and 2.03 in half of all readings since Mar 31, 2001 (middle 50%; the outer 10th to 90th percentile band is 0.039 to 6.46). The latest reading sits at the 99th percentile.
The portion of listed BDCs' investment income that was paid in kind, meaning the borrower added the interest to its debt instead of paying cash. A higher share means more income came as added debt rather than cash; some PIK is planned from the start.
Simple exampleSuppose you borrow lunch money and say, I will pay you next week and add a little extra to what I owe. That is paying in kind: interest added to the debt instead of handed over now. This is how much of the lenders' income was like that.
Model noteAcross 8 large listed business development companies, income paid in kind (added to the investment instead of paid in cash: tagged PIK interest income; company-defined PIK interest figures for BXSL, MAIN; concepts per BDC in pik_concepts) was 8.4% of total investment income in the quarter to 2026-06-30.
The share of loan portfolios, at fair value, that are on non-accrual status, meaning the lender no longer counts the interest as income because payments are in doubt. A higher share means more of the loans are not paying as agreed. Only some BDCs report this figure.
Simple exampleIf a friend stops making promised payments on a loan, you might stop counting on that money. This is the share of loans that lenders have marked that way. A bigger number means more loans are not paying as promised.
Model noteInvestments on non-accrual status were 1.40% of the fair value of the portfolios of the 3 BDC(s) that tag the figure (ARCC,GBDC,PSEC), as of 2026-06-30.
An illustrative accounting sensitivity: how much larger yearly depreciation would be, as a share of pre-tax income, if five large cloud companies wrote off server and network equipment over 3 years instead of the useful lives they state. It is not a restatement and not an accusation; each company's stated lives are permitted accounting estimates.
Simple exampleSay a company buys a computer and writes off its cost over several years. This asks: what if they used 3 years instead? It is a what-if math exercise, not a claim that anyone did anything wrong, since companies are allowed to choose their own estimates.
Model noteIf the 5 cloud companies depreciated their server and network equipment classes (as reported; the classes of MSFT and ORCL also include software or machinery) over 3 years instead of the upper end of their stated useful-life ranges, annual depreciation would be about $110 bn higher, 20.8% of their latest fiscal-year pre-tax income (19.4% with the lower end of each range where it is at least 3 years; illustrative accounting sensitivity, not a restatement).
The share of the market value of US corporate stock held by investors outside the United States, from the Federal Reserve's Financial Accounts. A higher share means foreign investors own a larger part of the US stock market.
Simple exampleThink of all the shares of American companies as one big pizza. This tells you what slice is owned by people and groups outside the United States. A bigger slice means more of the pizza belongs to them.
Model noteInvestors outside the United States held 20.3% of the market value of equities issued by U.S. corporations at 2026-06-30 (Z.1 Financial Accounts).
Typical rangeBetween 12.27 and 18.44 in half of all readings since Mar 31, 2000 (middle 50%; the outer 10th to 90th percentile band is 10.14 to 19.70). The latest reading sits at the 95th percentile.
Server-life sensitivity (illustrative)
| Company | Useful life assumed | Last change | Effect if 3-year lives | Share of pre-tax income |
|---|---|---|---|---|
| MSFT | 2-6 years | 2022 (4.00 to 6.00 yrs) | $36.0 bn | 21.7% |
| GOOGL | 6 years | 2023 (4.00 to 6.00 yrs) | $20.4 bn | 12.8% |
| AMZN | 5-6 years | 2025 (6.00 to 5.00 yrs) | $28.7 bn | 29.5% |
| META | 5-5.5 years | 2025 | $14.9 bn | 17.3% |
| ORCL | 6 years | 2024 (5.00 to 6.00 yrs) | $9.9 bn | 50.8% |
An illustrative accounting sensitivity from 10-K disclosures, not a restatement and not a claim that any company's accounting is wrong.
The line shows the percentage of SEC annual, quarterly and current reports in each quarter that contain the phrase artificial intelligence. A rising line means more filings mention it. It counts mentions of the phrase only, not how much AI a company actually uses.
Simple examplePicture a tally of how many reports each quarter use the phrase artificial intelligence. The line goes up when more reports use it. It shows how much companies talk about AI, not how much they use it.
Two lines track large listed lending funds. One is the share of their income paid in kind, meaning added to the debt instead of paid in cash. The other is the share of loans not paying. Higher values on either line mean more of the loan book is under strain. Coverage varies because only some funds report each figure.
Simple exampleTwo lines track lenders that make loans to businesses. One shows how much of their income came as added debt instead of cash, and the other how many loans are not paying. When a line rises, more loans are having trouble.
The line shows stock sold by officers and directors of AI-related companies, minus their purchases, in one quarter as a percent of those companies' rough market value. Insider sales have many ordinary causes such as pre-planned 10b5-1 sales, taxes and diversification, so the line is context and not evidence of anything.
Simple exampleThe line shows how many shares the people who run AI companies sold, minus what they bought, in one quarter. People sell shares for many everyday reasons, like paying taxes, so the line is just information.
Insider net selling in a quarter is the dollar value of insider sales minus insider purchases, divided by a rough market value of the same companies.
Simple exampleCount what the grown-ups at a company sold, subtract what they bought, and compare it with how big the companies are. If you sold 5 cards and bought 2, your net is 3. Then compare that with your whole collection.
- \text{sales}_qdollar value of open-market insider sales (Form 4 code S) in quarter q
- \text{purchases}_qdollar value of insider purchases (code P) in quarter q
- \text{MV}_qa rough market value of the companies in the sample, from shares outstanding times average transaction price
The equity share of new issues is net stock issuance over four quarters divided by net stock plus net debt issuance over the same four quarters.
Simple exampleSay a club raised money by selling shares and by borrowing. This formula asks what fraction of the total came from selling shares. If $2 came from shares and $8 from loans, the share is 20%.
- s_qequity share of net new issues in percent
- E4_qnet equity issuance by nonfinancial corporations summed over four quarters
- D4_qnet debt securities and loans summed over four quarters
The payment-in-kind share is the total income paid in kind across the funds divided by their total investment income.
Simple exampleAdd up all the interest that borrowers added to their debt instead of paying in cash, then divide by all the interest the lenders earned. If 1 out of every 10 dollars was like that, the share is 10%.
- \text{PIK}_{b,q}income paid in kind reported by fund b in quarter q
- \text{TII}_{b,q}total investment income of fund b in quarter q
- ban individual BDC in the sample
With straight-line depreciation, yearly expense is cost divided by life. The effect is the extra yearly expense from a 3-year life instead of a stated life of L years.
Simple exampleIf a $300 computer is written off over 3 years, it costs $100 a year. If written off over 5 years, it is $60 a year. This formula finds that yearly difference, as a what-if.
- Ggross cost of the server, network and computer equipment class
- Lthe upper end of the useful life the company states, in years
- \text{effect}illustrative extra yearly depreciation, later compared with pre-tax income
- Insider
- An officer, director or large owner of a public company who must report their trades to the SEC on Form 4.
- 10b5-1 plan
- A pre-arranged trading plan that lets insiders schedule future sales in advance, so the timing is set before the trades happen.
- BDC (business development company)
- A publicly listed fund that lends to or invests in mid-sized private companies, a major part of private credit.
- PIK (payment in kind)
- Interest that is added to the loan balance instead of being paid in cash.
- Non-accrual
- A loan on which the lender has stopped counting interest as income because payment is in doubt.
- Depreciation
- The gradual write-off of the cost of equipment over its estimated useful life.
- Useful life
- The number of years a company estimates equipment will be used, which sets how fast its cost is written off.
- S-1 and F-1
- Registration statements that companies file with the SEC before offering shares to the public.
Full technical specification (for specialists)
Model
AI exposure: insider selling, issuance, narrative, private credit, server lives, profit concentration and foreign ownership
Specification
Insider value v_j = shares_j x price_j for each transaction row j (Form 4/5 non-derivative table).sales_q = sum_j v_j [code S, officer or director, original Form 4/5, filed in quarter q]; purchases_q = same with code P; net_sales_q = sales_q - purchases_q.MV_q = sum_i S_i,q x Pbar_i,q, S_i,q = shares outstanding with the latest period end among the facts FILED by the end of q (first-filed value per period end): cover-page dei:EntityCommonStockSharesOutstanding, else balance-sheet us-gaap:CommonStockSharesOutstanding, else 3-month diluted weighted-average shares us-gaap:WeightedAverageNumberOfDilutedSharesOutstanding (source per company in diagnostics.insider.share_source); Pbar_i,q = sum_j shares_j price_j / sum_j shares_j over issuer i's S, P and F rows in q; net_sales_pct_mcap_q = net_sales_q / MV_q x 100 (issuers with MV only, numerator and denominator alike). Split guard: when MV_i,q differs from the median of up to two quarters on each side by more than a factor 2.5 and a cover-page share jump of at least 1.8x lies within 200 days, shares and pre-split prices are rebased by the split ratio (diagnostics.insider.split_guard).TTM insider net selling = sum of the last 4 quarters of net_sales / mean of their MV x 100.Equity share s_q = E4_q / (E4_q + D4_q) x 100, E4 = 4-quarter sum of Z.1 FU103164103 (net equity issuance, NFCB), D4 = 4-quarter sum of FU104104005 (net debt securities and loans, NFCB); null if E4 + D4 <= 0 (Baker and Wurgler 2000 use gross issues; deviation disclosed). Only quarterly observations enter E4 and D4: before 1952 the FRED Z.1 flow series hold one annual value per year (dated YYYY-10-01), and an observation preceded by a gap of more than 95 days is treated as annual and left out, so the first equity share is 1952Q4.IPO registrations_q = count(S-1) + count(F-1) original registration statements filed in q.AI share_q = sum_f AI_f,q / sum_f ALL_f,q x 100, f in {10-K, 10-Q, 8-K}.PIK share_q = sum_b PIK_b,q / sum_b TII_b,q x 100 over BDCs b with both tagged (PIK_b = InterestIncomeOperatingPaidInKind, else InterestAndDividendIncomeOperatingPaidInKind which includes PIK dividends, else a company figure; concept per BDC in pik_concepts); non-accrual share_q = sum_b NA_b,q / sum_b FV_b,q x 100 (NA at fair value; = tagged % of fair value x FV when only the percentage is tagged).Server-life effect = G x (1/3 - 1/L), G = gross cost of the tagged server / network / computer equipment class, L = UPPER END of the stated useful-life range in years (srt:MaximumMember when the 10-K tags a range, e.g. 5-6 years -> 6; the upper end gives the larger illustrative effect); lower-end variant G x (1/3 - 1/L_min) when L_min >= 3 years; pct_of_pretax = effect / P x 100; headline = sum of effects / sum of P x 100 (the interpretation also states the lower-end figure).P = fiscal-year pre-tax income of the latest 10-K: the 10-K's non-dimensional 12-month (350-380 day) fact ending at the fiscal-year end, in order: us-gaap IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest, ...MinorityInterestAndIncomeLossFromEquityMethodInvestments, a company element named '...IncludingNoncontrollingInterestBeforeIncomeTaxes...', domestic + foreign; else the same standard elements from companyfacts (first filed).Concentration ratio_q = sum_{i in top 10} NI_TTM_i,q / (mean of CPATAX over the 4 quarters to q) x 100; NI_TTM = 12-month fact or sum of 4 consecutive discrete fiscal quarters (first-filed values) of the first concept with a TTM in that window among us-gaap NetIncomeLoss, ProfitLoss, NetIncomeLossAvailableToCommonStockholdersBasic (never mixed within a window; fallbacks listed in members_alt_ni_tag), assigned to calendar quarter q when the fiscal period ends between q and q + 14 days (52/53-week years), otherwise to the calendar quarter in which it ends. Companies whose float ranks above the 10th member but that lack a TTM for q are listed in float_top10_gaps.Foreign share_q = LM263064105_q / (LM893064105_q - LM263164105_q) x 100 (ROW holdings of U.S. corporate equities over the market value of U.S. issues).
Limitations
- The market value proxy uses cover-page shares outstanding where tagged; otherwise balance-sheet shares outstanding or 3-month diluted weighted-average shares (diagnostics.insider.share_source). A weighted-average count understates the shares outstanding in a quarter with a large share issuance, e.g. an IPO quarter (e.g. CoreWeave 2025Q2, whose proxy is far below its neighbouring quarters' and is listed in diagnostics.insider.split_guard as kept_no_split_nearby), so that company's proxy is understated in that quarter; its weight in the aggregate is small.
- Insider data cover only the ai_cash_quality companies that file Forms 4 (foreign private issuers do not); Rule 10b5-1 plan sales are distinguishable only from the quarter the AFF10B5ONE field appears; the flag is set per filing (at least one transaction in the filing was under a 10b5-1 plan), so sales_10b5_1_usd, which counts every sale in a flagged filing, is an upper bound on plan sales.
- Z.1 net flows differ from the gross issues Baker and Wurgler used; the share is null when net issuance of equity plus debt is not positive.
- S-1 and F-1 counts include non-IPO registrations (resale, SPAC, re-registrations).
- Full-text search starts in 2001; the 1999-2001 '.com' comparison is not available. A filing counts if any of its documents (including exhibits) contains the phrase.
- BDC XBRL tagging of financial statements is recent (about 2021 onward); non-accrual figures are used only where tagged, so coverage is partial; BDCs that are not listed are excluded.
- Server-life effects are illustrative: gross equipment classes differ by company (Microsoft's line 'Servers, network equipment, and software' includes software; Oracle's class includes machinery; servers are not separately reported for either), and actual depreciation depends on asset ages.
- Several 10-Ks state server lives as a range (e.g. two to six, five to six, five to 5.5 years); the headline uses the upper end of each range, which gives the larger illustrative effect; the lower-end figure is published alongside. effective_year is the calendar year (not the fiscal year) in which the upper-end life took effect; a later change of a subset of servers (e.g. Amazon 2025, six to five years) is shown in last_change_*.
- The BDC PIK numerator mixes concepts: PIK interest for most BDCs, PIK interest and dividends where only that element is tagged, and company-defined figures (pik_concepts, members_pik_dividends_included).
- Firm net income and NIPA profits are different concepts: firm net income is attributable to the parent, from worldwide operations and includes investment gains and losses; NIPA profits after tax are BEA's national-accounts measure of U.S. corporations' current-production profits, including net receipts of earnings from the rest of the world, excluding capital gains, with IVA and CCAdj. The concentration ratio is a scale indicator. Some filers tag net income only as ProfitLoss (which includes noncontrolling interests) or as the amount available to common stockholders (after preferred dividends) in some quarters; those quarters use that concept (members_alt_ni_tag).
- Dell Inc. (CIK 826083, public until October 2013) is not treated as a predecessor of Dell Technologies (DELL): Dell Inc. was taken private and DELL's shares began trading only in 2016/2018, a different registrant and security. The table therefore has no Dell in 2010-2012, although Dell Inc.'s own float ranked above the 10th member in the quarters listed (with the ratio each such row would have if Dell Inc. replaced the 10th member) in diagnostics.concentration.examined_not_predecessors. Spin-offs (Hewlett Packard Enterprise from Hewlett-Packard Co., which continued as HP Inc.) are likewise not predecessor relationships.
- Z.1 and NIPA data are latest vintage (revised); historical rows include revisions (no real-time claim).
- Nothing here forecasts prices, alleges wrongdoing or ranks stocks or people; it is not investment advice.
References
- Baker, M. & Wurgler, J. (2000). The equity share in new issues and aggregate stock returns. Journal of Finance 55(5), 2219-2257.
- Cooper, M. J., Dimitrov, O. & Rau, P. R. (2001). A rose.com by any other name. Journal of Finance 56(6), 2371-2388.
- Seyhun, H. N. (1988). The information content of aggregate insider trading. Journal of Business 61(1), 1-24.
- Lakonishok, J. & Lee, I. (2001). Are insider trades informative? Review of Financial Studies 14(1), 79-111.
- Kindleberger, C. P. & Aliber, R. Z. (2005). Manias, Panics, and Crashes: A History of Financial Crises, 5th ed. Hoboken, NJ: John Wiley & Sons.
- Minsky, H. P. (1986). Stabilizing an Unstable Economy. New Haven: Yale University Press.
- U.S. Securities and Exchange Commission, Insider Transactions Data Sets (Forms 3, 4 and 5), https://www.sec.gov/data-research/sec-markets-data/insider-transactions-data-sets.
- U.S. Securities and Exchange Commission, EDGAR full-text search (efts.sec.gov) and EDGAR full-index (https://www.sec.gov/Archives/edgar/full-index/).
- U.S. Securities and Exchange Commission, XBRL companyfacts API (https://data.sec.gov/api/xbrl/companyfacts/).
- Board of Governors of the Federal Reserve System, Z.1 Financial Accounts of the United States, table F.51.1.s / L.224 Corporate equities, and sector flows of nonfinancial corporate business.
- U.S. Department of the Treasury, Treasury International Capital (TIC) system (reference for foreign portfolio holdings; the Z.1 rest-of-world line used here incorporates TIC data).
- U.S. Bureau of Economic Analysis, National Income and Product Accounts, Table 1.12 (corporate profits after tax with IVA and CCAdj), via FRED series CPATAX.
What warned before past crashes?
This page counts how many financial and economic indicators are currently in the range they reached before past Nasdaq bear markets and US recessions, and shows how often each one has raised false alarms.
Why it matters
Big stock market declines can hit retirement savings, house values and jobs, and many people wonder whether anything usually flashes beforehand. The record shows that some indicators did move before past declines, but many also lit up when nothing bad followed. This page describes conditions and history only: it does not say when or whether any fall will happen, and it is not investment advice.
How it works
For each indicator, the model asks whether today's reading is unusually extreme compared with everything seen so far, usually the top or bottom tenth of its own history, or beyond a published threshold such as an inverted yield curve. If so, that indicator's warning light is on. The model then looks back at past Nasdaq bear markets (falls of 20% or more) and at US recessions, and counts how often each light was on in the year before, how often it was on when nothing followed, and how many months of warning it gave. Think of a house with many smoke alarms: some ring before every fire, some ring for toast, and counting both tells you which alarms to take more seriously. The lights are rules fixed in advance and the readings use only data that had been published by each date.
The latest readings
The number of warning lights currently on, out of the indicators with enough data to be scored; a light is on when its reading is in the range it reached before past declines. More lights on means more indicators resemble past pre-decline conditions, but many lights have given false alarms and this does not say when or whether a fall happens.
Simple exampleImagine a house with lots of smoke alarms and you count how many are beeping right now. Each beeping alarm means one thing looks like it did before some past trouble. But alarms also beep for burnt toast, so a count is a clue about conditions, not a promise.
Model note4 of 23 indicators are in the range they reached before past declines; this describes current conditions, not what markets will do.
The same lights counted at the March 2000 Nasdaq peak, using only data published by then, so you can compare today's count with a famous past top. Fewer indicators existed back then, and two house-price ratios are later reconstructions that nobody could see at the time.
Simple exampleThis counts the same alarms as they were back at a famous high point in 2000. It is like checking how many alarms were beeping on the day before an old storm, so you can compare with today. Some alarms had not even been invented yet.
Model noteUnder the same rules, 5 of the 17 indicators with data for that date were lit at that peak, including 2 Case-Shiller house-price ratios (0 lit) that are backcasts first published in 2007; fewer indicators existed then.
The same lights counted at the October 2007 Nasdaq peak, using only data published by then, which gives a second past top to compare today's count against. It describes what the lights showed then, not what they will show before any future decline.
Simple exampleThis is the same alarm count taken at another old high point, in 2007. Having two past days to compare with is better than one, like checking two old report cards. It only shows what the alarms said then, not what any future day will bring.
Model noteUnder the same rules, 7 of the 19 indicators with data at the time were lit at that peak.
Among indicators that cover at least three bear markets, this is the best (lowest) noise-to-signal ratio, meaning the fewest false alarms for each correct warning. Lower is better, but it rests on few events, so it is a rough guide and does not guarantee the light will work next time.
Simple examplePicture the alarm that rings for real fires but almost never for toast. This number scores how often an alarm cries wolf compared with how often it is right. Smaller is better, but it has only seen a few fires, so it might get lucky.
Model noteAmong indicators covering at least three bear markets, this one had the lowest false-alarm rate relative to its hit rate in the 12 months before past peaks; its light is off at its latest reading (data for Sep 2026).
How far the Nasdaq Composite index sits below its highest-ever closing level: zero means a record high and more negative means a bigger fall from the peak. A fall of 20% or more is called a bear market.
Simple exampleThink of climbing a hill and then stepping back down. This is how far below the highest point ever reached the stock index is right now. Zero means standing on top, and a bigger minus number means you have walked farther down the hill.
Model noteThe index closed 3.2% below its 06 Oct 2026 high.
Typical rangeBetween -55.66 and -4.04 in half of all readings since Jan 3, 2000 (middle 50%; the outer 10th to 90th percentile band is -63.18 to -0.599). The latest reading sits at the 77th percentile.
The share of indicators that were lit in the year before at least half of the bear markets they cover; the rest were usually quiet beforehand. Higher means more indicators had a decent warning record, but it is a look-back at history, not a forecast.
Simple exampleImagine asking a group of alarms whether they rang before at least half of the past fires. This is the share that said yes. The others stayed quiet most times, so a lot of alarms are not very useful on their own.
Model note7 of 23 indicators were lit in the 12 months before at least half of the bear markets they cover; the rest were usually quiet beforehand.
The number of Nasdaq Composite declines of 20% or more since 1971, found by a fixed mechanical rule. It shows how often large falls have happened, which gives context for the hit rates and false-alarm rates elsewhere on this page.
Simple exampleA bear market is when prices fall by a fifth or more, like a 100-point test score dropping to 80. This counts how many times that has happened to this index in the records. It shows how common big drops are, not when the next one comes.
Model noteThe mechanical rule finds 14 declines of 20% or more since 1971, 8 of them 30% or deeper.
Warning-light scorecard (Nasdaq bear markets since 1971)
| Indicator | Warned before | False-alarm rate | Noise-to-signal | Median lead | Now |
|---|---|---|---|---|---|
| FINRA margin debt, real 12-month change | 2 of 5 | 1% | 0.04 | 7 mo | Off |
| Recession probability M1 (term spread probit, one-sided) | 4 of 13 | 3% | 0.26 | 14 mo | Off |
| Yen-carry fragility score | 3 of 5 | 8% | 0.32 | 22 mo | Off |
| Yield curve 10y minus 3m (monthly average) | 6 of 13 | 11% | 0.38 | 18 mo | Off |
| Nasdaq Composite two-year price change | 1 of 13 | 1% | 0.38 | 12 mo | Off |
| Bubble pressure composite (as of quarter end) | 3 of 14 | 6% | 0.40 | 22 mo | ●On |
| Oil shock: WTI 6-month % change | 4 of 8 | 9% | 0.45 | 12 mo | Off |
| Household equity share of financial assets | 7 of 14 | 30% | 0.63 | 24 mo | ●On |
| Funding stress index | 1 of 6 | 3% | 0.68 | 4 mo | Off |
| Real house prices (Case-Shiller / CPI, Jan 2000 = 100) | 4 of 7 | 34% | 0.69 | 24 mo | ●On |
| SLOOS: net % of banks tightening credit-card standards | 3 of 7 | 19% | 0.75 | 23 mo | Off |
| Nonfinancial corporate equities / GDP | 7 of 14 | 40% | 0.80 | 24 mo | ●On |
| Real-rate shock: 12-month change in the 10y real yield | 6 of 14 | 11% | 0.86 | 20 mo | Off |
| Recession probability M2 (spread, EBP, real funds rate; one-sided) | 3 of 9 | 7% | 1.11 | 13 mo | Off |
| VIX term-structure slope (OLS across 9d-6m) | 3 of 4 | 11% | 1.28 | 14 mo | Off |
| House price-to-rent ratio (Case-Shiller / CPI rent, Jan 2000 = 100) | 3 of 7 | 27% | 1.28 | 24 mo | Off |
| US credit-to-GDP gap (BIS) | 1 of 14 | 2% | 1.38 | 4 mo | Off |
| Banks' unrealized gains/losses on securities, % of equity | 3 of 4 | 38% | 2.31 | 23 mo | Off |
| Leveraged funds net yen futures position (% of open interest) | 1 of 4 | 12% | 2.95 | 9 mo | Off |
| SLOOS: net % of banks tightening C&I standards (large/middle) | 2 of 7 | 27% | 4.48 | 18 mo | Off |
| Asia: Nikkei 225 3-month % change | 1 of 14 | 14% | 4.68 | 19 mo | Off |
| Composite indicator of systemic stress (US) | 1 of 7 | 15% | 6.48 | 19 mo | Off |
| World news tone factor (one-sided) | 0 of 1 | 6% | — | — | Off |
Noise-to-signal below 1 means the light did better than chance in the past; above 1, worse. Past warnings say nothing certain about the next decline.
The bear markets used (declines of 20% or more)
| Episode | Peak | Trough | Decline |
|---|---|---|---|
| 1973-74 bear market | Jan 11, 1973 | Oct 3, 1974 | -60% |
| 1978 autumn sell-off | Sep 13, 1978 | Nov 14, 1978 | -20% |
| 1980 bear market | Feb 8, 1980 | Mar 27, 1980 | -25% |
| 1981-82 bear market | May 29, 1981 | Aug 13, 1982 | -29% |
| 1983-84 bear market | Jun 24, 1983 | Jul 25, 1984 | -32% |
| 1987 crash | Aug 26, 1987 | Oct 28, 1987 | -36% |
| 1989-90 bear market | Oct 9, 1989 | Oct 16, 1990 | -33% |
| 1998 LTCM / Russia sell-off | Jul 20, 1998 | Oct 8, 1998 | -30% |
| 2000-02 dot-com bust | Mar 10, 2000 | Oct 9, 2002 | -78% |
| 2007-09 global financial crisis | Oct 31, 2007 | Mar 9, 2009 | -56% |
| 2018 fourth-quarter sell-off | Aug 29, 2018 | Dec 24, 2018 | -24% |
| 2020 COVID crash | Feb 19, 2020 | Mar 23, 2020 | -30% |
| 2022 rate-rise bear market | Nov 19, 2021 | Dec 28, 2022 | -36% |
| 2025 tariff sell-off | Dec 16, 2024 | Apr 8, 2025 | -24% |
One line shows how many warning lights were on at each month end, and the other shows how many indicators had enough data to be scored then. The second line rises over time as newer indicators start. Compare the first line with its own past: more lights on means more indicators were in their pre-decline ranges, but many lit lights were followed by no decline at all, and the chart does not say what happens afterward.
Simple exampleOne line counts how many alarms were beeping each month, and the other counts how many alarms existed to listen to. New alarms get added over the years, so that second line grows. Notice when the beeping count was high before, but remember that alarms sometimes beep for nothing.
An indicator's light is on when today's reading ranks in the most extreme tenth of all readings seen so far, counting high values or low values as the warning side depending on the indicator. Some indicators use a fixed published threshold instead.
Simple exampleThink of a mountain of past report cards. Today's grade counts as an alarm only if it is in the top tenth (or bottom tenth for some subjects) of every grade ever recorded. Being extreme compared with its own history is what switches the light on.
- x_i(t)value of indicator i that was publicly known at month end t
- d_idirection: +1 if high readings are the warning side, -1 if low readings are
- F_i(t)share of past readings that are no more extreme than today's, between 0 and 1
- n_i(t)number of past readings available, which must be at least 36 months
- \mathbf{1}\{\cdot\}equals 1 when the condition inside is true and 0 otherwise
Of all the months that came before a bear market or recession, the share in which the light was on.
Simple exampleSuppose a friend yells 'storm coming' and you check all the days that really did come before storms. The hit rate is the share of those days when your friend was already yelling. A high hit rate means your friend usually spoke up in time.
- Amonths when the light was on and a decline followed within the window
- Cmonths when the light was off and a decline followed within the window
Of all the months that were not followed by a decline, the share in which the light was on anyway.
Simple exampleNow look at all the calm days with no storm. The false-alarm rate is the share of those calm days when your friend yelled anyway. It is like a smoke alarm that goes off for toast: lower means fewer annoying false alarms.
- Bmonths when the light was on but no decline followed within the window
- Dmonths when the light was off and no decline followed within the window
The false-alarm rate divided by the hit rate. Lower is better: a value near 0 means few false alarms per correct warning, and 1 or more means the light is no better than guessing. It is undefined if the light never preceded a decline.
Simple exampleDivide the false alarms by the correct warnings. If a smoke alarm rings for toast as often as for real fires, the score is 1, and that is no better than guessing. A score close to 0 means almost every ring was a real one.
- B/(B+D)the false-alarm rate
- A/(A+C)the hit rate
- Bear market
- A fall of 20% or more in a stock index from its previous peak. Here it is measured on the Nasdaq Composite, and a fall that briefly recovers but never makes a new high is counted as one episode.
- Warning light
- A simple on-or-off flag for one indicator. It is on when the latest reading is in the extreme range, or beyond a published threshold, that it reached before past declines. It describes conditions and is not a prediction.
- Hit rate
- Of the months that came before a decline, the share in which a given light was on. A high hit rate means the light usually flashed beforehand.
- False alarm
- A month when a light was on but no decline followed within the window. Like a smoke alarm triggered by toast, it signals that conditions looked risky even though nothing bad happened.
- Noise-to-signal ratio
- The false-alarm rate divided by the hit rate. Lower values mean fewer false alarms for each correct warning, and values at or above 1 mean the light was no better than chance.
- Lead time
- How many months before a peak a light first came on. It varies a lot from one episode to the next, so the typical lead time is a rough guide only.
- Look-back (back-test)
- Checking an indicator against what already happened in history. Results from a look-back describe the past and rest on few events, so they can be fragile.
- Drawdown
- The percentage distance of an index below its previous highest closing level. Zero means a record high and larger negative values mean a deeper fall.
Full technical specification (for specialists)
Model
Crash watch: warning lights and a crash look-back
Specification
As-of value: x_i(t) = value of the newest observation j of indicator i with release_j <= t, missing if t - release_j exceeds 45 days (daily/weekly), 75 days (monthly) or 200 days (quarterly). release_j = period end + lag (see diagnostics.release_lags), capped at the fetch date of the cache holding the value (crash_watch's extra-data fetch; bubble_watch's cache_fetched for bubble_watch-sourced series); SLOOS survey month m -> end of m+1; Case-Shiller month m -> the quarterly national release (last Tuesday of the 2nd month after the quarter end) for quarters up to 2014Q2, the last Tuesday of m+2 afterwards; CISS week (Friday) -> next federal business day (H.10 FX inputs); carry fragility day d -> next federal business day after the Friday of d's week (H.10 weekly release); Z.1-based quarters -> the official Z.1 release date, except mv_gdp (a ratio to GDP) -> max(quarter end + 90 days, official Z.1 release): the 90 days are bubble_watch's ratio-to-GDP convention (BEA third GDP estimate), so e.g. 2019Q1 (Z.1 out 2019-06-06) is used from 2019-06-29; bubble_pressure quarter qe -> max(qe, official Z.1 release of quarter qe-1).Grid: month ends from Jan 1950 before the as-of date, plus the as-of date; deciles rank against the whole grid history, while flags are evaluated and reported from Feb 1971 (first NASDAQCOM month end).Decile rule (Hollo-Kremer-Lo Duca style weak ECDF rank): F_i(t) = #{s <= t on grid, x_i(s) observed : d_i x_i(s) <= d_i x_i(t)} / n_i(t), d_i = +1 (high = warning) or -1 (low = warning); flag_i(t) = 1{F_i(t) >= 0.90}, defined only when n_i(t) >= 36.Threshold rule: flag = 1{x < 0} for the 10y-3m spread; 1{x > 100} for the Nasdaq two-year run-up (GSY); 1{x > 20} for SLOOS net tightening; 1{x > 10} for the credit-to-GDP gap (BCBS 2010).Bear market legs (Lunde-Timmermann 2004 filter, lambda = 20% both ways): in a bull phase track the peak P; a bear starts when close <= 0.8 P; in a bear track the trough T; it ends when close >= 1.2 T, and a new bull phase starts there. Legs are merged into one episode while each new leg's peak is below the previous leg's peak. Event date = episode peak; decline_pct = 100 (T_min / P - 1); months_to_trough = month(T) - month(P).NBER peak = month before USREC turns from 0 to 1; event date = first day of the peak month.KLR counts (window W months): month t with an observed flag is 'event follows' iff some event e has t < e <= t + W; A = flag & follows, B = flag & not, C = no flag & follows, D = neither. Months with no event in (t, t + W] are censored (dropped) when t + W lies beyond the end of the data or, for the bear targets, when (t, t + W] contains the current running peak P* (highest close since the last bear's trough; it becomes an event date only if a 20% fall follows).hit_rate = A / (A + C); false_alarm_rate = B / (B + D); noise_to_signal = [B / (B + D)] / [A / (A + C)] (undefined when A = 0).lead_months(e) = month(e) - month(t1), t1 = first flagged grid month in [e - 24 months, e); events_warned = #{e in sample : some flag in [e - W months, e)}; an event is in sample iff the indicator's first defined flag precedes it.value_at_peak = 100 x #{s : x(s) <= x(e)} / n over grid values dated before e plus x(e) (raw percentile, not direction-adjusted).Price-to-rent = 100 (HPI_m / RENT_m) / (HPI_2000-01 / RENT_2000-01); real house prices = 100 (HPI_m / CPI_m) / (HPI_2000-01 / CPI_2000-01).Real-rate shock: dRR_d = DFII10_d - DFII10_(d-12m) when DFII10 exists 12 months earlier (from 2004); before, rr_d = DGS10_d - pi10_d, pi10 = 100 [(CPI_m / CPI_(m-120))^(1/10) - 1] for the newest CPI month released by d, and dRR_d = rr_d - rr_(d-12m). 'Released by d' uses the official BLS release date of each CPI month (BLS 'Release dates for the Consumer Price Index, 1953-2000' table, then the BLS CPI news-release archive from 2001; before 1990 BLS usually released 21-25 days after the month end, Dec 1995 CPI only on 1996-02-01); a month absent from that calendar would be dated month end + 32 days (the longest official lag 1953-2003).Bank securities losses: UGL_q = (SCAF - SCAA) + (SCHF - SCHA) (fair value minus amortized cost, AFS + HTM, all insured institutions); ugl_pct_equity = 100 UGL_q / EQ_q; validation: 100 UGL_q / (SCAA + SCHA) vs QBP Chart 7 within 0.15 pp.Oil shock = 100 (WTI_d / WTI_(d-6m) - 1); Asia = 100 (N225_d / N225_(d-3m) - 1); X_(d-k) = last close on or before that date.lights_monthly: n_lights(t) = sum_i flag_i(t); n_available(t) = #{i : flag_i(t) defined}.
Limitations
- Latest-vintage data: Z.1, NIPA, CPI, Case-Shiller, Call Report, BIS and FRED histories include later revisions, so the look-back is point-in-time with respect to release timing only, not to data vintages.
- Several upstream inputs carry in-sample elements: carry fragility uses full-sample GJR parameters; the funding stress index ranks each component within an in-sample start-up block (1997-2020 stretches); the rates probit p_m1/p_m2 in-sample versions are not used, but the one-sided versions p_m1_rt/p_m2_rt are fitted on USREC as coded today (latest vintage; the 6-20 month NBER announcement lag is ignored upstream), so the recession-probability lights in the year or so after each business-cycle peak are partly hindsight-informed and not strictly real-time; the world tone factor's loadings are re-estimated monthly.
- Few events: 14 bear markets since 1971 and 7 recessions; many indicators start late (world tone 2019, FDIC securities losses from 2012Q1, VIX slope 2011, yen positioning 2008) and the decile rule needs 36 months of history, so their rates rest on one to four events and are fragile.
- Monthly flags inside overlapping windows are serially dependent; hit and false-alarm rates are descriptive counts with no p-values or confidence statements.
- The FDIC BankFind aggregates are used only from the first quarter after which they match the QBP Chart 7 series (from 2012Q1 in the current data); earlier quarters are not reproduced by the API and are skipped.
- Expanding-window deciles of trending series (equity/GDP, household equity share) are naturally high at record levels; a lit light describes extremeness relative to the indicator's own history, not timing.
- The S&P/Case-Shiller U.S. National index did not exist before its February 2007 launch (as a quarterly index; monthly from the June 2014 data): price_to_rent and real_house_prices values before 2007, including their contribution to the 2000-peak lights and 'with data' count (the headline names them as backcasts), are a retrospective backcast that nobody could observe at the time, even though they are dated by the quarterly calendar.
- Conventional lags can be too early when official releases were delayed: during the October-November 2025 federal shutdown BEA published Personal Income and Outlays for September 2025 (core PCE, used by the rates M2 probit) on 2025-12-05 and BLS published the September 2025 CPI (deflator of bubble_watch's real margin debt) on 2025-10-24, later than the one-month and 21-day conventions. The lights_monthly history for Oct-Nov 2025 may therefore use values before they were published. Those two months are censored in the KLR counts for W = 12 and 24 months and for the recession target (outcome window still open or provisional), but not for the three bear-market targets at W = 6 months, where they enter as months with no event in the next 6 months.
- bubble_pressure (bubble_watch) includes Shiller CAPE components (cape, excess_cape_yield) from Robert Shiller's Yale online data, an academic source rather than an official statistic.
- Nothing here forecasts a crash or a recession, and nothing is investment advice.
References
- Kaminsky, G., Lizondo, S. and Reinhart, C. M. (1998). Leading Indicators of Currency Crises. IMF Staff Papers 45(1), 1-48.
- Borio, C. and Lowe, P. (2002). Asset prices, financial and monetary stability: exploring the nexus. BIS Working Papers No. 114.
- Estrella, A. and Mishkin, F. S. (1998). Predicting U.S. Recessions: Financial Variables as Leading Indicators. Review of Economics and Statistics 80(1), 45-61.
- Greenwood, R., Shleifer, A. and You, Y. (2019). Bubbles for Fama. Journal of Financial Economics 131(1), 20-43.
- Lown, C. and Morgan, D. P. (2006). The Credit Cycle and the Business Cycle: New Findings Using the Loan Officer Opinion Survey. Journal of Money, Credit and Banking 38(6), 1575-1597.
- Lunde, A. and Timmermann, A. (2004). Duration Dependence in Stock Prices: An Analysis of Bull and Bear Markets. Journal of Business and Economic Statistics 22(3), 253-273.
- Basel Committee on Banking Supervision (2010). Guidance for national authorities operating the countercyclical capital buffer. Bank for International Settlements, December 2010.
- Board of Governors of the Federal Reserve System. Senior Loan Officer Opinion Survey on Bank Lending Practices (series DRTSCILM, DRTSCLCC via FRED).
- Federal Deposit Insurance Corporation. Quarterly Banking Profile (Chart 7, Unrealized Gains (Losses) on Investment Securities) and BankFind Suite financial data API (Call Report aggregates).
- National Bureau of Economic Research, Business Cycle Dating Committee (USREC via FRED).
- S&P Dow Jones Indices / Cotality. S&P Cotality Case-Shiller U.S. National Home Price Index (CSUSHPINSA via FRED); national index launched quarterly in February 2007, monthly from the June 2014 data (2014-08-26).
- Board of Governors of the Federal Reserve System. H.10 Foreign Exchange Rates (weekly, published Mondays).
- 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.
- Shiller, R. J. (2015). Irrational Exuberance, 3rd ed. Princeton University Press; online data (Yale University), CAPE inputs to bubble_watch.bubble_pressure (academic source, not official).
Which boom-bust stages show signs today?
This page uses a classic five-stage story of booms and busts to organize indicators already published on this site, and shows how many in each stage are in an unusually high or low range for their own history.
Why it matters
Economists Hyman Minsky and Charles Kindleberger described how many past booms and busts went through similar phases, from a new opportunity to over-borrowing, excitement and eventual stress. Sorting indicators into those phases gives a simple way to see which parts of the story today's readings resemble. It describes conditions only: stage scores compare today's readings with the ranges seen before past declines, they are not predictions, and nothing here says when or whether a fall happens.
How it works
Each of the five stages (displacement, credit expansion, euphoria, distress and revulsion) has a fixed list of indicators, such as AI-related investment, corporate borrowing, stock valuations, insider selling or market stress. An indicator counts as on when its latest reading is in the most extreme fifth of its own history, or meets the fixed warning rule used on the Crash Watch page. A stage score is the share of its available indicators that are on, and a stage shows signs when at least half are on, a bit like a school report where each subject's grade is the share of checklist items ticked. The stages are not assumed to happen in order, several can show signs at once, and many indicators have short histories. The page does not say which stage comes next or when.
The latest readings
Displacement is the first stage in the story: a new technology or shift that opens big profit opportunities. The score is the share of its indicators, such as AI investment and AI mentions in company filings, that are in an extreme range, so higher means more are on.
Simple exampleImagine a new video game that everyone suddenly wants to play. This stage checks signs of a brand-new thing catching on, like shops spending more and more on it. The score is how many boxes on the checklist are ticked, out of the boxes we can check.
Model note4 of the 4 displacement indicators with data are in the range their rule marks as 'on' (top or bottom fifth of their own history, or crash_watch's fixed rule); this describes current readings, not what comes next.
Credit expansion is the stage when borrowing grows quickly to fund the new opportunity. The score is the share of its indicators, such as corporate debt and margin debt, that are in an extreme range for their own history, so higher means more are on.
Simple exampleWhen a new game is hot, people borrow money to buy more of it. This stage checks signs of lots of borrowing, like a kid taking out bigger and bigger loans from the class bank. The score is the share of checklist boxes ticked.
Model note2 of the 5 credit expansion indicators with data are in the range their rule marks as 'on' (top or bottom fifth of their own history, or crash_watch's fixed rule); this describes current readings, not what comes next.
Euphoria is the stage when prices and expectations run far ahead of past norms. The score is the share of its indicators, such as stock valuations, IPO filings and the stock share of household savings, that are in an extreme range, so higher means more are on.
Simple exampleThink of everyone at a party getting wildly excited and paying silly prices for a rare sticker. This stage checks signs of that kind of excitement. The score is the share of boxes ticked, and it only describes how things look today.
Model note5 of the 7 euphoria indicators with data are in the range their rule marks as 'on' (top or bottom fifth of their own history, or crash_watch's fixed rule); this describes current readings, not what comes next.
Distress is the stage when strain starts to show, for example insiders selling shares, borrowers paying in more debt instead of cash, or funding markets tightening. The score is the share of those indicators that are in an extreme range, so higher means more are on.
Simple examplePicture the party noticing a few cracks, like some people quietly selling their stickers or friends paying back loans late. This stage checks for those cracks. The score is the share of boxes ticked, and it is only a description.
Model note3 of the 7 distress indicators with data are in the range their rule marks as 'on' (top or bottom fifth of their own history, or crash_watch's fixed rule); this describes current readings, not what comes next.
Revulsion is the stage when a bust has taken hold and investors flee. The score is the share of its indicators, such as market stress measures, deep price falls and recession probabilities, that are in an extreme range, so higher means more are on.
Simple exampleThis is the moment the party turns sour and everybody wants out, like stickers suddenly being worth much less. This stage checks for those signs. The score is the share of boxes ticked, so a low score means few of those signs are showing.
Model note0 of the 5 revulsion indicators with data are in the range their rule marks as 'on' (top or bottom fifth of their own history, or crash_watch's fixed rule); this describes current readings, not what comes next.
The number of the five stages in which at least half of the available indicators are on. Stages can show signs at the same time, and the count says nothing about the order of the stages, which one comes after another, or when or whether any decline happens.
Simple exampleCount how many of five checklists have at least half their boxes ticked. Several lists can be ticked at once, and the lists are not a staircase you climb in order. The count describes today only and cannot say what happens later.
Model note2 of the 5 stages have at least half of their available indicators on (displacement, euphoria); stages can show signs at the same time and this says nothing about what comes next.
Stages today
| Stage | Score | Indicators on | Status |
|---|---|---|---|
| New technology (displacement) | 1.00 | 4 of 4 | ●Showing signs |
| Credit expansion | 0.40 | 2 of 5 | Not showing |
| Euphoria | 0.71 | 5 of 7 | ●Showing signs |
| Distress | 0.43 | 3 of 7 | Not showing |
| Revulsion | 0.00 | 0 of 5 | Not showing |
A stage shows signs when at least half of its available indicators are on. This describes today, not what comes next.
Same scoring at past peaks
| Stage | 2000Q1 | 2007Q3 | 2021Q4 | now |
|---|---|---|---|---|
| New technology (displacement) | 0.50 | 0.67 | 0.67 | 1.00 |
| Credit expansion | 1.00 | 1.00 | 0.40 | 0.40 |
| Euphoria | 0.67 | 0.50 | 0.67 | 0.71 |
| Distress | 0.00 | 0.00 | 0.20 | 0.43 |
| Revulsion | 0.00 | 0.00 | 0.00 | 0.00 |
Earlier dates use only the indicators that existed then, so fewer indicators count.
Five lines, one per stage, show the share of that stage's indicators that were on at each quarter end, from 0 (none) to 1 (all). A line at or above 0.5 means the stage shows signs. Compare today with past peaks, but note that early years rest on only a few indicators and a high score is not a prediction.
Simple exampleFive lines, one for each checklist, show how full each list was at the end of every three months. Zero means no boxes ticked and one means all ticked. It is like five thermometers over the years: you can compare past peaks with today, but thermometers do not tell the weather ahead.
An indicator is on when its latest reading ranks in the most extreme fifth of its own history, high or low depending on the indicator. Indicators scored by crash_watch use that module's own fixed light instead.
Simple exampleLine up every past report card for one subject. If today's grade sits in the top fifth (or bottom fifth for some subjects) of that whole line, we tick the box. It only says today's grade is unusual compared with the subject's own history.
- H_tall readings of the indicator that had been published by date t
- x_tthe latest published reading
- ddirection: +1 if high readings are extreme, -1 if low readings are
- F_tshare of past readings no more extreme than today's, between 0 and 1
- \mathbf{1}\{\cdot\}equals 1 when the condition inside is true and 0 otherwise
A stage's score is the number of its indicators that are on, divided by the number of its indicators that have data. Every indicator counts equally and no weights are tuned.
Simple exampleFor one checklist, count the ticked boxes and divide by how many boxes we could actually check. If 3 of 6 are ticked, the score is one half. Every box counts the same, just like every question on a quiz being worth one point.
- S_t(\mathrm{stage})stage score at date t, between 0 and 1
- \mathrm{on}_{i,t}1 if indicator i is on at date t, otherwise 0
- N_t(\mathrm{stage})how many of the stage's indicators have data at date t
A stage is described as showing signs when at least half of its available indicators are on. The cut-off was fixed in advance and not tuned on past episodes.
Simple exampleWe say a stage shows signs when at least half its boxes are ticked, like getting at least half the quiz questions right. We picked that halfway line before looking at the past, so nobody adjusted it to make old stories fit.
- S_t(\mathrm{stage})the stage score defined above
- 0.5the fixed cut-off: half of the available indicators
The percentage distance of the Nasdaq Composite below its previous highest close. It is zero at a record high and negative otherwise, and it feeds the revulsion stage.
Simple exampleImagine your best-ever high score in a game. The drawdown is how far your score now sits below that best one, as a percent. Zero means you are at your best, and a bigger minus number means you are further below it.
- P_tthe Nasdaq Composite closing level on date t
- \max_{s\le t}P_sthe highest close up to date t
- Displacement
- The first stage in the Kindleberger-Minsky story: a new technology, policy or shift that opens profitable opportunities and attracts money and attention.
- Credit expansion
- The stage when borrowing grows quickly, from banks, markets or investors using margin loans, to fund the new opportunity.
- Euphoria
- The stage when prices and expectations rise far beyond past norms, buyers pile in because prices have risen, and valuation worries are brushed aside.
- Distress
- The stage when strain starts to show: insiders sell, borrowers struggle to pay in cash, and lenders become more cautious.
- Revulsion
- The stage when confidence breaks and investors rush to sell and avoid the asset, usually alongside price falls and market stress.
- Stage score
- The share of a stage's available indicators that are on, from 0 to 1. A stage shows signs when the score is 0.5 or more.
- Own-history rule
- An indicator counts as on when its latest reading is in the most extreme fifth of everything published for it so far. It describes where the reading sits, not a threshold for a crisis.
- Short history
- A flag for indicators with less than five years of data. With little history it is easier for a reading to look extreme, so these scores deserve extra caution.
Full technical specification (for specialists)
Model
Minsky stages: which stages of the boom-bust story do the published indicators show?
Specification
Released history of indicator i: {(l_k, x_k, r_k)}, l = period label, r = release date = upstream convention (see mapping), capped at the upstream run date and made non-decreasing in l. Z.1-based indicators: r = max(l + convention days, official Z.1 release date of l) (70 days equity share, 90 days corp_debt_gdp; official calendar from 1996Q2).As of t: H_t = {x_k : r_k <= t, l_k <= t}; current value x_t = x of the latest label in H_t; unavailable if H_t is empty or t - r(x_t) > MAX_AGE (45 days daily/weekly, 75 monthly, 200 quarterly).Own-history rule: F_t = #{x in H_t : d*x <= d*x_t} / |H_t| (weak rank, x_t included), d = +1 (high) or -1 (low); on_t = 1[F_t >= 0.80] when |H_t| >= 8, else unavailable.Short history: l(x_t) < l_first + 5 years (same rule, flagged 'short history').crash_watch rule (where crash_watch scores the indicator): on_t = crash_watch's own light at t (lights_monthly row at t; top/bottom decile of its own as-of month-end history with >= 36 months, or a published threshold); available_t = 1[t >= crash_watch sample_start].Threshold rule (nasdaq100_2y): on_t = 1[x_t > 100] (percent change over 2 years).Stage score: S_t(stage) = sum_i on_{i,t} / N_t(stage), over the N_t indicators of the stage available at t; undefined if N_t = 0. Stage shows signs if S_t >= 0.5. No weights, no tuning.nasdaq_drawdown_t = 100 x (P_t / max_{s<=t} P_s - 1), P = NASDAQCOM daily close; sampled at month-end closes plus the latest close.insider_net_sales_ttm_pct_q = 100 x sum_{j<4} N_{q-j} / mean_{j<4} M_{q-j} (N = net sales of the issuers with a market-value proxy, M = that proxy; ai_exposure's own TTM formula).ipo_registrations_4q_q = sum_{j<4} (S-1 + F-1)_{q-j} over four consecutive quarters.Ecosystem aggregates (ai_cash_quality formulas, point in time): as of t, members of quarter q = quarterly filers with OCF and capex TTM in q first reported by t; ext_share = 100 x sum max(E_i, 0) / sum C_i; paper_gains_share = 100 x sum G_i / sum PT_i (sum PT > 0); receivables_gap = sum (R_i / sum R) x gap_i (R_i > 0); net_debt_issuance = sum D_i; q used only if n_q(t) >= ceil(0.8 x max(n_{q-7..q}(t))); release = latest member filing date.Mapping (fixed): displacement: ai_capex_gdp (bubble_watch bubble_quarterly.ai_capex_gdp; quintile rule, direction high; release: quarter end + bubble_watch nipa_third_estimate lag (90 days)) | displacement: ai_share_of_growth_4q (ai_reality productivity_quarterly.ai_share_of_growth_4q; quintile rule, direction high; release: quarter end + ai_reality bea_gdp_and_contributions lag (30 days)) | displacement: ai_use_share (ai_reality adoption.ai_use_share; quintile rule, direction high; release: Census publication date (adoption.release_date); ranked only within the current question wording (no splice across the 2025 wording change)) | displacement: ai_mention_share (ai_exposure narrative_quarterly.ai_share; quintile rule, direction high; release: quarter end + 1 day (EDGAR full-index quarter complete)) | credit_expansion: eco_net_debt_issuance_ttm (ai_cash_quality company_quarterly -> ecosystem aggregate (= group_quarterly[ecosystem].net_debt_issuance_ttm); quintile rule, direction high; release: point in time: recomputed from company_quarterly with the members whose quarter was first reported (filed) by t; quarter used only if its member count is >= 80% of the largest count over it and the 7 prior quarters; release = latest member filing date) | credit_expansion: eco_externally_funded_capex_share (ai_cash_quality company_quarterly -> ecosystem aggregate (= group_quarterly[ecosystem].externally_funded_capex_share); quintile rule, direction high; release: as eco_net_debt_issuance_ttm) | credit_expansion: bank_loans_ndfi_yoy (ai_cash_quality credit_channel.yoy_ex_breaks; quintile rule, direction high; release: H.8 release date (credit_channel.h8_released)) | credit_expansion: corp_debt_gdp (bubble_watch bubble_quarterly.corp_debt_gdp; quintile rule, direction high; release: later of quarter end + bubble_watch nipa_third_estimate lag (90 days) and the official Federal Reserve Z.1 release date (debt is Z.1 BCNSDODNS; calendar from 1996Q2)) | credit_expansion: margin_yoy_real (crash_watch lights_monthly (margin_yoy_real); cw rule, direction high; release: crash_watch release convention) | euphoria: mv_gdp (crash_watch lights_monthly (mv_gdp); cw rule, direction high; release: crash_watch release convention) | euphoria: cape (bubble_watch monthly.cape (Shiller, Yale: academic source); quintile rule, direction high; release: month end (bubble_watch convention)) | euphoria: hh_equity_share (crash_watch lights_monthly (hh_equity_share); cw rule, direction high; release: crash_watch release convention) | euphoria: nasdaq100_2y (bubble_watch market_daily.nasdaq100_2y; threshold rule, direction high; release: same day) | euphoria: equity_share_new_issues (ai_exposure issuance_quarterly.equity_share; quintile rule, direction high; release: later of quarter end + 70 days (Z.1, ai_exposure as_of_rules) and the official Federal Reserve Z.1 release date (calendar from 1996Q2)) | euphoria: ipo_registrations_4q (ai_exposure issuance_quarterly.ipo_registrations (4-quarter sum); quintile rule, direction high; release: quarter end + 1 day (EDGAR full-index quarter complete)) | euphoria: backlog_to_revenue_orcl (ai_loops backlog_quarterly[company=Oracle].rpo_to_revenue; quintile rule, direction high; release: 10-Q / 10-K filing date (filed)) | euphoria: backlog_to_revenue_crwv (ai_loops backlog_quarterly[company=CoreWeave].rpo_to_revenue; quintile rule, direction high; release: 10-Q / 10-K filing date (filed)) | distress: insider_net_sales_ttm_pct (ai_exposure insider_quarterly (4-quarter net sales / mean market value); quintile rule, direction high; release: quarter end + 1 day (Form 4 rows grouped by filing date)) | distress: bdc_pik_share (ai_exposure private_credit_quarterly.pik_share; quintile rule, direction high; release: quarter end + 75 days (convention: 10-Q deadlines 40/45 days, 10-K 60/75/90 days; actual filings of the 8 BDCs <= 70 days)) | distress: bdc_nonaccrual_share (ai_exposure private_credit_quarterly.nonaccrual_share; quintile rule, direction high; release: quarter end + 75 days (convention: 10-Q deadlines 40/45 days, 10-K 60/75/90 days; actual filings of the 8 BDCs <= 70 days)) | distress: eco_receivables_gap (ai_cash_quality company_quarterly -> ecosystem aggregate (= group_quarterly[ecosystem].receivables_gap); quintile rule, direction high; release: as eco_net_debt_issuance_ttm) | distress: eco_paper_gains_share (ai_cash_quality company_quarterly -> ecosystem aggregate (= group_quarterly[ecosystem].paper_gains_share); quintile rule, direction high; release: as eco_net_debt_issuance_ttm) | distress: vix_ts_slope (crash_watch lights_monthly (vix_ts_slope); cw rule, direction low; release: crash_watch release convention) | distress: funding_stress (crash_watch lights_monthly (funding_stress); cw rule, direction high; release: crash_watch release convention) | revulsion: ciss (crash_watch lights_monthly (ciss); cw rule, direction high; release: crash_watch release convention) | revulsion: nasdaq_drawdown (crash_watch NASDAQCOM closes (the cached series behind crash_watch's nasdaq_drawdown headline); quintile rule, direction low; release: same day; month-end closes plus the latest close) | revulsion: rec_prob_m1 (crash_watch lights_monthly (rec_prob_m1, from rates); cw rule, direction high; release: crash_watch release convention) | revulsion: rec_prob_m2 (crash_watch lights_monthly (rec_prob_m2, from rates); cw rule, direction high; release: crash_watch release convention) | revulsion: ebp (rates recession_prob.ebp; quintile rule, direction high; release: month end + 1 month (crash_watch / rates M2 convention))
Limitations
- Data are latest-vintage (revised) values with point-in-time release dates by convention: past stage scores include later revisions and are not exactly what a reader would have seen at the time.
- Most AI-specific indicators start in 2010-2023, so past stage scores rest on fewer indicators (n_available in every table); 2000Q1 and 2007Q3 are scored only with the long-history indicators available then.
- Own-history ranks of trending series (dollar levels such as ecosystem net debt issuance, AI adoption shares) are high whenever the series is at a new high; a short history makes the top fifth easy to reach. Such indicators are flagged 'short history' when their history spans less than five years.
- The Census BTOS AI-use question changed wording in late 2025; the share is ranked only within the current wording, which leaves a short history.
- The NASDAQ Composite drawdown history is computed from the cached NASDAQCOM closes behind crash_watch's published nasdaq_drawdown headline (no new download); crash_watch publishes only the current value.
- Own-history ranks use the history published by the upstream module: CAPE from 1950 (bubble_watch's monthly table, although Shiller's data start in 1881), Z.1 and NIPA ratios from 1952, ecosystem aggregates from 2010.
- Ecosystem aggregates are recomputed point in time from company_quarterly (members whose quarter had been reported by t), but each member's values are the latest filed vintage (restatements included).
- Release conventions (BDC filings 75 days, EBP one month, EDGAR quarters next day, BEA GDP contributions 30 days, NIPA ratios 90 days) are approximations of actual publication dates and ignore calendar exceptions such as the late-2025 shutdown delay of the Q3-2025 GDP releases (those delayed BEA releases still came out before the 2025-12-31 quarter end). The two Z.1-based indicators (equity_share_new_issues: 70 days; corp_debt_gdp: 90 days) are instead dated by the later of the convention and the official Federal Reserve Z.1 release date (federalreserve.gov/releases/z1/release-dates.htm, cached by crash_watch, from 1996Q2), because two Z.1 releases came after the next quarter end (2003Q3 on 2004-01-15, 2025Q3 on 2026-01-09); with the 70-day convention alone the 2003Q3 equity share would be used at 2003-12-31, 15 days before publication. Quarters before 1996Q2 keep the day-count convention. A later release date also makes a value 'fresh' for longer under the staleness rule, which can keep a Z.1 indicator available one quarter longer than the convention would.
- The Nasdaq Composite drawdown measures distance from the prior all-time high, not a fresh fall: after a large fall it stays in the bottom fifth of its own history for years (every quarter end from 2000Q3 to 2007Q2 and from 2007Q4 to 2009Q4), so revulsion carries at least 0.2 (1 of 5 indicators) through 2001-2007; the spec's 'revulsion low in 2005' check passes at exactly 0.2 on this indicator alone.
- The 2000Q1 credit-expansion score rests on a single indicator (corp_debt_gdp): margin_yoy_real enters only from 2001-01-31 (crash_watch's 36-month rule) and the AI-ecosystem and bank-loan series start later.
- crash_watch-scored indicators use crash_watch's decile rule (top/bottom tenth), the rest the spec's quintile rule (top/bottom fifth): the two rules are not equally strict.
- A stage score describes the share of extreme readings; it does not measure the probability of a crisis, does not say which stage comes next or when, and is not investment advice.
- equity_share_new_issues is ai_exposure's NET ratio E4 / (E4 + D4) x 100 (Z.1 net equity and net debt issuance of nonfinancial corporations, 4 quarters), undefined when E4 + D4 <= 0 and strongly negative in buyback years, unbounded on both sides; its top-fifth rank is therefore not the Baker-Wurgler gross equity share in new issues: of the 258 published quarterly values (1952-12-31 to 2026-06-30), 135 are negative and 2 exceed 100% (minimum -3184% in 2006-06-30).
- Each indicator is assigned to one stage only although some (e.g. CAPE, credit spreads) are discussed under several stages in the literature.
References
- Kindleberger, C. P. & Aliber, R. Z. (2005). Manias, Panics, and Crashes: A History of Financial Crises, 5th ed. Hoboken, NJ: John Wiley & Sons (ch. 2, 'Anatomy of a Typical Crisis').
- Minsky, H. P. (1986). Stabilizing an Unstable Economy. New Haven: Yale University Press.
- Minsky, H. P. (1992). The Financial Instability Hypothesis. Jerome Levy Economics Institute of Bard College, Working Paper No. 74.
- Kaminsky, G., Lizondo, S. & Reinhart, C. M. (1998). Leading Indicators of Currency Crises. IMF Staff Papers 45(1), 1-48 (fixed signal rules).
- Greenwood, R., Shleifer, A. & You, Y. (2019). Bubbles for Fama. Journal of Financial Economics 131(1), 20-43 (100% two-year run-up threshold used by crash_watch).
- Baker, M. & Wurgler, J. (2000). The Equity Share in New Issues and Aggregate Stock Returns. Journal of Finance 55(5), 2219-2257 (equity share indicator, from ai_exposure; deviation: ai_exposure's share uses Z.1 NET equity and net debt issuance, not the gross issues Baker and Wurgler use, see limitations).
- Gilchrist, S. & Zakrajsek, E. (2012). Credit Spreads and Business Cycle Fluctuations. American Economic Review 102(4), 1692-1720 (excess bond premium, from rates).
- Shiller, R. J. (2015). Irrational Exuberance, 3rd ed. Princeton University Press (CAPE; monthly data from Yale, an academic source, via bubble_watch).
- Hollo, D., Kremer, M. & Lo Duca, M. (2012). CISS - A Composite Indicator of Systemic Stress in the Financial System. ECB Working Paper No. 1426 (via ciss / crash_watch).
How do these models compare with the Fed's?
This section lines up the site's own estimates next to well-known official ones, such as the Atlanta Fed's GDPNow and the Fed's recession model, to show where they agree, where they differ and by how much.
Why it matters
Any single model can be wrong, so checking it against respected public estimates is a basic honesty test. When the site's numbers and official numbers agree, readers can have more confidence in the overall picture; when they disagree, it signals real uncertainty. It also shows how well the site's models have performed in the past.
How it works
For each topic, the section takes the site's latest estimate and the most recent official estimate for the same period, and reports the difference. For GDP it also builds a track record: for each past quarter it compares each model's final estimate with the actual GDP figure and averages the size of the misses. Stress indexes built in different ways are compared by percentile rank within their own history rather than by raw level. It is like comparing your bathroom scale with the doctor's scale: small gaps are normal, large gaps are worth understanding, and a scale's past accuracy matters as much as today's reading.
The latest readings
The site's growth model estimates July to September 2026 real GDP growth at 3.3% at an annual rate, using data through September. The official figure has not been released yet.
Simple exampleGDP is the total value of everything a country produces, like the total sales of one giant lemonade stand. This is the site's own estimate of how fast that total grew in the most recent quarter, stated as a yearly pace, made before the official number comes out.
Model noteOur dfm model (backcast, data through 2026-09) puts 2026Q3 real GDP growth at 3.5% annualised.
Typical rangeBetween 1.25 and 3.51 in half of all readings since Jan 2000 (middle 50%; the outer 10th to 90th percentile band is -0.588 to 4.58). The latest reading sits at the 74th percentile.
The Atlanta Fed's GDPNow puts the same quarter at about 3.64%, 0.3 points above the site's estimate.
Simple exampleA second opinion on the same question from the Atlanta Fed, part of the US central bank system. Like asking two weather forecasters for tomorrow's temperature, comparing their numbers shows how much careful estimates can differ before the real answer is known.
Model noteAtlanta Fed GDPNow is 0.2 pp above our figure for the same quarter.
Typical rangeBetween 1.25 and 3.51 in half of all readings since Jan 2000 (middle 50%; the outer 10th to 90th percentile band is -0.588 to 4.58). The latest reading sits at the 79th percentile.
The New York Fed's Staff Nowcast puts the quarter at 2.67%, 0.7 points below the site's estimate. The site's figure sits between the two official nowcasts.
Simple exampleA third forecaster weighs in: the New York Fed's estimate of the same quarter's growth. When the guesses land close together the picture is clearer; when they are spread apart, the true number is harder to pin down.
Model noteThe NY Fed nowcast is 0.8 pp below our figure for 2026Q3.
Typical rangeBetween 1.25 and 3.51 in half of all readings since Jan 2000 (middle 50%; the outer 10th to 90th percentile band is -0.588 to 4.58). The latest reading sits at the 57th percentile.
The site's financial stress index is at the 39th percentile of its own history, meaning about 39% of past weekly readings were at or below today's level. That is below the middle of its range.
Simple exampleThe site's financial stress gauge works like a fever thermometer for markets. This rank says where today falls in its own history: a rank of 90 would mean at least as hot as 90% of past readings, while a low rank means calmer than most of its history.
Model noteOur stress index is at the 39th percentile of its own history (week ending 2026-10-16).
Typical rangeThis reading is itself a percentile of its own history, so its middle 50% is 25 to 75 by construction. The latest reading is 39.
The European Central Bank's US stress index is at the 23rd percentile of its history, 16 points lower than the site's version. Both point to below-average stress, though the official index reads calmer.
Simple exampleThe European Central Bank's stress thermometer for the US, ranked against its own history the same way. Two thermometers built differently can't be compared degree for degree, but comparing their ranks shows whether both read calm or both read stressed.
Model noteThe official ECB US CISS is at the 23rd percentile of its history, a 16-point rank gap.
Typical rangeThis reading is itself a percentile of its own history, so its middle 50% is 25 to 75 by construction. The latest reading is 23.
The site's recession model (M2) puts the chance of a US recession within 12 months at 3.6%. It is a model-implied estimate, not a certainty.
Simple exampleLike a forecast's chance of rain, this is the site's model estimate of the chance of a US recession, a broad and lasting drop in economic activity, within the next 12 months. It is an estimate, not a promise: even a small chance sometimes happens.
Model noteOur probit puts the 12-month recession probability at 3.6%.
Typical rangeBetween 0.785 and 26.59 in half of all readings since Jan 2000 (middle 50%; the outer 10th to 90th percentile band is 0.133 to 59.26). The latest reading sits at the 43th percentile.
The Fed's published model, based on credit market stress, gives 9.1%, which is 5.5 points higher than the site's estimate. Both are low, but they differ by several points, a reminder of how much model choice matters.
Simple exampleA second chance-of-rain forecast from a different forecaster: the Federal Reserve's published model, which reads signals of strain in borrowing markets. When two careful forecasts give different odds, it shows how much the answer depends on the method used.
Model noteThe Fed's EBP-based probability is 9.1%, 5.5 pp above ours.
Typical rangeBetween 11.33 and 27.67 in half of all readings since Jan 2000 (middle 50%; the outer 10th to 90th percentile band is 7.48 to 63.37). The latest reading sits at the 15th percentile.
Over 12 quarters where both exist, the site's GDP estimates had typical errors 0.96 times the size of GDPNow's, slightly smaller. However, the site's estimates were built with hindsight (in-sample) while GDPNow's were made in real time, so this comparison flatters the site's model.
Simple exampleA report card for forecasters: it compares the typical size of the site's past GDP misses with GDPNow's. Below 1 means the site's misses were smaller, above 1 means larger. One caution: a model built with hindsight gets an easier test than one making calls in real time.
Model noteOn 12 common quarters our in-sample nowcast has a smaller RMSE than GDPNow's real-time final nowcast (ratio 0.96), a larger MAE (1.23 vs 1.16 pp) and a lower correlation with the outcome (0.26 vs 0.65); ours is in-sample, so this flatters us.
Side by side with official estimates
Official sourceAtlanta Fed GDPNow
Our nowcast for 2026Q3 (3.45%, backcast, data through 2026-09, 68% band 1.9 to 5.1) is 0.19 pp below (in line with) GDPNow (3.64%, updated 2026-10-15).
Official sourceNY Fed Staff Nowcast
Our nowcast for 2026Q3 (3.45%) is 0.78 pp above the NY Fed Staff Nowcast (2.67%, nowcast, updated 2026-10-16); GDPNow and NY Fed differ by 0.97 pp.
Official sourceNY Fed Staff Nowcast (next-quarter forecast)
Our 2026Q4 forecast (3.13%) is 0.31 pp above the NY Fed next-quarter forecast (2.82%); GDPNow does not publish this horizon.
Official sourceCleveland Fed inflation nowcast
Last published core PCE YoY (3.01%, 2026-08) is 0.12 pp below Cleveland's nowcast for 2026-10 (3.13%), which is 2 month(s) ahead of the latest actual. Cleveland's nowcast for the still-unpublished 2026-09 is 3.05%.
Official sourceCleveland Fed inflation nowcast
Our underlying-inflation index (2.22%, 2026-08, core-PCE units) is 0.91 pp below the Cleveland core PCE YoY nowcast (3.13%); the two measure different things (common component of several measures vs one headline measure).
Official sourceECB CISS (US), CISS_OFFICIAL
Our weekly CISS (0.039) is 0.028 index points above the ECB US CISS (0.011) for the week ending 2026-10-16; the two constructions differ in inputs so levels are not directly comparable (weekly correlation 0.78).
Official sourceECB CISS (US), CISS_OFFICIAL
Our CISS sits at the 39th percentile of its own one-sided history since 1991-01-11 versus the 23rd for the official series, a rank gap of 16 percentile points.
Official sourceFed Board EBP file (Favara et al. 2016), est_prob
Our M2 probit gives 3.6% versus 9.1% from the Fed's EBP model (5.5 pp below the official figure, month 2026-09); over history they correlate 0.66 and differ by 16.6 pp on average.
Official sourceKim-Wright (Federal Reserve Board, THREEFYTP10)
On 2026-10-09 the ACM 10y term premium (0.90%) is 0.17 pp below Kim-Wright (1.07%); ACM's latest value is 0.75% on 2026-10-15, after Kim-Wright's last print.
Actual quarterly GDP growth is expressed as an annual rate so it can be compared with each nowcast.
Simple exampleGDP is measured every three months, but people talk about growth per year. This recipe takes one quarter's growth and asks what it would add up to if that pace continued for a whole year, the way one lap time can be turned into a pace for a full race.
- g_qactual real GDP growth in quarter q, annualized, in percent
- \text{GDP}_qreal GDP level in quarter q (latest revised data)
Each nowcast's miss is its estimate minus the actual value, and the misses are summarized by their average size and by a version that weights big misses more.
Simple exampleFor each past quarter, the miss is the guess minus what really happened, like how far a dart lands from the bullseye. The misses are then averaged two ways: one treats every miss equally, the other counts big misses extra heavily so a few wild throws stand out.
- x_qa model's final nowcast for quarter q
- e_qerror (miss) for quarter q
- nnumber of quarters compared
- \text{MAE}mean absolute error
- \text{RMSE}root mean squared error
The percentile rank is the share of past readings that were at or below today's reading.
Simple exampleLine up all past readings and see what share were at or below today's. It is like saying a child is in the 75th percentile for height: 75 out of 100 kids that age are the same height or shorter.
- vtoday's value
- Sthe set of past values in the common sample
- \#\{\cdot\}count of values meeting the condition
- |S|total number of past values
This simple test checks whether one model's squared misses are consistently smaller than another's, though with few quarters it is only indicative.
Simple exampleA fairness check between two forecasters: quarter by quarter, see whose miss was bigger (with big misses counting extra), then ask whether one wins consistently or just by luck. With only a few quarters, it is like judging two basketball players on a handful of shots: a hint, not proof.
- d_qdifference in squared errors between the two models in quarter q
- \bar{d}average of the differences
- s_dstandard deviation of the differences
- ttest statistic; values far from zero suggest a real accuracy difference
- Nowcast
- An estimate of current or just-finished economic data made before the official number is released.
- GDPNow
- The Atlanta Fed's publicly available model that tracks GDP growth for the current quarter in real time.
- NY Fed Staff Nowcast
- The New York Fed's model-based estimate of GDP growth for the current and nearby quarters.
- CISS
- Composite Indicator of Systemic Stress, an index of strain across financial markets developed at the European Central Bank.
- Percentile rank
- Where a value falls within its own history; the 39th percentile means 39% of past readings were at or below it.
- RMSE
- Root mean squared error, a summary of typical forecast misses that gives extra weight to large misses.
- In-sample vs real-time
- In-sample estimates are built using data that includes later information; real-time estimates use only what was known at the time, which is a harder test.
Full technical specification (for specialists)
Model
Benchmarks: our models versus official counterparts
Specification
GDP growth (SAAR) g_q = ((GDPC1_q / GDPC1_{q-1})^4 - 1) * 100, GDPC1 = real GDP, latest vintage (CONTRACT standard). Actual = this g_q.Final nowcast of quarter q: x_q = last estimate dated STRICTLY BEFORE the BEA advance-release date P_q (GDPNow: its own archive; NY Fed: last Friday before P_q, using GDPNow's file for P_q; estimates older than 28 days at P_q are dropped). Quarter-end variant: last estimate dated <= quarter-end.NY Fed real-time flag: an estimate dated d is a real-time publication iff d >= 2016-04-08 (launch) and NOT 2021-08-28 <= d <= 2023-09-07 (suspension, whose file values are relaunch backfill); 'real-time publications only' rows score a quarter only when its FINAL pre-advance estimate satisfies this (flag set from the estimate date, not from the reference quarter).Release dates (point-in-time): core PCE month m usable on/after its real first-publication date R_m (BEA Personal Income and Outlays release: table of the shutdown-shifted dates 2025-09 -> 2025-12-05, 2025-10 and 2025-11 -> 2026-01-22, 2025-12 -> 2026-02-20, 2026-01 -> 2026-03-13; otherwise the ALFRED first-release date of PCEPILFE; only a month in neither table uses month_end(m) + 28 d); EBP / recession probability month m on/after month_end(m) + 10 d (assumed); GDPC1 quarter q on/after the BEA advance date (GDPNow file) else quarter_end + 30 d; dfm row shown iff month_end(info_through) <= as-of (selection only; the row content is not point-in-time); dfm status relabelled from the BEA advance date (released iff advance date <= as-of).NY Fed mapping: on forecast date d with file reference quarter R, 'nowcast' -> target R, 'backcast' -> R-1 (quarter ended, GDP not yet released), 'forecast' -> R+1.Errors e_q = x_q - g_q. MAE = mean|e|, RMSE = sqrt(mean e^2), n = number of quarters. Naive benchmark: mean(g_{q-4..q-1}).Paired loss test: d_q = e_ours,q^2 - e_other,q^2; t = mean(d) / (sd(d)/sqrt(n)), two-sided p from t(n-1) (Diebold-Mariano 1995 with h = 0, no HAC; DEVIATION: small n, treat as indicative only).Cleveland final nowcast of month T: last non-null value of {m0 on dates in T, m1 on dates in T+1}; compared with actual YoY_T = (PCEPILFE_T/PCEPILFE_{T-12}-1)*100 and MoM_T = (PCEPILFE_T/PCEPILFE_{T-1}-1)*100.Agreement statistics: corr_levels = Pearson corr of the two series on common dates; corr_changes = Pearson corr of k-step differences (k = 4 weeks CISS, 1 month for probabilities and inflation, 1 weekly row for term premium); mean_abs_diff = mean |a - b|.Percentile rank of value v in sample S: 100 * #{s in S: s <= v} / |S|. Rank gap = rank_ours - rank_official, both within the same common one-sided weekly sample.panel_now.difference = ours - official, in the unit stated in the 'unit' column; comments are generated from the numbers with fixed tolerances (GDP 0.25 pp, inflation 0.1 pp, CISS 0.005, probabilities 1 pp, term premium 0.05 pp).
Limitations
- Common GDP sample is short (about 12 quarters since our nowcast table starts in 2023Q3): MAE/RMSE differences are noisy and the loss test has little power. RMSE alone flatters ours: on the common sample our MAE is larger than GDPNow's and our correlation with the outcome is much lower (a forecast near the sample mean can win on RMSE); see diagnostics.gdp_track.mae_common / corr_with_actual_common and the gdp_errors corr_actual column.
- GDPNow and NY Fed are compared at their pre-advance final update, which has more information than 'ours' at quarter-end data; quarter-end variants are reported for a timing-matched view.
- Cleveland YoY errors mix nowcast error with later revisions of the price index; MoM errors are cleaner.
- CISS: our index and the ECB's differ in inputs (US indicators, ECDF windows), so level differences are expected; ranks and changes are the meaningful comparison. The latest week is a partial W-FRI mean.
- Recession probabilities share inputs (EBP, term spread), so agreement is partly mechanical; M2 is in-sample.
- ACM and Kim-Wright are both model-based estimates of an unobservable; neither is 'truth'.
- All official series are as archived by the publishers; revisions to GDPNow/NY Fed workbooks after publication are not tracked.
References
- Higgins, P. (2014). GDPNow: A Model for GDP 'Nowcasting'. Federal Reserve Bank of Atlanta Working Paper 2014-7.
- Bok, B., Caratelli, D., Giannone, D., Sbordone, A. and Tambalotti, A. (2018). Macroeconomic Nowcasting and Forecasting with Big Data. Annual Review of Economics 10, 615-643 (NY Fed Staff Nowcast).
- Knotek, E. S. and Zaman, S. (2017). Nowcasting U.S. Headline and Core Inflation. Journal of Money, Credit and Banking 49(5), 931-968 (Cleveland Fed inflation nowcast).
- Chavleishvili, S. and Kremer, M. (2023). Measuring systemic financial stress and its risks for growth. ECB Working Paper 2842 (ECB CISS).
- Hollo, D., Kremer, M. and Lo Duca, M. (2012). CISS - a composite indicator of systemic stress in the financial system. ECB Working Paper 1426.
- Favara, G., Gilchrist, S., Lewis, K. F. and Zakrajsek, E. (2016). Recession Risk and the Excess Bond Premium. FEDS Notes, Board of Governors, 8 April 2016.
- Adrian, T., Crump, R. K. and Moench, E. (2013). Pricing the term structure with linear regressions. Journal of Financial Economics 110(1), 110-138.
- Kim, D. H. and Wright, J. H. (2005). An arbitrage-free three-factor term structure model and the recent behavior of long-term yields and distant-horizon forward rates. FEDS 2005-33.
- Diebold, F. X. and Mariano, R. S. (1995). Comparing predictive accuracy. Journal of Business and Economic Statistics 13(3), 253-263.
Caveats and disclaimer
- These models describe current conditions. They are not forecasts of prices and they can be wrong.
- Historical charts use today's revised data unless a series is labelled one-sided or real-time.
- Our GDP nowcast's historical error is compared with the Atlanta Fed's GDPNow on 12 common quarters; ours is in-sample, which flatters it.
- Audits are run by AI review agents, not by an outside firm, and a passed audit does not mean a model is right.
Economy Vitals is a research and education project. It publishes model-implied readings of the economy computed from public data. It is not investment advice and not a recommendation to buy, sell or hold any security or asset. Nothing here is personalized; it does not know anyone's circumstances, goals or holdings. Probabilities are model outputs, not predictions of what will happen. Past patterns do not guarantee future results. Consult a licensed financial professional before making any investment decision.
Data: FRED (Federal Reserve Bank of St. Louis) and the agencies it redistributes, U.S. Treasury, Federal Reserve Board, Federal Reserve Banks of New York, Atlanta, Cleveland, San Francisco, Chicago and Dallas, Japan Ministry of Finance, European Central Bank, OECD, Bank for International Settlements, CFTC, Cboe, and the GDELT, Economic Policy Uncertainty and Geopolitical Risk research indices. Shaded areas on charts mark US recessions as dated by the NBER. All trademarks belong to their owners.