Моделирование коррелированых значений по умолчанию со связками

Этот пример исследует, как симулировать коррелированые значения по умолчанию контрагента с помощью мультифакторной модели связки.

Возможные потери оцениваются для портфеля контрагентов, учитывая их воздействие в значении по умолчанию, вероятности по умолчанию и потере, данной информацию по умолчанию. creditDefaultCopula объект используется, чтобы смоделировать стоимость кредита каждого должника со скрытыми переменными. Скрытые переменные состоят из серии взвешенных базовых факторов кредита, а также, особенного фактора кредита каждого должника. Скрытые переменные сопоставлены с состоянием должника не по умолчанию или по умолчанию для каждого сценария на основе их вероятности значения по умолчанию. Меры по портфельному риску, вклады риска на уровне контрагента и информация о сходимости симуляции поддерживаются в creditDefaultCopula объект.

Этот пример также исследует чувствительность мер по риску к типу связки (Гауссова связка по сравнению с t связкой) используемый для симуляции.

Загрузите и исследуйте данные о портфеле

Портфель содержит 100 контрагентов и их связанные кредитные риски в значении по умолчанию (EAD), вероятность значения по умолчанию (PD), и потеря, данная значение по умолчанию (LGD). Используя creditDefaultCopula объект, можно симулировать значения по умолчанию и потери по некоторому фиксированному периоду времени (например, один год). EAD, PD, и LGD входные параметры должны быть характерны для горизонта определенного времени.

В этом примере каждый контрагент сопоставлен на два базовых, приписывают факторам набор весов. Weights2F переменной является NumCounterparties-by-3 матрица, где каждая строка содержит веса для одного контрагента. Первые два столбца являются весами для двух факторов кредита, и последний столбец является особенными весами для каждого контрагента. Корреляционная матрица для двух базовых факторов также обеспечивается в этом примере (FactorCorr2F).

load CreditPortfolioData.mat
whos EAD PD LGD Weights2F FactorCorr2F
  Name                Size            Bytes  Class     Attributes

  EAD               100x1               800  double              
  FactorCorr2F        2x2                32  double              
  LGD               100x1               800  double              
  PD                100x1               800  double              
  Weights2F         100x3              2400  double              

Инициализируйте creditDefaultCopula объект с информацией о портфеле и факторной корреляцией.

rng('default');
cc = creditDefaultCopula(EAD,PD,LGD,Weights2F,'FactorCorrelation',FactorCorr2F);

% Change the VaR level to 99%.
cc.VaRLevel = 0.99;

disp(cc)
  creditDefaultCopula with properties:

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

cc.Portfolio(1:5,:)
ans =

  5x5 table

    ID     EAD         PD        LGD           Weights       
    __    ______    _________    ____    ____________________

    1     21.627    0.0050092    0.35    0.35       0    0.65
    2     3.2595     0.060185    0.35       0    0.45    0.55
    3     20.391      0.11015    0.55    0.15       0    0.85
    4     3.7534    0.0020125    0.35    0.25       0    0.75
    5     5.7193     0.060185    0.35    0.35       0    0.65

Симулируйте модель и постройте возможные потери

Симулируйте мультифакторную модель с помощью simulate функция. По умолчанию Гауссова связка используется. Эта функция внутренне сопоставляет реализованные скрытые переменные с состояниями по умолчанию и вычисляет соответствующие потери. После симуляции, creditDefaultCopula объект заполняет PortfolioLosses и CounterpartyLosses свойства с результатами симуляции.

cc = simulate(cc,1e5);
disp(cc)
  creditDefaultCopula with properties:

            Portfolio: [100x5 table]
    FactorCorrelation: [2x2 double]
             VaRLevel: 0.9900
          UseParallel: 0
      PortfolioLosses: [1x100000 double]

portfolioRisk функция возвращает меры по риску для общего распределения портфеля потерь, и опционально, их соответствующие доверительные интервалы. О подверженном риску значения (VaR) и подверженном риску значения условном выражении (CVaR) сообщают в наборе уровня в VaRLevel свойство для creditDefaultCopula объект.

[pr,pr_ci] = portfolioRisk(cc);

fprintf('Portfolio risk measures:\n');
disp(pr)

fprintf('\n\nConfidence intervals for the risk measures:\n');
disp(pr_ci)
Portfolio risk measures:
      EL       Std       VaR      CVaR 
    ______    ______    _____    ______

    24.876    23.778    102.4    121.28



Confidence intervals for the risk measures:
           EL                 Std                 VaR                 CVaR      
    ________________    ________________    ________________    ________________

    24.729    25.023    23.674    23.883    101.19     103.5    120.13    122.42

Посмотрите на распределение потерь портфеля. Ожидаемая потеря (EL), VaR и CVaR отмечены как вертикальные линии. Экономический капитал, данный различием между VaR и EL, показывается заштрихованной областью между EL и VaR.

histogram(cc.PortfolioLosses)
title('Portfolio Losses');
xlabel('Losses ($)')
ylabel('Frequency')
hold on

% Overlay the risk measures on the histogram.
xlim([0 1.1 * pr.CVaR])
plotline = @(x,color) plot([x x],ylim,'LineWidth',2,'Color',color);
plotline(pr.EL,'b');
plotline(pr.VaR,'r');
cvarline = plotline(pr.CVaR,'m');

% Shade the areas of expected loss and economic capital.
plotband = @(x,color) patch([x fliplr(x)],[0 0 repmat(max(ylim),1,2)],...
    color,'FaceAlpha',0.15);
elband = plotband([0 pr.EL],'blue');
ulband = plotband([pr.EL pr.VaR],'red');
legend([elband,ulband,cvarline],...
    {'Expected Loss','Economic Capital','CVaR (99%)'},...
    'Location','north');

Найдите риск концентрации для контрагентов

Найдите риск концентрации в портфеле с помощью riskContribution функция. riskContribution возвращает вклад каждого контрагента к портфелю EL и CVaR. Эти аддитивные вклады суммируют к соответствующей общей мере по портфельному риску.

rc = riskContribution(cc);

% Risk contributions are reported for EL and CVaR.
rc(1:5,:)
ans =

  5x5 table

    ID       EL          Std           VaR         CVaR   
    __    ________    __________    _________    _________

    1     0.036031      0.022762     0.083828      0.13625
    2     0.068357      0.039295      0.23373      0.24984
    3       1.2228       0.60699       2.3184       2.3775
    4     0.002877    0.00079014    0.0024248    0.0013137
    5      0.12127      0.037144      0.18474      0.24622

Найдите самых опасных контрагентов их вкладами CVaR.

[rc_sorted,idx] = sortrows(rc,'CVaR','descend');
rc_sorted(1:5,:)
ans =

  5x5 table

    ID      EL        Std       VaR       CVaR 
    __    _______    ______    ______    ______

    89     2.2647    2.2063    8.2676    8.9997
    96     1.3515    1.6514    6.6157    7.7062
    66    0.90459     1.474    6.4168    7.5149
    22     1.5745    1.8663    6.0121    7.3814
    16     1.6352    1.5288    6.3404    7.3462

Постройте подверженность контрагента и вклады CVaR. Контрагенты с самыми высокими вкладами CVaR построены в красном и оранжевом цвете.

figure;
pointSize = 50;
colorVector = rc_sorted.CVaR;
scatter(cc.Portfolio(idx,:).EAD, rc_sorted.CVaR,...
    pointSize,colorVector,'filled')
colormap('jet')
title('CVaR Contribution vs. Exposure')
xlabel('Exposure')
ylabel('CVaR Contribution')
grid on

Исследуйте сходимость симуляции с полосами доверия

Используйте confidenceBands функция, чтобы исследовать сходимость симуляции. По умолчанию о группах доверия CVaR сообщают, но полосы доверия для мер по всему риску поддерживаются с помощью дополнительного RiskMeasure аргумент.

cb = confidenceBands(cc);

% The confidence bands are stored in a table.
cb(1:5,:)
ans =

  5x4 table

    NumScenarios    Lower      CVaR     Upper 
    ____________    ______    ______    ______

        1000         106.7    121.99    137.28
        2000        109.18    117.28    125.38
        3000        114.68    121.63    128.58
        4000        114.02    120.06    126.11
        5000        114.77    120.36    125.94

Постройте полосы доверия, чтобы видеть, как быстро оценки сходятся.

figure;
plot(...
    cb.NumScenarios,...
    cb{:,{'Upper' 'CVaR' 'Lower'}},...
    'LineWidth',2);

title('CVaR: 95% Confidence Interval vs. # of Scenarios');
xlabel('# of Scenarios');
ylabel('CVaR + 95% CI')
legend('Upper Band','CVaR','Lower Band');
grid on

Найдите, что необходимое количество сценариев достигает особой ширины полос доверия.

width = (cb.Upper - cb.Lower) ./ cb.CVaR;

figure;
plot(cb.NumScenarios,width * 100,'LineWidth',2);
title('CVaR: 95% Confidence Interval Width vs. # of Scenarios');
xlabel('# of Scenarios');
ylabel('Width of CI as %ile of Value')
grid on

% Find point at which the confidence bands are within 1% (two sided) of the
% CVaR.
thresh = 0.02;

scenIdx = find(width <= thresh,1,'first');
scenValue = cb.NumScenarios(scenIdx);
widthValue = width(scenIdx);
hold on
plot(xlim,100 * [widthValue widthValue],...
    [scenValue scenValue], ylim,...
    'LineWidth',2);
title('Scenarios Required for Confidence Interval with 2% Width');

Сравните Риск Хвоста для Гауссовых и t Связок

Переключение на t связку увеличивает корреляцию по умолчанию между контрагентами. Это приводит к более толстому распределению хвоста потерь портфеля, и в более высоких возможных потерях в подчеркнутых сценариях.

Повторно выполните симуляцию с помощью t связки и вычислите новые меры по портфельному риску. Степени свободы по умолчанию (dof) для t связки равняются пяти.

cc_t = simulate(cc,1e5,'Copula','t');
pr_t = portfolioRisk(cc_t);

Смотрите, как портфельный риск изменяется с t связкой.

fprintf('Portfolio risk with Gaussian copula:\n');
disp(pr)

fprintf('\n\nPortfolio risk with t copula (dof = 5):\n');
disp(pr_t)
Portfolio risk with Gaussian copula:
      EL       Std       VaR      CVaR 
    ______    ______    _____    ______

    24.876    23.778    102.4    121.28



Portfolio risk with t copula (dof = 5):
      EL       Std       VaR       CVaR 
    ______    ______    ______    ______

    24.808    38.749    186.08    250.59

Сравните потери хвоста каждой модели.

% Plot the Gaussian copula tail.
figure;
subplot(2,1,1)
p1 = histogram(cc.PortfolioLosses);
hold on
plotline(pr.VaR,[1 0.5 0.5])
plotline(pr.CVaR,[1 0 0])
xlim([0.8 * pr.VaR  1.2 * pr_t.CVaR]);
ylim([0 1000]);
grid on
legend('Loss Distribution','VaR','CVaR')
title('Portfolio Losses with Gaussian Copula');
xlabel('Losses ($)');
ylabel('Frequency');

% Plot the t copula tail.
subplot(2,1,2)
p2 = histogram(cc_t.PortfolioLosses);
hold on
plotline(pr_t.VaR,[1 0.5 0.5])
plotline(pr_t.CVaR,[1 0 0])
xlim([0.8 * pr.VaR  1.2 * pr_t.CVaR]);
ylim([0 1000]);
grid on
legend('Loss Distribution','VaR','CVaR');
title('Portfolio Losses with t Copula (dof = 5)');
xlabel('Losses ($)');
ylabel('Frequency');

Риск хвоста измеряет VaR, и CVaR значительно выше используют t связку с пятью степенями свободы. Корреляции по умолчанию выше с t связками, поэтому существует больше сценариев где несколько значений по умолчанию контрагентов. Количество степеней свободы играет значительную роль. Для очень высоких степеней свободы результаты с t связкой похожи на результаты с Гауссовой связкой. Пять очень небольшое число степеней свободы и, последовательно, результаты показывают поразительные различия. Кроме того, эти результаты подсвечивают, что потенциал за экстремальные потери очень чувствителен к выбору связки и количества степеней свободы.

Смотрите также

| | | | |

Связанные примеры

Больше о

Для просмотра документации необходимо авторизоваться на сайте