Arte SheetsLearn. Try. Understand.

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)FormulaExample (b0=4.5%, b1=-1.5%, b2=+2.0%)
Overnight Limit y(0)beta_0 + beta_10.0300 (3.00%)
Slope Loading L_1(1)(1 - EXP(-1)) / 10.6321
Curvature Loading L_2(1)L_1(1) - EXP(-1)0.2642
2-Year Spot / Instantaneous Forwardy(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.

Further reading