kacem.dev
← FIN · Quant finance

Expected Shortfall vs. VaR: what the number actually promisesDraft

VaR tells you a threshold; ES tells you what the bad days cost. Why Basel moved, why desks still quote VaR, and what I learned implementing both on the same pipeline.

3 min financeriskvarexpected-shortfallbasel

Value-at-Risk answers a narrow question: at confidence α, what loss will I not exceed over horizon h? Expected Shortfall answers the one you actually care about once that threshold is breached: when it goes wrong, how wrong does it go?

Same inputs, same P&L distribution, very different contracts with the reader.

The two definitions, side by side

For a loss distribution L and confidence level α:

  • VaR is the α-quantile: VaR_α = inf { ℓ : P(L ≤ ℓ) ≥ α }.
  • ES is the mean loss beyond that quantile: ES_α = E[ L | L ≥ VaR_α ].

VaR is a point on the CDF. ES is an integral over the tail that starts there. Everything else about the debate follows from that.

What VaR gets wrong

It is blind past the threshold. Two portfolios with identical 99% VaR can have wildly different 99.5% losses. VaR cannot tell them apart; ES can.

It is not subadditive. For non-elliptical distributions, VaR(A+B) can exceed VaR(A) + VaR(B). Diversification can increase reported risk, which is the opposite of what a risk measure is for. ES is coherent (Artzner et al., 1999); VaR is not.

It invites gaming. A desk can sell deep out-of-the-money options, collect premium, and keep 99% VaR flat while loading the 1% tail. ES prices that trade in.

What ES gets wrong

It is harder to backtest. VaR backtesting is a coin-flip count: did we breach more than (1−α) of the time? ES is not elicitable on its own (Gneiting, 2011), so there is no single scoring function that ranks ES forecasts. You backtest the pair (VaR, ES) jointly (Fissler–Ziegel) or lean on VaR exceedances as a proxy. In practice most desks still validate ES through VaR.

It is noisier. You are averaging the 1% of scenarios you have the least data about. With 250 historical days at 97.5%, ES is the mean of roughly six points. Parametric assumptions help, but then you are back to trusting the tail shape you assumed.

It is less intuitive to explain. “We will not lose more than X on 99 days out of 100” is a sentence a committee understands. “Our average loss on the worst 2.5% of days is Y” takes a second pass.

Why Basel moved anyway

FRTB replaced 99% VaR with 97.5% ES as the capital measure. The lower confidence level is deliberate: for a normal distribution, 97.5% ES ≈ 99% VaR, so the headline number barely moves — but the tail is now inside the measure instead of outside it. Regulators traded cleaner backtesting for a measure that cannot be gamed by stuffing the tail.

What this looked like in code

In the market-risk-quant engine both measures come out of the same aggregation step: sort the P&L vector, pick the quantile for VaR, take the mean of everything past it for ES. The interesting differences were upstream:

  • Monte Carlo path count. VaR at 99% stabilised around 10k paths; ES at 97.5% wanted more because it depends on the mass past the quantile, not just its location.
  • Historical simulation window. ES is far more sensitive to whether a single crisis day is in or out of the window. A 1-day change in asOfDate moved ES by while VaR barely registered.
  • Parametric. Under Gaussian assumptions ES is closed-form (σ·φ(z_α)/(1−α)), which makes it a good cross-check on the simulation methods even if nobody books capital on it.

Where I land

Quote VaR because the room expects it. Manage to ES because it is the number that reflects what a bad week costs. And backtest both, together, because neither one on its own tells you whether your model is wrong.