Этот пример показывает подход к моделированию ошибочного риска для Контрагентского кредитного риска с использованием гауссовой копулы.
Базовый подход к кредитному риску контрагента (CCR) (см. Пример кредитного риска контрагента и CVA) предполагает, что факторы рыночного и кредитного риска независимы друг от друга. Моделирование факторов рыночного риска определяет риски убытков для всех контрактов в портфеле. На отдельном шаге рыночные котировки кредитного свопа (CDS) определяют вероятности дефолта для каждого контрагента. Риски убытков, вероятности дефолта и данная ставка возмещения используются для расчета корректировки кредитной стоимости (CVA) для каждого контрагента, которая является мерой ожидаемого убытка. Моделирование факторов риска и вероятности дефолта рассматриваются как независимые друг от друга.
На практике вероятности дефолта и рыночные факторы коррелируются. Связь может быть незначительной для некоторых типов инструментов, но для других взаимосвязь между рыночными и кредитными факторами риска может быть слишком важной, чтобы ее можно было игнорировать при расчете показателей риска.
Когда вероятность дефолта контрагента и риск, возникающий в результате конкретного контракта, имеют тенденцию увеличиваться, мы говорим, что контракт имеет риск неправильного пути (WWR).
Этот пример демонстрирует реализацию методологии риска неправильного пути, описанной в Garcia Cespedes et al. (см. Ссылки).
Многие финансовые учреждения имеют системы, которые моделируют факторы рыночного риска и оценивают все инструменты в своих портфелях на определенные даты моделирования. Эти моделирования используются для вычисления рисков и других показателей риска. Поскольку моделирование требует больших вычислений, их повторное использование для последующего анализа рисков имеет важное значение.
В этом примере используются данные и результаты моделирования из примера «Контрагентский кредитный риск» и CVA, ранее сохраненные в файле ccr.mat. Файл ccr.mat содержит:
RateSpecСпецификация тарифа при расчете стоимости контракта
SettleДата расчета при расчете стоимости договора.
simulationDatesВектор дат моделирования
swaps: Структура, содержащая параметры подкачки
values: NUMDATES x NUMCONTRACT x NUMSCENARIOS куб смоделированных значений контракта за каждую дату/сценарий
В этом примере рассматриваются ожидаемые потери только за один год, поэтому данные обрезаются после одного года моделирования. Даты моделирования в течение первого года имеют ежемесячную частоту, поэтому 13-я дата моделирования является нашим годичным временным горизонтом (первая дата моделирования является датой расчета).
load ccr.mat
oneYearIdx = 13;
values = values(1:oneYearIdx,:,:);
dates = simulationDates(1:oneYearIdx);
numScenarios = size(values,3);Риски убытков по кредиту вычисляются на основе смоделированных значений договора. Эти риски убытков представляют собой ежемесячные кредитные риски для каждого контрагента от даты расчета до нашего годичного временного горизонта.
Поскольку значения по умолчанию могут иметь место в любое время в течение годичного периода времени, обычно моделируют воздействие по умолчанию (EAD) на основе идеи ожидаемого положительного воздействия (EPE). Вычисляется усредненная по времени экспозиция для каждого сценария, которая называется PE (положительная экспозиция). Средним значением PE, включая все сценарии, является EPE, который также может быть получен из exposureprofiles функция.
Матрица положительного воздействия PE содержит одну строку на смоделированный сценарий и один столбец на контрагента. Это используется в качестве EAD в нашем анализе.
% Compute counterparty exposures [exposures, counterparties] = creditexposures(values,swaps.Counterparty, ... 'NettingID',swaps.NettingID); numCP = numel(counterparties); % Compute PE (time-averaged exposures) per scenario intervalWeights = diff(dates) / (dates(end) - dates(1)); exposureMidpoints = 0.5 * (exposures(1:end-1,:,:) + exposures(2:end,:,:)); weightedContributions = bsxfun(@times,intervalWeights,exposureMidpoints); PE = squeeze(sum(weightedContributions))'; % Compute total portfolio exposure per scenario totalExp = sum(PE,2); % Display size of PE and totalExp whos PE totalExp
Name Size Bytes Class Attributes PE 1000x5 40000 double totalExp 1000x1 8000 double
Общий подход к моделированию дефолтов по кредитам основан на «однофакторной модели», иногда называемой «подходом к стоимости активов» (см. Gupton et al., 1997). Это эффективный способ моделирования коррелированных значений по умолчанию.
Каждая компания i связана со случайной величиной Yi, такой, что
где Z - «один фактор», стандартная обычная случайная величина, представляющая систематический фактор кредитного риска, значения которого влияют на все компании. Корреляция между компанией i и общим фактором задается beta_i, корреляция между компаниями i и j является beta_i*beta_j. Идиосинкратический шок epsilon_i является другой стандартной нормальной переменной, которая может уменьшить или увеличить эффект систематического фактора, независимо от того, что происходит с любой другой компанией.
Если вероятность по умолчанию для компании i равна PDi, то значение по умолчанию возникает, когда
PDi
где - кумулятивное стандартное нормальное распределение.
Переменная Yi иногда интерпретируется как доходность актива или иногда называется скрытой переменной.
Эта модель - гауссова копула, которая вводит корреляцию между кредитными дефолтами. Копулы предлагают конкретный способ введения корреляционной или, в более общем смысле, ко-зависимости между двумя случайными переменными, чья ко-зависимость неизвестна.
Используйте спреды CDS для начальной загрузки вероятности по умолчанию на один год для каждого контрагента. Котировки CDS получены из электронной таблицы своп-портфеля, используемой в примере «Контрагентский кредитный риск» и CVA.
% Import CDS market information for each counterparty swapFile = 'cva-swap-portfolio.xls'; cds = readtable(swapFile,'Sheet','CDS Spreads'); cdsDates = datenum(cds.Date); cdsSpreads = table2array(cds(:,2:end)); % Bootstrap default probabilities for each counterparty zeroData = [RateSpec.EndDates RateSpec.Rates]; defProb = zeros(1, size(cdsSpreads,2)); for i = 1:numel(defProb) probData = cdsbootstrap(zeroData, [cdsDates cdsSpreads(:,i)], ... Settle, 'probDates', dates(end)); defProb(i) = probData(2); end
Теперь смоделируйте сценарии кредитования. Поскольку значения по умолчанию встречаются редко, обычно моделируется большое количество сценариев кредитования.
Параметр чувствительности beta имеет значение 0.3 для всех контрагентов. Это значение может быть откалибровано или настроено для изучения чувствительности модели. Дополнительные сведения см. в ссылках.
numCreditScen = 100000; rng('default'); % Z is the single credit factor Z = randn(numCreditScen,1); % epsilon is the idiosyncratic factor epsilon = randn(numCreditScen,numCP); % beta is the counterparty sensitivity to the credit factor beta = 0.3 * ones(1,numCP); % Counterparty latent variables Y = bsxfun(@times,beta,Z) + bsxfun(@times,sqrt(1 - beta.^2),epsilon); % Default indicator isDefault = bsxfun(@lt,normcdf(Y),defProb);
Теперь, когда существует набор отсортированных сценариев воздействия портфеля и набор сценариев по умолчанию, следуйте подходу в Garcia Cespedes et al. и использовать гауссову копулу для генерации коррелированных пар «экспозиция - сценарий по умолчанию».
Определите скрытую переменную Ye, которая сопоставляется с распределением моделируемых воздействий. Ye определяется как
где Z - системный фактор, вычисленный при моделировании кредитования, epsilon_e является независимой стандартной нормальной переменной, а rho интерпретируется как параметр корреляции «рынок-кредит». По конструкции Ye является стандартной нормальной переменной, коррелированной с Z с параметром корреляции rho.
Отображение между Ye и моделируемыми экспозициями требует, чтобы мы упорядочили сценарии экспозиции значимым образом, на основе некоторого сортируемого критерия. Критерием может быть любое значимое количество, например, это может быть базовый фактор риска для стоимости договора (например, процентная ставка), общего риска убытков портфеля и т.д.
В этом примере используйте общий риск убытков портфеля (totalExp) в качестве критерия сценария риска убытков для корреляции кредитного фактора с общим риском убытков. Если rho отрицательный, низкие значения кредитного фактора Z имеют тенденцию связываться с высокими значениями Ye, следовательно, высокие воздействия. Это означает, что отрицательные значения rho вводят WWR.
Для реализации сопоставления между сценариями воздействия Ye и, сортируйте сценарии воздействия по totalExp значения. Предположим, что число сценариев воздействия равно S (numScenarios). Учитывая Ye, найдите значение j такое, что
jS
и выберите сценарий j из отсортированных сценариев воздействия.
Ye коррелируется с моделируемыми экспозициями, а Z коррелируется с моделируемыми значениями по умолчанию. Следовательно, корреляция rho между Ye и Z является корреляционной связью между экспозициями и моделированием кредита.
% Sort the total exposure [~,totalExpIdx] = sort(totalExp); % Scenario cut points cutPoints = 0:1/numScenarios:1; % epsilonExp is the idiosyncratic factor for the latent variable epsilonExp = randn(numCreditScen,1); % Set a market-credit correlation value rho = -0.75; % Latent variable Ye = rho * Z + sqrt(1 - rho^2) * epsilonExp; % Find corresponding exposure scenario binidx = discretize(normcdf(Ye),cutPoints); scenIdx = totalExpIdx(binidx); totalExpCorr = totalExp(scenIdx); PECorr = PE(scenIdx,:);
На следующем графике показаны коррелированные сценарии риска убытков по кредиту для общего риска убытков по портфелю, а также для первого контрагента. Из-за отрицательной корреляции отрицательные значения кредитного фактора Z соответствуют высоким уровням риска (риск неправильного пути).
% We only plot up to 10000 scenarios numScenPlot = min(10000,numCreditScen); figure; scatter(Z(1:numScenPlot),totalExpCorr(1:numScenPlot)) hold on scatter(Z(1:numScenPlot),PECorr(1:numScenPlot,1)) xlabel('Credit Factor (Z)') ylabel('Exposure') title(['Correlated Exposure-Credit Scenarios, \rho = ' num2str(rho)]) legend('Total Exposure','CP1 Exposure') hold off

Для положительных значений rho соотношение между кредитным фактором и рисками убытков сторнируется (правый риск).
rho = 0.75; Ye = rho * Z + sqrt(1 - rho^2) * epsilonExp; binidx = discretize(normcdf(Ye),cutPoints); scenIdx = totalExpIdx(binidx); totalExpCorr = totalExp(scenIdx); figure; scatter(Z(1:numScenPlot),totalExpCorr(1:numScenPlot)) xlabel('Credit Factor (Z)') ylabel('Exposure') title(['Correlated Exposure-Credit Scenarios, \rho = ' num2str(rho)])

Можно изучить чувствительность рисков или других показателей риска к диапазону значений для rho.
Для каждого значения rho вычислите общие потери по сценарию кредитования, а также ожидаемые потери по контрагенту. В этом примере предполагается коэффициент восстановления 40%.
Recovery = 0.4; rhoValues = -1:0.1:1; totalLosses = zeros(numCreditScen,numel(rhoValues)); expectedLosses = zeros(numCP, numel(rhoValues)); for i = 1:numel(rhoValues) rho = rhoValues(i); % Latent variable Ye = rho * Z + sqrt(1 - rho^2) * epsilonExp; % Find corresponding exposure scenario binidx = discretize(normcdf(Ye),cutPoints); scenIdx = totalExpIdx(binidx); simulatedExposures = PE(scenIdx,:); % Compute actual losses based on exposures and default events losses = isDefault .* simulatedExposures * (1-Recovery); totalLosses(:,i) = sum(losses,2); % We compute the expected losses per counterparty expectedLosses(:,i) = mean(losses)'; end displayExpectedLosses(rhoValues, expectedLosses)
Expected Losses Rho CP1 CP2 CP3 CP4 CP5 ------------------------------------------------- -1.0 604.10 260.44 194.70 1234.17 925.95-0.9 583.67 250.45 189.02 1158.65 897.91-0.8 560.45 245.19 183.23 1107.56 865.33-0.7 541.08 235.86 177.16 1041.39 835.12-0.6 521.89 228.78 170.49 991.70 803.22-0.5 502.68 217.30 165.25 926.92 774.27-0.4 487.15 211.29 160.80 881.03 746.15-0.3 471.17 203.55 154.79 828.90 715.63-0.2 450.91 197.53 149.33 781.81 688.13-0.1 433.87 189.75 144.37 744.00 658.19 0.0 419.20 181.25 138.76 693.26 630.38 0.1 399.36 174.41 134.83 650.66 605.89 0.2 385.21 169.86 130.93 617.91 579.01 0.3 371.21 164.19 124.62 565.78 552.83 0.4 355.57 158.14 119.92 530.79 530.19 0.5 342.58 152.10 116.38 496.27 508.86 0.6 324.73 145.42 111.90 466.57 485.05 0.7 319.18 140.76 108.14 429.48 465.84 0.8 303.71 136.13 103.95 405.88 446.36 0.9 290.36 131.54 100.20 381.27 422.79 1.0 278.89 126.77 95.77 358.71 405.40
Можно визуализировать чувствительность экономического капитала (EC) к параметру корреляции «рынок-кредит». Определите EC как разницу между процентилем q распределения потерь за вычетом ожидаемых потерь.
Отрицательные значения rho приводят к более высоким требованиям к капиталу из-за WWR.
pct = 99; ec = prctile(totalLosses,pct) - mean(totalLosses); figure; plot(rhoValues,ec) title('Economic Capital (99%) versus \rho') xlabel('Rho'); ylabel('Economic Capital');

Этот пример реализует основанный на копуле подход к WWR, следуя Garcia Cespedes et al. Методология может эффективно использовать существующие риски убытков и моделирование кредитования, а чувствительность к параметру корреляции «рынок-кредит» может быть эффективно вычислена и удобно визуализирована для всех значений корреляции.
Представленный здесь однопараметрический подход к копуле может быть расширен для более тщательного изучения WWR портфеля. Например, могут применяться различные типы копул, а для сортировки сценариев воздействия могут использоваться различные критерии. Другие расширения включают моделирование нескольких переменных системного кредитного риска (многофакторная модель) или переключение с однолетней на многопериодную структуру для расчета таких показателей, как корректировка кредитной стоимости (CVA), как в Rosen и Saunders (см. Ссылки).
Гарсия Сеспедес, J. C., «Эффективное моделирование риска неправильного пути, капитала кредитного риска контрагента и Альфа в Базеле II», Журнал проверки модели риска, том 4/номер 1, стр. 71-98, весна 2010.
Гуптон, Г., С. Фингер и М. Батия, CreditMetrics™ - Технический документ, J.P. Морган, Нью-Йорк, 1997.
Розен, Д. и Д. Сондерс, «CVA неправильный путь», Журнал управления рисками в финансовых учреждениях, том 5, № 3, стр. 252-272, 2012.
function displayExpectedLosses(rhoValues, expectedLosses) fprintf(' Expected Losses\n'); fprintf(' Rho CP1 CP2 CP3 CP4 CP5\n'); fprintf('-------------------------------------------------\n'); for i = 1:numel(rhoValues) % Display expected loss fprintf('% .1f%9.2f%9.2f%9.2f%9.2f%9.2f', rhoValues(i), expectedLosses(:,i)); end end
cdsbootstrap | cdsprice | cdsrpv01 | cdsspread