Вычислите совокупный срок службы PD, предельный PD и вероятность выживания
вычисляет совокупную жизненную вероятность дефолта (PD), предельную PD и вероятность выживания. LifeTimePredictedPD = predictLifetime(pdModel,data)
указывает параметры, использующие один или несколько аргументов пары имя-значение в дополнение к входным аргументам в предыдущем синтаксисе.LifeTimePredictedPD = predictLifetime(___,Name,Value)
В этом примере показано, как использовать 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
Прогнозирование срока службы ПД по данным обучения и тестирования
Используйте predictLifetime функция для получения ПД в течение всего срока службы на обучающих или тестовых данных. Чтобы получить условные PD, используйте predict функция. Для проверки модели используйте modelDiscrimination и modelAccuracy функции, относящиеся к данным обучения или тестирования.
DataSetChoice ="Testing"; if DataSetChoice=="Training" Ind = TrainDataInd; else Ind = TestDataInd; end % Predict lifetime PD PD = predictLifetime(pdModel,data(Ind,:)); head(data(Ind,:))
ans=8×7 table
ID ScoreGroup YOB Default Year GDP Market
__ ___________ ___ _______ ____ _____ ______
2 Medium Risk 1 0 1997 2.72 7.61
2 Medium Risk 2 0 1998 3.57 26.24
2 Medium Risk 3 0 1999 2.86 18.1
2 Medium Risk 4 0 2000 2.43 3.19
2 Medium Risk 5 0 2001 1.26 -10.51
2 Medium Risk 6 0 2002 -0.59 -22.95
2 Medium Risk 7 0 2003 0.63 2.78
2 Medium Risk 8 0 2004 1.85 9.48
Прогнозирование срока службы PD для новых данных
Модели пожизненного PD используются для прогнозирования существующих ссуд. predictLifetime функция требует прогнозируемых значений для предикторов ссуды и макрокоманд на оставшуюся часть срока действия ссуды.
DataPredictLifetime.mat файл содержит прогнозы для двух ссуд, а также для переменных макросов. Одному кредиту на конец 2019 года три года при сроке действия 10 лет, а другому - шесть лет при сроке действия 10 лет. ScoreGroup является постоянным, а возрастные значения являются инкрементными. Для переменных макросов прогнозы для предикторов макросов должны охватывать самый длительный срок службы в портфеле.
load DataPredictLifetime.mat
disp(LoanData) ID ScoreGroup YOB Year
____ _____________ ___ ____
1304 "Medium Risk" 4 2020
1304 "Medium Risk" 5 2021
1304 "Medium Risk" 6 2022
1304 "Medium Risk" 7 2023
1304 "Medium Risk" 8 2024
1304 "Medium Risk" 9 2025
1304 "Medium Risk" 10 2026
2067 "Low Risk" 7 2020
2067 "Low Risk" 8 2021
2067 "Low Risk" 9 2022
2067 "Low Risk" 10 2023
disp(MacroScenario)
Year GDP Market
____ ___ ______
2020 1.1 4.5
2021 0.9 1.5
2022 1.2 5
2023 1.4 5.5
2024 1.6 6
2025 1.8 6.5
2026 1.8 6.5
2027 1.8 6.5
LifetimeData = join(LoanData,MacroScenario); disp(LifetimeData)
ID ScoreGroup YOB Year GDP Market
____ _____________ ___ ____ ___ ______
1304 "Medium Risk" 4 2020 1.1 4.5
1304 "Medium Risk" 5 2021 0.9 1.5
1304 "Medium Risk" 6 2022 1.2 5
1304 "Medium Risk" 7 2023 1.4 5.5
1304 "Medium Risk" 8 2024 1.6 6
1304 "Medium Risk" 9 2025 1.8 6.5
1304 "Medium Risk" 10 2026 1.8 6.5
2067 "Low Risk" 7 2020 1.1 4.5
2067 "Low Risk" 8 2021 0.9 1.5
2067 "Low Risk" 9 2022 1.2 5
2067 "Low Risk" 10 2023 1.4 5.5
Для удобства спрогнозируйте PD и сохраните выходные данные в виде нового столбца таблицы.
LifetimeData.PredictedPD = predictLifetime(pdModel,LifetimeData); disp(LifetimeData)
ID ScoreGroup YOB Year GDP Market PredictedPD
____ _____________ ___ ____ ___ ______ ___________
1304 "Medium Risk" 4 2020 1.1 4.5 0.0080202
1304 "Medium Risk" 5 2021 0.9 1.5 0.014093
1304 "Medium Risk" 6 2022 1.2 5 0.018156
1304 "Medium Risk" 7 2023 1.4 5.5 0.020941
1304 "Medium Risk" 8 2024 1.6 6 0.022827
1304 "Medium Risk" 9 2025 1.8 6.5 0.024086
1304 "Medium Risk" 10 2026 1.8 6.5 0.024945
2067 "Low Risk" 7 2020 1.1 4.5 0.0015728
2067 "Low Risk" 8 2021 0.9 1.5 0.0027146
2067 "Low Risk" 9 2022 1.2 5 0.003431
2067 "Low Risk" 10 2023 1.4 5.5 0.0038939
Визуализация прогнозируемого срока службы PD для компании.
CompanyIDChoice ="1304"; CompanyID = str2double(CompanyIDChoice); IndPlot = LifetimeData.ID==CompanyID; plot(LifetimeData.YOB(IndPlot),LifetimeData.PredictedPD(IndPlot)) grid on xlabel('YOB') xticks(LifetimeData.YOB(IndPlot)) ylabel('Lifetime PD') title(strcat("Company ",CompanyIDChoice))

pdModel - Вероятность модели по умолчаниюLogistic объект | Probit объектВероятность модели по умолчанию, указанная как Logistic или Probit объект, ранее созданный с помощью fitLifetimePDModel.
Типы данных: object
data - Данные о сроке службыДанные о сроке службы, указанные как NumRowsоколо-NumCols таблица с спроецированными предикторными значениями для прогнозирования срока службы. Имена предикторов и типы данных должны соответствовать базовой модели. IDVar имущества pdModel используется для идентификации столбца, содержащего значения идентификаторов в таблице, а идентификаторы используются для идентификации строк, соответствующих различным идентификаторам, и для прогнозирования срока службы каждого идентификатора.
Типы данных: table
Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.
LifetimeData = predictLifetime(pdModel,Data,'ProbabilityType','survival')'ProbabilityType' - Тип вероятности'cumulative'
(по умолчанию) | символьный вектор со значением 'cumulative', 'marginal', или 'survival' | строка со значением "cumulative", "marginal", или "survival"Тип вероятности, указанный как разделенная запятыми пара, состоящая из 'ProbabilityType' и символьный вектор или строку.
Типы данных: char | string
LifeTimePredictedPD - Прогнозируемые значения срока службы PDПрогнозируемые значения времени жизни PD, возвращенные как NumRowsоколо-1 числовой вектор.
Время жизни PD - это вероятность события дефолта в течение срока жизни финансового актива.
Время жизни PD обычно относится к кумулятивной вероятности по умолчанию, заданной
=P{T≤t}
где T - время по умолчанию.
Например, прогнозируемый срок службы, кумулятивный PD за второй год - это вероятность того, что заемщик по умолчанию в любое время от настоящего времени до двух лет.
Тесно связанной концепцией, используемой для расчета ожидаемого кредитного убытка (ECL) в течение срока службы, является предельный PD, заданный
(t − 1)
Тесно связанная вероятность - это вероятность выживания, которая является дополнением кумулятивной вероятности и сообщается как
PDсовокупный (t)
Следующая рекурсивная формула показывает связь между условными PD и вероятностью выживания:
− 1) (1 − PDcond (t))
predictLifetime функция вызывает predict функция, чтобы получить условный PD, а затем преобразует его в выживание, маргинальный или пожизненный кумулятивный PD с использованием предыдущих формул.
[1] Бэзенс, Барт, Даниэль Рош и Харальд Шиле. Анализ кредитных рисков: методы измерения, приложения и примеры в SAS. Уайли, 2016.
[2] Беллини, Тициано. МСФО (IFRS) 9 и CECL «Моделирование и валидация кредитных рисков: практическое руководство с примерами, работающими в R и SAS». Сан-Диего, Калифорния: Elsevier, 2019.
[3] Бриден, Иосиф. Жизнь с CECL: The Modeling Dictionary. Santa Fe, NM: Prescient Models LLC, 2018.
fitLifetimePDModel | Logistic | modelAccuracy | modelAccuracyPlot | modelDiscrimination | modelDiscriminationPlot | predict | Probit
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.