Моделирование потерь по умолчанию

Этот пример показывает аппроксимацию различных типов моделей к потерям данных по умолчанию (LGD). Этот пример демонстрирует следующие подходы:

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

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

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

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

Модели регрессии и Тобита устанавливаются с помощью fitLGDModel функция из Risk Management Toolbox™. Для получения дополнительной информации смотрите Обзор потерь с учетом моделей по умолчанию. Другие модели установлены на основе существующих функциональных возможностей в Optimization Toolbox™ и Statistics and Machine Learning Toolbox™.

Введение

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

EL=PD*LGD*EAD.

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

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

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

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

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

% Choose the number of discretization levels for numeric predictors
NumLevels =3;
if isnumeric (данные. (SelectedPredictor))
    PredictorEdges = linspace (min (данные. (SelectedPredictor)), max (данные. (SelectedPredictor)), NumLevels + 1);
    PredictorDiscretized = дискретизировать (данные. (SelectedPredictor), PredictorEdges,'Categorical', строка (PredictorEdges (2: end));
    boxplot (data.LGD, PredictorDiscretized)
    xlabel ([ SelectedPredictor' Discretized'])
    ylabel ('LGD')
else
    boxplot (data.LGD, данные. (SelectedPredictor))
    xlabel (SelectedPredictor)
    ylabel ('LGD')
end

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

Для категориальных данных прямолинейный график прост, поскольку уже задано небольшое количество уровней. Для числовых данных можно сначала дискретизировать данные, а затем сгенерировать прямоугольный график. Различные размеры и высоты коробки показывают, что распределение значений 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 по восьми группам данных с помощью обучающих данных.

% 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,σ2)

Значения LGD 0 или 1 заставляет функцию logit принимать бесконечные значения, поэтому 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 могут быть отображены с обратным стандартным нормальным распределением (подобным модели probit).

Подбор регрессионной модели с помощью fitLGDModel функция из Risk Management Toolbox™ с использованием обучающих данных. По умолчанию преобразование logit применяется к данным 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 переменная.

The Regression Модели LGD поддерживают предсказание и применяют обратное преобразование, поэтому предсказанные значения LGD находятся в шкале LGD. Для примера для модели, установленной выше, которая использует преобразование logit, обратное преобразование logit (также известное как логистическая, или сигмоидная функция) применяется функцией предсказания, чтобы вернуть предсказанное значение 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 около нуля, даже несмотря на то, что высокая вероятность около нуля не была явно смоделирована.

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

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

LGDi=min(max(0,Yi*),1)

с:

Yi*=Xiβ+ϵi=β0+β1X1i++βkXki+ϵi,withϵi~N(0,σ2)

Параметры модели все β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

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

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-)ν=exp(c0+c1X1+)

  • Вычислите значения для αи βтипичные параметры бета- распределения с этими формулами:

α=μν

β=(1-μ)ν

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

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

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

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

Подгонка модели бета-регрессии с помощью обучающих данных с максимальной вероятностью. Максимизация hLogLikelihoodBeta функция выполняется без ограничений решателя fminunc из Optimization 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) из случаев с фактическими потерями (ЛГД больше 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. Это тот же тип модели, что и ранее в разделе Regression, однако на этот раз она подгоняется с использованием только наблюдений из обучающих данных с положительными 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-квадрат, хотя для других разбиений Tobit имеет самое высокое значение 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 функция из Risk Management Toolbox. Другие модели установлены на основе существующих функциональных возможностей в Optimization Toolbox и Statistics and Machine Learning Toolbox.

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

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

Ссылки

[1] Baesens, B., D. Rosch, and H. Scheule. Аналитика кредитных рисков. Уайли, 2016.

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

[3] Li, P., X. Zhang, and X. Zhao. "Моделирование потерь по умолчанию. "Федеральная корпорация по страхованию вкладов, Центр финансовых исследований, работа 2018-03, июль 2018.

[4] Loterman, G., I. Brown, D. Martens, C. Mues и B. Baesens. «Алгоритмы регрессии бенчмаркинга для моделирования потерь по умолчанию». Международный журнал прогнозирования. Том 28, No.1, стр. 161-170, 2012.

[5] Loterman, G., M. Debruyne, K. Vanden Branden, T. Van Gestel, and C. Mues. «Предлагаемая среда для обратных тестов потерь с учетом моделей по умолчанию». Журнал валидации модели риска. Том 8, № 1, стр. 69-90, март 2014.

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

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

Бета- Журнал вероятность

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

LLFbeta(α,β|X,LGD)=i=1Nlog(fbeta(LGDi|α(Xi),β(Xi))),

где:

α(Xi)=μ(Xi)ν(Xi),β(Xi)=(1-μ(Xi))ν(Xi),

и

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

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

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

Учитывая данные, функция логарифмической правдоподобности является функцией от параметров коэффициента b и cхотя приведенные выше формулы не делают эту зависимость явным образом для упрощения обозначения. Функция логарифмической правдоподобности максимизируется путем изменения b и c параметры. Параметры распределения α>0 и β> 0, и 0<μ<1 и ν>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