exponenta event banner

Потеря модели по умолчанию

В этом примере показано, как подгонять различные типы моделей к потерям данных по умолчанию (LGD). В этом примере демонстрируются следующие подходы:

Для всех этих подходов в этом примере показано:

  • Как подогнать модель с использованием обучающих данных, где LGD является функцией других переменных или предикторов.

  • Как прогнозировать на тестовых данных.

Раздел Сравнение моделей (Model Comparison) содержит подробное сравнение, включающее визуализации и несколько метрик ошибок прогнозирования для всех моделей в этом примере.

Регрессионные модели и модели Тобита устанавливаются с использованием fitLGDModel функция из Toolbox™ управления рисками. Дополнительные сведения см. в разделе Обзор моделей потерь, заданных по умолчанию. Другие модели приспособлены, основываясь на существующей функциональности в Оптимизации Toolbox™ и Статистика и Машинное обучение Toolbox™.

Введение

LGD является одним из основных параметров анализа кредитного риска. Хотя существуют различные подходы к оценке резервов кредитных потерь и кредитного капитала, общие методологии требуют оценки вероятностей дефолта (PD), убытков по данному дефолту (LGD) и подверженности риску дефолта (EAD). Резервы и потребности в капитале вычисляются с использованием формул или моделей, использующих эти параметры. Например, запасы потерь обычно оцениваются как ожидаемые потери (EL) по следующей формуле:

EL = PD * LGD * EAD.

Практики имеют десятилетний опыт моделирования и прогнозирования ПД. Однако моделирование LGD (а также EAD) началось гораздо позже. Одной из причин является относительный дефицит данных LGD по сравнению с данными PD. Данные о дефолте по кредиту (например, пропущенные платежи) легче собирать и доступнее, чем потери, понесенные в конечном итоге в случае дефолта. Когда счет перемещается на стадию восстановления, информация может быть перенесена в другую систему, ссуды могут быть консолидированы, процесс восстановления может занять много времени, и в ходе процесса возникает множество затрат, некоторые из которых трудно отследить подробно. Тем не менее, банки активизировали свои усилия по сбору данных, которые могут быть использованы для моделирования LGD, частично из-за правил, которые требуют оценки этих параметров риска, и моделирование LGD (и EAD) в настоящее время широко распространено в промышленности.

В этом примере используются смоделированные данные LGD, но рабочий процесс был применен к реальным наборам данных для соответствия моделям LGD, прогнозирования значений LGD и сравнения моделей. Фокус этого примера заключается не в том, чтобы предложить конкретный подход, а в том, чтобы показать, как эти различные модели могут подходить, как модели используются для прогнозирования значений LGD и как сравнивать модели. Этот пример также является отправной точкой для вариаций и расширений этих моделей; например, можно использовать более расширенные инструменты классификации и регрессии как часть двухэтапной модели.

Три предиктора в этом примере специфичны для ссуды. Однако можно использовать подходы, описанные в этом примере, с наборами данных, которые включают несколько предикторов и даже макроэкономические переменные. Кроме того, можно использовать модели, включающие макроэкономические предикторы для стресс-тестирования или моделирования LGD в течение всего срока службы, для поддержки нормативных требований, таких как CCAR, IFRS 9 и CECL.

Исследование данных LGD

Набор данных в этом примере представляет собой смоделированные данные, которые фиксируют общие особенности данных LGD. Например, общей особенностью является распределение значений LGD, которое имеет высокие частоты на 0 (полное восстановление), а также многие наблюдения на 1 (вообще никакого восстановления). Другой характеристикой данных LGD является значительное количество «шумов» или «необъяснимых» данных. Вы можете визуализировать этот «шум» на графиках рассеяния реакции против предикторов, где точки, кажется, не следуют четкому тренду, и все же некоторые основные отношения могут быть обнаружены. Кроме того, обычно получают значительные ошибки прогнозирования для моделей LGD. Эмпирические исследования показывают, что модели LGD имеют высокие ошибки прогнозирования в целом. Например, в [4] авторы сообщают значения R-квадрата в диапазоне от 4% до 43% для ряда моделей в различных портфелях. В этом примере все подходы получают значения R-квадрата чуть менее 10%. Кроме того, поиск полезных предикторов на практике может потребовать важного понимания условий кредитования конкретного портфеля, например, знания правовой базы и процесса сбора [2]. Моделируемый набор данных включает только три предиктора, и это переменные, часто встречающиеся в моделях LGD, а именно отношение ссуды к стоимости, возраст ссуды и то, живет ли заемщик в собственности или же заемщик купил ее для инвестиционных целей.

Подготовка данных для моделирования LGD выходит за рамки данного примера. В этом примере предполагается, что данные были подготовлены ранее, поскольку основное внимание в примере уделяется тому, как подогнать модели LGD и как использовать их для прогнозирования. Подготовка данных для моделирования LGD требует значительного объема работы на практике. Подготовка данных требует консолидации информации о счете, получения данных из нескольких источников данных, учета различных затрат и ставок дисконтирования и проверки предикторов [1] [2].

Загрузите набор данных из LGDData.mat файл. Набор данных хранится в data таблица. Он содержит три предиктора и переменную LGD, которая является переменной ответа.

Вот предварительный просмотр данных и описания набора данных и переменных.

load('LGDData.mat')
disp(head(data))
      LTV        Age         Type           LGD   
    _______    _______    ___________    _________

    0.89101    0.39716    residential     0.032659
    0.70176     2.0939    residential      0.43564
    0.72078     2.7948    residential    0.0064766
    0.37013      1.237    residential     0.007947
    0.36492     2.5818    residential            0
      0.796     1.5957    residential      0.14572
    0.60203     1.1599    residential     0.025688
    0.92005    0.50253    investment      0.063182
disp(data.Properties.Description)
Loss given default (LGD) data. This is a simulated data set.
disp([data.Properties.VariableNames' data.Properties.VariableDescriptions'])
    {'LTV' }    {'Loan-to-Value (LTV) ratio at...'}
    {'Age' }    {'Age of the loan in years at ...'}
    {'Type'}    {'Type of property, either res...'}
    {'LGD' }    {'Loss given default'             }

Данные LGD обычно имеют значения 0 (без потерь, полное восстановление) или 1 (вообще никакого восстановления). Распределение значений между 0 и 1 принимает различные формы в зависимости от типа портфеля и других признаков.

histogram(data.LGD)
title('LGD Distribution')
ylabel('Frequency')
xlabel('Observed LGD')

Figure contains an axes. The axes with title LGD Distribution contains an object of type histogram.

Изучите взаимосвязи между предикторами и ответом. Сначала отображается корреляция Спирмана между выбранным предиктором и LGD. Корреляция Спирмана является одной из статистических данных рангового порядка, обычно используемых для моделирования LGD [5].

SelectedPredictor = 'LTV';

fprintf('Spearman correlation between %s and LGD: %g',SelectedPredictor,corr(double(data.(SelectedPredictor)),data.LGD,'Type','Spearman'))
Spearman correlation between LTV and LGD: 0.271204
if isnumeric(data.(SelectedPredictor))
    scatter(data.(SelectedPredictor),data.LGD)
    X = [ones(height(data),1) data.(SelectedPredictor)];
    b = X\data.LGD;
    y = X*b;
    hold on
    plot(data.(SelectedPredictor),y)
    ylim([0 1])
    hold off
    xlabel(SelectedPredictor)
    ylabel('LGD')
end

Figure contains an axes. The axes contains 2 objects of type scatter, line.

Для числовых предикторов имеется график рассеяния LGD относительно выбранных значений предиктора с наложенной линейной посадкой. В данных имеется значительное количество шума, при этом точки разбросаны по всему сюжету. Это обычная ситуация для моделирования данных LGD. Плотность точек иногда различна в разных областях графика, предполагая взаимосвязи. Наклон линейной посадки и корреляция Спирмена дают больше информации о взаимосвязи между выбранным предиктором и ответом.

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

% Choose the number of discretization levels for numeric predictors
NumLevels =3;
if isnumeric(data.(SelectedPredictor))
    PredictorEdges = linspace(min(data.(SelectedPredictor)),max(data.(SelectedPredictor)),NumLevels+1);
    PredictorDiscretized = discretize(data.(SelectedPredictor),PredictorEdges,'Categorical',string(PredictorEdges(2:end)));
    boxplot(data.LGD,PredictorDiscretized)
    xlabel([SelectedPredictor ' Discretized'])
    ylabel('LGD')
else
    boxplot(data.LGD,data.(SelectedPredictor))
    xlabel(SelectedPredictor)
    ylabel('LGD')
end

Figure contains an axes. The axes contains 21 objects of type line.

Для категориальных данных бокс-график прост, так как приведено уже небольшое количество уровней. Для числовых данных можно сначала дискретизировать данные, а затем создать рамочный график. Различные размеры и высоты коробок показывают, что распределение значений LGD изменяется для различных уровней предиктора. Монотонный тренд в медиане (красная горизонтальная линия в центре прямоугольников) показывает потенциальную линейную зависимость между предиктором и LGD (хотя, возможно, мягкая зависимость из-за широких распределений).

Среднее значение LGD по разным группам

Основной подход к прогнозированию LGD заключается в простом использовании среднего значения данных LGD. Хотя это простой подход, простой в понимании и использовании, недостатком является то, что среднее значение является постоянным значением, и этот подход не проливает света на чувствительность ЛГД к другим факторам риска. В частности, предикторы в наборе данных игнорируются.

Для введения чувствительности к предикторам средние значения LGD могут оцениваться по различным группам или сегментам данных, где группы определяются с использованием диапазонов значений предиктора. Этот подход все еще является относительно простым подходом, но он может заметно уменьшить ошибку прогнозирования по сравнению с одним средним значением LGD для всех наблюдений.

Чтобы начать, разделите набор данных на данные обучения и тестирования. В этом примере для всех подходов используются одни и те же наборы данных обучения и тестирования.

NumObs = height(data);
% Reset the random stream state, for reproducibility
% Comment this line out to generate different data partitions each time the example is run
rng('default');
c = cvpartition(NumObs,'HoldOut',0.4);
TrainingInd = training(c);
TestInd = test(c);

В этом примере группы определяются с использованием трех предикторов. LTV дискретизируется на низкий и высокий уровни. Age дискретизируется в молодые и старые кредиты. Type уже имеет два уровня, а именно: жилой и инвестиционный. Все группы представляют собой комбинации этих значений (например, низкий LTV, молодой кредит, жилой и так далее).

Количество уровней и определенные точки отсечения приведены только для иллюстрации, другие дискретизации можно основывать на различных критериях. Кроме того, использование всех предикторов для дискретизации может быть не идеальным, когда набор данных содержит много предикторов. В некоторых случаях использования одного предиктора или пары предикторов может быть достаточно, чтобы найти полезные группы с различными средними значениями LGD. Когда данные включают в себя информацию макроса, группирование может включать в себя переменную макроса; например, среднее значение LGD должно отличаться от спада к экономическому росту.

Вычислите среднее значение LGD по восьми группам данных, используя обучающие данные.

% Discretize LTV
LTVEdges = [0 0.5 max(data.LTV)];
data.LTVDiscretized = discretize(data.LTV,LTVEdges,'Categorical',{'low','high'});
% Discretize Age
AgeEdges = [0 2 max(data.Age)];
data.AgeDiscretized = discretize(data.Age,AgeEdges,'Categorical',{'young','old'});
% Find group means on training data
gs = groupsummary(data(TrainingInd,:),{'LTVDiscretized','AgeDiscretized','Type'},'mean','LGD');
disp(gs)
    LTVDiscretized    AgeDiscretized       Type        GroupCount    mean_LGD
    ______________    ______________    ___________    __________    ________

         low              young         residential        163        0.12166
         low              young         investment          26       0.087331
         low              old           residential        175       0.021776
         low              old           investment          23        0.16379
         high             young         residential       1134        0.16489
         high             young         investment         257        0.25977
         high             old           residential        265       0.066068
         high             old           investment          50        0.11779

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

LGDGroupTest = findgroups(data(TestInd,{'LTVDiscretized' 'AgeDiscretized' 'Type'}));
LGDPredictedByGroupMeans = gs.mean_LGD(LGDGroupTest);

Сохранить наблюдаемые LGD и прогнозируемые LGD в новой таблице dataLGDPredicted. В этой таблице хранятся прогнозируемые значения LGD для всех других подходов в примере.

dataLGDPredicted = table;
dataLGDPredicted.Observed = data.LGD(TestInd);
dataLGDPredicted.GroupMeans = LGDPredictedByGroupMeans;
disp(head(dataLGDPredicted))
    Observed     GroupMeans
    _________    __________

    0.0064766     0.066068 
     0.007947      0.12166 
     0.063182      0.25977 
            0     0.066068 
      0.10904      0.16489 
            0      0.16489 
      0.89463      0.16489 
            0     0.021776 

Раздел Сравнение моделей (Model Comparison) содержит более подробное сравнение всех моделей, которое включает в себя визуализации и метрики ошибок прогнозирования.

Модель простой регрессии

Естественный подход заключается в использовании регрессионной модели для явной модели взаимосвязи между LGD и некоторыми предикторами. Однако данные LGD ограничены в единичном интервале, тогда как переменная отклика для моделей линейной регрессии теоретически не ограничена.

Для применения простых подходов линейной регрессии данные LGD могут быть преобразованы. Общим преобразованием является функция logit, которая приводит к следующей регрессионной модели:

log (LGD1-LGD) =Xβ+ϵ,with ϵ~N (0, start2)

Значения LGD 0 или 1 приводит к тому, что логитовая функция принимает бесконечные значения, поэтому данные LGD обычно усекаются перед применением преобразования.

data.LGDTruncated = data.LGD;
data.LGDTruncated(data.LGD==0) = 0.00001;
data.LGDTruncated(data.LGD==1) = 0.99999;
data.LGDLogit = log(data.LGDTruncated./(1-data.LGDTruncated));

Ниже приведена гистограмма преобразованных данных LGD, использующих функцию logit. Диапазон значений охватывает положительные и отрицательные значения, что соответствует требованиям линейной регрессии. Распределение по-прежнему показывает значительные точки вероятности массы на концах распределения.

histogram(data.LGDLogit)
title('Logit Transformation of Truncated LGD Data')

Figure contains an axes. The axes with title Logit Transformation of Truncated LGD Data contains an object of type histogram.

Другие преобразования предложены в литературе [1]. Например, вместо функции logit усеченные значения LGD могут быть отображены с обратным стандартным нормальным распределением (аналогично пробитной модели).

Подгонка регрессионной модели с помощью fitLGDModel функция из Toolbox™ управления рисками с использованием данных обучения. По умолчанию преобразование журнала применяется к данным ответа LGD с граничным допуском 1e-5. Дополнительные сведения о поддерживаемых преобразованиях и дополнительных аргументах см. в разделе Regression.

mdlRegression = fitLGDModel(data(TrainingInd,:),'regression','PredictorVars',{'LTV' 'Age' 'Type'},'ResponseVar','LGD');
disp(mdlRegression)
  Regression with properties:

    ResponseTransform: "logit"
    BoundaryTolerance: 1.0000e-05
              ModelID: "Regression"
          Description: ""
      UnderlyingModel: [1x1 classreg.regr.CompactLinearModel]
        PredictorVars: ["LTV"    "Age"    "Type"]
          ResponseVar: "LGD"
disp(mdlRegression.UnderlyingModel)
Compact linear regression model:
    LGD_logit ~ 1 + LTV + Age + Type

Estimated Coefficients:
                       Estimate       SE        tStat       pValue  
                       ________    ________    _______    __________

    (Intercept)        -4.7549      0.36041    -13.193    3.0997e-38
    LTV                 2.8565      0.41777     6.8377    1.0531e-11
    Age                -1.5397     0.085716    -17.963    3.3172e-67
    Type_investment     1.4358       0.2475     5.8012     7.587e-09


Number of observations: 2093, Error degrees of freedom: 2089
Root Mean Squared Error: 4.24
R-squared: 0.206,  Adjusted R-Squared: 0.205
F-statistic vs. constant model: 181, p-value = 2.42e-104

Коэффициенты модели соответствуют результатам анализа исследовательских данных с положительным коэффициентом для LTV, отрицательный коэффициент для Ageи положительный коэффициент для инвестиционных свойств в Type переменная.

Regression Модели LGD поддерживают прогнозирование и применяют обратное преобразование, так что прогнозируемые значения LGD находятся в шкале LGD. Например, для модели, установленной выше, которая использует логитовое преобразование, обратное логитовое преобразование (также известное как логистическая, или сигмоидная функция) применяется функцией прогнозирования для возврата предсказанного значения LGD.

dataLGDPredicted.Regression = predict(mdlRegression,data(TestInd,:));
disp(head(dataLGDPredicted))
    Observed     GroupMeans    Regression
    _________    __________    __________

    0.0064766     0.066068     0.00091169
     0.007947      0.12166      0.0036758
     0.063182      0.25977        0.18774
            0     0.066068      0.0010877
      0.10904      0.16489       0.011213
            0      0.16489       0.041992
      0.89463      0.16489       0.052947
            0     0.021776     3.7188e-06

Раздел Сравнение моделей (Model Comparison) в конце этого примера содержит более подробное сравнение всех моделей, которое включает в себя визуализации и метрики ошибок прогнозирования. В частности, гистограмма предсказанных значений LGD показывает, что регрессионная модель предсказывает многие значения LGD вблизи нуля, даже если высокая вероятность вблизи нуля не была явно смоделирована.

Модель регрессии Тобита

Tobit или цензурная регрессия предназначена для моделей, где ответ ограничен. Идея заключается в том, что существует лежащая в основе (скрытая) линейная модель, но что наблюдаемые значения отклика, в данном случае значения LGD, усекаются. Для этого примера используйте модель, подвергнутую цензуре с обеих сторон, с левым пределом в 0 и ограничение прав при 1, соответствующие следующей формуле модели

LGDi = min (макс. (0, Yi *), 1)

с:

Yi*=Xiβ+ϵi=β0 +β1X1i+⋯+βkXki+ϵi, с ϵi~N (0, start2)

Параметрами модели являются все βs и стандартное отклонение погрешности λ.

Соответствие регрессионной модели Тобита fitLGDModel использование данных обучения. По умолчанию модель, подвергнутая цензуре с обеих сторон, оснащена пределами 0 и 1. Дополнительные сведения о моделях Tobit см. в разделе Tobit.

mdlTobit = fitLGDModel(data(TrainingInd,:),'tobit','CensoringSide','both','PredictorVars',{'LTV' 'Age' 'Type'},'ResponseVar','LGD');
disp(mdlTobit)
  Tobit with properties:

      CensoringSide: "both"
          LeftLimit: 0
         RightLimit: 1
            ModelID: "Tobit"
        Description: ""
    UnderlyingModel: [1x1 risk.internal.credit.TobitModel]
      PredictorVars: ["LTV"    "Age"    "Type"]
        ResponseVar: "LGD"
disp(mdlTobit.UnderlyingModel)
Tobit regression model:
     LGD = max(0,min(Y*,1))
     Y* ~ 1 + LTV + Age + Type

Estimated coefficients:
                       Estimate        SE         tStat       pValue  
                       _________    _________    _______    __________

    (Intercept)         0.058257     0.027276     2.1358      0.032809
    LTV                  0.20126     0.031373      6.415    1.7363e-10
    Age                -0.095407    0.0072543    -13.152             0
    Type_investment      0.10208     0.018054     5.6542    1.7802e-08
    (Sigma)              0.29288     0.005704     51.346             0

Number of observations: 2093
Number of left-censored observations: 547
Number of uncensored observations: 1521
Number of right-censored observations: 25
Log-likelihood: -698.383

Модели Тобита предсказывают, используя безусловное ожидаемое значение ответа, учитывая предикторные значения. Дополнительные сведения см. в разделе Потери по умолчанию для моделей Tobit.

dataLGDPredicted.Tobit = predict(mdlTobit,data(TestInd,:));
disp(head(dataLGDPredicted))
    Observed     GroupMeans    Regression     Tobit  
    _________    __________    __________    ________

    0.0064766     0.066068     0.00091169    0.087889
     0.007947      0.12166      0.0036758     0.12432
     0.063182      0.25977        0.18774     0.32043
            0     0.066068      0.0010877    0.093354
      0.10904      0.16489       0.011213     0.16718
            0      0.16489       0.041992     0.22382
      0.89463      0.16489       0.052947     0.23695
            0     0.021776     3.7188e-06    0.010234

Раздел Сравнение моделей (Model Comparison) в конце этого примера содержит более подробное сравнение всех моделей, которое включает визуализацию и ошибку прогнозирования с различными метриками. Гистограмма прогнозируемых значений LGD для модели Тобита не имеет U-образного распределения, но она хорошо ранжируется по сравнению с другими моделями.

Модель бета-регрессии

В модели бета-регрессии для LGD модель не предсказывает непосредственно одно значение LGD, она предсказывает полное распределение LGD (учитывая предикторные значения). Исходя из этого распределения, необходимо определить значение для прогнозирования одного значения LGD для ссуды, как правило, среднего значения этого распределения.

Технически, учитывая предикторные значения X1,X2,... и коэффициентов модели b и c, можно:

  • Вычислить значения для параметров (среднего) и (иногда называемого «размером выборки») бета-распределения по следующим формулам:

λ = 11 + exp (- b0-b1X1-⋯) (c0+c1X1+⋯)

  • Вычислите значения для α и β, типичных параметров бета-распределения, с помощью следующих формул:

α=μ ν

β=(1-μ )ν

  • Оценить функцию плотности соответствующего бета-распределения для данного уровня LGD, где Γ - гамма-функция; для получения подробной информации см. [1]:

fbeta (LGD 'α, β) = Γ (α + β) Γ (α) Γ (β) LGDα-1 (1-LGD) β-1

Для подгонки модели после оценки функции плотности можно обновить функцию правдоподобия и найти оптимальные коэффициенты с подходом максимального правдоподобия. См. раздел Локальные функции, где функция максимального правдоподобия hLogLikelihoodBeta определяется.

Для прогнозирования, как только коэффициенты модели подгоняются, может быть выполнено прогнозирование, обычно с использованием среднего значения распределения, то есть λ параметра, в качестве прогнозируемого значения LGD.

Подберите модель бета-регрессии с использованием обучающих данных с максимальной вероятностью. Максимизация hLogLikelihoodBeta функция выполняется без ограничений решателем fminunc из Toolbox™ оптимизации.

% Convert Type to numeric binary
TypeDummy = dummyvar(data.Type);
data.Type01 = TypeDummy(:,2);

ColumnNames = {'Intercept' 'LTV' 'Age' 'Type'};
NumCols = length(ColumnNames);

% Initial guess
x0 = 0.1*ones(2*NumCols,1);
% Predictors Matrix and LGD, training
% Use truncated LGD to avoid numerical issues at the boundaries
XTrain = [ones(sum(TrainingInd),1) data.LTV(TrainingInd) data.Age(TrainingInd) data.Type01(TrainingInd)];
LGDTrain = data.LGDTruncated(TrainingInd);
% Minimize negative likelihood
objFunctionBeta = @(x)(-hLogLikelihoodBeta(x,XTrain,LGDTrain));
[Estimate,~,~,~,~,Hessian] = fminunc(objFunctionBeta,x0);
Computing finite-difference Hessian using objective function.

Local minimum found.

Optimization completed because the size of the gradient is less than
the value of the optimality tolerance.
ParameterNamesBeta = [strcat('Mu_',ColumnNames) strcat('Nu_',ColumnNames)];
ModelParametersBeta = array2table(Estimate,'RowNames',ParameterNamesBeta);
ModelParametersBeta.StdError = sqrt(diag(inv(Hessian)));
ModelParametersBeta.DF = size(XTrain,1)*ones(length(Estimate),1);
ModelParametersBeta.T = Estimate./ModelParametersBeta.StdError;
ModelParametersBeta.PValue = 2*(1-tcdf(abs(ModelParametersBeta.T),ModelParametersBeta.DF));
ModelParametersBeta.ConfidenceInterval = Estimate+ModelParametersBeta.StdError*[-1.96 1.96];
disp(ModelParametersBeta)
                    Estimate    StdError     DF        T         PValue       ConfidenceInterval 
                    ________    ________    ____    _______    __________    ____________________

    Mu_Intercept     -1.3772     0.13201    2093    -10.433             0      -1.636     -1.1185
    Mu_LTV            0.6027     0.15087    2093     3.9947    6.7017e-05     0.30698     0.89841
    Mu_Age          -0.47464    0.040264    2093    -11.788             0    -0.55356    -0.39572
    Mu_Type           0.4537    0.085143    2093     5.3287    1.0954e-07     0.28682     0.62058
    Nu_Intercept    -0.16338     0.12591    2093    -1.2976       0.19457    -0.41017    0.083406
    Nu_LTV          0.055904     0.14719    2093    0.37981       0.70412    -0.23259      0.3444
    Nu_Age           0.22888    0.040335    2093     5.6743    1.5858e-08     0.14982     0.30793
    Nu_Type         -0.14101    0.078154    2093    -1.8042      0.071342    -0.29419    0.012176

Для прогнозирования напомним, что бета-регрессия связывает предикторы с полным бета-распределением. Например, предположим, что кредит имеет LTV из 0.7 и возраст 1.1 годы, и это инвестиционная собственность. Модель бета-регрессии дает нам прогноз для параметров α и β для этого займа, и модель предсказывает, что для этого займа диапазон возможных значений LGD следует соответствующему бета-распределению.

XExample = [1 0.7 1.1 1];
MuExample = 1/(1+exp(-XExample*Estimate(1:NumCols)));
NuExample = exp(XExample*Estimate(NumCols+1:end));
AlphaExample = MuExample*NuExample;
BetaExample = (1-MuExample)*NuExample;

xDomain = 0.01:0.01:0.99;
pBeta = betapdf(xDomain,AlphaExample,BetaExample);
plot(xDomain,pBeta)
title('Predicted Distribution, Single Loan')
xlabel('Possible LGD')
ylabel('Predicted Density')

Figure contains an axes. The axes with title Predicted Distribution, Single Loan contains an object of type line.

Форма распределения имеет U-образный рисунок данных. Однако это прогнозируемое распределение значений LGD для одной ссуды. Это распределение может быть очень полезным для целей моделирования. Однако для прогнозирования значения LGD для этой ссуды требуется метод, который переходит от всего распределения к одному значению.

Одним из способов прогнозирования было бы случайное получение значения из предыдущего распределения. Это будет иметь тенденцию давать прогнозируемые значения к концам единичного интервала, и общая форма распределения для набора данных будет соответствовать U-образному шаблону наблюдаемых значений LGD. Однако, даже если форма распределения выглядела правильной, случайный вывод из распределения не работает хорошо для целей прогнозирования. Две точки с одинаковыми значениями предиктора будут иметь два различных предсказанных LGD, что является контринтуитивным. Кроме того, ошибка прогнозирования на уровне наблюдения может быть большой, поскольку многие кредиты с небольшими наблюдаемыми LGD могут получить случайные прогнозы больших LGD, и наоборот.

Для уменьшения ошибки прогнозирования на индивидуальном уровне для прогнозирования обычно используется ожидаемое значение бета-распределения. Распределение прогнозируемых значений при таком подходе не имеет ожидаемой U-образной структуры, поскольку среднее значение имеет тенденцию быть удаленным от границ единичного интервала. Однако, используя среднее значение бета-распределения, все наблюдения с одинаковыми значениями предиктора получают те же предсказанные LGD. Кроме того, среднее значение может быть не близко к значениям, которые находятся на концах распределения, но средняя ошибка может быть меньше по сравнению со случайными показаниями предыдущего подхода.

Спрогнозировать, используя среднее значение бета-распределения. Следует помнить, что ожидаемое значение распределения представляет собой λ-параметр, поэтому прогнозирование среднего значения является простым.

XTest = [ones(sum(TestInd),1) data.LTV(TestInd) data.Age(TestInd) data.Type01(TestInd)];
MuTest = 1./(1+exp(-XTest*Estimate(1:NumCols)));
dataLGDPredicted.Beta = MuTest;
disp(head(dataLGDPredicted))
    Observed     GroupMeans    Regression     Tobit        Beta  
    _________    __________    __________    ________    ________

    0.0064766     0.066068     0.00091169    0.087889    0.093695
     0.007947      0.12166      0.0036758     0.12432     0.14915
     0.063182      0.25977        0.18774     0.32043     0.35262
            0     0.066068      0.0010877    0.093354    0.096434
      0.10904      0.16489       0.011213     0.16718     0.18858
            0      0.16489       0.041992     0.22382      0.2595
      0.89463      0.16489       0.052947     0.23695     0.26767
            0     0.021776     3.7188e-06    0.010234    0.021315

Раздел Сравнение моделей (Model Comparison) в конце этого примера содержит более подробное сравнение всех моделей, которое включает в себя визуализации и метрики ошибок прогнозирования. В частности, гистограмма предсказанных значений LGD показывает, что подход бета-регрессии не производит U-образного распределения. Тем не менее, этот подход имеет хорошую производительность при других сообщенных метриках.

Двухступенчатая модель

Двухступенчатые модели LGD отделяют корпус без потерь (LGD равно 0) из случаев с фактическими потерями (LGD более 0) и построить две модели. Модель этапа 1 является классификационной моделью для прогнозирования того, будет ли кредит иметь положительный LGD. Стадия 2 моделирует модель регрессионного типа для прогнозирования фактического LGD, когда LGD ожидается положительным. Предсказание представляет собой ожидаемое значение двух комбинированных моделей, которое является результатом вероятности иметь потери (предсказание стадии 1), умноженные на ожидаемое значение LGD (предсказание стадии 2).

В этом примере для этапа 1 используется модель логистической регрессии. Второй этап представляет собой регрессию на логитовом преобразовании положительных данных LGD, подогнанных с использованием fitLGDModel. Более сложные модели могут использоваться для моделей этапа 1 и этапа 2, см., например, [4] или [6]. Кроме того, другим расширением является явная обработка LGD = 1 граница. Модель этапа 1 будет производить вероятности наблюдения LGD 0, LGD из 1и значение LGD строго между 0 и 1. Модель этапа 2 будет предсказывать значения LGD, когда ожидается, что LGD будет строго между 0 и 1.

Подберите модель этапа 1 с использованием данных обучения. Переменная ответа является индикатором со значением 1 если наблюдаемая LGD положительна, и 0 если наблюдаемый LGD равен нулю.

IndLGDPositive = data.LGD>0;
data.LGDPositive = IndLGDPositive;
disp(head(data))
      LTV        Age         Type           LGD       LTVDiscretized    AgeDiscretized    LGDTruncated    LGDLogit    Type01    LGDPositive
    _______    _______    ___________    _________    ______________    ______________    ____________    ________    ______    ___________

    0.89101    0.39716    residential     0.032659         high             young           0.032659       -3.3884      0          true    
    0.70176     2.0939    residential      0.43564         high             old              0.43564      -0.25887      0          true    
    0.72078     2.7948    residential    0.0064766         high             old            0.0064766       -5.0331      0          true    
    0.37013      1.237    residential     0.007947         low              young           0.007947        -4.827      0          true    
    0.36492     2.5818    residential            0         low              old                1e-05       -11.513      0          false   
      0.796     1.5957    residential      0.14572         high             young            0.14572       -1.7686      0          true    
    0.60203     1.1599    residential     0.025688         high             young           0.025688       -3.6357      0          true    
    0.92005    0.50253    investment      0.063182         high             young           0.063182       -2.6965      1          true    
mdl1 = fitglm(data(TrainingInd,:),"LGDPositive ~ 1 + LTV + Age + Type",'Distribution',"binomial");
disp(mdl1)
Generalized linear regression model:
    logit(LGDPositive) ~ 1 + LTV + Age + Type
    Distribution = Binomial

Estimated Coefficients:
                       Estimate       SE        tStat       pValue  
                       ________    ________    _______    __________

    (Intercept)          1.3157     0.21193     6.2083    5.3551e-10
    LTV                  1.3159     0.25328     5.1954    2.0433e-07
    Age                -0.79597    0.053607    -14.848    7.1323e-50
    Type_investment     0.66784     0.17019     3.9241    8.7051e-05


2093 observations, 2089 error degrees of freedom
Dispersion: 1
Chi^2-statistic vs. constant model: 404, p-value = 2.68e-87

График кривой рабочей характеристики приемника (ROC) для модели этапа 1 обычно сообщается с использованием тестовых данных, а также площади под кривой ROC (AUROC или просто AUC).

PredictedProbLGDPositive = predict(mdl1,data(TestInd,:));
[x,y,~,AUC] = perfcurve(data.LGDPositive(TestInd),PredictedProbLGDPositive,1);
plot(x,y)
title(sprintf('ROC Stage 1 Model (AUROC: %g)',AUC))

Figure contains an axes. The axes with title ROC Stage 1 Model (AUROC: 0.74287) contains an object of type line.

Подогнать модель ступени 2 с помощью fitLGDModel использование только обучающих данных с положительным LGD. Это тот же тип модели, который использовался ранее в разделе «Регрессия», однако на этот раз она подгоняется с использованием только наблюдений из обучающих данных с положительными LGD.

dataLGDPositive = data(TrainingInd&IndLGDPositive,{'LTV','Age','Type','LGD'});
mdl2 = fitLGDModel(dataLGDPositive,'regression');
disp(mdl2.UnderlyingModel)
Compact linear regression model:
    LGD_logit ~ 1 + LTV + Age + Type

Estimated Coefficients:
                       Estimate       SE        tStat       pValue  
                       ________    ________    _______    __________

    (Intercept)         -2.9083     0.27538    -10.561    3.2039e-25
    LTV                  1.3883     0.31838     4.3604     1.384e-05
    Age                -0.46116    0.081939    -5.6281    2.1608e-08
    Type_investment     0.78223     0.18096     4.3226    1.6407e-05


Number of observations: 1546, Error degrees of freedom: 1542
Root Mean Squared Error: 2.8
R-squared: 0.0521,  Adjusted R-Squared: 0.0503
F-statistic vs. constant model: 28.3, p-value = 8.73e-18

Выполните прогнозирование данных испытаний с использованием комбинированных моделей для этапа 1 и этапа 2. Прогнозируемый LGD - произведение вероятности наблюдения положительного LGD от модели стадии 1 в раз больше ожидаемого значения LGD, прогнозируемого моделью стадии 2. Напомним, что регрессионные модели подогнаны с использованием fitLGDModel применить обратное преобразование во время прогнозирования, так что прогнозируемое значение является допустимым значением LGD.

PredictedLGDPositive = predict(mdl2,data(TestInd,:));

% PredictedProbLGDPositive is computed before the ROC curve above
% Final LGD prediction is the product of stage 1 and stage 2 predictions
dataLGDPredicted.TwoStage = PredictedProbLGDPositive.*PredictedLGDPositive;

disp(head(dataLGDPredicted))
    Observed     GroupMeans    Regression     Tobit        Beta      TwoStage 
    _________    __________    __________    ________    ________    _________

    0.0064766     0.066068     0.00091169    0.087889    0.093695     0.020038
     0.007947      0.12166      0.0036758     0.12432     0.14915     0.034025
     0.063182      0.25977        0.18774     0.32043     0.35262       0.2388
            0     0.066068      0.0010877    0.093354    0.096434     0.022818
      0.10904      0.16489       0.011213     0.16718     0.18858     0.060072
            0      0.16489       0.041992     0.22382      0.2595     0.097685
      0.89463      0.16489       0.052947     0.23695     0.26767      0.11142
            0     0.021776     3.7188e-06    0.010234    0.021315    0.0003689

Раздел Сравнение моделей (Model Comparison) в конце этого примера содержит более подробное сравнение всех моделей, которое включает в себя визуализации и метрики ошибок прогнозирования. Этот подход также занимает хорошее место по сравнению с другими моделями, и гистограмма прогнозируемых значений LGD показывает высокие частоты вблизи 0.

Сравнение моделей

Для оценки производительности моделей LGD обычно используются различные метрики. Одна метрика представляет собой R-квадрат линейной посадки, регрессирующий наблюдаемые значения LGD на прогнозируемые значения. Вторая метрика - это некоторая корреляция или статистика рангового порядка; в этом примере используется корреляция Спирмана. Для ошибки предсказания среднеквадратичная ошибка (RMSE) является общей метрикой. Кроме того, простой метрикой, о которой иногда сообщается, является разница между средним значением LGD в данных и средним значением LGD прогнозов.

Модели регрессии и Тобита напрямую поддерживают эти метрики с modelAccuracy функция, включая сравнение с ссылочной моделью. Например, вот отчет этих метрик для регрессионной модели, передающий предсказания простой непараметрической модели в качестве ссылки.

AccMeasure = modelAccuracy(mdlRegression,data(TestInd,:),'DataID','Test','ReferenceLGD',dataLGDPredicted.GroupMeans,'ReferenceID','Group Means','CorrelationType','spearman');
disp(AccMeasure)
                         RSquared     RMSE      Correlation    SampleMeanError
                         ________    _______    ___________    _______________

    Regression, Test     0.070867    0.25988      0.42152           0.10759   
    Group Means, Test    0.041622     0.2406      0.33807        -0.0078124   

Визуализация также напрямую поддерживается с помощью modelAccuracyPlot.

modelAccuracyPlot(mdlRegression,data(TestInd,:),'DataID','Test','ReferenceLGD',dataLGDPredicted.GroupMeans,'ReferenceID','Group Means')

Figure contains an axes. The axes with title Scatter Test Regression, R-Squared: 0.070867 Group Means, R-Squared: 0.041622 contains 4 objects of type scatter, line. These objects represent Data, Regression, Fit, Regression, Data, Group Means, Fit, Group Means.

Кроме того, Regression и Tobit модели поддерживают инструменты дискриминации моделей, с modelDiscrimination и modelDiscriminationPlot функции. Для распознавания модели данные LGD дискретизируются (высокий LGD по сравнению с низким LGD), и кривая ROC и соответствующая AUROC вычисляются стандартным способом. Дополнительные сведения см. в разделе modelDiscrimination и modelDiscriminationPlot. Например, вот кривая ROC для регрессионной модели с кривой ROC непараметрической модели в качестве привязки.

modelDiscriminationPlot(mdlRegression,data(TestInd,:),'DataID','Test','ReferenceLGD',dataLGDPredicted.GroupMeans,'ReferenceID','Group Means')

Figure contains an axes. The axes with title ROC Test Regression, AUROC = 0.67897 Group Means, AUROC = 0.61251 contains 2 objects of type line. These objects represent Regression, Group Means.

Остальная часть этого раздела проверки модели работает с прогнозируемыми значениями LGD из всех моделей для вычисления метрик, упомянутых выше (R-квадрат, корреляция Спирмена, RMSE и средняя ошибка выборки). Он также показывает график рассеяния, гистограмму и рамочный график для дальнейшего анализа производительности моделей.

Четыре метрики представлены ниже, отсортированы путем уменьшения значений R-квадрата.

ModelNames = dataLGDPredicted.Properties.VariableNames(2:end); % Remove 'Observed'
NumModels = length(ModelNames);

SampleMeanError = zeros(NumModels,1);
RSquared = zeros(NumModels,1);
Spearman = zeros(NumModels,1);
RMSE = zeros(NumModels,1);
lmAll = struct;

meanLGDTest = mean(dataLGDPredicted.Observed);

for ii=1:NumModels
    
    % R-squared, and store linear model fit for visualization section
    Formula = ['Observed ~ 1 + ' ModelNames{ii}];
    lmAll.(ModelNames{ii}) = fitlm(dataLGDPredicted,Formula);
    RSquared(ii) = lmAll.(ModelNames{ii}).Rsquared.Ordinary;
    
    % Spearman correlation
    Spearman(ii) = corr(dataLGDPredicted.Observed,dataLGDPredicted.(ModelNames{ii}),'type','Spearman');
    
    % Root mean square error
    RMSE(ii) = sqrt(mean((dataLGDPredicted.Observed-dataLGDPredicted.(ModelNames{ii})).^2));

    % Sample mean error
    SampleMeanError(ii) = meanLGDTest-mean(dataLGDPredicted.(ModelNames{ii}));
    
end

PerformanceMetrics = table(RSquared,Spearman,RMSE,SampleMeanError,'RowNames',ModelNames);
PerformanceMetrics = sortrows(PerformanceMetrics,'RSquared','descend');
disp(PerformanceMetrics)
                  RSquared    Spearman     RMSE      SampleMeanError
                  ________    ________    _______    _______________

    TwoStage      0.090814    0.41987     0.24197        0.060619   
    Tobit          0.08527    0.42217     0.23712       -0.034412   
    Beta          0.080804    0.41557     0.24112       -0.052396   
    Regression    0.070867    0.42152     0.25988         0.10759   
    GroupMeans    0.041622    0.33807      0.2406      -0.0078124   

Для конкретного обучающего и тестового разбиения, используемого в этом примере, двухступенчатая модель имеет самый высокий R-квадрат, хотя для других разбиений Тобит имеет самый высокий R-квадрат. Даже если подход групповых средних не имеет высокого значения R-квадрата, он обычно имеет наименьшую среднюю ошибку выборки (среднее из прогнозируемых значений LGD минус среднее значение LGD в тестовых данных). Групповые средства также конкурентоспособны по метрике RMSE.

Сообщите о производительности модели по одному подходу, включая визуализацию. Отображение метрик для выбранной модели.

ModelSelected = "TwoStage";
disp(PerformanceMetrics(ModelSelected,:))
                RSquared    Spearman     RMSE      SampleMeanError
                ________    ________    _______    _______________

    TwoStage    0.090814    0.41987     0.24197       0.060619    

Постройте график регрессионной посадки (наблюдаемый LGD против прогнозируемого LGD), который является общим визуальным инструментом для оценки производительности модели. Это по существу та же визуализация, что и modelAccuracyPlot функцию, показанную выше, но использующую plot функция аппроксимированных линейных моделей. R-квадрат, указанный выше, представляет собой R-квадрат этой регрессии. График показывает значительное количество ошибок для всех моделей. Хорошая прогностическая модель будет иметь точки, расположенные в основном вдоль диагонали, и не будет разбросана по всему квадрату единицы измерения. Тем не менее, приведенные выше метрики показывают некоторые различия в прогностической производительности для различных моделей, которые могут быть важны на практике.

plot(lmAll.(ModelSelected))
xlim([0 1])
ylim([0 1])

Figure contains an axes. The axes with title Observed vs. TwoStage contains 4 objects of type line. These objects represent Data, Fit, Confidence bounds.

Сравните гистограммы прогнозируемых и наблюдаемых значений LGD. Для некоторых моделей распределение прогнозируемых значений показывает высокие частоты вблизи нуля, аналогичные U-образной форме наблюдаемого распределения LGD. Однако соответствие форме распределения не означает высокую точность на уровне отдельных прогнозов; некоторые модели показывают лучшую ошибку прогнозирования, даже если их гистограмма не имеет U-образной формы.

LGDEdges = 0:0.1:1; % Ten bins to better show the distribution shape
y1 = histcounts(dataLGDPredicted.(ModelSelected),LGDEdges);
y2 = histcounts(dataLGDPredicted.Observed,LGDEdges);
bar((LGDEdges(1:end-1)+LGDEdges(2:end))/2,[y1; y2])
title(strcat(ModelSelected,' Model'))
ylabel('Frequency')
xlabel('LGD')
legend('Predicted','Observed')
grid on

Figure contains an axes. The axes with title TwoStage Model contains 2 objects of type bar. These objects represent Predicted, Observed.

Показать рамочный график наблюдаемых значений LGD для различных диапазонов прогнозируемых значений LGD. Более грубая дискретизация (только пять ячеек) сглаживает некоторый шум и лучше суммирует лежащую в основе связь. В идеале медиана (красная горизонтальная линия посередине) должна иметь монотонный тренд и явно отличаться от одного уровня к следующему. Высокие поля также означают, что существует значительная погрешность вокруг прогнозируемых значений, которая в некоторых случаях может быть вызвана очень небольшим количеством наблюдений на этом уровне. Для хорошей прогнозной модели поля должны быть короткими и располагаться вблизи диагонали при переходе от одного уровня к следующему.

LGDEdges = linspace(min(dataLGDPredicted.(ModelSelected)),max(dataLGDPredicted.(ModelSelected)),6); % Five bins
LGDDiscretized = discretize(dataLGDPredicted.(ModelSelected),LGDEdges,'Categorical',string(LGDEdges(2:end)));
boxplot(dataLGDPredicted.Observed,LGDDiscretized)
ylim([0 1])
title(strcat(ModelSelected,' Model'))
xlabel('Predicted LGD, Discretized')
ylabel('Observed LGD')

Figure contains an axes. The axes with title TwoStage Model contains 35 objects of type line.

Резюме

В этом примере показано несколько подходов к моделированию и прогнозированию LGD. Регрессионные модели и модели Тобита (включая регрессионную модель второй ступени в двухступенчатой модели) устанавливаются с использованием fitLGDModel из панели инструментов управления рисками. Другие модели устанавливаются на основе существующих функциональных возможностей в Optimization Toolbox и Statistics and Machine Learning Toolbox.

Поток операций в этом примере может быть адаптирован для дальнейшего анализа моделей, обсуждаемых здесь, или для реализации и проверки других подходов к моделированию. Этот пример можно расширить для более тщательного сравнения моделей LGD (см., например, [3] и [4]).

Этот пример также может быть расширен для выполнения анализа перекрестной проверки для сравнения альтернативных моделей или для точной настройки гиперпараметров. Например, лучшие точки отсечения для группового средства могут быть выбраны с использованием перекрестной проверки, или альтернативные преобразования значений ответа LGD (logit, probit) могут быть сопоставлены для выбора того, который имеет наилучшую производительность. Этот пример также может быть отправной точкой для выполнения анализа обратного тестирования с использованием устаревших данных; см., например, [5].

Ссылки

[1] Бэзенс, Б., Д. Рош и Х. Шёле. Аналитика кредитных рисков. Уайли, 2016.

[2] Джонстон Росс, E. и Л. Шибут. "Что приводит к потере по умолчанию? Доказательства по кредитам на коммерческую недвижимость в несостоявшихся банках. " Федеральная корпорация по страхованию вкладов, Центр финансовых исследований, рабочий документ 2015-03, март 2015 г.

[3] Ли, П., X. Чжан и X. Чжао. "Моделирование потерь по умолчанию. "Федеральная корпорация по страхованию вкладов, Центр финансовых исследований, рабочий документ 2018-03, июль 2018 года.

[4] Лотерман, Г., И. Браун, Д. Мартенс, К. Мюз и Б. Бэзенс. «Алгоритмы эталонной регрессии для моделирования потерь по умолчанию». Международный журнал прогнозирования. т. 28, No.1, стр. 161-170, 2012.

[5] Лотерман, Г., М. Дебрюйн, К. Ванден Бранден, Т. Ван Гестель и К. Мус. «Предлагаемая структура для обратного тестирования потерь с заданными моделями по умолчанию». Проверка модели журнала рисков. т. 8, № 1, стр. 69-90, март 2014 года.

[6] Тануэ, Я. и С. Ямасита. «Оценка потерь по умолчанию: двухэтапная модель с усилением и поддержкой вектора логистической регрессии на основе дерева классификации». Журнал рисков. т. 21 № 4, стр. 19-37, 2019.

Локальные функции

Вероятность регистрации бета-версии

Функция логарифмического правдоподобия для модели бета-регрессии

LLFбета (α, β | X, LGD) =∑i=1Nlog (fbeta (LGDi 'α (Xi), β (Xi)),

где:

α (Xi) = λ (Xi)

и

(Xi) = 11 + exp (-Xib), (Xi) = exp (Xic).

Матрица X предиктора и вектор наблюдаемых значений LGD получены из тренировочных данных с Nobservations. Функция плотности для бета-распределения задается как (Γ - гамма-функция)

fbeta (LGD 'α, β) = Γ (α + β) Γ (α) Γ (β) LGDα-1 (1-LGD) β-1.

Учитывая данные, логарифмическая функция правдоподобия является функцией параметров коэффициентов b и c, даже несмотря на то, что вышеприведенные формулы не делают эту зависимость явно для упрощения обозначения. Функция логарифмического правдоподобия максимизируется путем изменения параметров b и c. Параметры распределения α > 0 и β > 0, а также 0 < λ < 1 и start> 0 являются промежуточными преобразованиями, необходимыми для оценки логарифмической функции правдоподобия. Для получения дополнительной информации см., например, [1].

function f = hLogLikelihoodBeta(Params, X, y)

nCols = size(X,2);
b = Params(1:nCols);
c = Params(nCols+1:end);

% Linear predictors
yMu = X*b;
yNu = X*c;

mu = 1 ./ (1 + exp(-yMu));
nu = exp(yNu);

% Transform to standard parameterization
alpha = mu .* nu;
beta = (1-mu) .* nu;

% Negative log-likelihood
likelihood = betapdf(y,alpha,beta);
f = sum(log(likelihood));

end