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