Overview
The advanced IRB formulas are provided by the Basel framework for banks have some degree of sophistication, and are able to construct models that provide a probability of default, a loss given default and an exposure at default for each loan.
- {% PD %} - probability of default, provided by the banks internal models
- {% LGD %} - loss given default, provided by the banks internal models
- {% EAD %} - exposure at default, provided by the banks internal models
- {% M %} - effective maturity
- {% b %} - maturity adjustment, a computed value whose formula is provided by the Basel standard
- {% R %} - correlation, a computed value which is provided by the Basel standard
The formulas are designed to calculate a capital charge for each loan. That is, it calculates how much capital the bank must hold as a buffer against losses for each loan.
Formulas
The Basel Advanced IRB formulas provide a formula for the capital charge required for various credit assets given that the bank has provided its own estimates of pd, lgd, and ead. The capital charge is taken to be 8% of Risk Weighted Assets. This can be turned around. After calculating the capital charge K, one can obtain the Risk Weight Assets as follows.
{% RWA = K \times 12.5 \times EAD %}
The formulas used for a given credit depends on the type of credit- Corporate Exposure
- Corporate Exposure for an SME
- Residential Mortgage
- Qualifying Revolving Retail Exposure
- Other Retail
Corporate Exposure
The corporate exposure formulas are appropriate for loans made to corporations.
The formula for the correlation {% R %} is given by
{% R = AVC (0.12 \times \frac{1 - e^{-50 \times PD}}{1 - e^{-50}} +0.24(1 - \frac{1 - e^{-50 \times PD}}{1 - e^{-50}})) %}
AVC is equal to - 1.25 if the firm is a large regulated financial institution
- 1 otherwise
{% b = (0.11852 - 0.05478 \times ln(PD))^2 %}
{% K = LGD [N(\sqrt{\frac{1}{1-R}} \times G(PD) + \sqrt{\frac{R}{1-R}} \times G(0.999)) - PD] \times \frac{1 + (M-2.5)b}{1-1.5b} %}
Corporate Exposure for SME
When the corporation is considered to be a small or medium enterprise (sales turnover below 50 million euros), the correlation formulat is then given by
{% R = 0.12 \times \frac{1 - e^{-50 \times PD}}{1 - e^{-50}} +0.24(1 - \frac{1 - e^{-50 \times PD}}{1 - e^{-50}}) - 0.04(1 - \frac{max(S-5,0)}{45}) %}
Residential Mortgage
The formula for residential mortgages are given by
{% R = 0.15 %}
{% K = LGD[N(\sqrt{\frac{1}{1-R}} \times G(PD) + \sqrt{\frac{R}{1-R}} \times G(0.999)) - PD] %}
Qualifying Revolving Retail Exposure
The formulas for unsecured retail products, typically credit cards is
{% R = 0.4 %}
{% K = LGD[N(\sqrt{\frac{1}{1-R}} \times G(PD) + \sqrt{\frac{R}{1-R}} \times G(0.999)) - PD] %}
Other Retail Exposure
All other retial exposures is given by
{% R = 0.03 \frac{1 - e^{-35 \times PD}}{1 - e^{-35}} + 0.16(1 - \frac{1 - e^{-35 \times PD}}{1 - e^{-35}}) %}
{% K = LGD [N(\sqrt{\frac{1}{1-R}} \times G(PD) + \sqrt{\frac{R}{1-R}} \times G(0.999)) - PD] %}
Scripting
The following script imports the basel package, and then copies the data and maps it to a new dataset with the capital calculated from the basel formulas in the basel package. Lastly, we set the dataset back to the blog and give it the name "capital".
let basel = await import('/lib/finance/capital/basel/v1.0.0/basel.mjs');
let data = data.map(p=>{
if(p.type == 'mortgage') p.kapital = basel.mortgage(p.pd, p.lgd, p.ead);
if(p.type == 'retail') p.kapital = basel.retail(p.pd, p.lgd, p.ead);
if(p.type == 'corporate') p.kapital = basel.corporate(p.pd, p.lgd, p.ead, p.M, true);
return p;
});
$val.set('capital', data);
This example is simplified in the sense that the dataset contains the values for the probability of default, the loss given default and the exposure in the dataset itself. Many times, banks will have a risk rank (say a number from 1 to 10) instead of a probability of default, however, they will have a map of risk grades to pd's. If the dataset had a "risk_grade" field for instance, you could modify the above code to add a map from risk grades to pd.
let basel = await import('/lib/finance/capital/basel/v1.0.0/basel.mjs');
let data = data.map(p=>{
if(p.risk_grade == 10) p.pd = 0.1;
if(p.risk_grade == 9) p.pd = 0.08;
if(p.risk_grade == 8) p.pd = 0.065;
// ... fill in the other grades here
if(p.type == 'mortgage') p.kapital = basel.mortgage(p.pd, p.lgd, p.ead);
if(p.type == 'retail') p.kapital = basel.retail(p.pd, p.lgd, p.ead);
if(p.type == 'corporate') p.kapital = basel.corporate(p.pd, p.lgd, p.ead, p.M, true);
return p;
});
$val.set('capital', data);
Try it!
Video Demos
Video Overview
An overview of some of calculating the advanced irb formulas.