Term Structure of Interest Rates › Fundamental Rate Concepts

Michael BrenndoerferNovember 7, 202515 min read
Quantitative FinanceAll chapters
Part 2 of 15Equity and Fixed Income Markets
Chapter 12Term Structure of Interest Rates › Fundamental Rate Concepts
Reading section 2 of 8 · Fundamental Rate Concepts · 15 minSection 2 of 8 · 15 min

Book contents

Section 2 of 8 · 15 min read

Term Structure of Interest Rates › Fundamental Rate ConceptsOne section · Sections in this chapter2 / 8 ↓
Reading tools Definitions & inline links

Choose your expertise level to adjust how many terms are explained. Beginners see more tooltips, experts see fewer to maintain reading flow. Hover over underlined terms for instant definitions.

Article links

Make inline references clickable

Begin with spot rates, also called zero rates, and forward rates. A spot rate runs from today's settlement date to one maturity; a forward rate describes a future interval. Discount factors express the same curve as present-value multipliers. Throughout the examples, we use continuously compounded annual rates, a common currency and a single default-free reference curve unless stated otherwise.

Zero rates describe the promised nominal return on a single-payment investment held to maturity, provided the payment is made. Forward rates follow from current discounts for future intervals; they are not automatically forecasts of the rates that will prevail then. These representations let us value known payments on a consistent curve. Uncertain or option-dependent payments require additional modeling.

Zero-Coupon Rates

Zero-Coupon Rate

A zero-coupon rate (or zero rate) is the maturity-specific yield implied by an investment that starts today and makes a single promised payment at maturity, with no intermediate cash flows. Its interpretation depends on the currency, credit class and compounding convention of the curve.

The single-payment structure makes zero rates a useful starting point for discounting: no coupon payments need separate reinvestment assumptions. It does not remove inflation compensation, term premia or any credit and liquidity effects present in the chosen market curve.

Consider a zero-coupon bond that pays $100 in TT years and trades today at price PP. The fundamental question is: what annualized rate of return does this investment offer? The zero rate z(T)z(T) satisfies:

P=100⋅e−z(T)⋅TP = 100 \cdot e^{-z(T) \cdot T}

where:

  • PP: current market price of the zero-coupon bond
  • TT: time to maturity in years
  • z(T)z(T): continuously compounded zero rate for maturity TT
  • e−z(T)⋅Te^{-z(T) \cdot T}: the discount factor, representing how much $1 received at time TT is worth today

This equation shows that the price you pay today equals the future payment discounted back at the appropriate rate. The exponential form arises from continuous compounding, where interest accrues at every instant rather than at discrete intervals. Using continuous compounding simplifies many formulas and is standard in quantitative finance, even though actual market quotes often use different conventions.

Solving for the zero rate reveals how to extract the implied rate from observable prices:

P=100⋅e−z(T)⋅T(starting equation)P100=e−z(T)⋅T(divide by face value)ln⁡(P100)=−z(T)⋅T(take natural log)z(T)=−1Tln⁡(P100)(solve for z(T))\begin{aligned} P &= 100 \cdot e^{-z(T) \cdot T} && \text{(starting equation)} \\ \frac{P}{100} &= e^{-z(T) \cdot T} && \text{(divide by face value)} \\ \ln\left(\frac{P}{100}\right) &= -z(T) \cdot T && \text{(take natural log)} \\ z(T) &= -\frac{1}{T} \ln\left(\frac{P}{100}\right) && \text{(solve for } z(T) \text{)} \end{aligned}

There are no coupons to reinvest. If the bond pays in full and you hold it to maturity, its nominal return before taxes and fees is known. A sale before maturity exposes you to price changes, and the purchasing power of the final payment remains uncertain for a nominal bond.

Spot Rates and Their Relationship to Zero Rates

In yield-curve analysis, spot rate and zero rate normally mean the same maturity-specific single-payment yield. "Spot" identifies the present starting date, while "zero" identifies the absence of intermediate coupons. An advertised coupon or deposit rate may use different compounding or payment conventions and needs conversion before comparison.

Check settlement, currency and credit basis as well as compounding when comparing quoted rates. The Bank of England's yield-curve terminology uses spot and zero-coupon yields in this single-payment sense.

Discount Factors

While zero rates express the time value of money as an interest rate, discount factors express the same concept as a multiplier. The discount factor D(T)D(T) represents the present value today of receiving $1 at time TT:

D(T)=e−z(T)⋅TD(T) = e^{-z(T) \cdot T}

where:

  • D(T)D(T): positive discount factor for finite real z(T)z(T) and finite T≥0T\geq0; for T>0T>0, it is below 1 when z(T)>0z(T)>0, equals 1 when z(T)=0z(T)=0, and exceeds 1 when z(T)<0z(T)<0
  • z(T)z(T): continuously compounded zero rate for maturity TT
  • TT: time to maturity in years

Intuitively, the discount factor answers a simple question: how much would I pay today for a guaranteed $1 in TT years? At a fixed positive maturity, a higher zero rate produces a smaller discount factor. At T=0T=0, the factor is 1. With a constant positive zero rate, a longer wait also reduces the factor; with a constant negative rate, the factor instead increases with maturity. Across a general curve, the ordering depends on the rates at both maturities. A discount factor of 0.95 for one year means that $1 next year is worth $0.95 today. You would need to invest $0.95 now at the prevailing rate to have exactly $1 in one year.

Discount factors directly value known payments on a consistent curve. For a default-free bond paying fixed cash flows C1,C2,…,CnC_1, C_2, \ldots, C_n at times t1,t2,…,tnt_1, t_2, \ldots, t_n, its price is the sum of each payment multiplied by its corresponding discount factor:

P=∑i=1nCi⋅D(ti)P = \sum_{i=1}^{n} C_i \cdot D(t_i)

where:

  • PP: present value (price) of the bond
  • CiC_i: cash flow received at time tit_i
  • D(ti)D(t_i): discount factor for maturity tit_i
  • nn: total number of cash flows

The formula separates a known payment schedule from its discounts. A mortgage-backed security or an exotic rate derivative also needs a model for uncertain or optional payments. For example, under a suitable risk-neutral pricing measure QQ with the money-market account as numeraire, a single payoff XTX_T has price P0=EQ[e−∫0Trs dsXT]P_0=E^Q[e^{-\int_0^T r_s\,ds}X_T], assuming the relevant expectation exists. Here rsr_s is the model's short rate and XTX_T can depend on its path. This pricing expectation is different from a real-world forecast, and a random discount factor generally cannot be moved outside the expectation.

Out[2]:
Visualization
Matplotlib is building the font cache; this may take a moment.
Exponential decay curve showing discount factors falling from 1.0 at maturity 0 to about 0.22 at 30 years, with annotated values at 5, 10, 20, and 30 year maturities.
Discount factors D(T) for maturities from 0 to 30 years at a constant 5% zero rate. The present value of $1 decreases from $1.00 at maturity 0 to approximately $0.22 at 30 years. The proportional decay rate stays constant, while the absolute decline per additional year gets smaller as the curve flattens.

Forward Rates

Forward Rate

A forward rate is the interest rate implied by current spot rates for a loan that begins at a future date T1T_1 and matures at a later date T2T_2. It represents the rate that can be locked in today for future borrowing or lending.

If we know today's discount rates, what future-interval rate is consistent with them? An FRA can hedge a future reference rate, normally through cash settlement rather than by providing loan principal. The curve determines a fair contractual rate under matching conventions, not the contract's monetary price. Our continuously compounded forward f(T1,T2)f(T_1,T_2) converts to a simple rate L=(ef(T1,T2)δ−1)/δL=(e^{f(T_1,T_2)\delta}-1)/\delta over a year fraction δ=T2−T1\delta=T_2-T_1; actual FRA day-count, settlement and curve conventions must also match.

Suppose you know the zero rates for 1 year and 2 years. What rate can you lock in today for borrowing during the second year? This is the 1-year forward rate starting in 1 year, denoted f(1,2)f(1,2).

The logic relies on a no-arbitrage argument. Suppose the same default-free borrowing and lending curve is available, contracts are enforceable, and we ignore transaction costs and collateral or funding differences. Two strategies with identical dated cash flows must then have the same cost. Consider two ways to invest $1 for two years:

  1. Direct investment: Invest $1 for 2 years at rate z(2)z(2), receiving ez(2)⋅2e^{z(2) \cdot 2}
  2. Sequential investment: Invest $1 for 1 year at rate z(1)z(1), then reinvest the proceeds for another year at the forward rate f(1,2)f(1,2), receiving ez(1)⋅1⋅ef(1,2)⋅1e^{z(1) \cdot 1} \cdot e^{f(1,2) \cdot 1}

Both strategies start with $1 today and end with cash in two years. In this model, the direct investment fixes its nominal terminal payoff. The sequential strategy matches it only if the second-year rate is contracted today on the same basis, rather than left to the unknown future spot rate. For no arbitrage, the two terminal amounts must be equal:

ez(2)⋅2=ez(1)⋅1⋅ef(1,2)⋅1e^{z(2) \cdot 2} = e^{z(1) \cdot 1} \cdot e^{f(1,2) \cdot 1}

Solving step by step to extract the forward rate:

ez(2)⋅2=ez(1)⋅1⋅ef(1,2)⋅1(no-arbitrage condition)ez(2)⋅2=ez(1)+f(1,2)(combine exponents)z(2)⋅2=z(1)+f(1,2)(take natural log of both sides)f(1,2)=2⋅z(2)−z(1)(solve for forward rate)\begin{aligned} e^{z(2) \cdot 2} &= e^{z(1) \cdot 1} \cdot e^{f(1,2) \cdot 1} && \text{(no-arbitrage condition)} \\ e^{z(2) \cdot 2} &= e^{z(1) + f(1,2)} && \text{(combine exponents)} \\ z(2) \cdot 2 &= z(1) + f(1,2) && \text{(take natural log of both sides)} \\ f(1,2) &= 2 \cdot z(2) - z(1) && \text{(solve for forward rate)} \end{aligned}

This derivation reveals a fundamental relationship: the forward rate is determined entirely by the two endpoint zero rates. No additional market information is needed. The forward rate is fully implied by the spot curve.

More generally, the forward rate between times T1T_1 and T2T_2 is:

f(T1,T2)=z(T2)⋅T2−z(T1)⋅T1T2−T1f(T_1, T_2) = \frac{z(T_2) \cdot T_2 - z(T_1) \cdot T_1}{T_2 - T_1}

where:

  • f(T1,T2)f(T_1, T_2): forward rate for the period from T1T_1 to T2T_2
  • z(T1),z(T2)z(T_1), z(T_2): zero rates for maturities T1T_1 and T2T_2
  • T2−T1T_2 - T_1: length of the forward period in years

The numerator is the difference in logarithmic accumulation, z(T)T=−ln⁡D(T)z(T)T=-\ln D(T), between the two maturities. It is not a cash amount of interest. Dividing by the forward period's length gives its annualized continuously compounded rate.

This can also be expressed using discount factors:

f(T1,T2)=1T2−T1ln⁡(D(T1)D(T2))f(T_1, T_2) = \frac{1}{T_2 - T_1} \ln\left(\frac{D(T_1)}{D(T_2)}\right)

The ratio D(T1)/D(T2)D(T_1)/D(T_2) represents the growth factor from T1T_1 to T2T_2: it tells you how much $1 at time T1T_1 becomes by time T2T_2 at the implied forward rate. For positive discount factors and T2>T1T_2>T_1, a declining factor gives a ratio above 1 and a positive forward rate. Equal factors give a zero forward rate; an increasing factor gives a negative forward rate. The formula remains valid in all three cases.

Instantaneous Forward Rates

The forward rate formula leads to a limiting concept as the forward period shrinks. For a positive discount function D(t)D(t) that is differentiable at tt, the right-hand limit gives the instantaneous forward rate:

f(t)=lim⁡Δt↓0f(t,t+Δt)=−dln⁡D(t)dtf(t) = \lim_{\Delta t \downarrow 0} f(t, t + \Delta t) = -\frac{d \ln D(t)}{dt}

where:

  • f(t)f(t): today's instantaneous forward for future maturity tt, not the future short rate realized then
  • D(t)D(t): discount factor for maturity tt
  • Δt\Delta t: an infinitesimally small time interval
  • dln⁡D(t)dt\frac{d \ln D(t)}{dt}: the rate of change of the log discount factor with respect to time

This is today's curve-implied marginal rate for an interval starting at tt, not a guarantee about the rate a future deposit will earn. The limit concerns an infinitesimal tenor; "duration" has a separate meaning as a measure of price sensitivity. At a kink in ln⁡D\ln D, a two-sided derivative need not exist, so use one-sided rates where appropriate.

If ln⁡D\ln D is absolutely continuous on [0,T][0,T], D(0)=1D(0)=1 and T>0T>0, integrating the forward rates recovers the zero rate:

z(T)=1T∫0Tf(t) dtz(T) = \frac{1}{T} \int_0^T f(t) \, dt

where:

  • z(T)z(T): zero rate for maturity TT
  • f(t)f(t): today's instantaneous forward for future maturity tt
  • ∫0Tf(t) dt\int_0^T f(t) \, dt: accumulates all the instantaneous rates from today to maturity TT

This relationship shows that the zero rate is simply the average of all instantaneous forward rates from today to maturity. Just as your average speed on a trip is total distance divided by total time, the zero rate is the average of all the "speeds," or instantaneous rates, along the way. This interpretation provides insight into the relationship between spot and forward curves: the spot rate to any maturity represents the cumulative effect of all the marginal rates encountered along the path from today to that maturity.

Numerical Example: Computing Forward Rates

Let's work through a concrete example to solidify these concepts. Suppose you observe the following zero rates:

Observed zero rates for forward rate calculation.
Maturity (years)Zero Rate (%)
14.0
24.5
35.0

What is the forward rate for year 2 (i.e., borrowing from year 1 to year 2)?

We apply the forward rate formula, substituting the known zero rates:

f(1,2)=z(2)⋅2−z(1)⋅12−1(forward rate formula)=0.045×2−0.04×11(substitute values)=0.09−0.041(compute products)=0.05=5.0%(result)\begin{aligned} f(1,2) &= \frac{z(2) \cdot 2 - z(1) \cdot 1}{2 - 1} && \text{(forward rate formula)} \\ &= \frac{0.045 \times 2 - 0.04 \times 1}{1} && \text{(substitute values)} \\ &= \frac{0.09 - 0.04}{1} && \text{(compute products)} \\ &= 0.05 = 5.0\% && \text{(result)} \end{aligned}

And the forward rate for year 3:

f(2,3)=z(3)⋅3−z(2)⋅23−2(forward rate formula)=0.05×3−0.045×21(substitute values)=0.15−0.091(compute products)=0.06=6.0%(result)\begin{aligned} f(2,3) &= \frac{z(3) \cdot 3 - z(2) \cdot 2}{3 - 2} && \text{(forward rate formula)} \\ &= \frac{0.05 \times 3 - 0.045 \times 2}{1} && \text{(substitute values)} \\ &= \frac{0.15 - 0.09}{1} && \text{(compute products)} \\ &= 0.06 = 6.0\% && \text{(result)} \end{aligned}

Notice that forward rates can be quite different from spot rates. The 1-year forward rate starting in year 2 is 6%, even though the 3-year zero rate is only 5%. This happens because forward rates must be higher to pull up the average when the curve is upward sloping. If you want your cumulative average to keep rising, each new contribution must exceed the current average. The 6% forward rate for year 3 exceeds the 5% zero rate because it needs to pull the three-year average up from where the two-year average (4.5%) left off.

In[3]:
Code
import numpy as np

# Define zero rates (as decimals)
maturities = np.array([1, 2, 3])
zero_rates = np.array([0.04, 0.045, 0.05])

# Calculate forward rates for each year
forward_rates = []
for i in range(len(maturities)):
    if i == 0:
        # First forward rate equals the first spot rate
        f = zero_rates[0]
    else:
        t1 = maturities[i - 1]
        t2 = maturities[i]
        z1 = zero_rates[i - 1]
        z2 = zero_rates[i]
        f = (z2 * t2 - z1 * t1) / (t2 - t1)
    forward_rates.append(f)

forward_rates = np.array(forward_rates)

# Verify the calculation
print(f"Forward rate for year 2: {forward_rates[1] * 100:.1f}%")
print(f"Forward rate for year 3: {forward_rates[2] * 100:.1f}%")
Out[3]:
Console
Forward rate for year 2: 5.0%
Forward rate for year 3: 6.0%
Out[4]:
Console
Maturity  Zero Rate  Forward Rate
-----------------------------------
  1 yr      4.0%       4.0%
  2 yr      4.5%       5.0%
  3 yr      5.0%       6.0%

In this example, the period forwards rise from 4.0% to 5.0% to 6.0%, faster than the endpoint zero rates. More generally, for 0<T1<T20<T_1<T_2, f(T1,T2)−z(T2)=T1[z(T2)−z(T1)]/(T2−T1)f(T_1,T_2)-z(T_2)=T_1[z(T_2)-z(T_1)]/(T_2-T_1). Increasing endpoint zero rates therefore put the later interval forward above the endpoint zero rate; the initial interval forward equals its zero rate. This comparison does not imply that every increasing zero curve has an increasing or more steeply sloped forward curve.

Out[5]:
Visualization
Line chart with two curves: zero rates rising gently from 4% to 5%, and forward rates rising more steeply from 4% to 6%, with a gray shaded region highlighting the gap between them.
Zero rates and one-year interval forward rates from the numerical example, plotted at interval endpoints of 1, 2 and 3 years. Zero rates increase from 4.0% to 5.0%, while forwards rise from 4.0% to 6.0%. The initial forward equals the 1-year zero rate. The subsequent forwards exceed their endpoint zero rates because those zero rates rise across each interval. Connecting the points is a display choice, not an instantaneous-forward interpolation.