Skip to content
AI360Xpert
Beta

Extreme Value Theory

Averages follow the central limit theorem, but maxima follow their own three-shape law. That law prices floods, outages, and worst-case latency.

Daily data piles in the bulk while yearly maxima trace a Gumbel tail whose fitted curve reads off the 100-day return level
Daily data piles in the bulk while yearly maxima trace a Gumbel tail whose fitted curve reads off the 100-day return level

Why Does This Exist?

Capacity planning never asks for the average flood. It asks for the 100-year flood: the level exceeded with probability 0.01 per year. Averages wash extremes away, and the CLT says nothing about maxima. Fitting a normal to the bulk and extrapolating underestimates the tail by multiples.

Fisher-Tippett-Gnedenko fixes the target: renormalized block maxima converge to one of three shapes, Gumbel, Frechet, or Weibull, unified as the generalized extreme value (GEV) law. It extends order statistics from exact small-nn formulas to large-nn tail limits.

The one idea you need first

A block maximum is the largest value in a block: yearly max rainfall, worst latency per deploy. A return level zTz_T satisfies P(M>zT)=1/TP(M > z_T) = 1/T: the TT-block event. Everything here estimates zTz_T.

Think of It Like This

High-jump records versus average jumps

Average jump height says who trains well. Records follow different physics: technique ceilings, outlier athletes, equipment jumps. Predicting the next record from the average misses by meters.

Block maxima are records per season. Their limit law depends on whether heights are unbounded and light (Gumbel), heavy (Frechet), or hard-capped (Weibull). Where it stops: athletes adapt and break stationarity, while the clean theorem needs identically distributed blocks.

How It Actually Works

For i.i.d. blocks with maximum MnM_n, if (Mn−bn)/an(M_n - b_n)/a_n converges, the limit is GEV: G(z)=exp(−(1+xiz)−1/xi)G(z) = \\exp(-(1 + \\xi z)^{-1/\\xi}). Shape xi=0\\xi = 0 is Gumbel (light tails, e.g. normal, exponential), xi>0\\xi > 0 Frechet (heavy, e.g. Pareto), xi<0\\xi < 0 Weibull (bounded top, e.g. uniform). Practice splits into block maxima (fit GEV to yearly maxes) and peaks-over-threshold (fit generalized Pareto to exceedances of a high uu).

Worked example

Take 100 daily river levels, block max 8.98.9. Fit Gumbel G(z)=exp(−exp(−(z−mu)/sigma))G(z) = \\exp(-\\exp(-(z-\\mu)/\\sigma)) with hatmu=5.0\\hat\\mu = 5.0, hatsigma=1.5\\hat\\sigma = 1.5. The 100-block return level solves G(z)=0.99G(z) = 0.99: z=mu−sigmalog(−log0.99)z = \\mu - \\sigma\\log(-\\log 0.99). Since −log0.99approx0.01005-\\log 0.99 \\approx 0.01005 and log(0.01005)approx−4.600\\log(0.01005) \\approx -4.600, zapprox5.0+1.5times4.600=11.9z \\approx 5.0 + 1.5 \\times 4.600 = 11.9. The average day is near 5, the once-per-100-blocks day near 11.9: extremes live more than twice as high as the bulk.

Code

import numpy as np
rng = np.random.default_rng(7)daily = rng.exponential(2.0, size=(200, 100))  # 200 blocks of 100 daysmaxima = daily.max(axis=1)print(round(float(maxima.mean()), 2))  # -> ~11.3print(round(float(np.quantile(maxima, 0.99)), 2))  # -> ~14.9 tail

Exponential blocks give mean maxima near 11.3 with the top percentile near 14.9. The gap between mean-max and tail-max is the quantity capacity planners buy.

Watch Out For

Extrapolating a bulk normal into the tail

A normal fit to all daily data predicts the 100-block max far below the GEV fit, because the normal tail decays as e−x2e^{-x^2} while data may decay as e−xe^{-x} or heavier. The symptom is "impossible" floods every few years.

Fit the tail on maxima or exceedances only. If the shape estimate hatxi\\hat\\xi is positive, the normal was the wrong universe.

Ignoring drift and seasonality

River baselines rise, traffic mixes shift, models redeploy. Nonstationary blocks violate the identical-distribution assumption, so a pooled GEV blends eras and misprices both.

Fit with time covariates or split eras. If block maxima trend over time, the stationary return level is fiction.

The Quick Version

  • Maxima converge to Gumbel, Frechet, or Weibull; the shape is estimated, not assumed.
  • Return level zTz_T is the 1−1/T1 - 1/T quantile of the maxima law.
  • Example: Gumbel with mu=5,sigma=1.5\\mu=5, \\sigma=1.5 gives a 100-block level near 11.9.
  • Use block maxima or peaks-over-threshold, never bulk-normal extrapolation.
  • Positive shape means heavy tails and far higher return levels.
  • Stationarity is load-bearing; trend the covariates or split the eras.