The term structure of interest rates
There is not one interest rate, there is a curve of them. Lend money for three months and you earn one rate; lend for thirty years and you earn another. The term structure — the map from maturity to yield — is the central object of fixed-income finance, and almost everything in this chapter is a way to produce it from a smaller set of moving parts.
The cleanest coordinate is the zero-coupon bond \(P(t,T)\): the price today (time \(t\)) of one dollar paid with certainty at maturity \(T\), with no coupons along the way. Every fixed cash flow is a bundle of these, so the function \(T \mapsto P(t,T)\) — the discount curve — prices any default-free instrument by linearity. From it, three equivalent descriptions of the same information:
Empirically the curve is usually upward-sloping (long money pays more, compensating for term risk and expected rate rises), occasionally flat, and sometimes inverted — short rates above long rates, the historically reliable recession signal that appeared across 2022–2024 before normalizing. A good model must be able to produce all three shapes without re-tuning, and it must let the curve evolve randomly, because that randomness is exactly what interest-rate options pay off on.
In Quant 03 we held \(r\) constant and known — harmless for a three-month equity call. It is not harmless for a 30-year swap, a callable bond, or a swaption, where the underlying is the rate and its volatility drives the price. Treating \(r\) as a stochastic process is not a refinement here; it is the whole subject.
Short-rate models — the framework
A short-rate model posits a single stochastic differential equation (SDE) for the instantaneous short rate \(r_t\) under the risk-neutral measure \(\mathbb{Q}\), then derives every bond price as a risk-neutral expectation — the same machine as Quant 03's EQ Q3.1, now applied to the rate that does the discounting:
A model is called affine when the resulting yield is a linear (affine) function of the short rate. Affine models are the backbone of the field because they collapse the expectation in EQ Q4.2 into an exponential of \(r_t\):
Two more pieces of vocabulary that organize the whole zoo. A model is an equilibrium model if you specify the dynamics and read off whatever curve they imply (Vasicek, CIR); it is a no-arbitrage model if you instead let parameters become time-dependent so the model reproduces today's observed curve exactly (Hull–White, HJM). Equilibrium models are honest about the economics but generically misprice traded bonds on day one; no-arbitrage models fit by construction, at the cost of a function rather than a number to estimate. Production desks use no-arbitrage models because mispricing the hedging instruments is not an option.
Every model in this chapter is driven by a single Brownian motion. That means all points on the curve move in lockstep — a one-factor model cannot produce a yield curve that simultaneously steepens at the front and flattens at the back, and it forces perfect correlation between all rates. Principal-component analysis of real curves shows roughly three independent factors (level, slope, curvature). One-factor models survive because they are tractable and calibrate adequately to a single product; serious curve-and-vol work uses multi-factor or HJM/LMM frameworks (beyond this chapter).
Vasicek: mean reversion in its purest form
Vasicek (1977) wrote the simplest equation that captures the central stylized fact. The short rate is an Ornstein–Uhlenbeck process: a drift that always points back toward a long-run level, plus constant-magnitude Gaussian noise.
Because the equation is linear with additive Gaussian noise, it solves in closed form. Conditional on today's rate, the future rate is normally distributed:
Because Vasicek is affine, the bond-price coefficients of EQ Q4.3 have explicit closed forms:
The famous flaw. Because \(r_T\) is Gaussian, Vasicek assigns positive probability to negative rates. For decades this was treated as a fatal defect — until 2014–2021, when policy rates in the euro area, Japan, Switzerland and elsewhere actually went negative, and the "flaw" became a feature. The honest verdict in 2026: negative-rate capability is sometimes exactly what you want, but Vasicek's symmetric Gaussian tail can still send rates implausibly far below zero, and it cannot reproduce the way real volatility rises with the level of rates. That second point is what CIR fixes.
# Simulate Vasicek short-rate paths; check the long-run mean & variance (EQ Q4.5)
import numpy as np
rng = np.random.default_rng(0)
a, b, sig, r0 = 0.4, 0.03, 0.015, 0.06 # speed, level, vol, start
T, dt = 30.0, 1/52 # 30 years, weekly steps
n = int(T/dt); paths = 4000
r = np.full(paths, r0)
for _ in range(n): # Euler-Maruyama on dr = a(b-r)dt + sig dW
r += a*(b - r)*dt + sig*np.sqrt(dt)*rng.standard_normal(paths)
print(f"simulated mean at T : {r.mean():.5f} (theory b = {b})")
print(f"simulated var at T : {r.var():.6e} (theory sig^2/2a = {sig**2/(2*a):.6e})")
print(f"simulated std at T : {r.std():.5f} (theory = {np.sqrt(sig**2/(2*a)):.5f})")
print(f"fraction of paths below zero : {100*np.mean(r < 0):.2f} % <- Vasicek can go negative")
print(f"shock half-life ln2/a : {np.log(2)/a:.2f} years")
# Price a zero-coupon bond under Vasicek: closed form (EQ Q4.6) vs Monte Carlo (EQ Q4.2)
import numpy as np
rng = np.random.default_rng(0)
a, b, sig, r0, T = 0.3, 0.05, 0.02, 0.03, 5.0
def vasicek_bond(a, b, sig, r0, T): # closed form P(0,T)
B = (1 - np.exp(-a*T)) / a
lnA = (b - sig**2/(2*a**2))*(B - T) - (sig**2/(4*a))*B**2
return np.exp(lnA) * np.exp(-B*r0)
# Monte Carlo: simulate r, discount by exp(-integral r ds) per EQ Q4.2
dt = 1/250; n = int(T/dt); paths = 60000
r = np.full(paths, r0); acc = np.zeros(paths)
for _ in range(n):
acc += r*dt # accumulate integral of r
r += a*(b - r)*dt + sig*np.sqrt(dt)*rng.standard_normal(paths)
mc = np.exp(-acc).mean()
se = np.exp(-acc).std()/np.sqrt(paths)
cf = vasicek_bond(a, b, sig, r0, T)
print(f"closed-form P(0,{T:.0f}) : {cf:.6f} yield {-np.log(cf)/T:.5f}")
print(f"Monte-Carlo P(0,{T:.0f}) : {mc:.6f} (+/- {1.96*se:.6f}, 95% CI)")
print(f"gap (MC - CF) : {mc - cf:+.6f}")
Cox–Ingersoll–Ross: the square-root fix
Cox, Ingersoll and Ross (1985) kept Vasicek's mean-reverting drift but multiplied the noise by \(\sqrt{r_t}\). One small change buys two important properties.
Whether zero is truly unreachable depends on a sharp threshold. The Feller condition states the boundary at zero is inaccessible — rates stay strictly positive with probability one — exactly when:
CIR is still affine, so the bond price keeps the \(P = A\,e^{-B r_t}\) form — only the coefficients change, now built from \(\gamma = \sqrt{a^2 + 2\sigma^2}\):
Hull–White & fitting the curve exactly
Vasicek and CIR are equilibrium models: feed them constant parameters and they produce a curve, which will generally not match the curve quoted in the market this morning. For a trading desk that hedges with real bonds, a model that misprices its own hedging instruments at \(t = 0\) is unusable. Hull and White (1990) fixed this with one elegant move: make the drift's target time-dependent.
The function \(\theta(t)\) is not guessed — it is read off the market forward curve \(f(0,t)\) so that EQ Q4.2 returns the observed bond prices:
That trade-off is the whole reason the model zoo exists. There is no single best short-rate model; there is a menu of compromises along three axes — tractability, realism, and exact fit to the market — and which corner you choose depends on the product you must price and hedge.
| Model | SDE | r < 0? | Fits today's curve? | Where it wins |
|---|---|---|---|---|
| Vasicek | a(b − r)dt + σ dW | yes | no (equilibrium) | The pedagogical baseline; cleanest closed forms. |
| CIR | a(b − r)dt + σ√r dW | no (r ≥ 0) | no (equilibrium) | When positivity matters: nominal rates, default intensity, variance. |
| Hull–White | (θ(t) − a r)dt + σ dW | yes | yes (no-arbitrage) | Production desks; exact curve fit + closed-form swaptions. |
| Black–Karasinski | d ln r = (θ(t) − a ln r)dt + σ dW | no (r > 0) | yes | Lognormal rate, positive + curve-fitting; no closed-form bond. |
| G2++ / HW two-factor | two correlated Gaussian factors | yes | yes | Realistic curve moves (de-correlated front vs back). |
Where the field sits in 2026. One-factor Gaussian models (Hull–White, G2++) remain the default for vanilla rate derivatives because they are fast and calibrate cleanly. For the full smile of caps and swaptions, desks layer on the SABR stochastic-vol model per expiry/tenor, or move to the LIBOR/forward Market Model (LMM) framework, which models observable forward rates directly rather than the unobservable instantaneous short rate. The post-2021 transition from LIBOR to risk-free overnight benchmarks (SOFR, €STR, SONIA) reshaped the plumbing — discounting, fixings, and convexity adjustments — but left the short-rate mathematics of this chapter intact: SOFR-based curves are still bootstrapped to zero-coupon bonds, and Hull–White still prices the options on them.
Three of this chapter's instruments leaned on Monte-Carlo when no closed form was at hand — the Vasicek bond cross-check, CIR's non-central \(\chi^2\), every path-dependent exotic. Quant 05 makes that the main event: simulating SDEs properly (Euler vs Milstein, where discretization bias hides), variance reduction (antithetics, control variates, the closed-form Vasicek bond as its own control), quasi-random sequences, and why the same engine that priced these bonds prices the whole derivatives book.
References
- Vasicek, O. (1977). An Equilibrium Characterization of the Term Structure.
- Cox, J. C., Ingersoll, J. E. & Ross, S. A. (1985). A Theory of the Term Structure of Interest Rates.
- Hull, J. & White, A. (1990). Pricing Interest-Rate-Derivative Securities.
- Jamshidian, F. (1989). An Exact Bond Option Formula.
- Heath, D., Jarrow, R. & Morton, A. (1992). Bond Pricing and the Term Structure of Interest Rates: A New Methodology.
- Brigo, D. & Mercurio, F. (2006). Interest Rate Models — Theory and Practice (2nd ed.).