Вычислите RMSE предсказанных и наблюдаемых ФУНТОВ на сгруппированных данных
[
вычисляет среднеквадратическую ошибку (RMSE) наблюдаемого по сравнению с предсказанными вероятностями значения по умолчанию (PD). AccMeasure
,AccData
] = modelAccuracy(pdModel
,data
,GroupBy
)GroupBy
требуется и может быть любой столбец в data
введите (не обязательно переменная модели). model Accuracy
функция вычисляет наблюдаемый PD как уровень по умолчанию каждой группы и предсказанного PD как средний PD для каждой группы. modelAccuracy
сравнение поддержек с образцом модели.
задает опции с помощью одного или нескольких аргументов пары "имя-значение" в дополнение к входным параметрам в предыдущем синтаксисе.AccMeasure
,AccData
= modelAccuracy(___,Name,Value
)
В этом примере показано, как использовать fitLifetimePDModel
соответствовать данным Logistic
модель и затем использует modelAccuracy
вычислить среднеквадратическую ошибку (RMSE) наблюдаемых вероятностей значения по умолчанию (ФУНТЫ) относительно предсказанных ФУНТОВ.
Загрузка данных
Загрузите данные о кредитном портфеле.
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));
Создайте Logistic
Пожизненная модель PD
Используйте fitLifetimePDModel
создать Logistic
модель с помощью обучающих данных.
pdModel = fitLifetimePDModel(data(TrainDataInd,:),"Logistic",... 'AgeVar','YOB',... 'IDVar','ID',... 'LoanVars','ScoreGroup',... 'MacroVars',{'GDP','Market'},... 'ResponseVar','Default'); disp(pdModel)
Logistic with properties: ModelID: "Logistic" 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: logit(Default) ~ 1 + ScoreGroup + YOB + GDP + Market Distribution = Binomial Estimated Coefficients: Estimate SE tStat pValue __________ _________ _______ ___________ (Intercept) -2.7422 0.10136 -27.054 3.408e-161 ScoreGroup_Medium Risk -0.68968 0.037286 -18.497 2.1894e-76 ScoreGroup_Low Risk -1.2587 0.045451 -27.693 8.4736e-169 YOB -0.30894 0.013587 -22.738 1.8738e-114 GDP -0.11111 0.039673 -2.8006 0.0051008 Market -0.0083659 0.0028358 -2.9502 0.0031761 388097 observations, 388091 error degrees of freedom Dispersion: 1 Chi^2-statistic vs. constant model: 1.85e+03, p-value = 0
Вычислите точность модели
Точность модели измеряется, насколько точный предсказанные вероятности значения по умолчанию. Например, если модель предсказывает 10% фунтов для группы, группа заканчивает тем, что показала аппроксимированный 10%-й уровень по умолчанию или является возможным уровнем намного выше или ниже? В то время как дискриминация модели измеряет риск, занимающий место только, точность модели измеряет точность предсказанных уровней риска.
modelAccuracy
вычисляет среднеквадратическую ошибку (RMSE) наблюдаемых ФУНТОВ относительно предсказанных ФУНТОВ. Сгруппированная переменная требуется, и это может быть любой столбец во вводе данных (не обязательно переменная модели). modelAccuracy
функция вычисляет наблюдаемый PD как уровень по умолчанию каждой группы и предсказанного PD как средний PD для каждой группы.
DataSetChoice = "Training"; if DataSetChoice =="Training" Ind = TrainDataInd; else Ind = TestDataInd; end GroupingVar = "YOB"; [AccMeasure, AccData] = modelAccuracy (pdModel, данные (Ind, :), GroupingVar,'DataID', DataSetChoice); disp (AccMeasure)
RMSE _________ Logistic, grouped by YOB, Training 0.0004142
disp(AccData)
ModelID YOB PD __________ ___ _________ "Observed" 1 0.017421 "Observed" 2 0.012305 "Observed" 3 0.011382 "Observed" 4 0.010741 "Observed" 5 0.00809 "Observed" 6 0.0066747 "Observed" 7 0.0032198 "Observed" 8 0.0018757 "Logistic" 1 0.017185 "Logistic" 2 0.012791 "Logistic" 3 0.01131 "Logistic" 4 0.010615 "Logistic" 5 0.0083982 "Logistic" 6 0.0058744 "Logistic" 7 0.0035872 "Logistic" 8 0.0023689
Визуализируйте точность модели.
AccDataUnstacked = unstack(AccData,"PD","ModelID"); plot(AccDataUnstacked.(GroupingVar),AccDataUnstacked.(pdModel.ModelID),'-o') hold on plot(AccDataUnstacked.(GroupingVar),AccDataUnstacked.Observed,'*') hold off title(strcat(AccMeasure.Properties.RowNames,", RMSE = ",num2str(AccMeasure.RMSE))) xlabel(GroupingVar) ylabel('PD') legend(pdModel.ModelID,"Observed") grid on
Можно использовать больше чем одну переменную для группировки. В данном примере группа переменными YOB
и ScoreGroup
.
[AccMeasure,AccData] = modelAccuracy(pdModel,data(Ind,:),["YOB","ScoreGroup"],'DataID',DataSetChoice); disp(AccMeasure)
RMSE __________ Logistic, grouped by YOB, ScoreGroup, Training 0.00066239
disp(tail(AccData))
ModelID YOB ScoreGroup PD __________ ___ ___________ _________ "Logistic" 6 Medium Risk 0.0050296 "Logistic" 6 Low Risk 0.0028847 "Logistic" 7 High Risk 0.0061491 "Logistic" 7 Medium Risk 0.0030905 "Logistic" 7 Low Risk 0.0017571 "Logistic" 8 High Risk 0.0040759 "Logistic" 8 Medium Risk 0.0020492 "Logistic" 8 Low Risk 0.0011611
Теперь визуализируйте эти две сгруппированных переменные.
AccDataUnstacked = unstack(AccData,"PD","ModelID"); ScoreGroupLevels = categories(AccDataUnstacked.ScoreGroup); c = cell(3,1); figure; hold on for ii=1:length(ScoreGroupLevels) IndScore = AccDataUnstacked.ScoreGroup==ScoreGroupLevels{ii}; h = plot(AccDataUnstacked.YOB(IndScore),AccDataUnstacked.(pdModel.ModelID)(IndScore),'-o'); c{ii} = h.Color; end Legend1 = strcat(ScoreGroupLevels,", predicted"); for ii=1:length(ScoreGroupLevels) IndScore = AccDataUnstacked.ScoreGroup==ScoreGroupLevels{ii}; plot(AccDataUnstacked.YOB(IndScore),AccDataUnstacked.Observed(IndScore),'*','Color',c{ii}) end Legend2 = strcat(ScoreGroupLevels,", observed"); hold off title(strcat(AccMeasure.Properties.RowNames,", RMSE = ",num2str(AccMeasure.RMSE))) xlabel('YOB') ylabel('PD') legend([Legend1;Legend2]) grid on
pdModel
— Вероятность модели по умолчаниюLogistic
возразите | Probit
объектВероятность модели по умолчанию в виде Logistic
или Probit
возразите ранее созданному использованию fitLifetimePDModel
.
Примечание
'ModelID'
свойство pdModel
объект используется в качестве идентификатора или тега для pdModel
.
Типы данных: object
data
данныеДанные в виде NumRows
- NumCols
таблица со спроектированными значениями предиктора, чтобы сделать пожизненные предсказания. Имена предиктора и типы данных должны быть сопоставимы с базовой моделью.
Типы данных: table
GroupBy
— Имя столбца в data
введите используемый, чтобы сгруппировать данные Имя столбца в data
введите используемый, чтобы сгруппировать данные в виде строки или вектора символов. GroupBy
не должно быть имя переменной модели. Для каждой группы, назначенной GroupBy
, modelAccuracy
функция вычисляет наблюдаемые уровни по умолчанию, и средние предсказанные ФУНТЫ вычисляются, чтобы измерить RMSE.
Типы данных: string
| char
Задайте дополнительные разделенные запятой пары Name,Value
аргументы. Name
имя аргумента и Value
соответствующее значение. Name
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN
.
[AccMeasure,AccData] = modelAccuracy(pdModel,data(Ind,:),'GroupBy',["YOB","ScoreGroup"],'DataID',DataSetChoice)
'DataID'
— Идентификатор набора данных" "
(значение по умолчанию) | вектор символов | строкаИдентификатор набора данных в виде разделенной запятой пары, состоящей из 'DataID'
и вектор символов или строка. DataID
включен в modelAccuracy
выведите для создания отчетов о целях.
Типы данных: char |
string
'ReferencePD'
— Условные значения PD предсказаны для data
образцом модели[ ]
(значение по умолчанию) | вектор символов | строка'ReferenceID'
— Идентификатор для образца модели" "
(значение по умолчанию) | вектор символов | строкаИдентификатор для образца модели в виде разделенной запятой пары, состоящей из 'ReferenceID'
и вектор символов или строка. ReferenceID
используется в modelAccuracy
выведите для создания отчетов о целях.
Типы данных: char |
string
AccMeasure
— Значения RMSEМера по точности, возвращенная как таблица.
Значения RMSE, возвращенные как отдельный столбец 'RMSE'
таблица. Таблица ссорится если только pdModel
точность измеряется, и она имеет две строки, если информация об образце модели дана. Имена строки AccMeasure
сообщите о модели IDs, сгруппированных переменных и ID данных.
Примечание
Значения RMSE, о которых сообщают, зависят от сгруппированной переменной для необходимого GroupBy
аргумент.
AccData
— Наблюдаемые и предсказанные значения PD для каждой группыДанные о точности, возвращенные как таблица.
Наблюдаемые и предсказанные значения PD для каждой группы, возвращенной как таблица. Наблюдаемые значения PD, о которых сообщают, соответствуют наблюдаемому уровню по умолчанию для каждой группы. Предсказанные значения PD, о которых сообщают, являются средними значениями PD, предсказанными pdModel
объект для каждой группы, и так же для образца модели. modelAccuracy
функционируйте складывает данные о PD, помещая наблюдаемые величины для всех групп сначала, затем предсказанные ФУНТЫ для pdModel
, и затем предсказанные ФУНТЫ для образца модели, если дали.
Столбец 'ModelID'
идентифицирует, какие строки соответствуют наблюдаемому PD, pdModel
, или образец модели. Таблица также имеет один столбец для каждой сгруппированной переменной, показывающей уникальные комбинации группирующихся значений. Последний столбец AccData
'PD'
столбец с данными о PD.
Model accuracy измеряет точность предсказанной вероятности значения по умолчанию (PD) значения.
Чтобы измерить точность модели, также названную калибровкой модели, необходимо сравнить предсказанные значения PD с наблюдаемыми уровнями по умолчанию. Например, если группа клиентов предсказана, чтобы иметь средний PD 5%, то является наблюдаемым уровнем по умолчанию для той группы близко к 5%?
modelAccuracy
функция требует, чтобы сгруппированная переменная вычислила средние предсказанные значения PD в каждой группе и средний наблюдаемый уровень по умолчанию также в каждой группе. modelAccuracy
использует среднеквадратическую ошибку (RMSE), чтобы измерить отклонения между наблюдаемыми и ожидаемыми значениями через группы. Например, сгруппированная переменная могла быть календарным годом, так, чтобы строки, соответствующие тому же календарному году, группировались. Затем в течение каждого года программное обеспечение вычисляет наблюдаемый уровень по умолчанию и средний предсказанный PD. modelAccuracy
функция затем применяет формулу RMSE, чтобы получить одну меру ошибки предсказания через все годы в выборке.
Предположим, что в наборе данных существуют наблюдения N, и существуют группы M G 1, …, G M. Уровень по умолчанию для группы G i
где:
D i является количеством значений по умолчанию, наблюдаемых в группе G i.
N i является количеством наблюдений в группе G i.
Средняя предсказанная вероятность PD по умолчанию i для группы G i
где PD (j) является вероятностью значения по умолчанию для наблюдения j. Другими словами, это - среднее значение предсказанных ФУНТОВ в группе G i.
Поэтому RMSE вычисляется как
RMSE, как задано, зависит от выбранной сгруппированной переменной. Например, группировка к календарному году и группировка к годам на книгах могут привести к различным значениям RSME.
[1] Baesens, Барт, Дэниел Роеш и Харальд Шойле. Аналитика кредитного риска: техники измерений, приложения и примеры в SAS. Вайли, 2016.
[2] Беллини, Тициано. МСФО 9 и моделирование кредитного риска CECL и валидация: практическое руководство с примерами работало в R и SAS. Сан-Диего, CA: Elsevier, 2019.
[3] Breeden, Джозеф. Проживание с CECL: словарь моделирования. Санта-Фе, NM: наделенный даром предвидения LLC моделей, 2018.
fitLifetimePDModel
| Logistic
| modelDiscrimination
| predict
| predictLifetime
| Probit
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.