predict

Predict loss given default

Since R2021a

Syntax

``LGD = predict(lgdModel,data)``

Description

example

````LGD = predict(lgdModel,data)` computes the loss given default (LGD). When using a `Regression` model, the `predict` function operates on the underlying compact statistical model and then transforms the predicted values back to the LGD scale.When using a `Tobit` model, the `predict` function operates on the underlying `Tobit` regression model and returns the unconditional expected value of the response, given the predictor values.```

Examples

collapse all

This example shows how to use `fitLGDModel` to fit data with a `Regression` model and then predict the loss given default (LGD) values.

Load the loss given default data.

```load LGDData.mat head(data)```
``` LTV Age Type LGD _______ _______ ___________ _________ 0.89101 0.39716 residential 0.032659 0.70176 2.0939 residential 0.43564 0.72078 2.7948 residential 0.0064766 0.37013 1.237 residential 0.007947 0.36492 2.5818 residential 0 0.796 1.5957 residential 0.14572 0.60203 1.1599 residential 0.025688 0.92005 0.50253 investment 0.063182 ```

Partition Data

Separate the data into training and test partitions.

```rng('default'); % for reproducibility NumObs = height(data); c = cvpartition(NumObs,'HoldOut',0.4); TrainingInd = training(c); TestInd = test(c);```

Create `Regression` LGD Model

Use `fitLGDModel` to create a `Regression` model using training data.

```lgdModel = fitLGDModel(data(TrainingInd,:),'regression'); disp(lgdModel) ```
``` Regression with properties: ResponseTransform: "logit" BoundaryTolerance: 1.0000e-05 ModelID: "Regression" Description: "" UnderlyingModel: [1x1 classreg.regr.CompactLinearModel] PredictorVars: ["LTV" "Age" "Type"] ResponseVar: "LGD" ```

Display the underlying model.

`disp(lgdModel.UnderlyingModel)`
```Compact linear regression model: LGD_logit ~ 1 + LTV + Age + Type Estimated Coefficients: Estimate SE tStat pValue ________ ________ _______ __________ (Intercept) -4.7549 0.36041 -13.193 3.0997e-38 LTV 2.8565 0.41777 6.8377 1.0531e-11 Age -1.5397 0.085716 -17.963 3.3172e-67 Type_investment 1.4358 0.2475 5.8012 7.587e-09 Number of observations: 2093, Error degrees of freedom: 2089 Root Mean Squared Error: 4.24 R-squared: 0.206, Adjusted R-Squared: 0.205 F-statistic vs. constant model: 181, p-value = 2.42e-104 ```

Predict LGD on Test Data

Use `predict` to predict the LGD for the test data set.

`predictedLGD = predict(lgdModel,data(TestInd,:))`
```predictedLGD = 1394×1 0.0009 0.0037 0.1877 0.0011 0.0112 0.0420 0.0529 0.0000 0.0090 0.0239 ⋮ ```

You can analyze and validate these predictions using `modelDiscrimination` and `modelCalibration`.

This example shows how to use `fitLGDModel` to fit data with a `Tobit` model and then predict the loss given default (LGD) values.

Load the loss given default data.

```load LGDData.mat head(data)```
``` LTV Age Type LGD _______ _______ ___________ _________ 0.89101 0.39716 residential 0.032659 0.70176 2.0939 residential 0.43564 0.72078 2.7948 residential 0.0064766 0.37013 1.237 residential 0.007947 0.36492 2.5818 residential 0 0.796 1.5957 residential 0.14572 0.60203 1.1599 residential 0.025688 0.92005 0.50253 investment 0.063182 ```

Partition Data

Separate the data into training and test partitions.

```rng('default'); % for reproducibility NumObs = height(data); c = cvpartition(NumObs,'HoldOut',0.4); TrainingInd = training(c); TestInd = test(c);```

Create `Tobit` LGD Model

Use `fitLGDModel` to create a `Tobit` model using training data.

```lgdModel = fitLGDModel(data(TrainingInd,:),'tobit'); disp(lgdModel) ```
``` Tobit with properties: CensoringSide: "both" LeftLimit: 0 RightLimit: 1 ModelID: "Tobit" Description: "" UnderlyingModel: [1x1 risk.internal.credit.TobitModel] PredictorVars: ["LTV" "Age" "Type"] ResponseVar: "LGD" ```

Display the underlying model.

`disp(lgdModel.UnderlyingModel)`
```Tobit regression model: LGD = max(0,min(Y*,1)) Y* ~ 1 + LTV + Age + Type Estimated coefficients: Estimate SE tStat pValue _________ _________ _______ __________ (Intercept) 0.058257 0.027279 2.1356 0.032828 LTV 0.20126 0.031383 6.4129 1.7592e-10 Age -0.095407 0.0072435 -13.171 0 Type_investment 0.10208 0.018054 5.6544 1.7785e-08 (Sigma) 0.29288 0.0057071 51.318 0 Number of observations: 2093 Number of left-censored observations: 547 Number of uncensored observations: 1521 Number of right-censored observations: 25 Log-likelihood: -698.383 ```

Predict LGD on Test Data

Use `predict` to predict the LGD for the test data set.

`predictedLGD = predict(lgdModel,data(TestInd,:))`
```predictedLGD = 1394×1 0.0879 0.1243 0.3204 0.0934 0.1672 0.2238 0.2370 0.0102 0.1592 0.1989 ⋮ ```

You can analyze and validate these predictions using `modelDiscrimination` and `modelCalibration`.

This example shows how to use `fitLGDModel` to fit data with a `Beta` model and then predict the loss given default (LGD) values.

Load the loss given default data.

```load LGDData.mat head(data)```
``` LTV Age Type LGD _______ _______ ___________ _________ 0.89101 0.39716 residential 0.032659 0.70176 2.0939 residential 0.43564 0.72078 2.7948 residential 0.0064766 0.37013 1.237 residential 0.007947 0.36492 2.5818 residential 0 0.796 1.5957 residential 0.14572 0.60203 1.1599 residential 0.025688 0.92005 0.50253 investment 0.063182 ```

Partition Data

Separate the data into training and test partitions.

```rng('default'); % for reproducibility NumObs = height(data); c = cvpartition(NumObs,'HoldOut',0.4); TrainingInd = training(c); TestInd = test(c);```

Create `Beta` LGD Model

Use `fitLGDModel` to create a `Beta` model using training data.

```lgdModel = fitLGDModel(data(TrainingInd,:),'Beta'); disp(lgdModel) ```
``` Beta with properties: BoundaryTolerance: 1.0000e-05 ModelID: "Beta" Description: "" UnderlyingModel: [1x1 risk.internal.credit.BetaModel] PredictorVars: ["LTV" "Age" "Type"] ResponseVar: "LGD" ```

Display the underlying model.

`disp(lgdModel.UnderlyingModel)`
```Beta regression model: logit(LGD) ~ 1_mu + LTV_mu + Age_mu + Type_mu log(LGD) ~ 1_phi + LTV_phi + Age_phi + Type_phi Estimated coefficients: Estimate SE tStat pValue ________ ________ _______ __________ (Intercept)_mu -1.3772 0.13201 -10.433 0 LTV_mu 0.60269 0.15087 3.9947 6.7023e-05 Age_mu -0.47464 0.040264 -11.788 0 Type_investment_mu 0.45372 0.085143 5.3289 1.094e-07 (Intercept)_phi -0.16337 0.12591 -1.2975 0.19462 LTV_phi 0.055892 0.14719 0.37973 0.70419 Age_phi 0.22887 0.040335 5.6743 1.5863e-08 Type_investment_phi -0.14102 0.078155 -1.8044 0.071311 Number of observations: 2093 Log-likelihood: -5291.04 ```

Predict LGD on Test Data

Use `predict` to predict the LGD for the test data set.

`predictedLGD = predict(lgdModel,data(TestInd,:))`
```predictedLGD = 1394×1 0.0937 0.1492 0.3526 0.0964 0.1886 0.2595 0.2677 0.0213 0.1774 0.2256 ⋮ ```

You can analyze and validate these predictions using `modelDiscrimination` and `modelCalibration`.

Input Arguments

collapse all

Loss given default model, specified as a previously created `Regression`, `Tobit`, or `Beta` object using `fitLGDModel`.

Data Types: `object`

Data, specified as a `NumRows`-by-`NumCols` table with predictor and response values. The variable names and data types must be consistent with the underlying model.

Data Types: `table`

Output Arguments

collapse all

Loss given default values, returned as a `NumRows`-by-`1` numeric vector.

collapse all

Prediction with LGD Models

Use a Regression, Tobit, or Beta model to predict LGD.

`Regression` LGD models first predict on the transformed space using the underlying linear regression model, and then apply the inverse transformation to return predictions on the LGD scale. For more information on the supported transformations and their inverses, see Loss Given Default Regression Models.

`Tobit` LGD models return the unconditional expected value of the response, given the predictor values. For more information, see Loss Given Default Tobit Models.

`Beta` LGD models return the mean of the beta distribution, given the predictor values. For more information, see Beta Regression Models.

References

[1] Baesens, Bart, Daniel Roesch, and Harald Scheule. Credit Risk Analytics: Measurement Techniques, Applications, and Examples in SAS. Wiley, 2016.

[2] Bellini, Tiziano. IFRS 9 and CECL Credit Risk Modelling and Validation: A Practical Guide with Examples Worked in R and SAS. San Diego, CA: Elsevier, 2019.

Version History

Introduced in R2021a

expand all