Вероятность дефолта для данного набора данных
вычисляет вероятность по умолчанию для данного набора данных, указанного с помощью необязательного аргумента pd = probdefault(sc,data)data.
По умолчанию данные, используемые для построения creditscorecard используются объекты. Можно также предоставить входные данные, к которым применяется тот же расчет вероятности дефолта.
Создать creditscorecard с использованием CreditCardData.mat для загрузки файла data (с использованием набора данных из Refaat 2011).
load CreditCardData sc = creditscorecard(data,'IDVar','CustID')
sc =
creditscorecard with properties:
GoodLabel: 0
ResponseVar: 'status'
WeightsVar: ''
VarNames: {1x11 cell}
NumericPredictors: {1x6 cell}
CategoricalPredictors: {'ResStatus' 'EmpStatus' 'OtherCC'}
BinMissingData: 0
IDVar: 'CustID'
PredictorVars: {1x9 cell}
Data: [1200x11 table]
Выполните автоматическое binning с использованием параметров по умолчанию. По умолчанию autobinning использует Monotone алгоритм.
sc = autobinning(sc);
Подгоните модель.
sc = fitmodel(sc);
1. Adding CustIncome, Deviance = 1490.8527, Chi2Stat = 32.588614, PValue = 1.1387992e-08
2. Adding TmWBank, Deviance = 1467.1415, Chi2Stat = 23.711203, PValue = 1.1192909e-06
3. Adding AMBalance, Deviance = 1455.5715, Chi2Stat = 11.569967, PValue = 0.00067025601
4. Adding EmpStatus, Deviance = 1447.3451, Chi2Stat = 8.2264038, PValue = 0.0041285257
5. Adding CustAge, Deviance = 1441.994, Chi2Stat = 5.3511754, PValue = 0.020708306
6. Adding ResStatus, Deviance = 1437.8756, Chi2Stat = 4.118404, PValue = 0.042419078
7. Adding OtherCC, Deviance = 1433.707, Chi2Stat = 4.1686018, PValue = 0.041179769
Generalized linear regression model:
status ~ [Linear formula with 8 terms in 7 predictors]
Distribution = Binomial
Estimated Coefficients:
Estimate SE tStat pValue
________ ________ ______ __________
(Intercept) 0.70239 0.064001 10.975 5.0538e-28
CustAge 0.60833 0.24932 2.44 0.014687
ResStatus 1.377 0.65272 2.1097 0.034888
EmpStatus 0.88565 0.293 3.0227 0.0025055
CustIncome 0.70164 0.21844 3.2121 0.0013179
TmWBank 1.1074 0.23271 4.7589 1.9464e-06
OtherCC 1.0883 0.52912 2.0569 0.039696
AMBalance 1.045 0.32214 3.2439 0.0011792
1200 observations, 1192 error degrees of freedom
Dispersion: 1
Chi^2-statistic vs. constant model: 89.7, p-value = 1.4e-16
Вычислите вероятность дефолта.
pd = probdefault(sc); disp(pd(1:15,:))
0.2503
0.1878
0.3173
0.1711
0.1895
0.1307
0.5218
0.2848
0.2612
0.3047
0.3418
0.2237
0.2793
0.3615
0.1653
BinMissingData' ВыборВ этом примере описывается назначение точек для отсутствующих данных при 'BinMissingData' параметр имеет значение trueи соответствующее вычисление вероятностей по умолчанию.
Предикторы, у которых отсутствуют данные в обучающем наборе, имеют явное место для <missing> с соответствующими баллами в итоговой карте показателей. Эти точки вычисляются на основе значения веса доказательств (WOE) для <missing> bin и коэффициенты логистической модели. В целях оценки эти баллы присваиваются отсутствующим значениям и значениям вне диапазона, а окончательная оценка сопоставляется с вероятностью по умолчанию при использовании probdefault.
Предикторы без отсутствующих данных в обучающем наборе не имеют <missing> bin, поэтому невозможно оценить WOE по данным обучения. По умолчанию точки для отсутствующих и выходящих за пределы диапазона значений имеют значение NaN, и это приводит к оценке NaN при выполнении score. Для предикторов, не имеющих явных <missing> bin, используйте аргумент имя-значение 'Missing' в formatpoints чтобы указать, как недостающие данные должны рассматриваться в целях оценки. Окончательный балл затем сопоставляется с вероятностью по умолчанию при использовании probdefault.
Создать creditscorecard с использованием CreditCardData.mat для загрузки файла dataMissing с отсутствующими значениями.
load CreditCardData.mat
head(dataMissing,5)ans=5×11 table
CustID CustAge TmAtAddress ResStatus EmpStatus CustIncome TmWBank OtherCC AMBalance UtilRate status
______ _______ ___________ ___________ _________ __________ _______ _______ _________ ________ ______
1 53 62 <undefined> Unknown 50000 55 Yes 1055.9 0.22 0
2 61 22 Home Owner Employed 52000 25 Yes 1161.6 0.24 0
3 47 30 Tenant Employed 37000 61 No 877.23 0.29 0
4 NaN 75 Home Owner Employed 53000 20 Yes 157.37 0.08 0
5 68 56 Home Owner Employed 53000 14 Yes 561.84 0.11 0
Использовать creditscorecard с аргументом имя-значение 'BinMissingData' установить в значение true в ячейку отсутствующих числовых или категориальных данных в отдельной ячейке. Применение автоматического binning.
sc = creditscorecard(dataMissing,'IDVar','CustID','BinMissingData',true); sc = autobinning(sc); disp(sc)
creditscorecard with properties:
GoodLabel: 0
ResponseVar: 'status'
WeightsVar: ''
VarNames: {1x11 cell}
NumericPredictors: {1x6 cell}
CategoricalPredictors: {'ResStatus' 'EmpStatus' 'OtherCC'}
BinMissingData: 1
IDVar: 'CustID'
PredictorVars: {1x9 cell}
Data: [1200x11 table]
Установка минимального значения 0 для CustAge и CustIncome. При этом любая отрицательная возрастная или доходная информация становится недействительной или «вне диапазона». Для оценки и вероятности вычислений по умолчанию значения вне диапазона задаются теми же точками, что и отсутствующие значения.
sc = modifybins(sc,'CustAge','MinValue',0); sc = modifybins(sc,'CustIncome','MinValue',0);
Просмотр информации о ячейках для числовых данных для 'CustAge' который включает отсутствующие данные в отдельной ячейке с маркировкой <missing>.
bi = bininfo(sc,'CustAge');
disp(bi) Bin Good Bad Odds WOE InfoValue
_____________ ____ ___ ______ ________ __________
{'[0,33)' } 69 52 1.3269 -0.42156 0.018993
{'[33,37)' } 63 45 1.4 -0.36795 0.012839
{'[37,40)' } 72 47 1.5319 -0.2779 0.0079824
{'[40,46)' } 172 89 1.9326 -0.04556 0.0004549
{'[46,48)' } 59 25 2.36 0.15424 0.0016199
{'[48,51)' } 99 41 2.4146 0.17713 0.0035449
{'[51,58)' } 157 62 2.5323 0.22469 0.0088407
{'[58,Inf]' } 93 25 3.72 0.60931 0.032198
{'<missing>'} 19 11 1.7273 -0.15787 0.00063885
{'Totals' } 803 397 2.0227 NaN 0.087112
Просмотр информации о ячейках для категориальных данных для 'ResStatus' который включает отсутствующие данные в отдельной ячейке с маркировкой <missing>.
bi = bininfo(sc,'ResStatus');
disp(bi) Bin Good Bad Odds WOE InfoValue
______________ ____ ___ ______ _________ __________
{'Tenant' } 296 161 1.8385 -0.095463 0.0035249
{'Home Owner'} 352 171 2.0585 0.017549 0.00013382
{'Other' } 128 52 2.4615 0.19637 0.0055808
{'<missing>' } 27 13 2.0769 0.026469 2.3248e-05
{'Totals' } 803 397 2.0227 NaN 0.0092627
Для 'CustAge' и 'ResStatus' предикторы, отсутствуют данные (NaNs и <undefined>) в тренировочных данных и процессе связывания оценивает значение WOE -0.15787 и 0.026469 соответственно для отсутствующих данных в этих предикторах, как показано выше.
Для EmpStatus и CustIncome отсутствует явная ячейка для отсутствующих значений, поскольку данные обучения не содержат отсутствующих значений для этих предикторов.
bi = bininfo(sc,'EmpStatus');
disp(bi) Bin Good Bad Odds WOE InfoValue
____________ ____ ___ ______ ________ _________
{'Unknown' } 396 239 1.6569 -0.19947 0.021715
{'Employed'} 407 158 2.5759 0.2418 0.026323
{'Totals' } 803 397 2.0227 NaN 0.048038
bi = bininfo(sc,'CustIncome');
disp(bi) Bin Good Bad Odds WOE InfoValue
_________________ ____ ___ _______ _________ __________
{'[0,29000)' } 53 58 0.91379 -0.79457 0.06364
{'[29000,33000)'} 74 49 1.5102 -0.29217 0.0091366
{'[33000,35000)'} 68 36 1.8889 -0.06843 0.00041042
{'[35000,40000)'} 193 98 1.9694 -0.026696 0.00017359
{'[40000,42000)'} 68 34 2 -0.011271 1.0819e-05
{'[42000,47000)'} 164 66 2.4848 0.20579 0.0078175
{'[47000,Inf]' } 183 56 3.2679 0.47972 0.041657
{'Totals' } 803 397 2.0227 NaN 0.12285
Использовать fitmodel чтобы соответствовать модели логистической регрессии с использованием данных веса доказательств (WOE). fitmodel внутренне преобразует все переменные предиктора в значения WOE, используя ячейки, найденные в процессе автоматического объединения. fitmodel затем подходит модель логистической регрессии с использованием пошагового метода (по умолчанию). Для предикторов, у которых отсутствуют данные, существует явное <missing> bin, с соответствующим значением WOE, вычисленным на основе данных. При использовании fitmodelсоответствующее значение WOE для < missing > bin применяется при выполнении преобразования WOE.
[sc,mdl] = fitmodel(sc);
1. Adding CustIncome, Deviance = 1490.8527, Chi2Stat = 32.588614, PValue = 1.1387992e-08
2. Adding TmWBank, Deviance = 1467.1415, Chi2Stat = 23.711203, PValue = 1.1192909e-06
3. Adding AMBalance, Deviance = 1455.5715, Chi2Stat = 11.569967, PValue = 0.00067025601
4. Adding EmpStatus, Deviance = 1447.3451, Chi2Stat = 8.2264038, PValue = 0.0041285257
5. Adding CustAge, Deviance = 1442.8477, Chi2Stat = 4.4974731, PValue = 0.033944979
6. Adding ResStatus, Deviance = 1438.9783, Chi2Stat = 3.86941, PValue = 0.049173805
7. Adding OtherCC, Deviance = 1434.9751, Chi2Stat = 4.0031966, PValue = 0.045414057
Generalized linear regression model:
status ~ [Linear formula with 8 terms in 7 predictors]
Distribution = Binomial
Estimated Coefficients:
Estimate SE tStat pValue
________ ________ ______ __________
(Intercept) 0.70229 0.063959 10.98 4.7498e-28
CustAge 0.57421 0.25708 2.2335 0.025513
ResStatus 1.3629 0.66952 2.0356 0.04179
EmpStatus 0.88373 0.2929 3.0172 0.002551
CustIncome 0.73535 0.2159 3.406 0.00065929
TmWBank 1.1065 0.23267 4.7556 1.9783e-06
OtherCC 1.0648 0.52826 2.0156 0.043841
AMBalance 1.0446 0.32197 3.2443 0.0011775
1200 observations, 1192 error degrees of freedom
Dispersion: 1
Chi^2-statistic vs. constant model: 88.5, p-value = 2.55e-16
Масштабируйте точки карты показателей по методу «points, bodds and points to удвоить шансы (PDO)» с помощью 'PointsOddsAndPDO' аргумент formatpoints. Предположим, что вы хотите, чтобы оценка 500 очков иметь шансы 2 (в два раза больше вероятность быть хорошим, чем быть плохим) и что шансы удвоить каждые 50 очков (так что 550 очков будет иметь шансы 4).
Отображение карты показателей, показывающей масштабированные точки для предикторов, сохраненных в модели фитинга.
sc = formatpoints(sc,'PointsOddsAndPDO',[500 2 50]);
PointsInfo = displaypoints(sc)PointsInfo=38×3 table
Predictors Bin Points
_____________ ______________ ______
{'CustAge' } {'[0,33)' } 54.062
{'CustAge' } {'[33,37)' } 56.282
{'CustAge' } {'[37,40)' } 60.012
{'CustAge' } {'[40,46)' } 69.636
{'CustAge' } {'[46,48)' } 77.912
{'CustAge' } {'[48,51)' } 78.86
{'CustAge' } {'[51,58)' } 80.83
{'CustAge' } {'[58,Inf]' } 96.76
{'CustAge' } {'<missing>' } 64.984
{'ResStatus'} {'Tenant' } 62.138
{'ResStatus'} {'Home Owner'} 73.248
{'ResStatus'} {'Other' } 90.828
{'ResStatus'} {'<missing>' } 74.125
{'EmpStatus'} {'Unknown' } 58.807
{'EmpStatus'} {'Employed' } 86.937
{'EmpStatus'} {'<missing>' } NaN
⋮
Обратите внимание, что точки для <missing> ячейка для CustAge и ResStatus явно показаны (как 64.9836 и 74.1250соответственно). Эти точки вычисляются на основе значения WOE для < missing > bin и коэффициентов логистической модели.
Для предикторов, не имеющих отсутствующих данных в обучающем наборе, нет явного < missing > bin. По умолчанию для точек установлено значение NaN для отсутствующих данных, и они приводят к оценке NaN при выполнении score. Для предикторов, не имеющих явного < missing > bin, используйте аргумент имя-значение'Missing' в formatpoints чтобы указать, как недостающие данные должны рассматриваться в целях оценки.
Для иллюстрации возьмите несколько строк из исходных данных в качестве тестовых данных и введите некоторые отсутствующие данные. Также введите некоторые недопустимые значения или значения вне диапазона. Для числовых данных допустимые значения ниже минимального (или выше максимального) считаются недопустимыми, например, отрицательное значение для возраста (отзыв 'MinValue' был ранее установлен в 0 для CustAge и CustIncome). Для категориальных данных недопустимыми значениями являются категории, явно не включенные в карту показателей, например, статус резидентности, ранее не сопоставленный с категориями карт показателей, например «Дом», или бессмысленная строка, например «abc123».
tdata = dataMissing(11:18,mdl.PredictorNames); % Keep only the predictors retained in the model % Set some missing values tdata.CustAge(1) = NaN; tdata.ResStatus(2) = '<undefined>'; tdata.EmpStatus(3) = '<undefined>'; tdata.CustIncome(4) = NaN; % Set some invalid values tdata.CustAge(5) = -100; tdata.ResStatus(6) = 'House'; tdata.EmpStatus(7) = 'Freelancer'; tdata.CustIncome(8) = -1; disp(tdata)
CustAge ResStatus EmpStatus CustIncome TmWBank OtherCC AMBalance
_______ ___________ ___________ __________ _______ _______ _________
NaN Tenant Unknown 34000 44 Yes 119.8
48 <undefined> Unknown 44000 14 Yes 403.62
65 Home Owner <undefined> 48000 6 No 111.88
44 Other Unknown NaN 35 No 436.41
-100 Other Employed 46000 16 Yes 162.21
33 House Employed 36000 36 Yes 845.02
39 Tenant Freelancer 34000 40 Yes 756.26
24 Home Owner Employed -1 19 Yes 449.61
Оцените новые данные и посмотрите, как точки назначаются для отсутствующих CustAge и ResStatus, потому что у нас есть явная ячейка с точками для <missing>. Однако для EmpStatus и CustIncome score функция устанавливает точки на NaN. Соответствующие вероятности по умолчанию также устанавливаются как NaN.
[Scores,Points] = score(sc,tdata); disp(Scores)
481.2231
520.8353
NaN
NaN
551.7922
487.9588
NaN
NaN
disp(Points)
CustAge ResStatus EmpStatus CustIncome TmWBank OtherCC AMBalance
_______ _________ _________ __________ _______ _______ _________
64.984 62.138 58.807 67.893 61.858 75.622 89.922
78.86 74.125 58.807 82.439 61.061 75.622 89.922
96.76 73.248 NaN 96.969 51.132 50.914 89.922
69.636 90.828 58.807 NaN 61.858 50.914 89.922
64.984 90.828 86.937 82.439 61.061 75.622 89.922
56.282 74.125 86.937 70.107 61.858 75.622 63.028
60.012 62.138 NaN 67.893 61.858 75.622 63.028
54.062 73.248 86.937 NaN 61.061 75.622 89.922
pd = probdefault(sc,tdata); disp(pd)
0.3934
0.2725
NaN
NaN
0.1961
0.3714
NaN
NaN
Использовать аргумент имя-значение 'Missing' в formatpoints выбор способа назначения точек отсутствующим значениям для предикторов, не имеющих явного <missing> бункер. В этом примере используйте 'MinPoints' для опции 'Missing' аргумент. Минимальные баллы для EmpStatus в карте показателей, показанной выше, 58.8072, и для CustIncome минимальные баллы: 29.3753. Теперь все строки имеют оценку и соответствующую вероятность дефолта.
sc = formatpoints(sc,'Missing','MinPoints'); [Scores,Points] = score(sc,tdata); disp(Scores)
481.2231 520.8353 517.7532 451.3405 551.7922 487.9588 449.3577 470.2267
disp(Points)
CustAge ResStatus EmpStatus CustIncome TmWBank OtherCC AMBalance
_______ _________ _________ __________ _______ _______ _________
64.984 62.138 58.807 67.893 61.858 75.622 89.922
78.86 74.125 58.807 82.439 61.061 75.622 89.922
96.76 73.248 58.807 96.969 51.132 50.914 89.922
69.636 90.828 58.807 29.375 61.858 50.914 89.922
64.984 90.828 86.937 82.439 61.061 75.622 89.922
56.282 74.125 86.937 70.107 61.858 75.622 63.028
60.012 62.138 58.807 67.893 61.858 75.622 63.028
54.062 73.248 86.937 29.375 61.061 75.622 89.922
pd = probdefault(sc,tdata); disp(pd)
0.3934
0.2725
0.2810
0.4954
0.1961
0.3714
0.5022
0.4304
sc - Модель кредитной карты показателейcreditscorecard объектМодель кредитной карты показателей, указанная как creditscorecard объект. Чтобы создать этот объект, используйте creditscorecard.
data - Набор данных для применения правил вероятности по умолчанию(Необязательно) Набор данных для применения правил вероятности по умолчанию, указанный как таблица MATLAB ®, где каждая строка соответствует отдельным наблюдениям. Данные должны содержать столбцы для каждого из предикторов в creditscorecard объект.
Типы данных: table
pd - Вероятность дефолтаВероятность дефолта, возвращенная как NumObsоколо-1 численный массив вероятностей по умолчанию.
После вычисления немасштабированных баллов (см. Алгоритмы вычисления и масштабирования баллов) вероятность того, что баллы являются «хорошими», представляется следующей формулой:
ProbGood = 1./(1 + exp(-UnscaledScores))
Таким образом, вероятность дефолта равна
pd = 1 - ProbGood
[1] Рефаат, М. Карты оценки кредитных рисков: разработка и внедрение с использованием SAS. lulu.com, 2011.
bindata | bininfo | creditscorecard | displaypoints | fitmodel | formatpoints | modifybins | modifypredictor | plotbins | predictorinfo | score | setmodel | table | validatemodel
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.