Research / Regulation
Three numbers that cannot all be true
The prescribed correlations between interest rate tenors are not a valid correlation matrix. Three entries show it by hand, and the standard says what to do.
The standardised approach to market risk prescribes everything that goes into the interest rate delta charge. There are ten tenors, a risk weight for each, and a table of correlations between every pair of tenors. When we built our engine we reproduced every entry of that table from the formula the text gives. Then we asked something the text does not ask. Is the table a correlation matrix?
It is not. You do not need our software to see it. You need three entries and a calculator.
The three entries
The January 2019 text of the Basel Framework (BCBS d457, paragraph MAR21.46) gives the correlation between two tenors as
ρ(Tk, Tl) = max( exp( −θ × |Tk − Tl| / min(Tk, Tl) ), 40% ), θ = 3%
and lists the results, to a tenth of a percentage point, in a table. Take three tenors: six months, three years and fifteen years.
| Pair | Working | Correlation |
|---|---|---|
| 6 months and 3 years | exp(−0.03 × 5) | 86.1% |
| 6 months and 15 years | exp(−0.03 × 29) | 41.9% |
| 3 years and 15 years | exp(−0.03 × 4) | 88.7% |
All three are above the 40% floor, so the floor has no part in what follows.
Why they cannot all be true
A correlation is the cosine of an angle between two vectors. If six months and three years are 86.1% correlated, the angle between them is 30.6 degrees. Three years and fifteen years, at 88.7%, are 27.5 degrees apart. Angles obey the triangle inequality, so six months and fifteen years can be no more than 58.1 degrees apart. That is a correlation of at least 52.9%. The table says 41.9%, which is 65.2 degrees. The three numbers describe a triangle that does not close.
Put another way, if two things each move closely with a third, they cannot be as loosely related to each other as the table says.
A calculator can check the same fact without any geometry. A three-by-three correlation matrix must have a determinant of zero or more. This one has a negative determinant. The program below does all of it, using only the standard library.
from math import acos, degrees, sqrt
# The three entries, as the table gives them: 6 months with 3 years,
# 6 months with 15 years, and 3 years with 15 years.
a, b, c = 0.861, 0.419, 0.887
# Correlations are cosines of angles, and angles obey the triangle inequality.
print(round(degrees(acos(a)) + degrees(acos(c)), 1), round(degrees(acos(b)), 1))
# The lowest that b could be, given a and c.
print(round(a * c - sqrt((1 - a * a) * (1 - c * c)), 3))
# A correlation matrix has a determinant of zero or more.
print(round(1 + 2 * a * b * c - a * a - b * b - c * c, 4))
# Weighted sensitivities of -6, +10 and -6 million at those three tenors.
w = (-6, 10, -6)
r = ((1, a, b), (a, 1, c), (b, c, 1))
print(round(sum(w[i] * r[i][j] * w[j] for i in range(3) for j in range(3)), 3))It prints this. The first line is the two angles, the second is the lowest possible correlation, the third is the determinant, and the fourth is a quantity that the next section explains.
58.1 65.2
0.529
-0.0637
-7.592
The program uses the table’s rounded entries. The engine uses the formula without rounding and reaches the same conclusion, with a determinant of −0.0633.
What it costs
The charge for a bucket is the square root of a sum over pairs of tenors, the sum of ρ × WS × WS, where WS is the weighted sensitivity: the net PV01 at a tenor multiplied by its risk weight. With a valid matrix that sum cannot be negative. With this one it can.
Take a book with weighted sensitivities of −6 million at six months, +10 million at three years and −6 million at fifteen years. The squares add up to 172. The three cross terms, each counted twice, add up to −179.6. The sum is −7.6, and it has no real square root.
The text has an answer for that. It floors the quantity under the root at zero (MAR21.4(4)), so the bucket charge is zero. That settles the medium scenario, which uses the prescribed correlations as they stand. The standard takes the largest charge over three scenarios. In the high scenario every correlation is multiplied by 1.25, up to a limit of 100%. In the low scenario each is cut to the larger of twice itself minus 100% and 75% of itself. Here is what the engine returns for the book above.
| Scenario | Quantity under the root | Charge, millions |
|---|---|---|
| High | −30.3 | 0 |
| Medium | −7.6 | 0 |
| Low | 15.2 | 3.898 |
The capital requirement is the largest of the three, 3.898 million, set by the low scenario. The book’s gross weighted exposure is 22 million. With a valid matrix none of those quantities could be negative. This one gives a negative quantity in two of the three scenarios, and the largest-of-three rule is what keeps the total from being zero.
What follows for anyone building an engine
Do not factor the matrix. A Cholesky factorisation of the medium matrix breaks down at the fifth tenor, three years, where it needs the square root of −0.034. Anything built on a factorisation, such as a simulation of correlated moves, needs a repaired matrix, and a repaired matrix is not the one the text prescribes.
Compute the quadratic form directly and floor it, as the text says. That is what our engine does.
Test for it. The three-tenor book above is a known-answer test for a validator. The right charges are 0, 0 and 3.898 million under high, medium and low. An engine that reports a positive charge under the medium scenario has repaired the matrix, perhaps without saying so.
Our engine also returns a certificate for each scenario. It is an integer vector whose quadratic form is summed in exact rational arithmetic on the matrix as it is stored, with an allowance for the rounding in the stored entries. For all three scenarios the form is negative by far more than the allowance. We call that statement certified, not proved, because it is about the matrix as stored in binary. The three-entry argument above is the proof for the matrix over the real numbers, and you have just checked it. The statement is FR-03 on the verification page, and the FRTB-SA page loads a book for each scenario that shows the floor at work.
What we have not checked
- We read the January 2019 text, BCBS d457. We did not read the later consolidated text of the Framework or any national implementation. If the formula or the table changed there, this essay describes the earlier one.
- The three entries come from the correlations between tenors within one currency. We have not examined the other correlation tables of the standardised approach, and we do not know whether they behave the same way.
- We do not know why the table has this property or what the committee intended. We have described what the text does about it, and what that means for an engine.