Distress Insurance Premium#

Introduction#

A systemic risk metric by Huang, Zhou, and Zhu (2009) which represents a hypothetical insurance premium against a systemic financial distress, defined as total losses that exceed a given threshold, say 15%, of total bank liabilities.

The methodology is general and can apply to any pre-selected group of firms with publicly tradable equity and CDS contracts. Each institutions marginal contribution to systemic risk is a function of its size, probability of default, and asset correlation. The last two components need to be estimated from market data.

The general steps are:

  1. Use simulated asset returns from a joint normal distribution (using the correlations) to compute the distribution of joint defaults.

  2. The loss-given-default (LGD) is assumed to follow a symmetric triangular distribution with a mean of 0.55 and in the range of \([0.1,1]\).

Note

The mean LGD of 0.55 is taken down from the Basel II IRB formula.

  1. Compute the probability of losses and the expected losses from the simulations.

References#

API#

class frds.measures.DistressInsurancePremium(default_prob: ndarray, correlations: ndarray)[source]#

Distress Insurance Premium

__init__(default_prob: ndarray, correlations: ndarray) None[source]#
Parameters:
  • default_prob (np.ndarray) – (n_banks,) array of the bank risk-neutral default probabilities.

  • correlations (np.ndarray) – (n_banks, n_banks) array of the correlation matrix of the banks’ asset returns.

estimate(default_threshold: float = 0.15, random_seed: int = 0, n_simulated_returns: int = 500000, n_simulations: int = 1000) float[source]#
Parameters:
  • default_threshold (float, optional) – the threshold used to calculate the total losses to total liabilities. Defaults to 0.15.

  • random_seed (int, optional) – the random seed used in Monte Carlo simulation for reproducibility. Defaults to 0.

  • n_simulated_returns (int, optional) – the number of simulations to compute the distrituion of joint defaults. Defaults to 500,000.

  • n_simulations (int, optional) – the number of simulations to compute the probability of losses. Defaults to 1,000.

Returns:

The distress insurance premium against a systemic financial distress.

Return type:

float

Examples#

>>> import numpy as np
>>> from frds.measures import DistressInsurancePremium
>>> # hypothetical implied default probabilities of 6 banks
>>> default_probabilities = np.array([0.02, 0.10, 0.03, 0.20, 0.50, 0.15])
>>> # Hypothetical correlations of the banks' asset returns.
>>> correlations = np.array(
...     [
...         [ 1.000, -0.126, -0.637, 0.174,  0.469,  0.283],
...         [-0.126,  1.000,  0.294, 0.674,  0.150,  0.053],
...         [-0.637,  0.294,  1.000, 0.073, -0.658, -0.085],
...         [ 0.174,  0.674,  0.073, 1.000,  0.248,  0.508],
...         [ 0.469,  0.150, -0.658, 0.248,  1.000, -0.370],
...         [ 0.283,  0.053, -0.085, 0.508, -0.370,  1.000],
...     ]
... )
>>> dip = DistressInsurancePremium(default_probabilities, correlations)
>>> dip.estimate()
0.2865733550799999