Skip to content

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.

API

estimate(roa, capital_ratio, past_roas)

Z-score

Parameters:

Name Type Description Default
roa float

the current bank ROA.

required
capital_ratio float

the current bank equity to asset ratio.

required
past_roas np.ndarray

(n_periods,) array of past bank ROAs used to calculate the standard deviation.

required

Returns:

Name Type Description
float float

The bank's Z-score

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
Source code in src/frds/measures/z_score.py
def estimate(roa: float, capital_ratio: float, past_roas: np.ndarray) -> float:
    r"""Z-score

    Args:
        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:
        float: The bank's Z-score

    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

    """
    return (roa + capital_ratio) / np.std(past_roas)

References


Bug report | Sponsor me