Вычисление совокупного времени жизни 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
Предсказание PD продолжительности жизни на обучающих и тестовых данных
Используйте predictLifetime
функция для получения PD в течение жизни на обучающих или тестовых данных. Чтобы получить условные PD, используйте predict
функция. Для валидации модели используйте modelDiscrimination
и modelAccuracy
функции на обучающих или тестовых данных.
DataSetChoice = "Testing"; if DataSetChoice = ="Training" Ind = TrainDataInd; else Ind = TestDataInd; end % Predict lifetime PD PD = predictLifetime (pdModel, данные (Ind,:)); head (данные (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 в течение жизни используются для предсказаний существующих кредитов. The predictLifetime
функция требует прогнозируемых значений как для кредита, так и для макропредикторов на оставшуюся часть срока действия кредита.
The DataPredictLifetime.mat
файл содержит прогнозы для двух ссуд, а также для переменных макроса. Одному кредиту три года в конце 2019 года, со сроком жизни 10 лет, а другому - шесть лет со сроком жизни 10 лет. The 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
Визуализируйте прогнозируемый срок службы ПД для компании.
CompanyIDChoice = "1304"; CompanyID = str2double (CompanyIDChoice); IndPlot = LifetimeData.ID = = CompanyID; График (Lifetime Data. YOB (Ind Plot), Lifetime Data. Predicted PD (Ind Plot)) сетка on xlabel ('YOB') xticks (LifetimeData.YOB (IndPlot)) ylabel ('Lifetime PD') заголовок (strcat ("Company ", CompanyIDChoice))
pdModel
- Вероятность дефолтной моделиLogistic
| объекта Probit
объектВероятность модели по умолчанию, заданная как Logistic
или Probit
объект, ранее созданный с использованием fitLifetimePDModel
.
Типы данных: object
data
- Данные жизненного циклаЖизненные данные, заданные как NumRows
-by- NumCols
таблица с проецируемыми значениями предиктора для создания пожизненных предсказаний. Имена предикторов и типы данных должны быть согласованы с базовой моделью. The 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
-by- 1
числовой вектор.
Lifetime PD - вероятность события по умолчанию в течение срока службы финансового актива.
Lifetime PD обычно относится к совокупной вероятности по умолчанию, заданной как
где T - время по умолчанию.
Для примера прогнозируемый срок службы, совокупный PD для второго года является вероятностью того, что заемщик по умолчанию устанавливает значение по умолчанию в любое время между текущим и двумя годами.
Близкая концепция, используемая для расчета ожидаемого кредитного убытка (ECL) в течение всего срока службы, является marginal PD, заданной как
Близкая вероятность является survival probability, которая является дополнением совокупной вероятности и сообщается как
Следующая рекурсивная формула показывает связь между условными PD и вероятностью выживания:
The predictLifetime
функция вызывает predict
функция, чтобы получить условную PD, а затем преобразует ее в выживание, маргинальную или пожизненную совокупную PD, используя предыдущие формулы.
[1] Baesens, Bart, Daniel Roesch, and Harald Scheule. Аналитика кредитных рисков: методы измерения, приложения и примеры в SAS. Уайли, 2016.
[2] Беллини, Тициано. МСФО (IFRS) 9 и CECL «Моделирование и валидация кредитных рисков: практическое руководство с примерами, используемыми в R и SAS». Сан-Диего, Калифорния: Elsevier, 2019.
[3] Бриден, Джозеф. Жизнь с CECL: Словарь моделирования. Santa Fe, NM: Prescient Models LLC, 2018.
fitLifetimePDModel
| Logistic
| modelAccuracy
| modelAccuracyPlot
| modelDiscrimination
| modelDiscriminationPlot
| predict
| Probit
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.