Credit Risk Modeling Approaches › Reduced-Form Models: Intensity-Based Approach

Michael BrenndoerferDecember 22, 202519 min read
Quantitative FinanceAll chapters
Part 10 of 15Risk Management and Financial Risk Controls
Chapter 55Credit Risk Modeling Approaches › Reduced-Form Models: Intensity-Based Approach
Reading section 3 of 6 · Reduced-Form Models: Intensity-Based Approach · 19 minSection 3 of 6 · 19 min

Book contents

Section 3 of 6 · 19 min read

Credit Risk Modeling Approaches › Reduced-Form Models: Intensity-Based ApproachOne section · Sections in this chapter3 / 6 ↓
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

Reduced-form models take a fundamentally different approach from structural models. Rather than deriving default from balance sheet dynamics and capital structure, they model default as a random event governed by a hazard rate (or default intensity). Default occurs exogenously, without explicit modeling of economic mechanisms. Instead of asking why the firm defaults, reduced-form models focus on when: estimating the instantaneous default probability at any moment given that the firm has survived to that time.

This approach offers several practical advantages. First, it's easier to calibrate to market prices since the hazard rate connects directly to observable credit spreads. Second, the framework handles multiple credit events naturally (including rating downgrades and restructurings), not just binary default. Third, it doesn't require unobservable asset values, making implementation more straightforward.

The Hazard Rate Framework

The mathematical foundation of reduced-form models rests on the concept of a hazard rate, which originates from survival analysis in statistics and actuarial science. The default time τ\tau is the first time a default-triggering event occurs. The survival probability to time tt is the likelihood that the obligor remains solvent through time tt:

S(t)=P(τ>t)S(t) = P(\tau > t)

where:

  • S(t)S(t): probability of surviving (not defaulting) until time tt
  • τ\tau: random default time
  • P(τ>t)P(\tau > t): probability that default occurs after time tt

The survival probability function captures the declining likelihood of remaining solvent as time progresses. It starts at S(0)=1S(0) = 1 (the firm is solvent today) and decreases toward zero as the time horizon extends (eventually all firms default or cease to exist). The rate at which this probability declines at any moment is governed by the hazard rate.

Hazard Rate

The hazard rate (or default intensity) λ(t)\lambda(t) represents the instantaneous probability of default given survival to time tt:

λ(t)=lim⁡Δt→0P(t<τ≤t+Δt∣τ>t)Δt\lambda(t) = \lim_{\Delta t \to 0} \frac{P(t < \tau \leq t + \Delta t | \tau > t)}{\Delta t}

where:

  • λ(t)\lambda(t): hazard rate (default intensity) at time tt
  • τ\tau: random default time
  • tt: current time
  • Δt\Delta t: small time increment
  • P(t<τ≤t+Δt∣τ>t)P(t < \tau \leq t + \Delta t | \tau > t): conditional probability of defaulting in the interval (t,t+Δt](t, t+\Delta t], given survival to time tt
  • The limit as Δt→0\Delta t \to 0 gives the instantaneous default rate

The hazard rate is the conditional rate of default for a firm that has survived until time tt.

The hazard rate has an intuitive interpretation as the instantaneous default probability per unit time: if the hazard rate is 5% per year, it means that at any moment, a firm that has survived faces approximately a 5% chance of defaulting over the next year. This probability is conditional on survival: it applies only to firms that haven't already defaulted.

The survival probability relates to the hazard rate through the exponential of the cumulative hazard. To see why, note that the survival probability must satisfy dS(t)dt=−λ(t)S(t)\frac{dS(t)}{dt} = -\lambda(t) S(t) because the rate of decrease in survival probability equals the hazard rate times the probability of having survived so far. This differential equation simply states that the rate at which firms leave the surviving population equals the hazard rate times the population size. Solving this differential equation with initial condition S(0)=1S(0) = 1 gives:

S(t)=exp⁡(−∫0tλ(s) ds)S(t) = \exp\left(-\int_0^t \lambda(s) \, ds\right)

where:

  • S(t)S(t): survival probability to time tt
  • λ(s)\lambda(s): hazard rate (default intensity) at time ss
  • ss: integration variable representing time from 0 to tt
  • ∫0tλ(s) ds\int_0^t \lambda(s) \, ds: cumulative hazard, the total default risk accumulated from time 0 to tt
  • exp⁡(⋅)\exp(\cdot): exponential function
  • The exponential function converts cumulative hazard to survival probability through the relationship S(t)=e−cumulative hazardS(t) = e^{-\text{cumulative hazard}}
  • This relationship follows from solving the differential equation dS(t)dt=−λ(t)S(t)\frac{dS(t)}{dt} = -\lambda(t) S(t) with initial condition S(0)=1S(0) = 1

The integral ∫0tλ(s)ds\int_0^t \lambda(s) ds represents the cumulative hazard, capturing the total default risk accumulated from time 0 to time tt. The exponential transformation converts this accumulated risk into a survival probability. Higher cumulative hazard means lower survival probability, with the exponential ensuring the probability remains between 0 and 1.

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

S(t)=e−λtS(t) = e^{-\lambda t}

where the integral becomes simply λt\lambda t, giving exponential decay in survival probability. This exponential decay is the hallmark of the constant hazard model: the survival probability decreases at a rate proportional to itself.

The cumulative default probability is:

P(τ≤t)=1−S(t)=1−e−λtP(\tau \leq t) = 1 - S(t) = 1 - e^{-\lambda t}

where:

  • P(τ≤t)P(\tau \leq t): probability of defaulting by time tt
  • τ\tau: random default time
  • S(t)=e−λtS(t) = e^{-\lambda t}: survival probability with constant hazard
  • 1−S(t)1 - S(t): complement gives cumulative default probability

Connection to Poisson Processes

The constant hazard rate model implies default arrives as a Poisson process with intensity λ\lambda. This connection provides deep insight into reduced-form model mechanics. The Poisson process describes events that occur randomly over time with a constant average rate, and the exponential distribution P(τ≤t)=1−e−λtP(\tau \leq t) = 1 - e^{-\lambda t} characterizes the waiting time until the first such event.

The key property of the Poisson process is the memoryless property. Given that a firm has survived to time tt, the probability distribution of remaining time to default is the same as if we started fresh at time zero. This may seem counterintuitive (shouldn't older firms be closer to default?), but it captures the idea that conditional on survival, the firm faces the same ongoing default intensity. The waiting time until default follows an exponential distribution with mean 1/λ1/\lambda, so a firm with a 2% annual hazard rate has an expected time to default of 50 years, though actual default could occur much sooner or later due to the high variance of exponential distributions.

In[12]:
Code
import numpy as np


class ReducedFormModel:
    """
    Reduced-form credit risk model with hazard rates.
    """

    def __init__(self, hazard_rates, times):
        """
        Parameters
        ----------
        hazard_rates : array-like
            Hazard rates for each time period
        times : array-like
            Time points (in years)
        """
        self.hazard_rates = np.array(hazard_rates)
        self.times = np.array(times)

    def survival_probability(self, t):
        """Survival probability to time t."""
        if t <= 0:
            return 1.0
        # Integrate hazard rate using piecewise constant
        integral = 0
        prev_t = 0
        for period_end, hazard_rate in zip(self.times, self.hazard_rates):
            interval_end = min(t, period_end)
            integral += hazard_rate * max(interval_end - prev_t, 0)
            if t <= period_end:
                break
            prev_t = period_end

        if t > self.times[-1]:
            integral += self.hazard_rates[-1] * (t - self.times[-1])

        return np.exp(-integral)

    def default_probability(self, t):
        """Cumulative default probability to time t."""
        return 1 - self.survival_probability(t)

    def marginal_default_probability(self, t1, t2):
        """Probability of default between t1 and t2."""
        return self.survival_probability(t1) - self.survival_probability(t2)
Out[14]:
Visualization
Line chart showing survival probability declining continuously from 100 percent at time zero to 70.8 percent at year 10 under hazard rates that rise from 2 to 4 percent.
Survival probability over a 10-year horizon under an upward-sloping, piecewise-constant hazard-rate term structure rising from 2% to 4%. The curve declines continuously from 100% to 70.8% at year 10, with slope changes at the term-structure knots as the hazard rate increases.
Out[15]:
Visualization
Line chart showing cumulative default probability rising continuously from zero at time zero to 29.2 percent at year 10 under hazard rates that rise from 2 to 4 percent.
Cumulative default probability over a 10-year horizon under a piecewise-constant hazard-rate term structure rising from 2% to 4%. The curve increases continuously from 0% to 29.2% by year 10, complementing the survival probability and reflecting accumulated default risk across maturities.

The survival probability declines from 100% to 70.8% over 10 years, while cumulative default probability rises from 0% to 29.2%. The upward-sloping hazard-rate term structure, starting at 2% annually and rising to 4%, reflects the common empirical pattern that credit uncertainty increases with maturity. The continuous curves change slope at years 1, 2, 3, and 5 as the piecewise-constant hazard rate steps upward.

Calibrating to CDS Spreads

The primary advantage of reduced-form models is their ability to be calibrated directly to market data. As we discussed in Part II Chapter 13 on credit default swaps, CDS spreads reflect the market's assessment of default risk. The CDS market provides a direct window into market-implied default probabilities, making reduced-form models highly practical for trading and risk management applications.

For a CDS with spread ss and recovery rate RR, no-arbitrage pricing requires that the present value of premium payments (premium leg) equals the present value of protection payments (protection leg). This equilibrium condition reflects the fact that a fairly priced CDS has zero initial value: neither party pays upfront because the expected benefits equal the expected costs. This equilibrium allows us to back out the implied hazard rate from observable CDS spreads.

The premium leg represents the periodic payments made by the protection buyer.

Premium_Leg=s∑i=1nΔti⋅S(ti)⋅D(ti)\text{Premium\_Leg} = s \sum_{i=1}^n \Delta t_i \cdot S(t_i) \cdot D(t_i)

where:

  • ss: CDS spread (annualized premium rate paid by protection buyer)
  • nn: number of premium payment periods
  • ii: index for payment periods, running from 1 to nn
  • Δti\Delta t_i: length of payment period ii in years
  • tit_i: time of the ii-th payment
  • S(ti)S(t_i): survival probability to time tit_i (premium only paid if no default has occurred)
  • D(ti)D(t_i): discount factor to time tit_i, equal to e−rtie^{-r t_i} for continuous discounting
  • The sum captures expected present value of all premium payments

The summation reflects that premiums are only paid if the reference entity has not defaulted. Each term multiplies the premium rate by the payment period length, the probability of survival to that date, and the appropriate discount factor. The survival probability weighting removes premiums scheduled after default: if default occurs before payment date tit_i, that premium is never paid.

Protection_Leg=(1−R)∫0Tλ(t)S(t)D(t) dt\text{Protection\_Leg} = (1-R) \int_0^T \lambda(t) S(t) D(t) \, dt

where:

  • RR: recovery rate (fraction of notional recovered upon default)
  • (1−R)(1-R): loss given default (fraction not recovered)
  • TT: CDS maturity
  • λ(t)\lambda(t): hazard rate (default intensity) at time tt
  • S(t)S(t): survival probability to time tt
  • D(t)D(t): discount factor for payment at time tt
  • λ(t)S(t)dt\lambda(t) S(t) dt: probability of default occurring in the infinitesimal interval [t,t+dt][t, t+dt]
  • The integral sums expected present value of protection payments across all possible default times from 0 to TT

where D(t)D(t) is the discount factor to time tt. The protection leg integral captures the expected payout to the protection buyer. Default can occur at any time between now and maturity, and when it does, the protection seller pays (1−R)(1-R) times the notional. The integrand λ(t)S(t)\lambda(t) S(t) represents the probability density of defaulting at exactly time tt: the hazard rate times the probability of having survived to that point.

For a flat hazard rate λ\lambda, we can derive an approximate relationship between CDS spread and hazard rate. Under the assumptions that discount rates are small and survival probabilities do not vary too much over the CDS tenor.

Premium_Leg≈s∑i=1nΔti⋅S(ti)(sum of premium payments weighted by survival)≈s⋅T⋅Sˉ(approximate as constant average survival Sˉ)\begin{aligned} \text{Premium\_Leg} &\approx s \sum_{i=1}^n \Delta t_i \cdot S(t_i) && \text{(sum of premium payments weighted by survival)} \\ &\approx s \cdot T \cdot \bar{S} && \text{(approximate as constant average survival } \bar{S} \text{)} \end{aligned}

Similarly, the protection leg becomes:

Protection_Leg≈(1−R)∫0TλS(t) dt(integral of loss payment hazard)≈(1−R)λTSˉ(approximate with constant Sˉ)\begin{aligned} \text{Protection\_Leg} &\approx (1-R) \int_0^T \lambda S(t) \, dt && \text{(integral of loss payment hazard)} \\ &\approx (1-R) \lambda T \bar{S} && \text{(approximate with constant } \bar{S} \text{)} \end{aligned}

Setting these equal (no-arbitrage condition):

s⋅T⋅Sˉ=(1−R)λTSˉs \cdot T \cdot \bar{S} = (1-R) \lambda T \bar{S}

Canceling TSˉT \bar{S} from both sides gives:

s≈λ(1−R)s \approx \lambda (1 - R)

where:

  • ss: CDS spread (annualized premium rate)
  • λ\lambda: constant hazard rate (default intensity per year)
  • RR: recovery rate
  • (1−R)(1-R): loss given default (LGD)
  • The approximation holds when discount rates and survival probabilities are relatively stable over the CDS tenor

This relationship shows that CDS spreads compensate for two components of credit risk: the probability of default (λ\lambda) and the severity of loss when default occurs (1−R1-R). The approximation becomes increasingly accurate for shorter maturities and lower hazard rates where discounting effects are minimal.

Solving for the hazard rate provides a direct link between observable CDS spreads and default intensity:

λ≈s1−R\lambda \approx \frac{s}{1 - R}

where:

  • λ\lambda: implied hazard rate (annual default intensity)
  • ss: observed CDS spread
  • RR: assumed recovery rate
  • The formula shows that CDS spreads reflect both default risk (λ\lambda) and loss severity (1−R1-R)

This inversion provides a direct estimate of market-implied default intensity from a CDS spread under the flat-hazard approximation, making the reduced-form model straightforward to calibrate. The hazard rate interpretation also helps explain why CDS spreads differ across credits: investment-grade companies have low spreads because their hazard rates are low, while distressed companies have high spreads because their default intensities are high.

In[16]:
Code
def hazard_rate_from_cds(cds_spread, recovery_rate=0.4):
    """
    Estimate hazard rate from CDS spread.

    Parameters
    ----------
    cds_spread : float
        CDS spread in decimal (e.g., 0.02 for 200 bps)
    recovery_rate : float
        Expected recovery rate (default 40%)

    Returns
    -------
    float
        Estimated hazard rate
    """
    return cds_spread / (1 - recovery_rate)


def cds_spread_from_hazard(hazard_rate, recovery_rate=0.4):
    """Calculate CDS spread from hazard rate."""
    return hazard_rate * (1 - recovery_rate)


# Example: Convert CDS spreads to hazard rates
cds_spreads_bps = np.array([50, 100, 200, 500, 1000])  # Basis points
cds_spreads = cds_spreads_bps / 10000  # Convert to decimal
recovery = 0.40

hazard_rates_implied = [hazard_rate_from_cds(s, recovery) for s in cds_spreads]
annual_default_probs = [1 - np.exp(-h) for h in hazard_rates_implied]
Out[17]:
Console
CDS Spread to Default Probability Mapping (Recovery = 40%)
============================================================
 CDS Spread (bps)  Hazard Rate (%)  1-Year PD (%)  5-Year Survival (%)
               50             0.83           0.83                95.92
              100             1.67           1.65                92.00
              200             3.33           3.28                84.65
              500             8.33           8.00                65.92
             1000            16.67          15.35                43.46

The table reveals the relationship between CDS spreads and default risk across the credit spectrum. A 200 basis point CDS spread implies a hazard rate of 3.33% and annual default probability of 3.27%, with 5-year survival probability of 84.5%. For investment-grade credits (50-100 bps spreads), the mapping is approximately linear because the exponential function is nearly linear for small arguments. However, for distressed credits with spreads of 1000 bps, the hazard rate reaches 16.67% annually, leading to only 43.35% probability of surviving 5 years. At these high spread levels, the approximation becomes less accurate due to the nonlinear relationship between hazard rates and survival probabilities, and practitioners often use more sophisticated models with term structure effects.

Out[18]:
Visualization
Line chart showing implied hazard rate increasing linearly with CDS spread from 0 to 1,000 basis points. Three distinct curves represent recovery rates of 30, 40, and 50 percent; higher recovery produces a higher inferred hazard rate for the same spread.
Hazard rates implied by CDS spreads under three recovery-rate scenarios (R=30%, 40%, 50%) using λ = s/(1-R). At a 500-basis-point spread, implied hazard rates range from 7.1% for 30% recovery to 10.0% for 50% recovery. Distinct line styles emphasize how the recovery assumption changes the inferred default intensity.

The visualization reveals how recovery rate assumptions affect hazard rate inference. For a given CDS spread, a lower recovery rate implies a lower hazard rate because the expected loss per default is higher. At 500 bps, assuming 30% recovery yields an implied hazard rate of approximately 7.1%, while assuming 50% recovery yields approximately 10%. This sensitivity highlights the importance of accurate recovery rate assumptions when calibrating reduced-form models, as the same CDS spread can imply substantially different default probabilities depending on the assumed recovery.

Stochastic Intensity Models

For more realistic dynamics, the hazard rate itself can be modeled as a stochastic process. Rather than assuming a constant default intensity, we allow it to fluctuate over time in response to changing economic conditions. A firm's credit quality varies with business cycles, competitive pressures, management decisions, and countless other factors. Capturing this time variation requires modeling the hazard rate as a random process.

A common specification is the Cox-Ingersoll-Ross (CIR) process, which ensures the hazard rate remains positive and mean-reverts to a long-term level:

dλt=κ(θ−λt)dt+σλtdWtd\lambda_t = \kappa(\theta - \lambda_t)dt + \sigma\sqrt{\lambda_t}dW_t

where:

  • λt\lambda_t: hazard rate (default intensity) at time tt
  • dλtd\lambda_t: infinitesimal change in the hazard rate over time dtdt
  • κ\kappa: speed of mean reversion (how quickly λt\lambda_t returns to its long-term level θ\theta)
  • θ\theta: long-term mean level of the hazard rate
  • σ\sigma: volatility parameter controlling the magnitude of random fluctuations
  • WtW_t: standard Brownian motion driving the random shocks
  • dtdt: infinitesimal time increment
  • dWtdW_t: infinitesimal Brownian increment
  • κ(θ−λt)\kappa(\theta - \lambda_t): mean reversion term that pulls λt\lambda_t toward θ\theta when λt<θ\lambda_t < \theta and pushes it down when λt>θ\lambda_t > \theta
  • σλt\sigma\sqrt{\lambda_t}: square root diffusion term that ensures the hazard rate remains non-negative (volatility scales with the level)

The CIR specification has several desirable properties that make it well-suited for modeling credit risk. The square root diffusion σλt\sigma\sqrt{\lambda_t} ensures non-negativity: as λt\lambda_t approaches zero, the volatility shrinks proportionally, making it mathematically impossible for the process to go negative. This is essential since a negative default probability has no economic meaning. The mean reversion term κ(θ−λt)\kappa(\theta - \lambda_t) pulls the hazard rate toward its long-term mean θ\theta, capturing the empirical observation that credit quality tends to revert over economic cycles. When λt<θ\lambda_t < \theta, the drift is positive (credit quality deteriorates toward normal), and when λt>θ\lambda_t > \theta, the drift is negative (credit quality improves from distressed levels). This mean-reverting behavior reflects the idea that extremely good or extremely bad credit conditions are temporary states that tend to normalize over time.

In[19]:
Code
import numpy as np


def simulate_cir_hazard(lambda0, kappa, theta, sigma, T, n_steps, n_paths):
    """
    Simulate CIR hazard rate paths.

    Parameters
    ----------
    lambda0 : float
        Initial hazard rate
    kappa : float
        Mean reversion speed
    theta : float
        Long-term mean hazard rate
    sigma : float
        Volatility of hazard rate
    T : float
        Time horizon
    n_steps : int
        Number of time steps
    n_paths : int
        Number of simulation paths

    Returns
    -------
    times : array
        Time grid
    paths : array
        Simulated hazard rate paths (n_steps+1, n_paths)
    """
    dt = T / n_steps
    times = np.linspace(0, T, n_steps + 1)
    paths = np.zeros((n_steps + 1, n_paths))
    paths[0] = lambda0

    np.random.seed(42)
    for i in range(n_steps):
        z = np.random.standard_normal(n_paths)
        # Euler discretization with reflection to keep positive
        paths[i + 1] = (
            paths[i]
            + kappa * (theta - paths[i]) * dt
            + sigma * np.sqrt(np.maximum(paths[i], 0)) * np.sqrt(dt) * z
        )
        paths[i + 1] = np.maximum(paths[i + 1], 0)  # Ensure non-negative

    return times, paths
Out[21]:
Visualization
Line chart showing 20 representative CIR hazard-rate paths over five years, an emphasized mean across all 100 simulated paths, a dashed 5 percent long-term mean, and a dotted 3 percent initial level.
Twenty representative paths from a 100-path Cox-Ingersoll-Ross (CIR) hazard-rate simulation with λ₀=3%, θ=5%, κ=0.5, and σ=0.1 over five years. The emphasized mean across all 100 simulations moves from 3% toward the 5% long-term level, while individual paths disperse from near 0% to above 12%. The square-root diffusion preserves non-negativity and illustrates uncertainty around mean reversion.

The simulated paths start at 3% hazard rate and exhibit clear mean reversion toward the 5% long-term level specified by theta. Individual paths show substantial volatility, with hazard rates ranging from near 0% to over 12% across scenarios, while the emphasized mean path converges steadily from the initial 3% toward 5% over the 5-year horizon. The mean reversion speed of 0.5 pulls paths back toward the long-term mean at a moderate rate, preventing extreme persistent deviations while allowing meaningful short-term fluctuations. The fan-like spread of paths illustrates the uncertainty inherent in future credit conditions. This stochastic intensity framework forms the basis for pricing credit derivatives with time-varying default risk, capturing the reality that credit spreads and default probabilities evolve randomly over time.