VaR Backtesting and the Kupiec Test
A VaR model makes a promise you can check: losses should breach the number on 1% of days and no more. Backtesting counts the breaches, and Kupiec's test decides whether the gap between promised and observed is ordinary bad luck or a broken model.
Prerequisites: Value at Risk (VaR), The Binomial Distribution, Hypothesis Testing
Most risk models cannot be checked. If a model says a bond is worth 98.4 and it trades at 98.4, you have learned nothing, because the market told you the answer. Value at Risk is different, and that difference is why it took over risk management. A VaR model makes a statement the future can contradict: tomorrow's loss will exceed this number on only one day in a hundred. Wait a hundred days, count how often it happened, and the model has either kept its word or it has not.
That counting exercise is backtesting, and the awkward part is that the answer is never clean. You promised one breach in a hundred and got three. Broken model, or an unlucky quarter? Kupiec's test turns that question into a number.
An analogy before any symbols
Think of a weather forecaster who says "30% chance of rain" every morning. You cannot grade any single forecast: it either rained or it did not, and both are consistent with 30%. What you can do is collect a hundred such mornings and count. If it rained on roughly thirty, the forecaster is calibrated. If it rained on seventy, the forecaster is broken, and no amount of protesting that each individual forecast was defensible will save them.
A VaR model is exactly this forecaster with a much smaller promised probability. At 99% confidence it says "there is a 1% chance today's loss exceeds $4m." Over 250 trading days you expect about two and a half such days. Backtesting is the discipline of counting them honestly and knowing how much deviation from two and a half is normal.
The catch is that rare events are hard to count. A forecaster promising 30% gives you plenty of rain to grade. A model promising 1% gives you two or three data points a year, and two or three data points do not settle arguments.
Exceptions, and why they are a coin flip
Fix a confidence level. Write for the promised breach probability, so at 99% confidence. Each trading day, compare the actual profit and loss with the VaR number you published the evening before. Define the exception indicator
In words: mark each day with a 1 if the model was wrong and a 0 if it was right. Nothing else matters, not the size of the loss, not the direction of the market. A loss one dollar past the line and a loss ten times the line both count as a single 1. That is a real limitation and we will return to it.
If the model is correctly calibrated, each is a coin flip that lands on 1 with probability , and the flips are independent. The total number of exceptions over days,
is then a binomial count with trials and success probability . Its expected value is and its standard deviation is . At and you expect exceptions with a standard deviation of about , which already tells you that anywhere from 0 to 6 is unremarkable.
Because is small and is large, that binomial is almost exactly a Poisson count with mean . Drag the rate below to and you are looking at the exact distribution of a year's exception count under a perfectly calibrated 99% model. Notice how flat the top is, and how much probability sits at 0, 1 and 2:
Backtesting VaR reduces to one question: is the observed number of exceptions consistent with a binomial count of mean ? Everything else, including Kupiec's test, is machinery for answering it.
Kupiec's proportion-of-failures test
Kupiec (1995) turns the comparison into a likelihood ratio. You have two competing stories for the data. The null says the true breach rate is exactly the promised . The alternative says it is whatever the data suggests, namely the observed rate . Compute how likely the observed count is under each story and compare:
In words: the top of the fraction is the probability of the data if the model is telling the truth; the bottom is the probability of the data under the best possible breach rate. If those two are close, the ratio is near 1, the logarithm is near 0, and the model survives. If the honest rate fits far better, the statistic gets large. POF stands for proportion of failures.
Under the null this statistic follows a chi-squared distribution with one degree of freedom. The critical values worth memorising are 3.84 at the 5% significance level and 6.63 at 1%. Exceed them and you reject the model.
Worked example: a model that fails
A desk runs a 99% one-day VaR model. Over days it recorded exceptions. Expected: 2.5. Is 8 too many?
Step 1, the observed rate. , so the model breached on 3.2% of days rather than the promised 1%.
Step 2, the log-likelihood under the null (, with quiet days):
Step 3, the log-likelihood under the alternative ():
Step 4, the statistic. .
That sits above both 3.84 and 6.63, so the model is rejected at the 1% level. The p-value is about 0.005: if the model really did breach on 1% of days, a count this extreme would show up in roughly one backtest in two hundred. This is not bad luck. Something in the model, most likely a volatility estimate that reacts too slowly, is understating risk.
Worked example: a model that looks wrong but is not
The same desk, a different year. This time and . Only one exception against an expectation of 2.5, so the model appears far too conservative, tying up capital it does not need.
Step 1. .
Step 2, null log-likelihood. .
Step 3, alternative log-likelihood. .
Step 4. , comfortably below 3.84, with a p-value of about 0.28.
You cannot reject the model. The honest conclusion is not "the model is fine" but "one year of data cannot tell the difference between a 1% model and a 0.4% model." This is the single most important practical fact about VaR backtesting: the test has very little power. A model whose true breach rate is 0.5%, meaning it overstates risk by a factor of two, will pass a 250-day Kupiec test the overwhelming majority of the time. Rejections happen when a model is badly wrong, not when it is merely wrong.
The Basel traffic light
Regulators turned the same binomial arithmetic into a table. Using 250 days at 99% confidence, the Basel Committee asks: if the model were correct, how likely is a count this small or smaller?
| Exceptions in 250 days | Cumulative probability | Zone | Capital multiplier add-on |
|---|---|---|---|
| 0 to 4 | up to 89.22% | green | 0.00 |
| 5 | 95.88% | yellow | 0.40 |
| 6 | 98.63% | yellow | 0.50 |
| 7 | 99.60% | yellow | 0.65 |
| 8 | 99.89% | yellow | 0.75 |
| 9 | 99.97% | yellow | 0.85 |
| 10 or more | 99.99%+ | red | 1.00 |
The base capital multiplier is 3, so a bank in the red zone pays 4, a 33% increase in market-risk capital. Note that the eight exceptions from the first worked example land in yellow, not red, even though Kupiec rejects at 1%. The regulator is deliberately more forgiving than the statistician, because it is grading a bank rather than a model.
What this means in practice
- Use the longest clean history you can. Power scales with , so moving from 250 days to 1000 matters far more than the choice of statistic.
- Backtest at 95% too. A 95% model produces roughly 12 exceptions a year instead of 2.5, giving you five times the data. Many desks diagnose at 95% and report at 99%.
- Split the P&L. Clean backtesting compares VaR against a hypothetical P&L from holding yesterday's positions unchanged; dirty backtesting uses the actual P&L including intraday trading and fees. Only the clean version tests the model; the dirty version tests the model plus the traders.
- Read the dates, not just the count. If the exceptions all fall in one week, or all involve the same risk factor, you have found a specific defect that no aggregate statistic will name for you. Then pair Kupiec with a test of independence, which is what Christoffersen's conditional coverage test adds.
Passing Kupiec does not mean the model is good, and it never tells you the exceptions were harmless.
Two failure modes hide behind a passing score. The first is clustering: Kupiec counts exceptions and ignores their order, so a model that breaches three days running during a stress event scores identically to one that breaches three times at random. The clustered model is far worse, because it fails exactly when you need it, and correcting for this is the entire point of Christoffersen's test.
The second is magnitude. An exception is a binary flag, so a loss 1% past the line and a loss 400% past the line are the same observation. A model can be perfectly calibrated on counts and still be catastrophic on size, which is why expected shortfall and its own backtests exist.
And never read a non-rejection as validation. With 250 days at 99%, most genuinely bad models walk free. "The model passed its backtest," reported without the sample size, is close to meaningless.
Practice
- A 95% VaR model is backtested over 500 days and records 38 exceptions. Compute , then the Kupiec statistic, and state your conclusion at the 5% level.
- Using the Basel table, explain why a bank with 5 exceptions faces a penalty while a bank with 4 does not, even though the difference between them is a single day. What does that say about threshold-based regulation?
- Two models are backtested over 250 days at 99%. Model A has 3 exceptions on scattered dates. Model B has 3 exceptions on three consecutive days in March. Kupiec gives both the same score. Which would you rather run, and what statistic would separate them?
- You are asked to prove your VaR model is not too conservative. Roughly how many days of backtest history would you need to reliably detect a true breach rate of 0.5% against a promised 1%? Argue from the standard deviation rather than computing exactly.
Related concepts
Practice in interviews
Further reading
- Kupiec (1995), Techniques for Verifying the Accuracy of Risk Measurement Models
- Christoffersen (1998), Evaluating Interval Forecasts
- Basel Committee (1996), Supervisory Framework for the Use of Backtesting in Conjunction with the Internal Models Approach