merton.extensions.jump_diffusion

Merton-style jump-diffusion structural model (Zhou, 1997).

Adds a compound-Poisson jump component to the standard GBM asset process. The closed-form Poisson-weighted series for the European-style default probability follows from the same trick Merton (1976) used to price options under jumps:

\[dV/V = (\mu - \lambda \kappa)\,dt + \sigma\,dW + (Y - 1)\,dN,\]

with N a Poisson process of intensity \lambda, Y \sim \text{lognormal}(\mu_J, \sigma_J^2), and \kappa = E[Y] - 1 = e^{\mu_J + \sigma_J^2/2} - 1 chosen so the total drift remains \mu.

Conditional on exactly n jumps in [0, T], the asset log-return is Gaussian with parameters

\[m_n = (\mu - \lambda \kappa - \sigma^2/2)\,T + n\,\mu_J, \qquad s_n^2 = \sigma^2 T + n\,\sigma_J^2.\]

The unconditional risk-neutral PD at horizon T is therefore

\[\mathrm{PD} = \sum_{n=0}^\infty \frac{e^{-\lambda T} (\lambda T)^n}{n!} \,\Phi\!\bigl(-d_2^{(n)}\bigr),\]

where d_2^{(n)} is the Merton-style distance to default using the jump-adjusted drift and variance m_n, s_n^2.

References

Merton, R. C. (1976). Option Pricing when Underlying Stock Returns are Discontinuous. Journal of Financial Economics 3 (1-2), 125-144.

Zhou, C. (1997). A Jump-Diffusion Approach to Modeling Credit Risk and Valuing Defaultable Securities. Federal Reserve Working Paper 97-15.

Classes

JumpDiffusionModel

Zhou-style jump-diffusion structural model.

Functions

jump_diffusion_pd(→ merton._typing.FloatArray)

Merton-jump risk-neutral PD via the Poisson-weighted series.

simulate_jump_diffusion(→ numpy.ndarray)

Simulate Merton-jump asset paths. Returns shape (n_paths, n_steps + 1).

Module Contents

merton.extensions.jump_diffusion.jump_diffusion_pd(asset_value: merton._typing.ArrayLike, asset_vol: merton._typing.ArrayLike, debt: merton._typing.ArrayLike, rf: merton._typing.ArrayLike, T: merton._typing.ArrayLike, *, jump_intensity: float = 0.5, jump_mean: float = -0.05, jump_std: float = 0.15, dividend_yield: merton._typing.ArrayLike = 0.0, max_terms: int = 50) merton._typing.FloatArray[source]

Merton-jump risk-neutral PD via the Poisson-weighted series.

Parameters:
  • asset_value – Standard Merton inputs.

  • asset_vol – Standard Merton inputs.

  • debt – Standard Merton inputs.

  • rf – Standard Merton inputs.

  • T – Standard Merton inputs.

  • jump_intensity\lambda — average number of jumps per year (default 0.5).

  • jump_mean\mu_J — mean of the log-jump size (default -0.05 ≈ small negative shock).

  • jump_std\sigma_J — std of the log-jump size (default 0.15).

  • max_terms – Truncation point for the infinite Poisson series. Values beyond the Poisson mean \lambda T + 6\sqrt{\lambda T} contribute negligible probability mass.

merton.extensions.jump_diffusion.simulate_jump_diffusion(*, asset_value: float, drift: float, sigma: float, T: float, n_paths: int, n_steps: int, jump_intensity: float, jump_mean: float, jump_std: float, seed: int | None = None) numpy.ndarray[source]

Simulate Merton-jump asset paths. Returns shape (n_paths, n_steps + 1).

class merton.extensions.jump_diffusion.JumpDiffusionModel(*, jump_intensity: float = 0.5, jump_mean: float = -0.05, jump_std: float = 0.15, tol: float = 1e-08, max_iter: int = 200)[source]

Bases: merton.extensions.base.StructuralModel

Zhou-style jump-diffusion structural model.

Calibrates (A, σ_A) via JMR on the equity inputs (treating jumps as an extension of the Merton baseline), then layers the Poisson-weighted jump series on top for the PD.

method = 'jump_diffusion'[source]
jump_intensity[source]
jump_mean[source]
jump_std[source]
tol = 1e-08[source]
max_iter = 200[source]
fit(firm: merton.core.firm.Firm) merton.extensions.base.StructuralResult[source]

Return a StructuralResult for firm.