Main Content

concentrationIndices

Compute ad-hoc concentration indices for a portfolio

Description

ci = concentrationIndices(PortfolioData) computes multiple ad-hoc concentration indices for a given portfolio. The concentrationIndices function supports the following indices:

  • CR — Concentration ratio

  • Deciles — Deciles of the portfolio weights distribution

  • Gini — Gini coefficient

  • HH — Herfindahl-Hirschman index

  • HK — Hannah-Kay index

  • HT — Hall-Tideman index

  • TE — Theil entropy index

example

[ci,Lorenz] = concentrationIndices(___,Name,Value) adds optional name-value pair arguments.

example

Examples

collapse all

Compute the concentration indices for a credit portfolio using a portfolio that is described by its exposures. The exposures at default are stored in the EAD array.

Load the CreditPortfolioData.mat file that contains EAD used for the PortfolioData input argument.

load CreditPortfolioData.mat
ci = concentrationIndices(EAD)
ci=1×8 table
        ID            CR                                                                Deciles                                                              Gini         HH          HK          HT         TE   
    ___________    ________    _________________________________________________________________________________________________________________________    _______    ________    ________    ________    _______

    "Portfolio"    0.058745    0     0.01118    0.026911     0.04605    0.072783     0.12318     0.18735     0.26993     0.41164     0.61058           1    0.55751    0.023919    0.013363    0.022599    0.53485

Use the CRIndex optional input to obtain the concentration ratios for the tenth and twentieth largest exposures. In the output, the CR column becomes a vector, with one value for each requested index.

Load the CreditPortfolioData.mat file that contains the EAD used for the PortfolioData input argument.

load CreditPortfolioData.mat
ci = concentrationIndices(EAD,'CRIndex',[10 20])
ci=1×8 table
        ID                 CR                                                                     Deciles                                                              Gini         HH          HK          HT         TE   
    ___________    __________________    _________________________________________________________________________________________________________________________    _______    ________    ________    ________    _______

    "Portfolio"    0.38942    0.58836    0     0.01118    0.026911     0.04605    0.072783     0.12318     0.18735     0.26993     0.41164     0.61058           1    0.55751    0.023919    0.013363    0.022599    0.53485

Use the HKAlpha optional input to set the alpha parameter for the Hannah-Kay (HK) index. Use a vector of alpha values to compute the HK index for multiple parameter values. In the output, the HK column becomes a vector, with one value for each requested alpha value.

Load the CreditPortfolioData.mat file that contains EAD used for the PortfolioData input argument.

load CreditPortfolioData.mat
ci = concentrationIndices(EAD,'HKAlpha',[0.5 3])
ci=1×8 table
        ID            CR                                                                Deciles                                                              Gini         HH                HK                HT         TE   
    ___________    ________    _________________________________________________________________________________________________________________________    _______    ________    ____________________    ________    _______

    "Portfolio"    0.058745    0     0.01118    0.026911     0.04605    0.072783     0.12318     0.18735     0.26993     0.41164     0.61058           1    0.55751    0.023919    0.013363    0.029344    0.022599    0.53485

Compare the concentration measures using an ID optional argument for a fully diversified portfolio and a fully concentrated portfolio.

ciD = concentrationIndices([1 1 1 1 1],'ID','Fully diversified');
ciC = concentrationIndices([0 0 0 0 5],'ID','Fully concentrated');
disp([ciD;ciC])
             ID             CR                                     Deciles                                    Gini    HH     HK     HT         TE     
    ____________________    ___    _______________________________________________________________________    ____    ___    ___    ___    ___________

    "Fully diversified"     0.2    0    0.1    0.2    0.3    0.4    0.5    0.6    0.7    0.8    0.9      1      0     0.2    0.2    0.2    -2.2204e-16
    "Fully concentrated"      1    0      0      0      0      0      0      0      0      0    0.5      1    0.8       1      1      1         1.6094

Use the ScaleIndices optional input to scale the index values of Gini, HH, HK, HT, and TE. The range of ScaleIndices is from 0 through 1, independent of the number of loans.

ciDU = concentrationIndices([1 1 1 1 1],'ID','Diversified, unscaled');
ciDS = concentrationIndices([1 1 1 1 1],'ID','Diversified, scaled','ScaleIndices',true);
ciCU = concentrationIndices([0 0 0 0 5],'ID','Concentrated, unscaled');
ciCS = concentrationIndices([0 0 0 0 5],'ID','Concentrated, scaled','ScaleIndices',true);
disp([ciDU;ciDS;ciCU;ciCS])
               ID               CR                                     Deciles                                    Gini        HH            HK             HT             TE     
    ________________________    ___    _______________________________________________________________________    ____    __________    ___________    ___________    ___________

    "Diversified, unscaled"     0.2    0    0.1    0.2    0.3    0.4    0.5    0.6    0.7    0.8    0.9      1      0            0.2            0.2            0.2    -2.2204e-16
    "Diversified, scaled"       0.2    0    0.1    0.2    0.3    0.4    0.5    0.6    0.7    0.8    0.9      1      0     3.4694e-17    -3.4694e-17    -6.9389e-17    -1.3796e-16
    "Concentrated, unscaled"      1    0      0      0      0      0      0      0      0      0    0.5      1    0.8              1              1              1         1.6094
    "Concentrated, scaled"        1    0      0      0      0      0      0      0      0      0    0.5      1      1              1              1              1              1

Load the CreditPortfolioData.mat file that contains EAD used for the PortfolioData input argument.

load CreditPortfolioData.mat
P = EAD;
ci = concentrationIndices(P);

Visualize an approximate Lorenz curve using the deciles information and also the concentration at the decile level.

Proportion = 0:0.1:1;

figure;
subplot(2,1,1)
area(Proportion',[ci.Deciles' Proportion'-ci.Deciles'])
axis([0 1 0 1])
title('Lorenz Curve (By Deciles)')
xlabel('Proportion of Loans')
ylabel('Proportion of Value')

subplot(2,1,2)
bar(diff(ci.Deciles))
axis([0 11 0 1])
title('Concentration by Decile')
xlabel('Decile')
ylabel('Weight')

Figure contains 2 axes objects. Axes object 1 with title Lorenz Curve (By Deciles), xlabel Proportion of Loans, ylabel Proportion of Value contains 2 objects of type area. Axes object 2 with title Concentration by Decile, xlabel Decile, ylabel Weight contains an object of type bar.

Load the CreditPortfolioData.mat file that contains the EAD used for the PortfolioData input argument. The optional output Lorenz contains the data for the exact Lorenz curve.

load CreditPortfolioData.mat
P = EAD;
[~,Lorenz] = concentrationIndices(P);

figure;
area(Lorenz.ProportionLoans,[Lorenz.ProportionValue Lorenz.ProportionLoans-Lorenz.ProportionValue])
axis([0 1 0 1])
title('Lorenz Curve')
xlabel('Proportion of Loans')
ylabel('Proportion of Value')

Figure contains an axes object. The axes object with title Lorenz Curve, xlabel Proportion of Loans, ylabel Proportion of Value contains 2 objects of type area.

Input Arguments

collapse all

Nonnegative portfolio positions in N assets, specified as an N-by-1 (or 1-by-N) numeric array.

Data Types: double

Name-Value Arguments

collapse all

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: [ci,Lorenz] = concentrationIndices(PortfolioData,'CRIndex',100)

Index of interest for the concentration ratio, specified as the comma-separated pair consisting of 'CRIndex' and an integer value between 1 and N, where N is the number of assets in the portfolio. The default value for CRIndex is 1 (the default CR is the largest portfolio weight). If CRIndex is a vector, the concentration ratio is computed for the index value in the given order.

Data Types: double

Alpha parameter for Hannah-Kay index, specified as the comma-separated pair consisting of 'HKAlpha', and a positive number that cannot be equal to 1. If HKAlpha is a vector, the Hannah-Kay index is computed for each alpha value in the given order.

Data Types: double

User-defined ID for the portfolio, specified as the comma-separated pair consisting of 'ID' and a scalar string object or character vector.

Data Types: char | string

Flag to indicate whether to scale concentration indices, specified as the comma-separated pair consisting of 'ScaleIndices' and a logical scalar. When the ScaleIndices is set to true, the value of the Gini, HH, HK, HT, and TE indices are scaled so that all these indices have a minimum value of 0 (full diversification) and a maximum value of 1 (full concentration).

Note

Scaling is applied only for portfolios with at least two assets. Otherwise, the scaling capability is undefined.

Data Types: logical

Output Arguments

collapse all

Concentration indices information for the given portfolio, returned as a table with the following columns:

  • ID — Portfolio ID string. Use the ID name-value pair argument to set it.

  • CR — Concentration ratio. By default, the concentration ratio for the first index (largest portfolio weight) is reported. Use the CRIndex name-value pair argument to choose a different index. If CRIndex is a vector of length m, then CR is a row vector of size 1-by-m. For more information, see More About.

  • Deciles — Deciles of the portfolio weights distribution is a 1-by-11 row vector containing the values 0, the nine decile cut points, and 1. For more information, see More About.

  • Gini — Gini coefficient. For more information, see More About.

  • HH — Herfindahl-Hirschman index. For more information, see More About.

  • HK — Hannah-Kay index (reciprocal). By default, the 'alpha' parameter is set to 0.5. Use the HKAlpha name-value pair argument to choose a different value. If HKAlpha is a vector of lengthm, then HK is a row vector of size 1-by-m. For more information, see More About.

  • HT — Hall-Tideman index. For more information, see More About.

  • TE — Theil entropy index. For more information, see More About.

Lorenz curve data, returned as a table with the following columns:

  • ProportionLoans — (N+1)-by-1 numeric array containing the values 0, 1/N, 2/N, ... N/N = 1. This is the data for the horizontal axis of the Lorenz curve.

  • ProportionValue — (N+1)-by-1 numeric array containing the proportion of portfolio value accumulated up to the corresponding proportion of loans in the ProportionLoans column. This is the data for the vertical axis of the Lorenz curve.

More About

collapse all

References

[1] Basel Committee on Banking Supervision. "Studies on Credit Risk Concentration". Working paper no. 15. November, 2006.

[2] Calabrese, R., and F. Porro. "Single-name concentration risk in credit portfolios: a comparison of concentration indices." working paper 201214, Geary Institute, University College, Dublin, May, 2012.

[3] Lütkebohmert, E. Concentration Risk in Credit Portfolios. Springer, 2009.

Version History

Introduced in R2017a