В этом примере показано, как вычислить потребности в капитале и подверженный риску значения (VaR) для кредита чувствительный портфель воздействий с помощью модели асимптотического одного фактора риска (ASRF). Этот пример также показывает, как вычислить Базельские потребности в капитале с помощью модели ASRF.
Модель ASRF задает капитал как значение в опасности (VaR) кредита сверх ожидаемой потери (EL).
где EL для данного контрагента является воздействием в значении по умолчанию (EAD), умноженным на вероятность значения по умолчанию (PD) и потеря, данная значение по умолчанию (LGD).
Чтобы вычислить кредит VaR, модель ASRF принимает, что кредитоспособность должника моделируется со скрытой переменной (A) использование одной факторной модели, где один общий множитель (Z) представляет системный кредитный риск на рынке.
В соответствии с этой моделью, потери по умолчанию для конкретного сценария вычисляются как:
где я - индикатор по умолчанию и имею значение 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). Корреляции актива могут быть калиброваны путем наблюдения корреляций на рынке или из исторических данных по умолчанию. Корреляции могут также быть установлены с помощью регулирующих инструкций (см. Базельский раздел Capital Requirements).
Поскольку модель ASRF является быстрой, аналитической формулой, удобно выполнить анализ чувствительности для контрагента путем варьирования параметров воздействия и наблюдения, как капитал и VaR изменяются.
Следующий график показывает чувствительность к корреляции актива и PD. LGD и параметры EAD являются масштабными коэффициентами в формуле ASRF, таким образом, чувствительность является прямой.
% Counterparty ID id = 1; % Set default asset correlation to 0.2 as baseline R = 0.2; % Compute 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 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 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 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 : $2310819.05
Риск взвесил активы (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.127e+05