Lesson 6.5: Fixing r - Stochastic Interest Rates (Vasicek & CIR)

Welcome to Lesson 6.5, the final lesson of our 'Advanced Models' module. We have successfully 'fixed' two of the three major bugs in the original Black-Scholes model.

  1. We fixed constant volatility (σ\sigma) with the Heston Model (Lesson 6.3).
  2. We fixed continuous paths with the Merton Jump-Diffusion Model (Lesson 6.4).

But both of those models still have one fundamental flaw: they assume the risk-free interest rate ($r$) is a constant, known number (e.g., 5% forever).

Part 1: The "Fix" (The "Thermostat" Analogy)

What kind of SDE should the interest rate (rtr_t) follow?

  • Can it be GBM (like a stock)? No. A stock can (in theory) grow to infinity. Interest rates can't. If rtr_t went to 50%, the economy would collapse. Rates tend to be "pulled back" to some long-term average.

This "pull-back" effect is called Mean Reversion. This is the exact same concept we used for volatility in the Heston model.

The "Dog on a Leash" Analogy:

  • θ\theta (theta): A stake in the ground. This is the "long-term average rate" (e.g., 3%).
  • rtr_t: A dog on a leash, wandering randomly. This is the "current short rate."
  • κ\kappa (kappa): The "stiffness of the leash." This is the "speed of mean reversion."

When the dog (rtr_t) wanders too far from the stake (θ\theta), the leash (κ\kappa) pulls it back. The SDE for this process is called an Ornstein-Uhlenbeck process.

Part 2: Model 1 - The Vasicek Model (1977)

The first and simplest SDE for interest rates was the Vasicek Model. It is an Ornstein-Uhlenbeck process.

The Vasicek Model SDE

drt=κ(θrt)dt+σdWtdr_t = \kappa (\theta - r_t) dt + \sigma dW_t

Let's translate this. The change in the interest rate (drtdr_t) is the sum of two parts:

  • κ(θrt)dt\kappa (\theta - r_t) dt (The "Drift" / "The Pull"):
    • θ\theta is the long-term mean (the "stake," e.g., 3%).
    • rtr_t is the *current* rate.
    • (θrt)(\theta - r_t) is the "error." If rtr_t is 5% (it's "too high"), this term is *negative*, and the drift *pulls the rate down*.
    • κ\kappa is the speed of that pull.
  • σdWt\sigma dW_t (The "Diffusion" / "The Jiggle"):
    • σ\sigma is a constant volatility (e.g., 0.5%).
    • dWtdW_t is the random engine.

The "So What?" (Pros vs. Cons):

  • Pro: It's simple. Because σ\sigma is constant, this is a Gaussian Process. This makes it *mathematically easy* to solve, and we can get a clean, simple formula for bond prices.
  • Con (The Big Bug): The jiggle (σ\sigma) is *constant*. If the rate is rt=0.1%r_t = 0.1\% and it gets a random shock of 0.5%-0.5\%, the rate becomes negative. This is a huge problem as negative interest rates are (mostly) unrealistic.

Part 3: Model 2 - The CIR Model (The "Better" Fix)

How do we "fix" the negative rate bug? We use the exact same trick we used in the Heston model: make the "jiggle" proportional to the rate itself.

This is the Cox-Ingersoll-Ross (CIR) Model (1985).

The CIR Model SDE

drt=κ(θrt)dt+σrtdWtdr_t = \kappa (\theta - r_t) dt + \sigma \sqrt{r_t} dW_t
  • The Drift: κ(θrt)dt\kappa (\theta - r_t) dt
    • This is identical to the Vasicek model. It's still a "thermostat" pulling the rate back to its long-term average θ\theta.
  • The Diffusion: σrtdWt\sigma \sqrt{r_t} dW_t
    • This is the "magic" fix. The "jiggle engine" σdWt\sigma dW_t is *multiplied* by rt\sqrt{r_t}.
    • The "Aha!" Moment: As the interest rate rtr_t gets closer and closer to 0, the term rt\sqrt{r_t} *also* gets closer to 0.
    • This means the random "jiggle" itself *runs out of fuel* as it approaches the zero boundary. This creates a "natural barrier" that (if κ\kappa and θ\theta are high enough) makes it impossible for the rate to become negative.

The "So What?" (Pros vs. Cons):

  • Pro: It fixes the negative rate problem. It's a much more realistic and stable model.
  • Con: It's *harder*. It's a "square-root process" (non-Gaussian), so the "pure math" formulas for pricing bonds are much more complex. (But for Monte Carlo, it's just as easy!)

Part 4: The "Real" Payoff (How to Price a Bond)

Now that we have a *random* SDE for our interest rate rtr_t, how do we actually price a zero-coupon bond?

A zero-coupon bond (ZCB) is a contract that pays you \$1 at a future time $T$. Its price today is $P(t, T)$.

We must use Risk-Neutral Valuation (Lesson 6.1). The price today is the "expected payoff" discounted back.

But what's the discount factor? It's not er(Tt)e^{-r(T-t)} anymore, because $r$ is *constantly jiggling* between $t$ and $T$. The *total* discount is the "sum" (or integral) of *all* the random rates along the path:

Total Discount Factor=etTrsds\text{Total Discount Factor} = e^{-\int_t^T r_s ds}

This is a random variable! Therefore, the bond price today must be the expected value of this random discount factor, calculated in the risk-neutral world (Q\mathbb{Q}).

The "Holy Grail" of Fixed Income

This is the fundamental formula for all bond pricing:

P(t,T)=EQ[etTrsdsFt]P(t, T) = \mathbb{E}^{\mathbb{Q}} \left[ e^{-\int_t^T r_s ds} \mid \mathcal{F}_t \right]

This formula means: "The price of a bond today ($P$) is the average (EQ\mathbb{E}^{\mathbb{Q}}) of all *possible* discount factors that could happen from all the *possible* random paths the interest rate rsr_s could take from now ($t$) until maturity ($T$)."

This is why bond pricing is so hard—you have to average an *exponential of an integral of a random process*. This is what "Fixed Income Quants" do all day, often using Monte Carlo (Lesson 6.2) to solve it.

Congratulations! (The End of the Main Course)

    You have officially completed the core curriculum of Stochastic Calculus for Quant Finance.

    We started with a single, "broken" idea (the bell curve) and ended by modeling the three most important, complex, and random things in finance.

    Let's review the "bugs" in the original Black-Scholes model and how we FIXED them:

    1. The Bug: σ\sigma (volatility) is constant.
      The Fix (Lesson 6.3): Stochastic Volatility (Heston Model). We gave σt\sigma_t its *own* mean-reverting SDE. This fixed the "volatility smile."
    2. The Bug: The stock path StS_t is continuous (no jumps).
      The Fix (Lesson 6.4): Jump-Diffusion (Merton Model). We added a *second* random engine (a Poisson Process, dNtdN_t) to our SDE to model "crashes." This fixed "fat tails."
    3. The Bug: $r$ (interest rate) is constant.
      The Fix (Lesson 6.5): Stochastic Interest Rates (Vasicek/CIR). We gave rtr_t its *own* mean-reverting SDE. This allowed us to price *bonds*.

    You now have a complete, professional-level "toolkit" for modeling any random process. You've seen that SDEs are just "building blocks" that allow quants to build models that get closer and closer to reality.