Z-score#

Introduction#

A measure of bank insolvency risk, defined as:

\[\text{Z-score} = \frac{\text{ROA}+\text{CAR}}{\sigma_{\text{ROA}}}\]

where \(\text{ROA}\) is the bank’s ROA, \(\text{CAR}\) is the bank’s capital ratio, and \(\sigma_{\text{ROA}}\) is the standard deviation of bank ROA.

The rationale behind Z-score is simple. A bank is insolvent when its loss \(-\pi\) exceeds equity \(E\), i.e., \(-\pi>E\). The probability of insolvency is \(P(-\pi>E)\).

If bank assets is \(A\), then \(P(-\pi>E)=P(-\frac{\pi}{A}>\frac{E}{A})=P(-ROA>CAR)\).

Assuming profits are normally distributed, then scaling \((\text{ROA}+\text{CAR})\) by \(\sigma_{\text{ROA}}\) yields an estimate of the distance to insolvency.

A higher Z-score implies that larger shocks to profitability are required to cause the losses to exceed bank equity.

References#

API#

frds.measures.z_score(roa: float, capital_ratio: float, past_roas: ndarray) float[source]#

Z-score

Parameters:
  • roa (float) – the current bank ROA.

  • capital_ratio (float) – the current bank equity to asset ratio.

  • past_roas (np.ndarray) – (n_periods,) array of past bank ROAs used to calculate the standard deviation.

Returns:

The bank’s Z-score

Return type:

float

Examples#

>>> from frds.measures import z_score
>>> import numpy as np
>>> roas = np.array([0.1,0.2,0.15,0.18,0.2])
>>> z_score.estimate(roa=0.2, capital_ratio=0.5, past_roas=roas)
18.549962900111296