The Curve Moves in Three Shadows
A yield curve is a vector pretending to be a line.
At one moment it has a 6-month rate, a 2-year rate, a 10-year rate, a 30-year rate, and everything between. Traders draw it as one smooth object because the human eye likes continuity. Risk systems see a vector:
[6m, 1y, 2y, 3y, 5y, 7y, 10y, 20y, 30y]
Then the day changes.
Which thing moved?
One answer is to name every maturity. Another is to find the few shapes that explain most of the movement. In fixed income, those shapes have familiar nicknames:
level
slope
curvature
The first lifts or lowers the whole curve. The second twists short rates against long rates. The third bends the belly against the wings.
This is not just market poetry. Litterman and Scheinkman used principal components to show that a small number of common factors explained much of the variation in Treasury-based bond returns, with the factors corresponding to level, steepness, and curvature.1 The names stuck because the pictures were useful.
Useful is not the same as complete.
A Curve Lab
The lab below simulates daily yield changes across nine maturities. The hidden data-generating process uses three smooth shapes, then adds idiosyncratic maturity noise. The browser computes the covariance matrix of yield changes, does a Jacobi eigen-decomposition, orients the first three principal components, and prices a zero-coupon curve shock exactly.
The default run is deliberately clean: the first principal component explains
about 73.9% of variance, and the first three explain about 93.3%. The
10-year zero-coupon return under the default shock is about -1.21%; the pure
duration approximation is about -1.22%.
Move Noise upward. The three-factor story degrades. Move Slope shock or Curvature shock and watch the price damage migrate across maturities.
Deterministic browser experiment. Yields are simulated from smooth level/slope/curvature shocks plus maturity-specific noise; the principal components are estimated from the simulated changes, not hard-coded. The exported audit checks the PCA and pricing invariants behind the display.
The four panels are deliberately different views of the same object.
The top-left panel shows the zero curve before and after the factor shock. The top-right panel shows estimated principal-component loadings. The bottom-left panel is the variance ledger. The bottom-right panel prices the shock for zero-coupon bonds of different maturities.
The important habit is to read the panels together.
factor movement -> curve movement -> price movement
A 25 bp level shock is not a 25 bp price shock. Price damage is filtered through maturity, duration, convexity, and the exact location of the curve move.
The reproducibility hook is YieldCurvePcaLab.audit(). It runs 5,084
deterministic checks over the simulated samples: covariance symmetry,
orthonormal eigenvectors, trace and explained-variance identities, reconstruction
from eigenpairs, sign-oriented PC shapes, noise degradation, exact zero-coupon
pricing, duration/convexity formulas, deterministic seeds, and input clamping.
The audit is intentionally fussy because a PCA chart can look plausible even
when the factor math has quietly drifted.
PCA Is A Coordinate Choice
Principal components do not know what a central bank is.
They see a covariance matrix and choose orthogonal directions that explain variance. If maturities move together, the first component will often look like a level shift. If short rates move against long rates, another component will look like slope. If the belly moves against the wings, another will look like curvature.
That makes PCA a useful coordinate system for curve risk:
portfolio exposure to PC1
portfolio exposure to PC2
portfolio exposure to PC3
But the labels are interpretations after the fact. The signs of eigenvectors are arbitrary. The components depend on the sample window, maturities, data frequency, transformations, and whether you use yields, yield changes, returns, forward rates, or excess returns.
The New York Fed paper “Deconstructing the Yield Curve” is a good modern caution. It notes that smooth ordered data can produce principal-component loadings with familiar shapes, and that strong persistence can make low-factor structure look cleaner than it really is unless the data are transformed carefully.2
So the right sentence is not:
there are exactly three forces in interest rates
It is:
in this representation and sample, three smooth directions explain a lot of
observed variation
Less dramatic. More useful.
Nelson-Siegel Is The Other Map
PCA learns loadings from a sample. Nelson-Siegel starts with a functional shape.
Nelson and Siegel introduced a parsimonious curve model whose components can represent monotonic, humped, and S-shaped yield curves.3 In the common Diebold-Li interpretation, the three time-varying coefficients are read as level, slope, and curvature factors; Diebold and Li then forecast those factors dynamically.4
The difference matters.
PCA says:
given these data, here are the orthogonal directions that explained variance
Nelson-Siegel says:
given this basis, here are the factor coefficients that fit the curve
The lab borrows Nelson-Siegel-like smooth basis functions to generate data, but then it makes PCA rediscover the directions from simulated changes. That is why raising Noise breaks the clean story. The hidden basis is still there, but the covariance matrix sees more maturity-specific disturbance.
Duration Is A Local Linear Story
For a zero-coupon bond with maturity \(T\) and continuously compounded yield \(y\),
\[P=e^{-yT}.\]A small yield change \(\Delta y\) gives the first-order approximation
\[\frac{\Delta P}{P} \approx -T\Delta y.\]That is duration. Add the next term,
\[\frac{\Delta P}{P} \approx -T\Delta y + \frac{1}{2}T^2(\Delta y)^2,\]and you see convexity.
For small shocks, the duration line is nearly enough. For large shocks and long maturities, the curve in price-yield space starts to matter. In the lab, the bottom-right panel compares exact zero-coupon returns against the duration-plus-convexity approximation. It is close for the default shock because the move is modest. Push Level shock hard and long maturities remind you why fixed-income risk managers do not stop at DV01.
This also explains why “the curve moved 20 bp” is an incomplete statement. A 20 bp move at the 6-month point and a 20 bp move at the 30-year point have very different price consequences.
What The Three Shadows Hide
The level/slope/curvature language is powerful because it compresses.
It is dangerous for the same reason.
A curve move can be:
- a monetary-policy surprise concentrated at the front end;
- an inflation-risk repricing at the long end;
- a liquidity premium in specific tenors;
- a collateral or scarcity effect;
- a flight-to-quality move;
- an issuance-supply effect;
- a measurement artifact from bootstrapping and interpolation.
Some of those will project neatly onto three principal components. Some will not. Some will look like a familiar factor until the portfolio contains the one instrument whose basis risk is in the residual.
That residual matters. If a hedging book is neutral to PC1, PC2, and PC3, it is not neutral to the yield curve. It is neutral to the first three directions in a particular historical coordinate system.
The leftover directions may be small most days. They are allowed to matter on the day you care about.
The Report I Want
For a real curve-risk report, I would want:
- the maturities and instruments used to build the curve;
- whether PCA was applied to yields, yield changes, forwards, returns, or excess returns;
- the sample window and data frequency;
- explained variance by component;
- component loadings, with sign conventions stated;
- portfolio exposures to each factor;
- residual risk outside the selected factors;
- scenario shocks that are not constrained to historical PCs;
- price P&L, not just yield movement;
- stress tests for local curve moves and basis breaks.
The last two are where the risk becomes real. Factors describe the curve. Money is lost through instruments.
A Useful Lie, Kept Honest
Level, slope, and curvature are a useful lie.
They are not false. They are a compression. They let a desk say “we are long the belly” or “this book is exposed to a bear steepener” without listing every maturity. They let a model forecast a curve by forecasting a few factors. They let a risk report turn a smooth object into a ledger.
But the curve is still a vector. Every compression should leave a receipt:
what was explained?
what was ignored?
what portfolio was priced?
what scenario would hurt anyway?
The yield curve moves in three shadows often enough that the shadows deserve names.
Just do not mistake the shadows for the whole room.
Paper Trail
-
Robert Litterman and Jose Scheinkman, “Common Factors Affecting Bond Returns”, Journal of Fixed Income, 1991. A short practitioner summary is Tao Wu, “What Makes the Yield Curve Move?”, Federal Reserve Bank of San Francisco Economic Letter, 2003. ↩
-
Richard K. Crump and Nikolay Gospodinov, “Deconstructing the Yield Curve”, Federal Reserve Bank of New York Staff Report No. 884, revised 2024. ↩
-
Charles R. Nelson and Andrew F. Siegel, “Parsimonious Modeling of Yield Curves”, Journal of Business, 1987. Author-hosted PDF: Bocconi mirror. ↩
-
Francis X. Diebold and Canlin Li, “Forecasting the Term Structure of Government Bond Yields”, Journal of Econometrics, 2006. Working-paper PDF: UCM mirror. ↩