Skip to content

How Extreme Value Theory Models Financial Tail Losses

Original question

Why do financial returns often have fat tails, and how can extreme value theory help model rare market events?
Extreme daily returns often occur more frequently than a fitted normal distribution suggests. Time-varying volatility can produce part of that pattern, and large individual shocks can contribute further. A peaks-over-threshold approach from extreme value theory fits the distribution of unusually large losses, allowing you to estimate extreme quantiles with a model dedicated to the tail.

From conditional exceedances to a loss quantile

Define loss as L=−rL=-r and choose a high threshold uu. For excesses Y=L−uY=L-u given L>uL>u, the generalised Pareto approximation gives

P(Y>y∣L>u)≈(1+ξy/β)−1/ξ,P(Y>y\mid L>u)\approx \left(1+\xi y/\beta\right)^{-1/\xi},

on y≥0y\ge0 and 1+ξy/β>01+\xi y/\beta>0, with scale β>0\beta>0. The ξ=0\xi=0 limit is exponential. Positive ξ\xi gives a heavy right tail and negative ξ\xi gives a finite upper endpoint. Estimate the exceedance rate pup_u from the fraction of observations above uu. For a target tail probability p<pup<p_u, set P(L>q)=pP(L>q)=p. This gives

q=u+βξ[(pup)ξ−1].q=u+\frac{\beta}{\xi}\left[\left(\frac{p_u}{p}\right)^\xi-1\right].

For ξ=0\xi=0, use q=u+βlog⁡(pu/p)q=u+\beta\log(p_u/p). The approximation comes from modelling only the tail beyond a sufficiently high threshold, so check parameter stability across plausible choices of uu. Too low a threshold can bias the fit. Too high a threshold leaves few observations and wide uncertainty.

The fitted Pareto model answers a conditional question because its data are only observations already above uu. To obtain the chance of exceeding a higher level u+yu+y, multiply the chance of crossing uu by the conditional survival at excess yy. Setting that product equal to the desired tail probability gives the quantile equation. This is why the threshold exceedance fraction belongs in the formula. With too low a threshold the approximation can fit the wrong region. With too high a threshold there are few observations, and extrapolation becomes sensitive to each one.

The sign of the shape parameter also affects what can be extrapolated. With ξ>0\xi>0, the fitted tail extends indefinitely and decays like a power. With ξ<0\xi<0, the formula has an upper endpoint at u−β/ξu-\beta/\xi. An estimated negative shape does not establish a hard upper bound on real market losses. It means that this fitted tail implies one. Check how much the endpoint and high quantiles move when you change the threshold or fit on a different period, especially when a few observations determine the estimate.

What a 99% estimate inherits from the threshold choice

Suppose u=3%u=3\%, pu=5%p_u=5\%, β=1.2%\beta=1.2\%, and ξ=0.20\xi=0.20. The estimated 99% loss quantile uses p=1%p=1\%, giving

q=0.03+0.0120.20(50.20−1)≈0.0528.q=0.03+\frac{0.012}{0.20}(5^{0.20}-1)\approx0.0528.

The model estimates that losses exceed 5.28% on about 1% of comparable days. This is a model quantile. The chance of a cluster of exceedances over several days depends on their serial dependence. To model time-varying daily risk, you can fit the tail to standardised innovations after estimating conditional volatility, then transform the innovation quantile back into today's return units.

Evaluate the fitted tail quantile

The example starts with synthetic heavy-tailed losses in decimal units. For a market study, replace the synthetic array with losses from a calibration window and compare forecasts against subsequent exceedances.

import numpy as np from scipy.stats import genpareto rng = np.random.default_rng(39) losses = 0.012 * rng.standard_t(df=4, size=4_000) u = np.quantile(losses, 0.95) excess = losses[losses > u] - u p_u = len(excess) / len(losses) xi, _, beta = genpareto.fit(excess, floc=0) p = 0.01 if not 0 < p < p_u: raise ValueError("Tail probability must lie below the exceedance rate.") q = u + genpareto.isf(p / p_u, c=xi, scale=beta) print("99% loss quantile:", q)

Interactive example

Compare a loss threshold with losses beyond it

A synthetic set contains 100 equally likely losses, including one large loss. Expected shortfall averages the worst observations with fractional weight at a boundary.

95% VaR 4.18% · ES 7.75% · worst 20%
Sorted synthetic losses and the value-at-risk threshold01020125.850.575.3100Sorted observationLoss (%)
  • Sorted losses
  • VaR threshold

References and next steps