FRM Exam Part II · Backtesting VaR
Kupiec Unconditional Coverage Test for VaR Backtesting
Updated 11 October 2026 · Fact-checked
The Kupiec proportion-of-failures (POF) test checks whether the observed share of VaR exceptions matches the expected rate 1 − confidence level. You compute a likelihood ratio LR_POF and compare it with a chi-square distribution with 1 degree of freedom. At 95% test confidence, reject the model if LR_POF exceeds 3.84.
Understand Kupiec Unconditional Coverage Test
A VaR model at 99% says losses should exceed VaR on about 1% of days. Over 250 days you expect 2.5 exceptions. In practice you will see 0, 1, 4 or 6. The question is whether the gap from 2.5 is just luck or evidence that the model is wrong.
The Kupiec test answers this. It is a likelihood ratio test of one null hypothesis: the true exception probability equals p, the rate implied by the VaR confidence level. This property is called unconditional coverage. It looks only at how many exceptions occurred, not when they occurred.
The test compares two likelihoods. One assumes the exception rate is p. The other assumes it is the observed rate x/T, where x is exceptions and T is observations. If the observed rate is far from p, the ratio of likelihoods is large and the test statistic LR_POF is large. Under the null, LR_POF is approximately chi-square with 1 degree of freedom. The 5% critical value is 3.84 and the 1% critical value is 6.63.
The test is two-sided. Too many exceptions mean the model understates risk. Too few mean it is too conservative and ties up capital. Both can be rejected.
The main weakness is low power. With a small sample, such as 250 days at 99%, the test often fails to reject a wrong model. For example, a model with a true exception rate of 2% can still produce counts that look acceptable. The test also ignores clustering of exceptions, which is why Christoffersen's independence test is added.
Key formulas to remember
- Expected exception rate
- p = 1 − c, where c is the VaR confidence level
- For 99% VaR, p = 0.01. For 95% VaR, p = 0.05.
- Kupiec POF likelihood ratio
- LR_POF = −2 ln[(1 − p)^(T − x) × p^x] + 2 ln[(1 − x/T)^(T − x) × (x/T)^x]
- T = number of observations, x = number of exceptions. Needs 0 < x < T for the logs to work directly.
- Equivalent log form
- LR_POF = −2 [(T − x) ln(1 − p) + x ln p] + 2 [(T − x) ln(1 − x/T) + x ln(x/T)]
- Easier to compute on a calculator.
- Decision rule
- Reject the model if LR_POF > χ²(1) critical value
- Critical values: 3.84 at 5% significance, 6.63 at 1%.
- Special case x = 0
- LR_POF = −2 T ln(1 − p)
- The second term vanishes when there are no exceptions.
- Expected exceptions
- E(x) = p × T
- Compare with the actual count first as a sanity check.
How to solve Kupiec Unconditional Coverage Test questions
Use this order for any Kupiec question. It keeps the arithmetic short and the interpretation clear.
- 1Identify T (observations), x (exceptions) and the VaR confidence level c. Set p = 1 − c.
- 2Compute the expected count p × T and the observed rate x/T. Note whether the model looks too aggressive or too conservative.
- 3Write the statistic: LR_POF = −2 [(T − x) ln(1 − p) + x ln p] + 2 [(T − x) ln(1 − x/T) + x ln(x/T)].
- 4Evaluate each log carefully, keeping at least four decimals. Combine the two parts.
- 5Pick the critical value from chi-square with 1 degree of freedom: 3.84 at 5%, 6.63 at 1%.
- 6Compare. If LR_POF exceeds the critical value, reject the null that the model has correct coverage. Otherwise, do not reject.
- 7State the conclusion in words: model accepted or rejected, and whether it under- or overstates risk. Mention low power if the sample is small.
Quickest way: Shortcut: check the count before the formula
When to use it: Use when options are far apart or the question only asks whether the model is rejected.
- Compute p × T. If x is close to it, expect LR_POF to be small and the model to pass.
- Remember that LR_POF is zero when x/T = p exactly and grows as x moves away.
- If the question gives LR_POF, skip the algebra and just compare with 3.84 (5%) or 6.63 (1%).
- If x = 0, use LR_POF = −2 T ln(1 − p) directly.
- Eliminate options that use the wrong degrees of freedom or compare with the wrong tail.
Common mistakes in Kupiec Unconditional Coverage Test
Using p = c (for example 0.99) instead of 1 − c.
The confidence level is the number quoted, so it is plugged in by habit.
Fix: Always write p = 1 − c first. p is the exception probability.
Using the wrong degrees of freedom.
Students mix up the Kupiec test with the conditional coverage test.
Fix: Kupiec POF uses chi-square with 1 degree of freedom. The conditional coverage test uses 2.
Treating the test as one-sided and ignoring too few exceptions.
Focus on the Basel traffic light, which penalises only many exceptions.
Fix: Kupiec rejects both too many and too few exceptions, because LR_POF rises on either side of p × T.
Concluding the model is good because it was not rejected.
Not rejecting feels like confirmation.
Fix: Failing to reject means there is insufficient evidence against the model. The test has low power on small samples, so say so.
Believing the test detects clustered exceptions.
Confusing unconditional with conditional coverage.
Fix: Kupiec counts exceptions only. Clustering needs the Christoffersen independence test.
Log arithmetic slips, such as dropping the factor of −2 or mixing natural and base-10 logs.
Time pressure and long expressions.
Fix: Use natural logs only. Compute the two halves separately and check that the result is non-negative.
Worked examples
Example 1
A bank backtests a 99% one-day VaR over T = 250 days and records x = 6 exceptions. Using LR_POF = −2 [(T − x) ln(1 − p) + x ln p] + 2 [(T − x) ln(1 − x/T) + x ln(x/T)], decide at the 5% level whether to reject the model.
Show the solution
- p = 1 − 0.99 = 0.01. Expected exceptions = 0.01 × 250 = 2.5. Observed rate = 6/250 = 0.024.
- First part: (244) ln(0.99) + 6 ln(0.01). ln(0.99) = −0.010050, so 244 × (−0.010050) = −2.4522. ln(0.01) = −4.60517, so 6 × (−4.60517) = −27.6310. Sum = −30.0832. Times −2 gives 60.1664.
- Second part: 244 ln(0.976) + 6 ln(0.024). ln(0.976) = −0.024293, so 244 × (−0.024293) = −5.9275. ln(0.024) = −3.72970, so 6 × (−3.72970) = −22.3782. Sum = −28.3057. Times 2 gives −56.6114.
- LR_POF = 60.1664 − 56.6114 = 3.555.
- Critical value at 5% with 1 degree of freedom = 3.84.
- 3.555 < 3.84, so do not reject.
Answer: LR_POF ≈ 3.56, which is below 3.84. Do not reject the model at 5%, even though 6 exceptions is well above the 2.5 expected. This shows the test's limited power on a 250-day sample.
Example 2
A 95% one-day VaR model is backtested over T = 500 days with x = 40 exceptions. Compute LR_POF and state the conclusion at the 1% level.
Show the solution
- p = 0.05. Expected exceptions = 25. Observed rate = 40/500 = 0.08.
- First part: 460 ln(0.95) + 40 ln(0.05). ln(0.95) = −0.051293, so 460 × (−0.051293) = −23.5948. ln(0.05) = −2.995732, so 40 × (−2.995732) = −119.8293. Sum = −143.4241. Times −2 gives 286.8482.
- Second part: 460 ln(0.92) + 40 ln(0.08). ln(0.92) = −0.083382, so 460 × (−0.083382) = −38.3557. ln(0.08) = −2.525729, so 40 × (−2.525729) = −101.0292. Sum = −139.3849. Times 2 gives −278.7698.
- LR_POF = 286.8482 − 278.7698 = 8.078.
- Critical value at 1% with 1 degree of freedom = 6.63.
- 8.08 > 6.63, so reject.
Answer: LR_POF ≈ 8.08 exceeds 6.63, so reject the model at the 1% level. The exception rate of 8% is significantly above 5%, so the VaR model understates risk.
Exam tips
- Memorise 3.84 (5%) and 6.63 (1%) for chi-square with 1 degree of freedom. Many questions give only the statistic.
- Read whether the question asks for rejection at 5% or 1%. The same statistic can pass one and fail the other.
- If a question stresses a small sample or asks about limitations, the answer is low power: wrong models are often not rejected.
- If the question mentions clustering of exceptions, the answer points to the Christoffersen independence test, not Kupiec.
- Do the sanity check first: compare x with p × T before computing logs.
Practice questions from Backtesting VaR
- A risk manager at a trading firm explains why the bank backtests its 99% one-day VaR model against daily trading results. Which statement be…
- After a backtest, a bank classifies exceptions into those caused by a correct model experiencing an unusual event, and those caused by model…
- A bank's 99% VaR model produces 4 exceptions in 250 days, and the exceptions all occurred in the same two-week period. A validator applies o…
- A bank's 99% one-day VaR model is backtested over 250 days. Using the Kupiec test's non-rejection region at the 95% confidence level, which …
- A bank's 99% VaR model produces exactly 2.5 exceptions per 250 days on average, matching expectations, so it passes the unconditional covera…
Kupiec Unconditional Coverage Test: frequently asked questions
What is the chi-square critical value 3.84 in the Kupiec test?
It is the 95th percentile of a chi-square distribution with 1 degree of freedom. If LR_POF exceeds 3.84, you reject the model at the 5% significance level. At 1% significance the critical value is 6.63.
Does the Kupiec test check whether exceptions are independent?
No. It tests only unconditional coverage, meaning the total number of exceptions against the expected number. To test whether exceptions cluster over time, you add the Christoffersen independence test, which together with Kupiec forms the conditional coverage test.
Why does the Kupiec test have low power?
Exceptions at high confidence levels are rare, so a short sample has very few of them. A wrong model can produce a count close enough to the expected value that the test cannot tell the difference. Longer samples or lower confidence levels improve power.
Can the Kupiec test reject a model with too few exceptions?
Yes. The statistic grows when the observed rate is either above or below the expected rate p. A model with far too few exceptions is too conservative and is also rejected if LR_POF exceeds the critical value.