EVT Extreme Value Theory
Modeling the tails — because "rare" events aren't that rare
Learning Objectives
- •Understand why normal distributions fail for financial tails
- •Learn the Generalized Pareto Distribution for tail modeling
- •Apply EVT to get realistic tail risk estimates
- •Compare EVT-based VaR to normal VaR at extreme quantiles
Explain Like I'm 5
Normal statistics says extreme events are vanishingly rare. Markets disagree. "Once in a century" events happen every few years. Extreme Value Theory is a branch of statistics designed specifically for modeling these tails — the rare but devastating events that normal distributions pretend don't exist.
Think of It This Way
Normal distribution says 10-foot floods happen once per century. EVT says "let me look at the actual biggest floods and model those directly." Turns out 10-foot floods happen every 20 years and 15-foot floods every 50. EVT tells the truth about extreme events.
1Fat Tails — The Numbers
2Normal vs Actual — The Gap
Normal vs Actual Market Returns (Tails Highlighted)
3The Generalized Pareto Distribution
4EVT VaR vs Normal VaR — The Divergence
EVT VaR vs Normal VaR at Increasing Confidence
5Practical Takeaways
Key Formulas
GPD Survival Function
Probability of exceeding x given you've already exceeded threshold u. ξ is the shape (tail heaviness), σ is scale. Higher ξ = fatter tail = more extreme events.
EVT-based VaR
VaR using EVT. Much more accurate at extreme quantiles (99.9%) than normal VaR. n = total observations, N_u = exceedances above threshold u.
Hands-On Code
EVT Tail Risk Analysis
import numpy as np
from scipy import stats
def evt_analysis(returns, threshold_pct=95):
"""Extreme Value Theory tail risk analysis."""
losses = -returns[returns < 0]
threshold = np.percentile(losses, threshold_pct)
exceedances = losses[losses > threshold] - threshold
shape, loc, scale = stats.genpareto.fit(exceedances, floc=0)
print(f"Threshold: {threshold:.4f}")
print(f"Exceedances: {len(exceedances)}")
print(f"Shape (xi): {shape:.3f} {'(fat tail)' if shape > 0 else ''}")
for conf in [0.95, 0.99, 0.999]:
normal_var = stats.norm.ppf(conf) * returns.std()
p = 1 - conf
n_u = len(exceedances)
n = len(returns)
evt_var = threshold + (scale/shape) * ((n/n_u * p)**(-shape) - 1)
print(f" {conf:.1%}: Normal={normal_var:.4f}, EVT={evt_var:.4f} ({evt_var/normal_var:.1f}x)")At 99.9% confidence, EVT VaR is typically 2–3× larger than normal VaR. That's the fat tail effect — and it's real.
Knowledge Check
Q1.A "25-sigma event" under normal assumptions happened in 2008. What does this mean?
Assignment
Compute VaR at 95%, 99%, and 99.9% using both normal distribution and EVT. Plot the ratio of EVT-VaR to Normal-VaR at each level. The ratio should increase dramatically at extreme quantiles.