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

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

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

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

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

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

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

Введение

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

EL=PD*LGD*EAD.

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

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

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

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

Набор данных в этом примере является симулированными данными, которые получают типичные функции данных LGD. Например, типичная функция является распределением значений LGD, которое имеет высокие частоты в 0 (полное восстановление), и также много наблюдений в 1 (никакое восстановление вообще). Другая характеристика данных LGD является существенным количеством "шумовых" или "необъясненных" данных. Можно визуализировать этот "шум" в графиках рассеивания ответа против предикторов, где точки, кажется, не следуют за ясным трендом, и все же могут быть обнаружены некоторые базовые отношения. Кроме того, распространено получить значительные ошибки предсказания для моделей LGD. Эмпирические исследования показывают, что модели LGD имеют высокие ошибки предсказания в целом. Например, в [4] авторы сообщают о значениях R-squared в пределах от 4% к 43% для области значений моделей через различные портфели. В этом примере все подходы получают значения R-squared чуть менее чем 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 object. The axes object with title LGD Distribution contains an object of type histogram.

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

SelectedPredictor = 'LTV';

fprintf'Spearman correlation between %s and LGD: %g', SelectedPredictor, поправка (дважды (данные. (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 object. The axes object contains 2 objects of type scatter, line.

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

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

% Choose the number of discretization levels for numeric predictors
NumLevels =3;
if isnumeric (данные. (SelectedPredictor))
    PredictorEdges = linspace (min (данные. (SelectedPredictor)), макс. (данные. (SelectedPredictor)), NumLevels+1);
    PredictorDiscretized = дискретизируют (данные. (SelectedPredictor), PredictorEdges,'Categorical', строка (PredictorEdges (2:end)));
    коробчатая диаграмма (data.LGD, PredictorDiscretized)
    xlabel ([SelectedPredictor ' Discretized'])
    yLabel 'LGD')
else
    коробчатая диаграмма (data.LGD, данные. (SelectedPredictor))
    xlabel (SelectedPredictor)
    yLabel 'LGD')
end

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

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

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

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

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

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

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

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

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

Товит или подвергнутая цензуре регрессия спроектированы для моделей, где ответ ограничен. Идея состоит в том, что существует базовая (скрытая) линейная модель, но что наблюдаемые значения отклика, в этом случае значения 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.

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.027265     2.1367      0.032737
    LTV                  0.20126     0.031354     6.4189    1.6932e-10
    Age                -0.095407    0.0072653    -13.132             0
    Type_investment      0.10208     0.018058     5.6531    1.7915e-08
    (Sigma)              0.29288    0.0057036      51.35             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, это предсказывает целое распределение LGDs (учитывая значения предиктора). От того распределения значение должно быть полно решимости предсказать одно значение LGD для ссуды, обычно среднее значение того распределения.

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

  • Вычислите значения для параметров μ(среднее значение) и ν(иногда названный "объемом выборки") бета распределения со следующими формулами:

μ=11+exp(-b0-b1X1-)ν=exp(c0+c1X1+)

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

α=μν

β=(1-μ)ν

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

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

Для того, чтобы подбирать модель, когда-то функция плотности оценена, можно обновить функцию правдоподобия и найти оптимальные коэффициенты подходом вероятности имеющим. Смотрите раздел Local Functions, где наибольшее правдоподобие функционирует 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.701e-05     0.30699     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.0953e-07     0.28682     0.62058
    Nu_Intercept    -0.16338     0.12591    2093    -1.2975       0.19459    -0.41016    0.083414
    Nu_LTV          0.055898     0.14719    2093    0.37977       0.70416    -0.23259     0.34439
    Nu_Age           0.22887    0.040335    2093     5.6743    1.5862e-08     0.14982     0.30793
    Nu_Type         -0.14101    0.078155    2093    -1.8042       0.07134    -0.29419    0.012175

Для предсказания вспомните, что бета регрессия соединяет предикторы с целым бета распределением. Например, предположите, что ссуда имеет 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 object. The axes object with title Predicted Distribution, Single Loan contains an object of type line.

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

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

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

Предскажите использование среднего значения бета распределения. Помните, что ожидаемое значение распределения μпараметр, таким образом, предсказание среднего значения является прямым.

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-образное распределение. Однако этот подход действительно имеет хорошую эффективность под другими метриками сообщаемой.

Модель 2D этапа

2D подготовьте модели 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 object. The axes object with title ROC Stage 1 Model (AUROC: 0.74287) contains an object of type line.

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

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-squared линейной подгонки, регрессирующей наблюдаемые значения 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 object. The axes object 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 object. The axes object 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-squared, корреляция Копьеносца, RMSE и демонстрационная средняя погрешность). Это также показывает график рассеивания, гистограмму и диаграмму далее анализировать эффективность моделей.

Об этих четырех метриках сообщают ниже, сортируют путем уменьшения значений R-squared.

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   

Для конкретного обучения по сравнению с тестовым разделом, используемым в этом примере, модель 2D этапа имеет самый высокий R-squared, несмотря на то, что для других разделов, у Товита есть самое высокое значение R-squared. Даже при том, что средний подход группы не имеет высокого значения R-squared, он обычно имеет самую маленькую демонстрационную среднюю погрешность (среднее значение предсказанных значений 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-squared, о котором сообщают выше, является R-squared этой регрессии. График показывает существенное количество ошибки для всех моделей. Хорошей прогнозной модели определили бы местоположение точек в основном по диагонали и не была бы рассеяна на всем протяжении модульного квадрата. Однако метрики выше действительно показывают некоторые различия в прогнозирующей эффективности для различных моделей, которые могут быть важными на практике.

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

Figure contains an axes object. The axes object 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 object. The axes object 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 object. The axes object with title TwoStage Model contains 35 objects of type line.

Сводные данные

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

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

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

Ссылки

[1] Baesens, B., Д. Рош и Х. Шеул. Аналитика кредитного риска. Вайли, 2016.

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

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

[4] Лотермен, G. i. Браун, D. Куницы, К. Муес и Б. Бэезенс. "Тестируя Алгоритмов Регрессии в сравнении с эталоном за Потерю, Данную Моделирование Значения по умолчанию". Международный журнал Прогнозирования. Издание 28, № 1, стр 161–170, 2012.

[5] Лотермен, G., М. Дебруин, К. Вэнден Брэнден, Т. ван Джестель и К. Муес. "Предложенная Среда за Потерю Backtesting, Данную Модели По умолчанию". Журнал Проверки допустимости модели Риска. Издание 8, № 1, стр 69-90, март 2014.

[6] Tanoue, Y. и С. Ямасита. "Потеря, Данная Оценку По умолчанию: Модель 2D Этапа с Классификацией Основанная на дереве Логистическая регрессия Вектора Повышения и Поддержки". Журнал Риска. Издание 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