Financial Modeling
Nelson-Siegel Yield Curve Model: Level, Slope & Curvature Spot & Forward Rates
Fit parsimonious sovereign and corporate spot yield curves across any maturity tau using Charles Nelson and Andrew Siegel’s (1987) four-parameter level, slope, and medium-term hump loadings.
Why central banks fit curves with Nelson-Siegel beta_0, beta_1, and beta_2 factors
Polynomial splines oscillate wildly at long maturities when extrapolating 20- and 30-year discount factors. Nelson and Siegel (1987) solved this by expressing spot yield y(tau) as a linear combination of three economically interpretable Laguerre factor loadings governed by decay scale lambda (years): beta_0 (asymptotic long-run level as tau -> infinity), beta_1 (short-end minus long-end slope, so instantaneous overnight rate y(0) = beta_0 + beta_1), and beta_2 (medium-term hump or trough curvature peaking near tau = 1.793 * lambda).
With scaled maturity x = tau / lambda, the slope factor loading is L_1(x) = (1 - EXP(-x)) / x (approaching 1 as tau -> 0), the curvature loading is L_2(x) = L_1(x) - EXP(-x), and the instantaneous forward rate is f(tau) = beta_0 + beta_1 * EXP(-x) + beta_2 * x * EXP(-x).
| Curve Component (tau=2, lambda=2) | Formula | Example (b0=4.5%, b1=-1.5%, b2=+2.0%) |
|---|---|---|
| Overnight Limit y(0) | beta_0 + beta_1 | 0.0300 (3.00%) |
| Slope Loading L_1(1) | (1 - EXP(-1)) / 1 | 0.6321 |
| Curvature Loading L_2(1) | L_1(1) - EXP(-1) | 0.2642 |
| 2-Year Spot / Instantaneous Forward | y(2) vs f(2) | 0.0408 (4.08%) / 0.0468 (4.68%) |
Nelson-Siegel Spot Yield Formula (With tau = 0 Limit Guard)
Guard tau = 0 explicitly so overnight maturities return beta_0 + beta_1 without dividing 0 / 0 inside (1 - EXP(-x)) / x.
=IF(B6 = 0, ROUND(B2 + B3, 4), LET(x_sc, B6 / B5, load_slp, (1 - EXP(-x_sc)) / x_sc, load_crv, load_slp - EXP(-x_sc), ROUND(B2 + B3 * load_slp + B4 * load_crv, 4)))Nelson-Siegel Instantaneous Forward Rate Formula
Evaluate f(tau) = beta_0 + beta_1 * EXP(-tau/lambda) + beta_2 * (tau/lambda) * EXP(-tau/lambda) directly at any horizon.
=LET(x_sc, B6 / B5, ROUND(B2 + B3 * EXP(-x_sc) + B4 * x_sc * EXP(-x_sc), 4))Try the example
Use the original values or change them to test your understanding.