predict

Вычислите условный PD

Описание

пример

conditionalPD = predict(pdModel,data) вычисляет условную вероятность значения по умолчанию (PD).

Примеры

свернуть все

В этом примере показано, как использовать fitLifetimePDModel соответствовать данным Probit модель и затем предсказывает условную вероятность значения по умолчанию (PD).

Загрузка данных

Загрузите данные о кредитном портфеле.

load RetailCreditPanelData.mat
disp(head(data))
    ID    ScoreGroup    YOB    Default    Year
    __    __________    ___    _______    ____

    1      Low Risk      1        0       1997
    1      Low Risk      2        0       1998
    1      Low Risk      3        0       1999
    1      Low Risk      4        0       2000
    1      Low Risk      5        0       2001
    1      Low Risk      6        0       2002
    1      Low Risk      7        0       2003
    1      Low Risk      8        0       2004
disp(head(dataMacro))
    Year     GDP     Market
    ____    _____    ______

    1997     2.72      7.61
    1998     3.57     26.24
    1999     2.86      18.1
    2000     2.43      3.19
    2001     1.26    -10.51
    2002    -0.59    -22.95
    2003     0.63      2.78
    2004     1.85      9.48

Соедините два компонента данных в один набор данных.

data = join(data,dataMacro);
disp(head(data))
    ID    ScoreGroup    YOB    Default    Year     GDP     Market
    __    __________    ___    _______    ____    _____    ______

    1      Low Risk      1        0       1997     2.72      7.61
    1      Low Risk      2        0       1998     3.57     26.24
    1      Low Risk      3        0       1999     2.86      18.1
    1      Low Risk      4        0       2000     2.43      3.19
    1      Low Risk      5        0       2001     1.26    -10.51
    1      Low Risk      6        0       2002    -0.59    -22.95
    1      Low Risk      7        0       2003     0.63      2.78
    1      Low Risk      8        0       2004     1.85      9.48

Данные о разделе

Разделите данные на обучение и протестируйте разделы.

nIDs = max(data.ID);
uniqueIDs = unique(data.ID);

rng('default'); % for reproducibility
c = cvpartition(nIDs,'HoldOut',0.4);

TrainIDInd = training(c);
TestIDInd = test(c);

TrainDataInd = ismember(data.ID,uniqueIDs(TrainIDInd));
TestDataInd = ismember(data.ID,uniqueIDs(TestIDInd));

Создайте Probit Пожизненная модель PD

Используйте fitLifetimePDModel создать Probit модель.

pdModel = fitLifetimePDModel(data(TrainDataInd,:),"Probit",...
    'AgeVar','YOB',...
    'IDVar','ID',...
    'LoanVars','ScoreGroup',...
    'MacroVars',{'GDP','Market'},...
    'ResponseVar','Default');
disp(pdModel)
  Probit with properties:

        ModelID: "Probit"
    Description: ""
          Model: [1x1 classreg.regr.CompactGeneralizedLinearModel]
          IDVar: "ID"
         AgeVar: "YOB"
       LoanVars: "ScoreGroup"
      MacroVars: ["GDP"    "Market"]
    ResponseVar: "Default"

Отобразите базовую модель.

disp(pdModel.Model)
Compact generalized linear regression model:
    probit(Default) ~ 1 + ScoreGroup + YOB + GDP + Market
    Distribution = Binomial

Estimated Coefficients:
                               Estimate        SE         tStat       pValue   
                              __________    _________    _______    ___________

    (Intercept)                  -1.6267      0.03811    -42.685              0
    ScoreGroup_Medium Risk      -0.26542      0.01419    -18.704     4.5503e-78
    ScoreGroup_Low Risk         -0.46794     0.016364    -28.595     7.775e-180
    YOB                         -0.11421    0.0049724    -22.969    9.6208e-117
    GDP                        -0.041537     0.014807    -2.8052      0.0050291
    Market                    -0.0029609    0.0010618    -2.7885      0.0052954


388097 observations, 388091 error degrees of freedom
Dispersion: 1
Chi^2-statistic vs. constant model: 1.85e+03, p-value = 0

Предскажите на обучении и тестовых данных

Предскажите PD для наборов тестовых данных или обучения.

DataSetChoice = "Training";
if DataSetChoice =="Training"
    Ind = TrainDataInd;
 else
    Ind = TestDataInd;
 end

% Predict conditional PD
PD = предсказывает (pdModel, данные (Ind, :));
голова (данные (Ind, :))
ans=8×7 table
    ID    ScoreGroup    YOB    Default    Year     GDP     Market
    __    __________    ___    _______    ____    _____    ______

    1      Low Risk      1        0       1997     2.72      7.61
    1      Low Risk      2        0       1998     3.57     26.24
    1      Low Risk      3        0       1999     2.86      18.1
    1      Low Risk      4        0       2000     2.43      3.19
    1      Low Risk      5        0       2001     1.26    -10.51
    1      Low Risk      6        0       2002    -0.59    -22.95
    1      Low Risk      7        0       2003     0.63      2.78
    1      Low Risk      8        0       2004     1.85      9.48

disp(PD(1:8))
    0.0095
    0.0054
    0.0045
    0.0039
    0.0036
    0.0036
    0.0017
    0.0009

Можно анализировать и подтвердить эти предсказания с помощью modelDiscrimination и modelAccuracy.

В этом примере показано, как использовать fitLifetimePDModel соответствовать данным Cox модель и затем предсказывает условную вероятность значения по умолчанию (PD).

Загрузка данных

Загрузите данные о кредитном портфеле.

load RetailCreditPanelData.mat
disp(head(data))
    ID    ScoreGroup    YOB    Default    Year
    __    __________    ___    _______    ____

    1      Low Risk      1        0       1997
    1      Low Risk      2        0       1998
    1      Low Risk      3        0       1999
    1      Low Risk      4        0       2000
    1      Low Risk      5        0       2001
    1      Low Risk      6        0       2002
    1      Low Risk      7        0       2003
    1      Low Risk      8        0       2004
disp(head(dataMacro))
    Year     GDP     Market
    ____    _____    ______

    1997     2.72      7.61
    1998     3.57     26.24
    1999     2.86      18.1
    2000     2.43      3.19
    2001     1.26    -10.51
    2002    -0.59    -22.95
    2003     0.63      2.78
    2004     1.85      9.48

Соедините два компонента данных в один набор данных.

data = join(data,dataMacro);
disp(head(data))
    ID    ScoreGroup    YOB    Default    Year     GDP     Market
    __    __________    ___    _______    ____    _____    ______

    1      Low Risk      1        0       1997     2.72      7.61
    1      Low Risk      2        0       1998     3.57     26.24
    1      Low Risk      3        0       1999     2.86      18.1
    1      Low Risk      4        0       2000     2.43      3.19
    1      Low Risk      5        0       2001     1.26    -10.51
    1      Low Risk      6        0       2002    -0.59    -22.95
    1      Low Risk      7        0       2003     0.63      2.78
    1      Low Risk      8        0       2004     1.85      9.48

Данные о разделе

Разделите данные на обучение и протестируйте разделы.

nIDs = max(data.ID);
uniqueIDs = unique(data.ID);

rng('default'); % for reproducibility
c = cvpartition(nIDs,'HoldOut',0.4);

TrainIDInd = training(c);
TestIDInd = test(c);

TrainDataInd = ismember(data.ID,uniqueIDs(TrainIDInd));
TestDataInd = ismember(data.ID,uniqueIDs(TestIDInd));

Создайте Cox Пожизненная модель PD

Используйте fitLifetimePDModel создать Cox модель.

ModelType = "cox";

pdModel = fitLifetimePDModel (данные (TrainDataInd, :), ModelType,...
   'IDVar','ID','AgeVar','YOB',...
   'LoanVars','ScoreGroup','MacroVars',{'GDP' 'Market'},...
   'ResponseVar','Default');
disp (pdModel)
  Cox with properties:

           TimeInterval: 1
    ExtrapolationFactor: 1
                ModelID: "Cox"
            Description: ""
                  Model: [1x1 CoxModel]
                  IDVar: "ID"
                 AgeVar: "YOB"
               LoanVars: "ScoreGroup"
              MacroVars: ["GDP"    "Market"]
            ResponseVar: "Default"

Отобразите базовую модель.

disp(pdModel.Model)
Cox Proportional Hazards regression model:

                                 Beta          SE         zStat       pValue   
                              __________    _________    _______    ___________

    ScoreGroup_Medium Risk       -0.6794     0.037029    -18.348     3.4442e-75
    ScoreGroup_Low Risk          -1.2442     0.045244    -27.501    1.7116e-166
    GDP                        -0.084533     0.043687     -1.935       0.052995
    Market                    -0.0084411    0.0032221    -2.6198      0.0087991

Предскажите на Значениях Возраста, не Наблюдаемых в Обучающих данных

Модели Cox делают предсказания для области значений значений возраста наблюдаемыми в обучающих данных. Чтобы экстраполировать целую вечность больше, чем максимальный возраст в обучающих данных, правило экстраполяции необходимо.

При использовании predict с Cox модель, можно установить ExtrapolationFactor свойство Cox модель. По умолчанию, ExtrapolationFactor установлен в 1. Для значений возраста (AgeVar) больше, чем максимальный возраст, наблюдаемый в обучающих данных, predict вычисляет условный PD с помощью максимального возраста, наблюдаемого в обучающих данных. В частности, предсказанное значение PD является постоянным, если значения предиктора не изменяются и только изменение значений возраста когда ExtrapolationFactor 1.

Чтобы проиллюстрировать это, выберите строки, соответствующие одному ID, и добавьте новые строки с новыми, инкрементными значениями возраста вне максимального наблюдаемого возраста в обучающих данных. Максимальный возраст, наблюдаемый в обучающих данных, равняется 8; в целях рисунка добавьте строки с возрастами 9, 10, 11, и 12.

% Select rows corresponding to one ID
% ID 1 goes from row 1 through 8
% Only the ID, Age (YOB) and predictor variables are needed
dataNewAge = data(1:8,{'ID' 'YOB' 'ScoreGroup' 'GDP' 'Market'});
% Allocate more rows
% This line copies the same predictor values going forward
dataNewAge(9:12,:) = repmat(dataNewAge(8,:),4,1);
% Reset age values to 9, 10, 11, 12
dataNewAge.YOB(9:12) = (9:12)';
% Show the new dataset
disp(dataNewAge)
    ID    YOB    ScoreGroup     GDP     Market
    __    ___    __________    _____    ______

    1      1      Low Risk      2.72      7.61
    1      2      Low Risk      3.57     26.24
    1      3      Low Risk      2.86      18.1
    1      4      Low Risk      2.43      3.19
    1      5      Low Risk      1.26    -10.51
    1      6      Low Risk     -0.59    -22.95
    1      7      Low Risk      0.63      2.78
    1      8      Low Risk      1.85      9.48
    1      9      Low Risk      1.85      9.48
    1     10      Low Risk      1.85      9.48
    1     11      Low Risk      1.85      9.48
    1     12      Low Risk      1.85      9.48

Когда значения предиктора являются постоянными в строках со значениями нового века, и фактором экстраполяции является 1, предсказанные значения PD являются постоянными. Если коэффициент экстраполяции установлен на значение, меньшее, чем 1, затем предсказанные значения PD уменьшаются все больше для больших значений возраста и уменьшаются по направлению к нулю экспоненциально.

% Extrapolation factor can be adjusted
pdModel.ExtrapolationFactor = 1;
% Store predicted conditional PD in the same table
dataNewAge.PD = предсказывают (pdModel, dataNewAge);
disp (dataNewAge)
    ID    YOB    ScoreGroup     GDP     Market        PD    
    __    ___    __________    _____    ______    __________

    1      1      Low Risk      2.72      7.61     0.0092197
    1      2      Low Risk      3.57     26.24      0.005158
    1      3      Low Risk      2.86      18.1     0.0046079
    1      4      Low Risk      2.43      3.19     0.0041351
    1      5      Low Risk      1.26    -10.51      0.003645
    1      6      Low Risk     -0.59    -22.95     0.0041128
    1      7      Low Risk      0.63      2.78     0.0017034
    1      8      Low Risk      1.85      9.48    0.00092551
    1      9      Low Risk      1.85      9.48    0.00092551
    1     10      Low Risk      1.85      9.48    0.00092551
    1     11      Low Risk      1.85      9.48    0.00092551
    1     12      Low Risk      1.85      9.48    0.00092551

Кроме того, полезно видеть эффект фактора экстраполяции на пожизненном предсказании.

Постройте предсказанные условные значения PD и пожизненные значения PD, чтобы видеть эффект фактора экстраполяции на обеих вероятностях. Вертикальная пунктирная линия разделяет известные значения возраста (до, и включая, значение возраста 8), от значений возраста, не наблюдаемых в обучающих данных (что-либо большее, чем 8). Если фактором экстраполяции является 1, пожизненный PD имеет устойчивый восходящий тренд, и условные ФУНТЫ являются постоянными. Если коэффициент экстраполяции установлен на меньшее значение как 0.5, пожизненный PD сглаживается быстро, когда условный PD быстро понижается по направлению к нулю.

dataNewAge.LifetimePD = predictLifetime(pdModel,dataNewAge);

figure;
yyaxis left
plot(dataNewAge.YOB,dataNewAge.PD,'*')
ylabel('Conditional PD')
yyaxis right
plot(dataNewAge.YOB,dataNewAge.LifetimePD)
ylabel('Lifetime PD')
title('Extrapolated PD for Unobserved Age Values')
xlabel('Age')
xline(8,':','Out-of-Sample')
grid on

Figure contains an axes object. The axes object with title Extrapolated PD for Unobserved Age Values contains 3 objects of type line, constantline.

Входные параметры

свернуть все

Вероятность модели по умолчанию в виде ранее созданного Logistic, Probit, или Cox объектное использование fitLifetimePDModel.

Типы данных: object

Данные в виде NumRows- NumCols таблица со спроектированными значениями предиктора, чтобы сделать пожизненные предсказания. Имена предиктора и типы данных должны быть сопоставимы с базовой моделью.

Типы данных: table

Выходные аргументы

свернуть все

Предсказанная условная вероятность значений по умолчанию, возвращенных как NumRows- 1 числовой вектор.

Больше о

свернуть все

Условный PD

Conditional PD является вероятностью установки по умолчанию, учитывая никакое значение по умолчанию все же.

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

Формула для условного PD

PD(t)=P{tΔt<Tt|T>tΔt}

где

  • T является временем, чтобы принять значение по умолчанию.

  • Δt является “временным интервалом”, сопоставимым с периодичностью обучения панели data (например, одна строка в год) и определение значений индикатора по умолчанию.

Индикатором по умолчанию является 1 если существует значение по умолчанию за 1-летний период. Для получения дополнительной информации о временных интервалах смотрите Временной интервал для Логистических Моделей, Временной интервал для Нелинейных моделей вероятности с нормальным распределением и Временной интервал для Моделей Cox.

В формулах, которые следуют для Logistic, Probit, и Cox модели, обозначение:

  • X (t) является данными о предикторе для строки, соответствующей времени t.

  • β вектор из коэффициентов базовой модели.

Для Logistic модели, условный PD вычисляется как:

PDcond(t)=11+exp(X(t)β)

Для Probit модели, условный PD вычисляется как:

PDcond(t)=ϕ(X(t)β)

Для Cox модели, условный PD вычисляется как

PDcond(t)=1S(t)S(tΔt)

где S является функцией выживания. Функция выживания зависит от значений предиктора через отношение опасности. Для получения дополнительной информации смотрите Cox Пропорциональные Модели Опасностей. Существуют различные способы представлять зависимость PD на предикторах явным образом. Реализация в predict функционируйте использует базовую совокупную функцию показателя риска, данную

H0(t)=0th0(u)du

где h 0 является базовым показателем риска. Для получения дополнительной информации смотрите Cox Пропорциональные Модели Опасностей. Используя базовый совокупный показатель риска, формулу PD для Cox модель записана как:

PDcond(t)=1exp((H0(t)H0(tΔt))exp(X(t)β))

Экстраполяция для Cox Модели

Базовая совокупная опасность функционирует H 0 для Cox модели подбираются к наблюдаемым значениям возраста (то есть, наблюдаемым "временам к событию") непараметрическим способом.

Поэтому некоторая форма интерполяции или экстраполяции необходима, чтобы сделать предсказания для значений возраста не наблюдаемыми в учебном data. В predict функция, линейная интерполяция используется можно следующим образом:

  • Если известными значениями возраста является t 1, t 2, …, t N, с t i - t i-1 = Δt, и если t 0 = t 1 - Δt, то:

    • H 0 (t) = 0, для всего tt 0.

    • H 0 (t) интерполирован линейно для t i-1tt i, для i = 0... N.

    • H 0 (t) экстраполируется линейно для t> t N, после наклона, заданного последними двумя известными значениями H 0 (t N - 1) и H 0 (t N).

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

PDcond(t|X(t))=PDcond(tN|X(t))

для t> t N. Это поведение настроено с ExtrapolationFactor свойство Cox модель. Для получения дополнительной информации смотрите Использование Модель PD Времени жизни Cox, чтобы Предсказать Условный PD.

Фактор экстраполяции для Cox Модели

Формула экстраполяции реализована в predict функция включает ExtrapolationFactor значение свойства

PDcond(tN+k|X(tN+k))=(ExtrapolationFactor)kPDcond(tN|X(tN+k))

где t N + k является временной стоимостью периоды k после того, как самый большой возраст наблюдал в обучающих данных t N, то есть, t N + k = t N + kt.

По умолчанию фактором экстраполяции является 1, получившийся в формуле в разделе Extrapolation for Cox Models, где значения PD остаются постоянными, когда возраст увеличивается — если значения предиктора не изменяются. Если коэффициент экстраполяции установлен на значение, меньшее, чем 1, предсказанные значения PD уменьшаются экспоненциально к 0. Чем меньший фактор, тем быстрее условное уменьшение значений PD, и быстрее пожизненные значения PD выравниваются.

В общем случае значения PD имеют тенденцию понижаться к концу жизни ссуды, поскольку пул заемщиков исправлен раньше. То, как быстро это происходит, зависит от продукта и должно быть калибровано в зависимости от конкретного случая.

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

Ссылки

[1] Baesens, Барт, Дэниел Роеш и Харальд Шойле. Аналитика кредитного риска: техники измерений, приложения и примеры в SAS. Вайли, 2016.

[2] Беллини, Тициано. МСФО 9 и моделирование кредитного риска CECL и валидация: практическое руководство с примерами работало в R и SAS. Сан-Диего, CA: Elsevier, 2019.

[3] Breeden, Джозеф. Проживание с CECL: словарь моделирования. Санта-Фе, NM: наделенный даром предвидения LLC моделей, 2018.

[4] Roesch, Дэниел и Харальд Шойле. Глубокий Кредитный риск: Машинное обучение с Python. Независимо опубликованный, 2020.

Введенный в R2020b