portfolioECL
Syntax
Description
[,
given the totalECL,ECLByID,ECLByPeriod] = portfolioECL(MarginalPD,LGD,EAD)MarginalPD, LGD, and
EAD values for a portfolio of loans, computes the lifetime
expected credit loss (ECL) at the individual or portfolio level.
[
adds optional name-value pair arguments for
totalECL,ECLByID,ECLByPeriod] = portfolioECL(___,Name=Value)ScenarioProbabilities, InterestRate,
Periodicity, IDVar, and
ScenarioNames.
Examples
This example shows how to calculate the expected credit loss (ECL) based on marginal probability of default (PD), loss given default (LGD), and exposure at default (EAD).
Marginal PD — Expectation of a credit default event over a given time frame.
LGD — Portion of a nonrecovered credit in the case of default.
EAD — Balance at the time of default.
IFRS 9 requires multiple economic scenarios to be modeled while computing ECL. This example considers five macroeconomic scenarios: severe, adverse, baseline, favorable, and excellent.
Load Data
Load the credit data for company IDs 1304 and 2067 and the associated macroeconomic scenarios.
load DataPredictLifetime.mat
disp(LoanData) ID ScoreGroup YOB Year
____ _____________ ___ ____
1304 "Medium Risk" 4 2020
1304 "Medium Risk" 5 2021
1304 "Medium Risk" 6 2022
1304 "Medium Risk" 7 2023
1304 "Medium Risk" 8 2024
1304 "Medium Risk" 9 2025
1304 "Medium Risk" 10 2026
2067 "Low Risk" 7 2020
2067 "Low Risk" 8 2021
2067 "Low Risk" 9 2022
2067 "Low Risk" 10 2023
disp(head(MultipleScenarios,10))
ScenarioID Year GDP Market
__________ ____ ____ ______
"Severe" 2020 -0.9 -5.5
"Severe" 2021 -0.5 -6.5
"Severe" 2022 0.2 -1
"Severe" 2023 0.8 1.5
"Severe" 2024 1.4 4
"Severe" 2025 1.8 6.5
"Severe" 2026 1.8 6.5
"Severe" 2027 1.8 6.5
"Adverse" 2020 0.1 -0.5
"Adverse" 2021 0.2 -2.5
disp(ScenarioProbabilities)
Probability
___________
Severe 0.1
Adverse 0.2
Baseline 0.3
Favorable 0.2
Excellent 0.2
Load the pdModel that was created using fitLifetimePDModel with a Probit model.
load LifetimeChampionModel.mat
disp(pdModel) Probit with properties:
ModelID: "Champion"
Description: "A sample model used as champion model for illustration purposes."
UnderlyingModel: [1×1 classreg.regr.CompactGeneralizedLinearModel]
IDVar: "ID"
AgeVar: "YOB"
LoanVars: "ScoreGroup"
MacroVars: ["GDP" "Market"]
ResponseVar: "Default"
WeightsVar: ""
TimeInterval: []
Define the interest rate to discount future losses back to present.
EffRate = 0.045;
Create Scenarios
Compute marginal lifetime PDs for the two companies.
CompanyID = 1304; IndCompany = LoanData.ID == CompanyID; Years = LoanData.Year(IndCompany); NumYears = length(Years); ScenarioID = unique(MultipleScenarios.ScenarioID,'stable'); NumScenarios = length(ScenarioID); PD1 = zeros(NumYears,NumScenarios); for ii=1:NumScenarios IndScenario = MultipleScenarios.ScenarioID==ScenarioID(ii); data = join(LoanData(IndCompany,:),MultipleScenarios(IndScenario,:)); PD1(:,ii) = predictLifetime(pdModel,data,ProbabilityType="marginal"); end DiscTimes = Years-Years(1)+1; DiscFactors = 1./(1+EffRate).^DiscTimes; ProbScenario = ScenarioProbabilities.Probability; CompanyID = 2067; IndCompany = LoanData.ID == CompanyID; Years = LoanData.Year(IndCompany); NumYears = length(Years); PD4 = zeros(NumYears,NumScenarios); for ii=1:NumScenarios IndScenario = MultipleScenarios.ScenarioID==ScenarioID(ii); data = join(LoanData(IndCompany,:),MultipleScenarios(IndScenario,:)); PD4(:,ii) = predictLifetime(pdModel,data,ProbabilityType="marginal"); end
Calculate Marginal PD for Multiple IDs
Create a table for the portfolio PD that contains the PD for the two companies.
PD = array2table([PD1; PD4]);
PD.Properties.VariableNames = {'Severe','Adverse','Baseline','Favorable','Excellent'};
PD.ID = [repmat(1304,7,1);repmat(2067,4,1)];
PD = movevars(PD, 'ID', 'Before', 'Severe');
disp(PD) ID Severe Adverse Baseline Favorable Excellent
____ __________ __________ __________ __________ __________
1304 0.011316 0.0096361 0.0081783 0.006918 0.0058324
1304 0.0078277 0.0069482 0.0061554 0.0054425 0.0048028
1304 0.0048869 0.0044693 0.0040823 0.0037243 0.0033938
1304 0.0031017 0.0029321 0.0027698 0.0026147 0.0024668
1304 0.0019309 0.0018923 0.0018538 0.0018153 0.001777
1304 0.0012157 0.0012197 0.0012233 0.0012264 0.0012293
1304 0.00082053 0.00082322 0.00082562 0.00082775 0.00082964
2067 0.0022199 0.001832 0.0015067 0.001235 0.0010088
2067 0.0014464 0.0012534 0.0010841 0.00093599 0.00080662
2067 0.0008343 0.00074897 0.00067168 0.00060175 0.00053857
2067 0.00049107 0.00045839 0.00042769 0.00039887 0.00037183
Calculate LGD for Multiple IDs
Create a table for the portfolio LGD that contains the LGD for the two companies.
LGD = array2table([0.25, 0.23, 0.21, 0.19, 0.17; 0.24, 0.22, 0.2, 0.18, 0.16]);
LGD.Properties.VariableNames = {'S1','S2','S3','S4','S5'};
LGD.ID = [1304;2067];
LGD = movevars(LGD, 'ID', 'Before', 'S1');
disp(LGD) ID S1 S2 S3 S4 S5
____ ____ ____ ____ ____ ____
1304 0.25 0.23 0.21 0.19 0.17
2067 0.24 0.22 0.2 0.18 0.16
Calculate EAD for Multiple IDs
Create a table for the portfolio EAD that contains the EAD for the two companies 1304 and 2067.
EAD = array2table(horzcat([repmat(1304,7,1);repmat(2067,4,1)],vertcat((100000:-10000:40000)',(120000:-10000:90000)')));
EAD.Properties.VariableNames = {'ID','EAD'};
disp(EAD) ID EAD
____ _______
1304 1e+05
1304 90000
1304 80000
1304 70000
1304 60000
1304 50000
1304 40000
2067 1.2e+05
2067 1.1e+05
2067 1e+05
2067 90000
Use portfolioECL with PD, LGD, and EAD Tables
Compute the lifetime ECL using portfolioECL.
[totalECL, ECLByID, ECLByPeriod] = portfolioECL(PD, LGD, EAD,ScenarioProbabilities=[0.1 0.2 0.3 0.2 0.2], ... InterestRate = EffRate, Periodicity="monthly",ScenarioNames={'Severe','Adverse','Baseline','Favorable','Excellent'});
Display the total portfolio ECL.
disp(totalECL);
510.5860
Display the scenario weighted ECLs for each individual loan.
disp(ECLByID);
ID ECL
____ ______
1304 430.68
2067 79.905
Display the ECL for each individual loan per time period and per scenario.
disp(ECLByPeriod);
ID TimePeriod Severe Adverse Baseline Favorable Excellent
____ __________ ______ _______ ________ _________ _________
1304 1 281.84 220.8 171.1 130.95 98.781
1304 2 174.81 142.76 115.47 92.372 72.935
1304 3 96.647 81.317 67.817 55.978 45.64
1304 4 53.474 46.505 40.111 34.259 28.918
1304 5 28.426 25.63 22.924 20.311 17.79
1304 6 14.859 13.715 12.559 11.393 10.217
1304 7 7.9931 7.3777 6.7558 6.1282 5.4957
2067 1 63.693 48.183 36.026 26.576 19.296
2067 2 37.901 30.106 23.673 18.394 14.091
2067 3 19.8 16.293 13.284 10.711 8.5209
2067 4 10.449 8.9412 7.5839 6.3656 5.2748
Input Arguments
Marginal PD values, specified as a table with a column for IDs that is
defined by IDVar.
Note
The MarginalPD table column name for IDs and
the order of IDs must be the same as the ID columns of the
LGD and EAD
tables.
You can use fitLifetimePDModel to create a PD model and predict to
create a vector that can be converted to a table using array2table.
Data Types: table
LGD value, specified as a table with a column for IDs that is defined by
IDVar.
Note
The LGD table column name for lDs and the order
of IDs must be the same as the ID columns of the
MarginalPD and EAD
tables.
You can use fitLGDModel to
create a LGD model and predict to create a
vector that can be converted to a table using array2table.
Data Types: table
EAD value, specified as a table with a column for IDs that is defined by
IDVar.
Note
The EAD table column name for IDs and the order
of IDs must be the same as the ID columns of the
MarginalPD and LGD
tables.
You can use fitEADModel to
create a EAD model and predict to create a
vector that can be converted to a table using array2table.
Data Types: table
Name-Value Arguments
Specify optional pairs of arguments as
Name1=Value1,...,NameN=ValueN, where Name is
the argument name and Value is the corresponding value.
Name-value arguments must appear after other arguments, but the order of the
pairs does not matter.
Example: [totalECL,ECLByID,ECLByPeriod] =
portfolioECL(MarginalPD,LGD,EAD,InterestRate=0.045,Periodicity="annual")
Probabilities assigning weights to corresponding scenarios, specified
as ScenarioProbabilities and a numeric vector. The
ScenarioProbabilities values must be greater than
or equal to 0 and sum to 1.
Data Types: double
Interest rate to discount future losses back to present, specified as
InterestRate and a scalar positive or negative
decimal or a table.
If you specify a scalar, the interest-rate value applies to the entire portfolio.
If you specify a table, there must be exactly two columns in the interest-rate table, one for IDs and the other for the interest-rate value for each loan. Each row must have an ID that cannot be repeated on another row in the table. The IDs must match and be in the same order as the IDs used by
MarginalPD,LGD, andEADtables.
Data Types: double | table
Time period of input data, specified as Periodicity
and a character vector or string.
Data Types: char | string
Column name for ID in MarginalPD,
LGD, and EAD tables, specified
as IDVar and a character vector or string.
Data Types: char | string
User-defined scenario names with one name per scenario, specified as
ScenarioNames and a cell array of character
vectors or string array. The ScenarioNames must all
be unique and nonempty.
Data Types: cell | string
Output Arguments
Total portfolio ECL, returned as a scalar. The total portfolio ECL is computed as a sum of the ECLs of each loan weighted by the scenario probabilities and discounted to the present.
Scenario weighted ECLs for each individual loan, returned as a table.
ECL for each individual loan per time period and per scenario, returned as a table.
More About
The expected credit losses (ECLs) model adopts a forward-looking approach to estimation of impairment losses.
The discounted ECL at time t for scenario s is defined as
where
t denotes a time period.
s denotes a scenario.
i denotes a loan.
PDmarginal,i(t;s) is the marginal probability of default (PD) (see
predictLifetime) for loan i at time period t, given scenario s.LGDi(t;s) is the loss given default (LGD) for loan i at time period t, given scenario s.
EADi(t;s) is the exposure at default (EAD) for loan i at time period t, given scenario s.
Disci(t) is the discount factor for loan i at time period t, based on the loan's effective interest rate.
The ECLi(t;s) quantities are computed for each time period in the remaining life of a loan and for each scenario. These quantities are reported in the
ECLByPeriodoutput ofportfolioECLfor all loans in the portfolio.The lifetime ECL for loan i is computed as
where
Ni is the number of periods in the remaining life of loan i.
M is the number of scenarios.
P(s) denotes the scenario probabilities.
The ECLi quantity is reported in the
ECLByIDoutput ofportfolioECLfor all loans in the portfolio.The total portfolio lifetime ECL is
where
Lis the number of loans in the portfolio.The total ECL value for the portfolio is reported in the
totalECLoutput of theportfolioECLfunction.
To compute an ECL spanning only 1-year ahead (as opposed to a lifetime ECL), the
inputs to portfolioECL must only include time periods within the
1-year period of interest. For more information, see Incorporate Macroeconomic Scenario Projections in Loan Portfolio ECL Calculations.
Version History
Introduced in R2022a
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Seleccione un país/idioma
Seleccione un país/idioma para obtener contenido traducido, si está disponible, y ver eventos y ofertas de productos y servicios locales. Según su ubicación geográfica, recomendamos que seleccione: .
También puede seleccionar uno de estos países/idiomas:
Cómo obtener el mejor rendimiento
Seleccione China (en idioma chino o inglés) para obtener el mejor rendimiento. Los sitios web de otros países no están optimizados para ser accedidos desde su ubicación geográfica.
América
- América Latina (Español)
- Canada (English)
- United States (English)
Europa
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)