Main Content

creditDefaultCopula

Create creditDefaultCopula object to simulate and analyze multifactor credit default model

Description

The creditDefaultCopula class simulates portfolio losses due to counterparty defaults using a multifactor model. creditDefaultCopula associates each counterparty with a random variable, called a latent variable, which is mapped to default/non-default outcomes for each scenario such that defaults occur with probability PD. In the event of default, a loss for that scenario is recorded equal to EAD * LGD for the counterparty. These latent variables are simulated using a multi-factor model, where systemic credit fluctuations are modeled with a series of risk factors. These factors can be based on industry sectors (such as financial, aerospace), geographical regions (such as USA, Eurozone), or any other underlying driver of credit risk. Each counterparty is assigned a series of weights which determine their sensitivity to each underlying credit factors.

The inputs to the model describe the credit-sensitive portfolio of exposures:

  • EAD — Exposure at default

  • PD — Probability of default

  • LGD — Loss given default (1 − Recovery)

  • Weights — Factor and idiosyncratic model weights

After the creditDefaultCopula object is created (see Create creditDefaultCopula and Properties), use the simulate function to simulate credit defaults using the multifactor model. The results are stored in the form of a distribution of losses at the portfolio and counterparty level. Several risk measures at the portfolio level are calculated, and the risk contributions from individual obligors. The model calculates:

  • Full simulated distribution of portfolio losses across scenarios

  • Losses on each counterparty across scenarios

  • Several risk measures (VaR, CVaR, EL, Std) with confidence intervals

  • Risk contributions per counterparty (for EL and CVaR)

Creation

Description

example

cdc = creditDefaultCopula(EAD,PD,LGD,Weights) creates a creditDefaultCopula object. The creditDefaultCopula object has the following properties:

  • Portfolio:

    A table with the following variables (each row of the table represents one counterparty):

    • ID — ID to identify each counterparty

    • EAD — Exposure at default

    • PD — Probability of default

    • LGD — Loss given default

    • Weights — Factor and idiosyncratic weights for counterparties

  • FactorCorrelation:

    Factor correlation matrix, a NumFactors-by-NumFactors matrix that defines the correlation between the risk factors.

  • VaRLevel:

    The value-at-risk level, used when reporting VaR and CVaR.

  • PortfolioLosses

    Portfolio losses, a NumScenarios-by-1 vector of portfolio losses. This property is empty until the simulate function is used.

example

cdc = creditDefaultCopula(___,Name,Value) sets Properties using name-value pairs and any of the arguments in the previous syntax. For example, cdc = creditDefaultCopula(EAD,PD,LGD,Weights,'VaRLevel',0.99). You can specify multiple name-value pairs as optional name-value pair arguments.

Input Arguments

expand all

Exposure at default, specified as a NumCounterparties-by-1 vector of credit exposures. The EAD input sets the Portfolio property.

Note

The creditDefaultCopula model simulates defaults and losses over some fixed time period (for example, one year). The counterparty exposures (EAD) and default probabilities (PD) must both be specific to a particular time.

Data Types: double

Probability of default, specified as a NumCounterparties-by-1 numeric vector with elements from 0 through 1, representing the default probabilities for the counterparties. The PD input sets the Portfolio property.

Note

The creditDefaultCopula model simulates defaults and losses over a fixed time period (for example, one year). The counterparty exposures (EAD) and default probabilities (PD) must both be specific to a particular time.

Data Types: double

Loss given default, specified as a NumCounterparties-by-1 numeric vector with elements from 0 through 1, representing the fraction of exposure that is lost when a counterparty defaults. LGD is defined as (1 − Recovery). For example, an LGD of 0.6 implies a 40% recovery rate in the event of a default. The LGD input sets the Portfolio property.

LGD can alternatively be specified as a NumCounterparties-by-2 matrix, where the first column holds the LGD mean values and the 2nd column holds the LGD standard deviations. Valid open intervals for LGD mean and standard deviation are:

  • For the first column, the mean values are between 0 and 1.

  • For the second column, the LGD standard deviations are between 0 and sqrt(m*(1-m)).

Then, in the case of default, LGD values are drawn randomly from a beta distribution with provided parameters for the defaulting counterparty.

Data Types: double

Factor and idiosyncratic weights, specified as a NumCounterparties-by-(NumFactors + 1) array. Each row contains the factor weights for a particular counterparty. Each column contains the weights for an underlying risk factor. The last column in Weights contains the idiosyncratic risk weight for each counterparty. The idiosyncratic weight represents the company-specific credit risk. The total of the weights for each counterparty (that is, each row) must sum to 1. The Weights input sets the Portfolio property.

For example, if a counterparty's creditworthiness is composed of 60% US, 20% European, and 20% idiosyncratic, then the Weights vector would be [0.6 0.2 0.2].

Data Types: double

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.

Before R2021a, use commas to separate each name and value, and enclose Name in quotes.

Example: cdc = creditDefaultCopula(EAD,PD,LGD,Weights,'VaRLevel',0.99)

User-defined IDs for counterparties, specified as the comma-separated pair consisting of 'ID' and a NumCounterparties-by-1 vector of IDs for each counterparty. ID is used to identify exposures in the Portfolio table and the risk contribution table. ID must be a numeric, a string array, or a cell array of character vectors. The ID name-value pair argument sets the Portfolio property.

If unspecified, ID defaults to a numeric vector 1:NumCounterparties.

Data Types: double | string | cell

Value at risk level (used for reporting VaR and CVaR), specified as the comma-separated pair consisting of 'VaRLevel' and a numeric between 0 and 1. The VaRLevel name-value pair argument sets the VaRLevel property.

Data Types: double

Factor correlation matrix, specified as the comma-separated pair consisting of 'FactorCorrelation' and a NumFactors-by-NumFactors matrix that defines the correlation between the risk factors. The FactorCorrelation name-value pair argument sets the FactorCorrelation property.

If not specified, the factor correlation matrix defaults to an identity matrix, meaning that factors are not correlated.

Data Types: double

Flag to use parallel processing for simulations, specified as the comma-separated pair consisting of 'UseParallel' and a scalar value of true or false. The UseParallel name-value pair argument sets the UseParallel property.

Note

The 'UseParallel' property can only be set when creating a creditDefaultCopula object if you have Parallel Computing Toolbox™. Once the 'UseParallel' property is set, parallel processing is used with riskContribution or simulate.

Data Types: logical

Properties

expand all

Details of credit portfolio, specified as a MATLAB® table that contains all the portfolio data that was passed as input into creditDefaultCopula.

The Portfolio table has a column for each of the constructor inputs (EAD, PD, LGD, Weights, and ID). Each row of the table represents one counterparty.

For example:

    ID     EAD         PD          LGD       Weights 
    __    ______    _________    _______    _________
    1     122.43     0.064853    0.68024    0.3  0.7
    2     70.386     0.073957    0.59256    0.3  0.7
    3     79.281     0.066235    0.52383    0.3  0.7
    4     113.42     0.01466     0.43977    0.3  0.7
    5     100.46     0.0042036   0.41838    0.3  0.7

Data Types: table

Correlation matrix for credit factors, specified as a NumFactors-by-NumFactors matrix. Specify the correlation matrix using the optional name-value pair argument 'FactorCorrelation' when you create a creditDefaultCopula object.

Data Types: double

Value at risk level used when reporting VaR and CVaR, specified using an optional name-value pair argument 'VaRLevel' when you create a creditDefaultCopula object.

Data Types: double

Total portfolio losses, specified as a 1-by-NumScenarios vector. The PortfolioLosses property is empty after you create a creditDefaultCopula object. After the simulate function is invoked, the PortfolioLosses property is populated with the vector of portfolio losses.

Data Types: double

Flag to use parallel processing for simulations, specified using an optional name-value pair argument 'UseParallel' when you create a creditDefaultCopula object. The UseParallel name-value pair argument sets the UseParallel property.

Note

The 'UseParallel' property can only be set when creating a creditDefaultCopula object if you have Parallel Computing Toolbox. Once the 'UseParallel' property is set, parallel processing is used with riskContribution or simulate.

Data Types: logical

Object Functions

simulateSimulate credit defaults using a creditDefaultCopula object
portfolioRiskGenerate portfolio-level risk measurements
riskContributionGenerate risk contributions for each counterparty in portfolio
confidenceBandsConfidence interval bands
getScenariosCounterparty scenarios

Examples

collapse all

Load saved portfolio data.

load CreditPortfolioData.mat;

Create a creditDefaultCopula object with a two-factor model.

cdc = creditDefaultCopula(EAD,PD,LGD,Weights2F,'FactorCorrelation',FactorCorr2F)
cdc = 
  creditDefaultCopula with properties:

            Portfolio: [100x5 table]
    FactorCorrelation: [2x2 double]
             VaRLevel: 0.9500
          UseParallel: 0
      PortfolioLosses: []

Set the VaRLevel to 99%.

cdc.VaRLevel = 0.99;

Simulate 100,000 scenarios, and view the portfolio risk measures.

 cdc = simulate(cdc,1e5)
cdc = 
  creditDefaultCopula with properties:

            Portfolio: [100x5 table]
    FactorCorrelation: [2x2 double]
             VaRLevel: 0.9900
          UseParallel: 0
      PortfolioLosses: [30.1008 3.6910 3.2895 19.2151 7.5761 44.5088 19.5419 1.7909 72.1443 12.6933 36.0228 1.7909 4.8512 23.0230 54.0877 35.9298 35.3757 26.1678 36.8868 24.6242 2.9770 15.3030 0 0 10.5546 61.2268 32.5802 42.5504 ... ] (1x100000 double)

 portRisk = portfolioRisk(cdc)
portRisk=1×4 table
      EL       Std       VaR      CVaR 
    ______    ______    _____    ______

    24.876    23.778    102.4    121.28

View a histogram of the portfolio losses.

histogram(cdc.PortfolioLosses);
title('Distribution of Portfolio Losses');

Figure contains an axes object. The axes object with title Distribution of Portfolio Losses contains an object of type histogram.

For further analysis, use the simulate, portfolioRisk, riskContribution, and getScenarios functions with the creditDefaultCopula object.

References

[1] Crouhy, M., Galai, D., and Mark, R. “A Comparative Analysis of Current Credit Risk Models.” Journal of Banking and Finance. Vol. 24, 2000, pp. 59 – 117.

[2] Gordy, M. “A Comparative Anatomy of Credit Risk Models.” Journal of Banking and Finance. Vol. 24, 2000, pp. 119 – 149.

[3] Gupton, G., Finger, C., and Bhatia, M. “CreditMetrics – Technical Document.” J. P. Morgan, New York, 1997.

[4] Jorion, P. Financial Risk Manager Handbook. 6th Edition. Wiley Finance, 2011.

[5] Löffler, G., and Posch, P. Credit Risk Modeling Using Excel and VBA. Wiley Finance, 2007.

[6] McNeil, A., Frey, R., and Embrechts, P. Quantitative Risk Management: Concepts, Techniques, and Tools. Princeton University Press, 2005.

Version History

Introduced in R2017a