В этом примере показано, как вычислить потребности в капитале и стоимость риска (VaR) для кредитно-чувствительного портфеля рисков воздействия с помощью асимптотической модели единого фактора риска (ASRF). В этом примере также показано, как вычислить требования к капиталу Базеля с помощью модели ASRF.
Модель ASRF определяет капитал как кредитное значение риска (VaR), превышающую ожидаемый убыток (EL).
где EL для данного контрагента является риском по умолчанию (EAD), умноженным на вероятность дефолта (PD) и убытка по умолчанию (LGD).
Чтобы вычислить кредитный VaR, модель ASRF принимает, что качество кредита должника моделируется скрытой переменной (A) с помощью модели одного фактора, где единый общий фактор (Z) представляет системный кредитный риск на рынке.
В соответствии с этой моделью потери по умолчанию для конкретного сценария рассчитываются как:
где I является индикатором по умолчанию и имеет значение 1, если (что означает, что скрытая переменная упала ниже порога по умолчанию) и значение 0 в противном случае. Ожидаемое значение индикатора по умолчанию, обусловленное общим фактором, определяется:
Для хорошо диверсифицированных и прекрасно гранулированных портфелей ожидаемая потеря, обусловленная значением общего фактора, составляет:
Затем можно непосредственно вычислить конкретные процентили распределения потерь с помощью совокупной функции распределения общего фактора. Это кредитный VaR, который мы вычисляем в доверительный уровень:
Из этого следует, что капитал для заданного уровня доверия, является:
Портфель содержит 100 кредитно-чувствительных договоров и информацию об их подверженности. Это моделируемые данные.
load asrfPortfolio.mat
disp(portfolio(1:5,:))
ID EAD PD LGD AssetClass Sales Maturity __ __________ _________ ____ __________ _____ ___________ 1 2.945e+05 0.013644 0.5 "Bank" NaN 02-Jun-2023 2 1.3349e+05 0.0017519 0.5 "Bank" NaN 05-Jul-2021 3 3.1723e+05 0.01694 0.4 "Bank" NaN 07-Oct-2018 4 2.8719e+05 0.013624 0.35 "Bank" NaN 27-Apr-2022 5 2.9965e+05 0.013191 0.45 "Bank" NaN 07-Dec-2022
Корреляции основных средств () в модели ASRF задайте корреляцию между аналогичными активами. Квадратный корень этого значения, , задает корреляцию между скрытой переменной контрагента (A) и системным кредитным фактором (Z). Корреляции активов могут быть калиброваны путем наблюдения корреляций на рынке или из исторических данных по умолчанию. Корреляции также могут быть установлены с помощью нормативных руководств (см. Раздел «Требования к капиталу Базеля»).
Поскольку модель ASRF является быстрой, аналитической формулой, удобно выполнять анализ чувствительности для контрагента, варьируя параметры воздействия и наблюдая, как изменяются капитал и VaR.
Следующий график показывает чувствительность к PD и корреляции активов. Параметры LGD и EAD являются масштабирующими факторами в формуле ASRF, поэтому чувствительность проста.
% Counterparty ID id = 1; % Set the default asset correlation to 0.2 as the baseline. R = 0.2; % Compute the baseline capital and VaR. [capital0, var0] = asrf(portfolio.PD(id),portfolio.LGD(id),R,'EAD',portfolio.EAD(id)); % Stressed PD by 50% [capital1, var1] = asrf(portfolio.PD(id) * 1.5,portfolio.LGD(id),R,'EAD',portfolio.EAD(id)); % Stressed Correlation by 50% [capital2, var2] = asrf(portfolio.PD(id),portfolio.LGD(id),R * 1.5,'EAD',portfolio.EAD(id)); c = categorical({'ASRF Capital','VaR'}); bar(c,[capital0 capital1 capital2; var0 var1 var2]); legend({'baseline','stressed PD','stressed R'},'Location','northwest') title(sprintf('ID: %d, Baseline vs. Stressed Scenarios',id)); ylabel('USD ($)');
При расчете нормативного капитала базельские документы имеют дополнительные спецификации модели поверх базовой модели ASRF. В частности, в Базеле II/III определяются конкретные формулы для вычисления корреляции активов для рисков в различных классах активов как функции вероятности по умолчанию.
Для настройки вектора корреляций согласно определениям, установленным в Базеле II/III:
R = zeros(height(portfolio),1); % Compute the correlations for corporate, sovereign, and bank exposures. idx = portfolio.AssetClass == "Corporate" |... portfolio.AssetClass == "Sovereign" |... portfolio.AssetClass == "Bank"; R(idx) = 0.12 * (1-exp(-50*portfolio.PD(idx))) / (1-exp(-50)) +... 0.24 * (1 - (1-exp(-50*portfolio.PD(idx))) / (1-exp(-50))); % Compute the correlations for small and medium entities. idx = portfolio.AssetClass == "Small Entity" |... portfolio.AssetClass == "Medium Entity"; R(idx) = 0.12 * (1-exp(-50*portfolio.PD(idx))) / (1-exp(-50)) +... 0.24 * (1 - (1-exp(-50*portfolio.PD(idx))) / (1-exp(-50))) -... 0.04 * (1 - (portfolio.Sales(idx)/1e6 - 5) / 45); % Compute the correlations for unregulated financial institutions. idx = portfolio.AssetClass == "Unregulated Financial"; R(idx) = 1.25 * (0.12 * (1-exp(-50*portfolio.PD(idx))) / (1-exp(-50)) +... 0.24 * (1 - (1-exp(-50*portfolio.PD(idx))) / (1-exp(-50))));
Найдите основной капитал ASRF с помощью базельских корреляций активов. Значение по умолчанию для уровня VaR составляет 99,9%.
asrfCapital = asrf(portfolio.PD,portfolio.LGD,R,'EAD',portfolio.EAD);
Кроме того, в базельских документах указывается корректировка срока, которая будет добавлена к каждому расчету капитала. Здесь мы вычисляем корректировку сроков и обновляем требования к капиталу.
maturityYears = years(portfolio.Maturity - settle);
b = (0.11852 - 0.05478 * log(portfolio.PD)).^2;
maturityAdj = (1 + (maturityYears - 2.5) .* b) ./ (1 - 1.5 .* b);
regulatoryCapital = asrfCapital .* maturityAdj;
fprintf('Portfolio Regulatory Capital : $%.2f\n',sum(regulatoryCapital));
Portfolio Regulatory Capital : $2371316.24
Взвешенные по риску активы (RWA) рассчитываются как капитал * 12.5.
RWA = regulatoryCapital * 12.5; results = table(portfolio.ID,portfolio.AssetClass,RWA,regulatoryCapital,'VariableNames',... {'ID','AssetClass','RWA','Capital'}); % Results table disp(results(1:5,:))
ID AssetClass RWA Capital __ __________ __________ _______ 1 "Bank" 4.7766e+05 38213 2 "Bank" 79985 6398.8 3 "Bank" 2.6313e+05 21050 4 "Bank" 2.9449e+05 23560 5 "Bank" 4.1544e+05 33235
Агрегируйте регуляторный капитал по классам активов.
assetClasses = unique(results.AssetClass); assetClassCapital = zeros(numel(assetClasses),1); for i = 1:numel(assetClasses) assetClassCapital(i) = sum(results.Capital(results.AssetClass == assetClasses(i))); end pie(assetClassCapital,cellstr(assetClasses)) title('Regulatory Capital by Asset Class');
capitalTable = table(assetClasses, assetClassCapital,'VariableNames',{'AssetClass','Capital'}); disp(capitalTable);
AssetClass Capital _______________________ __________ "Bank" 3.6894e+05 "Corporate" 3.5811e+05 "Medium Entity" 3.1466e+05 "Small Entity" 1.693e+05 "Sovereign" 6.8711e+05 "Unregulated Financial" 4.732e+05