Credit Default Swaps (CDS) and Credit Derivatives › Default Probabilities and Hazard Rates

Michael BrenndoerferNovember 18, 20256 min read
Quantitative FinanceAll chapters
Part 4 of 15Swaps and Credit Derivatives
Chapter 22Credit Default Swaps (CDS) and Credit Derivatives › Default Probabilities and Hazard Rates
Reading section 5 of 16 · Default Probabilities and Hazard Rates · 6 minSection 5 of 16 · 6 min

Book contents

Section 5 of 16 · 6 min read

Credit Default Swaps (CDS) and Credit Derivatives › Default Probabilities and Hazard RatesOne section · Sections in this chapter5 / 16 ↓
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

To price CDS contracts rigorously, we need a framework for modeling default. The standard approach uses hazard rates (also called default intensities) to characterize the instantaneous probability of default. This framework is the foundation for credit derivatives pricing, allowing us to move from intuitive concepts to precise values.

Hazard Rate Model

The hazard rate λ(t)\lambda(t) represents the instantaneous conditional probability of default at time tt, given survival up to that point. This concept may seem abstract at first, but it captures something fundamentally important: the intensity of default risk at each moment, measured as a rate rather than a probability. For a small time interval Δt\Delta t:

P(default in [t,t+Δt]∣survival to t)≈λ(t)ΔtP(\text{default in } [t, t+\Delta t] \mid \text{survival to } t) \approx \lambda(t) \Delta t

where:

  • λ(t)\lambda(t): instantaneous hazard rate (default intensity) at time tt
  • Δt\Delta t: small time interval
  • tt: current time

Think of the hazard rate as measuring the "default pressure" at each instant. A hazard rate of 0.02 means that, conditional on having survived until now, the probability of defaulting in the next small time interval Δt\Delta t is approximately 0.02×Δt0.02 \times \Delta t. If Δt\Delta t is one year, that corresponds to a 2% conditional probability; if Δt\Delta t is one day (roughly 1/365 of a year), the conditional probability is approximately 0.0055%.

The survival probability Q(t)Q(t), which is the probability of no default by time tt, is related to the hazard rate by:

Q(t)=exp⁡(−∫0tλ(u) du)Q(t) = \exp\left(-\int_0^t \lambda(u) \, du\right)

where:

  • Q(t)Q(t): probability of surviving (no default) until time tt
  • λ(u)\lambda(u): hazard rate at time uu
  • exp⁡(⋅)\exp(\cdot): exponential function
  • tt: time horizon

This formula emerges from the mathematical requirement that survival requires avoiding default at every instant from time 0 to time tt. The integral accumulates the hazard rate over time, and the exponential function converts this accumulated hazard into a probability. The negative sign in the exponent ensures that higher cumulative hazard translates to lower survival probability, as intuition demands.

For a constant hazard rate λ\lambda, this simplifies to:

Q(t)=e−λtQ(t) = e^{-\lambda t}

where:

  • Q(t)Q(t): survival probability to time tt
  • λ\lambda: constant hazard rate
  • tt: time in years

This exponential survival function is analogous to radioactive decay: at any moment, there is a constant probability rate of default, regardless of how long the entity has survived. Just as a radioactive atom has no memory of how long it has existed, the constant hazard rate model assumes that a company's instantaneous default risk depends only on its current state, not on how long it has been solvent. While this "memoryless" property is a simplification of reality, it provides tractable mathematics and is a reasonable first approximation for many applications.

In[3]:
Code
import numpy as np

# Model survival probability with constant hazard rate
hazard_rates = [
    0.01,
    0.02,
    0.05,
    0.10,
]  # 1%, 2%, 5%, 10% annual default intensity
times = np.linspace(0, 10, 100)


def survival_probability(t, hazard_rate):
    """Calculate survival probability under constant hazard rate model."""
    return np.exp(-hazard_rate * t)
Out[4]:
Visualization
Line chart showing survival probability decreasing over time for various hazard rates.
Survival probability curves for hazard rates of 1%, 2%, 5%, and 10%. Higher hazard rates lead to significantly faster decay in survival probability over the 10-year horizon, with the 10% rate resulting in a survival probability of approximately 37% by year 10.

Cumulative Default Probability

The cumulative default probability by time tt is simply one minus the survival probability. This relationship follows directly from the fact that an entity must either survive or default; there is no third possibility.

P(default by t)=1−Q(t)(complement of survival)=1−e−λt(substitute exponential model)\begin{aligned} P(\text{default by } t) &= 1 - Q(t) && \text{(complement of survival)} \\ &= 1 - e^{-\lambda t} && \text{(substitute exponential model)} \end{aligned}

where:

  • Q(t)Q(t): survival probability
  • λ\lambda: constant hazard rate
  • tt: time horizon

For short time horizons and small hazard rates, this approximates to:

P(default by t)≈λtP(\text{default by } t) \approx \lambda t

where:

  • λ\lambda: hazard rate
  • tt: time horizon

This linear approximation works because the exponential function e−x≈1−xe^{-x} \approx 1 - x when xx is small. For a hazard rate of 2% and a one-year horizon, the exact default probability is 1−e−0.02=0.01981 - e^{-0.02} = 0.0198, while the approximation gives 0.02×1=0.020.02 \times 1 = 0.02. The difference is negligible for practical purposes. However, as time extends or hazard rates increase, the approximation breaks down because it fails to account for the compounding effect: the longer the time horizon, the more the cumulative default probability accelerates relative to the linear approximation.

In[5]:
Code
import numpy as np

# Calculate cumulative default probabilities for a hazard rate of 2%
hazard = 0.02
horizons = [1, 3, 5, 10]

# Calculate probabilities for different horizons
results = []
for t in horizons:
    exact_prob = 1 - np.exp(-hazard * t)
    approx_prob = hazard * t
    results.append((t, exact_prob, approx_prob))
Out[6]:
Console
Cumulative Default Probabilities (λ = 2%):
---------------------------------------------
  1-year: 0.0198 (exact), 0.0200 (approximation)
  3-year: 0.0582 (exact), 0.0600 (approximation)
  5-year: 0.0952 (exact), 0.1000 (approximation)
  10-year: 0.1813 (exact), 0.2000 (approximation)

The approximation works well for short horizons but diverges over longer periods where compounding effects matter.

Out[7]:
Visualization
Line chart comparing exact exponential cumulative default probability against the linear approximation, showing growing divergence over a 15-year horizon.
Comparison of exact cumulative default probability versus the linear approximation for a 2% hazard rate. The linear approximation increasingly overestimates default probability at longer horizons, showing why the exponential model is necessary for multi-year contracts.