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:
Use simulated asset returns from a joint normal distribution (using the correlations) to compute the distribution of joint defaults.
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.
Compute the probability of losses and the expected losses from the simulations.
References#
Huang, Zhou, and Zhu (2009), A framework for assessing the systemic risk of major financial institutions, Journal of Banking & Finance, 33(11), 2036-2049.
Bisias, Flood, Lo, and Valavanis (2012), A survey of systemic risk analytics, Annual Review of Financial Economics, 4, 255-296.
API#
- class frds.measures.DistressInsurancePremium(default_prob: ndarray, correlations: ndarray)[source]#
-
- __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