Вычислите условный PD
вычисляет условную вероятность значения по умолчанию (PD). conditionalPD = predict(pdModel,data)
В этом примере показано, как использовать 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

pdModel — Вероятность модели по умолчаниюLogistic возразите | Probit возразите | Cox объектВероятность модели по умолчанию в виде ранее созданного Logistic, Probit, или Cox объектное использование fitLifetimePDModel.
Типы данных: object
data данныеДанные в виде NumRows- NumCols таблица со спроектированными значениями предиктора, чтобы сделать пожизненные предсказания. Имена предиктора и типы данных должны быть сопоставимы с базовой моделью.
Типы данных: table
conditionalPD — Предсказанная условная вероятность значений по умолчаниюПредсказанная условная вероятность значений по умолчанию, возвращенных как NumRows- 1 числовой вектор.
Conditional PD является вероятностью установки по умолчанию, учитывая никакое значение по умолчанию все же.
Например, предсказанный условный PD в течение второго года является вероятностью, что значения по умолчанию заемщика на втором году, учитывая, что заемщик не принял значение по умолчанию на первом году.
Формула для условного PD
где
T является временем, чтобы принять значение по умолчанию.
Δt является “временным интервалом”, сопоставимым с периодичностью обучения панели data (например, одна строка в год) и определение значений индикатора по умолчанию.
Индикатором по умолчанию является 1 если существует значение по умолчанию за 1-летний период. Для получения дополнительной информации о временных интервалах смотрите Временной интервал для Логистических Моделей, Временной интервал для Нелинейных моделей вероятности с нормальным распределением и Временной интервал для Моделей Cox.
В формулах, которые следуют для Logistic, Probit, и Cox модели, обозначение:
X (t) является данными о предикторе для строки, соответствующей времени t.
β вектор из коэффициентов базовой модели.
Для Logistic модели, условный PD вычисляется как:
Для Probit модели, условный PD вычисляется как:
Для Cox модели, условный PD вычисляется как
где S является функцией выживания. Функция выживания зависит от значений предиктора через отношение опасности. Для получения дополнительной информации смотрите Cox Пропорциональные Модели Опасностей. Существуют различные способы представлять зависимость PD на предикторах явным образом. Реализация в predict функционируйте использует базовую совокупную функцию показателя риска, данную
где h 0 является базовым показателем риска. Для получения дополнительной информации смотрите Cox Пропорциональные Модели Опасностей. Используя базовый совокупный показатель риска, формулу PD для Cox модель записана как:
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, для всего t ≤ t 0.
H 0 (t) интерполирован линейно для t i-1 ≤ t ≤ t i, для i = 0... N.
H 0 (t) экстраполируется линейно для t> t N, после наклона, заданного последними двумя известными значениями H 0 (t N - 1) и H 0 (t N).
Это подразумевает базовый показатель риска, h 0 является кусочной константой и остается постоянным после последнего подходящего значения. По умолчанию, после последнего известного значения возраста, PD оценен можно следующим образом
для t> t N. Это поведение настроено с ExtrapolationFactor свойство Cox модель. Для получения дополнительной информации смотрите Использование Модель PD Времени жизни Cox, чтобы Предсказать Условный PD.
Cox МоделиФормула экстраполяции реализована в predict функция включает ExtrapolationFactor значение свойства
где t N + k является временной стоимостью периоды k после того, как самый большой возраст наблюдал в обучающих данных t N, то есть, t N + k = t N + k *Δt.
По умолчанию фактором экстраполяции является 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.
modelAccuracy | modelDiscrimination | modelDiscriminationPlot | modelAccuracyPlot | predictLifetime | fitLifetimePDModel | Logistic | Probit | Cox
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.