Этот пример показывает подход к моделированию неправильным путем риска для Кредитного риска Контрагента с помощью Гауссовой связки.
Основной подход для Кредитного риска контрагента (CCR) (см. Кредитный риск Контрагента и пример CVA) принимает, что рынок и факторы кредитного риска независимы друг от друга. Симуляция факторов риска рынка управляет воздействиями для всех контрактов в портфеле. На отдельном шаге рыночные котировки Кредитного дефолтного свопа (CDS) определяют вероятности по умолчанию для каждого контрагента. Воздействия, вероятности по умолчанию и данная скорость восстановления используются для расчета Корректировка стоимости кредита (CVA) в каждом контрагенте, который является мерой ожидаемой потери. Симуляция факторов риска и вероятностей по умолчанию обработана как независимая друг от друга.
На практике вероятности по умолчанию и рыночные факторы коррелируются. Отношение может быть незначительным для некоторых типов инструментов, но для других, отношение между рынком и факторами кредитного риска может быть слишком важным, чтобы быть проигнорированным при вычислении мер по риску.
Когда вероятность значения по умолчанию контрагента и воздействия, следующего из конкретного контракта, имеет тенденцию увеличиваться вместе, мы говорим, что контракт имеет неправильным путем риск (WWR).
Этот пример демонстрирует реализацию неправильного пути методология риска, описанная в Гарсии Сеспеде и др. (см. Ссылки).
Многие финансовые учреждения имеют системы, которые симулируют факторы риска рынка и значение все инструменты в их портфелях в данные даты симуляции. Эти симуляции являются использованными для расчета воздействиями и другими мерами по риску. Поскольку симуляции в вычислительном отношении интенсивны, снова использование их для последующих анализов рисков важно.
Этот пример использует данные и результаты симуляции от Кредитного риска Контрагента и примера CVA, ранее сохраненного в ccr.mat файле. ccr.mat файл содержит:
RateSpec
: Спецификация уровня, когда договорные стоимости были вычислены
Settle
: Уладить дата, когда договорные стоимости были вычислены
simulationDates
: Вектор из дат симуляции
swaps
: Struct, содержащий параметры подкачки
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, включая все сценарии, является ЭПЕ, который может также быть получен из 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 и др., 1997). Это - эффективный способ симулировать коррелируемые значения по умолчанию.
Каждая компания i сопоставлена со случайной переменной И, такой что
где Z является "одним фактором", стандартная нормальная случайная переменная, которая представляет систематический фактор кредитного риска, значения которого влияют на все компании. Корреляция между компанией i и общим множителем дана beta_i, корреляция между компаниями i и j является beta_i*beta_j. Особенный шок epsilon_i является другой стандартной нормальной переменной, которая может уменьшать или увеличить эффект систематического фактора, независимо от того, что происходит с любой другой компанией.
Если вероятность по умолчанию для компании, i - PDi, значение по умолчанию, происходит когда
где совокупное стандартное нормальное распределение.
Переменная И иногда интерпретируется, когда актив возвращается, или иногда называемый скрытой переменной.
Эта модель является Гауссовой связкой, которая вводит корреляцию между значениями по умолчанию кредита. Связки предлагают конкретный способ ввести корреляцию, или в более общем плане, co-зависимость между двумя случайными переменными, co-зависимость которых неизвестна.
Используйте распространения 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
Теперь симулируйте сценарии кредита. Поскольку значения по умолчанию редки, распространено симулировать большое количество сценариев кредита.
Бета параметра чувствительности установлена в 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);
Теперь, когда существует набор отсортированных сценариев воздействия портфеля и набор сценариев по умолчанию, следуйте за подходом в Гарсии Сеспеде и др. и используйте Гауссову связку, чтобы сгенерировать коррелируемые пары сценария по умолчанию воздействием.
Задайте скрытую переменную Вы, который сопоставляет в распределение симулированных воздействий. Вы задан как
где Z является системным фактором, вычисленным в симуляции кредита, epsilon_e является независимой стандартной нормальной переменной, и ро интерпретирована как параметр корреляции кредита рынка. Конструкцией Вы - стандартная нормальная переменная, коррелируемая с Z с ро параметра корреляции.
Отображение между Вами и симулированные воздействия требуют, чтобы мы заказали сценарии воздействия значимым способом, на основе некоторого поддающегося сортировке критерия. Критерий может быть любым значимым количеством, например, это мог быть фактор базового риска для договорных стоимостей (таких как процентная ставка), общее воздействие портфеля, и так далее.
В этом примере используйте общее воздействие портфеля (totalExp
) как критерий сценария воздействия, чтобы коррелировать фактор кредита с суммой обязательств. Если ро является отрицательными, низкими значениями фактора кредита Z, имеют тенденцию быть соединенным с высокими значениями Вас, следовательно сильные воздействия. Это означает, что отрицательные величины ро вводят WWR.
Чтобы реализовать отображение между Вами и сценариями воздействия, отсортируйте сценарии воздействия по totalExp
значения. Предположим, что количество сценариев воздействия является S (numScenarios
). Учитывая Вас, найдите значение j таким образом что
и выберите сценарий j из отсортированных сценариев воздействия.
Вы коррелируется к симулированным воздействиям, и Z коррелируется к симулированным значениям по умолчанию. Ро корреляции между Вами и 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 = 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)])
Можно исследовать чувствительность воздействий или других мер по риску к области значений значений для ро.
Для каждого значения ро вычислите общие суммы убытков на сценарий кредита, а также ожидаемые потери на контрагента. Этот пример принимает 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
Можно визуализировать чувствительность Economic Capital (EC) к параметру корреляции кредита рынка. Задайте EC как различие между процентилью q распределения потерь минус ожидаемая потеря.
Отрицательные величины ро приводят к более высоким потребностям в капитале из-за 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, после Гарсии Сеспеда и др. Методология может эффективно снова использовать существующие воздействия и симуляции кредита, и чувствительность к параметру корреляции кредита рынка может эффективно вычисляться и удобно визуализироваться для всех значений корреляции.
Подход связки одно параметра, представленный здесь, может быть расширен для более полного исследования WWR портфеля. Например, различные типы связок могут быть применены, и различные критерии могут использоваться, чтобы отсортировать сценарии воздействия. Другие расширения включают симуляцию нескольких системных переменных кредитного риска (мультифакторная модель), или переключение от одного года до среды мультипериода, чтобы вычислить меры, такие как корректировка стоимости кредита (CVA), как в Розене и Сондерсе (см. Ссылки).
Гарсия Сеспед, J. C. "Эффективное Моделирование Неправильного Пути Риск, Counterparty Credit Risk Capital и Альфа в Базеле II", Журнал Проверки допустимости модели Риска, Объем 4 / Номер 1, стр 71-98, Spring 2010.
Gupton, G. C. Палец, и М. Бэтия, CreditMetrics™ - технический документ, Дж.П. Морган, Нью-Йорк, 1997.
Розен, D. и Д. Сондерс, "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