Замените отсутствующие значения для предикторов протокола результатов кредита
отсутствующие значения замен предиктора sc
= fillmissing(sc
,PredictorNames
,Statistics
)PredictorNames
со значениями, заданными Statistics
и возвращает обновленный объект протокола результатов кредита (sc
). Стандартные недостающие данные определяются следующим образом:
NaN
для числовых массивов
<undefined>
для категориальных массивов
Примечание
Если при запуске fillmissing
после раскладывания предиктор, существующие точки разделения и границы интервала сохраняются и "Хорошие" и "Плохие" количества от <missing>
интервал добавляется к соответствующему интервалу.
аргументы использования от предыдущего синтаксиса и значения для sc
= fillmissing(___,ConstantValue
)ConstantValue
заменять отсутствующие значения.
creditscorecard
ОбъектВ этом примере показано, как использовать fillmissing
заменять отсутствующие значения в CustAge
и ResStatus
предикторы с пользовательскими значениями. Для получения дополнительной информации об альтернативных подходах для "обработки" недостающих данных смотрите, Приписывают Моделированию Протокола результатов Отсутствующие значения.
Загрузите данные о протоколе результатов кредита и используйте dataMissing
для обучающих данных.
load CreditCardData.mat
disp(head(dataMissing));
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 6 65 13 Home Owner Employed 48000 59 Yes 968.18 0.15 0 7 34 32 Home Owner Unknown 32000 26 Yes 717.82 0.02 1 8 50 57 Other Employed 51000 33 No 3041.2 0.13 0
Создайте creditscorecard
объект с 'BinMissingData'
установите на true
.
sc = creditscorecard(dataMissing,'BinMissingData',true);
sc = autobinning(sc);
Используйте bininfo
и plotbins
отобразить CustAge
и ResStatus
предикторы с недостающими данными.
bininfo(sc,'CustAge')
ans=10×6 table
Bin Good Bad Odds WOE InfoValue
_____________ ____ ___ ______ ________ __________
{'[-Inf,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
plotbins(sc,'CustAge');
bininfo(sc,'ResStatus')
ans=5×6 table
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
plotbins(sc,'ResStatus');
Используйте fillmissing
заменять NaN
значения в CustAge
со средним значением и заменять <missing>
значения в ResStatus
с 'Tenant'
. Используйте predictorinfo
проверять заполненные значения.
sc = fillmissing(sc,{'CustAge'},'median'); sc = fillmissing(sc,{'ResStatus'},'constant','Tenant'); predictorinfo(sc,'CustAge')
ans=1×4 table
PredictorType LatestBinning LatestFillMissingType LatestFillMissingValue
_____________ ________________________ _____________________ ______________________
CustAge {'Numeric'} {'Automatic / Monotone'} {'Median'} {[45]}
predictorinfo(sc,'ResStatus')
ans=1×5 table
PredictorType Ordinal LatestBinning LatestFillMissingType LatestFillMissingValue
_______________ _______ ________________________ _____________________ ______________________
ResStatus {'Categorical'} false {'Automatic / Monotone'} {'Constant'} {'Tenant'}
Используйте bininfo
и plotbins
отобразить CustAge
и ResStatus
предикторы, чтобы проверить, что недостающие данные были заменены значениями, заданными fillmissing
.
bininfo(sc,'CustAge')
ans=9×6 table
Bin Good Bad Odds WOE InfoValue
_____________ ____ ___ ______ _________ _________
{'[-Inf,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)' } 191 100 1.91 -0.057315 0.0008042
{'[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
{'Totals' } 803 397 2.0227 NaN 0.086822
plotbins(sc,'CustAge');
bininfo(sc,'ResStatus')
ans=4×6 table
Bin Good Bad Odds WOE InfoValue
______________ ____ ___ ______ _________ __________
{'Tenant' } 323 174 1.8563 -0.085821 0.0030935
{'Home Owner'} 352 171 2.0585 0.017549 0.00013382
{'Other' } 128 52 2.4615 0.19637 0.0055808
{'Totals' } 803 397 2.0227 NaN 0.0088081
plotbins(sc,'ResStatus');
Используйте fitmodel
и затем запустите formatpoints
, displaypoints
, и score
.
sc = fitmodel(sc,'Display','off'); sc = formatpoints(sc,'WorstAndBest',[300 800]); t = displaypoints(sc)
t=31×3 table
Predictors Bin Points
______________ _________________ ______
{'CustAge' } {'[-Inf,33)' } 72.565
{'CustAge' } {'[33,37)' } 76.588
{'CustAge' } {'[37,40)' } 83.346
{'CustAge' } {'[40,46)' } 99.902
{'CustAge' } {'[46,48)' } 115.78
{'CustAge' } {'[48,51)' } 117.5
{'CustAge' } {'[51,58)' } 121.07
{'CustAge' } {'[58,Inf]' } 149.93
{'CustAge' } {'<missing>' } 99.902
{'EmpStatus' } {'Unknown' } 79.64
{'EmpStatus' } {'Employed' } 133.98
{'EmpStatus' } {'<missing>' } NaN
{'CustIncome'} {'[-Inf,29000)' } 21.926
{'CustIncome'} {'[29000,33000)'} 73.949
{'CustIncome'} {'[33000,35000)'} 97.117
{'CustIncome'} {'[35000,40000)'} 101.44
⋮
Когда набор данных валидации имеет отсутствующие значения, и вы используете fillmissing
с обучающим набором данных отсутствующие значения в наборе данных валидации присвоены те же точки как соответствующие интервалы, содержащие заполненные значения.
Когда таблица показывает, '<missing>'
интервал для CustAge
предиктор присвоен те же точки как '[40,46)'
интервал, потому что недостающие данные заполнены средним значением 45
.
Точки присвоены '<missing>'
интервал для EmpStatus
предиктором является NaN
потому что fillmissing
не используется для того предиктора. Присвоенные точки решены 'NoScore'
по умолчанию для
'Missing'
аргумент пары "имя-значение" в formatpoints
.
Создайте тестовый набор данных валидации (tdata
) и добавьте отсутствующие значения.
tdata = data(1:10,:);
tdata.CustAge(1) = NaN;
tdata.ResStatus(2) = '<undefined>';
[scr,pts] = score(sc,tdata)
scr = 10×1
566.7335
611.2547
584.5130
628.7876
609.7148
671.1048
403.6413
551.9461
575.9874
524.4789
pts=10×5 table
CustAge EmpStatus CustIncome TmWBank AMBalance
_______ _________ __________ _______ _________
99.902 79.64 153.88 145.38 87.933
149.93 133.98 153.88 85.531 87.933
115.78 133.98 101.44 145.38 87.933
117.5 133.98 153.88 83.991 139.44
149.93 133.98 153.88 83.991 87.933
149.93 133.98 153.88 145.38 87.933
76.588 79.64 73.949 85.531 87.933
117.5 133.98 153.88 85.531 61.06
117.5 79.64 153.88 85.531 139.44
117.5 79.64 153.88 85.531 87.933
Этот пример показывает различные возможности для обработки недостающих данных в данных о валидации.
При выигрыше данных из набора данных валидации у вас есть несколько опций. Если вы принимаете решение ничего не сделать, точками, присвоенными недостающим данным, является NaN
, который прибывает из 'NoScore'
по умолчанию для
'Missing'
аргумент пары "имя-значение" в formatpoints
.
Если вы хотите выиграть отсутствующие значения всех предикторов с одной сопоставимой метрикой, можно использовать опции 'ZeroWOE'
, 'MinPoints'
, или 'MaxPoints'
для 'Missing'
аргумент пары "имя-значение" в formatpoints
.
load CreditCardData.mat sc = creditscorecard(data); predictorinfo(sc,'CustAge')
ans=1×4 table
PredictorType LatestBinning LatestFillMissingType LatestFillMissingValue
_____________ _________________ _____________________ ______________________
CustAge {'Numeric'} {'Original Data'} {'Original'} {0x0 double}
predictorinfo(sc,'ResStatus')
ans=1×5 table
PredictorType Ordinal LatestBinning LatestFillMissingType LatestFillMissingValue
_______________ _______ _________________ _____________________ ______________________
ResStatus {'Categorical'} false {'Original Data'} {'Original'} {0x0 double}
sc = autobinning(sc); sc = fitmodel(sc,'display','off'); displaypoints(sc)
ans=37×3 table
Predictors Bin Points
______________ ________________ _________
{'CustAge' } {'[-Inf,33)' } -0.15894
{'CustAge' } {'[33,37)' } -0.14036
{'CustAge' } {'[37,40)' } -0.060323
{'CustAge' } {'[40,46)' } 0.046408
{'CustAge' } {'[46,48)' } 0.21445
{'CustAge' } {'[48,58)' } 0.23039
{'CustAge' } {'[58,Inf]' } 0.479
{'CustAge' } {'<missing>' } NaN
{'ResStatus' } {'Tenant' } -0.031252
{'ResStatus' } {'Home Owner' } 0.12696
{'ResStatus' } {'Other' } 0.37641
{'ResStatus' } {'<missing>' } NaN
{'EmpStatus' } {'Unknown' } -0.076317
{'EmpStatus' } {'Employed' } 0.31449
{'EmpStatus' } {'<missing>' } NaN
{'CustIncome'} {'[-Inf,29000)'} -0.45716
⋮
sc = formatpoints(sc,'Missing','minpoints','WorstAndBestScores',[300 850]); displaypoints(sc)
ans=37×3 table
Predictors Bin Points
______________ ________________ ______
{'CustAge' } {'[-Inf,33)' } 46.396
{'CustAge' } {'[33,37)' } 48.727
{'CustAge' } {'[37,40)' } 58.772
{'CustAge' } {'[40,46)' } 72.167
{'CustAge' } {'[46,48)' } 93.256
{'CustAge' } {'[48,58)' } 95.256
{'CustAge' } {'[58,Inf]' } 126.46
{'CustAge' } {'<missing>' } 46.396
{'ResStatus' } {'Tenant' } 62.421
{'ResStatus' } {'Home Owner' } 82.276
{'ResStatus' } {'Other' } 113.58
{'ResStatus' } {'<missing>' } 62.421
{'EmpStatus' } {'Unknown' } 56.765
{'EmpStatus' } {'Employed' } 105.81
{'EmpStatus' } {'<missing>' } 56.765
{'CustIncome'} {'[-Inf,29000)'} 8.9706
⋮
Значение -32.5389
для <missing>
интервал 'CustAge'
прибывает из 'minPoints'
аргумент для formatpoints
.
[scr,pts] = score(sc,dataMissing(1:5,:))
scr = 5×1
602.0394
648.1988
560.5569
613.5595
646.8109
pts=5×7 table
CustAge ResStatus EmpStatus CustIncome TmWBank OtherCC AMBalance
_______ _________ _________ __________ _______ _______ _________
95.256 62.421 56.765 121.18 116.05 86.224 64.15
126.46 82.276 105.81 121.18 62.107 86.224 64.15
93.256 62.421 105.81 76.585 116.05 42.287 64.15
46.396 82.276 105.81 121.18 60.719 86.224 110.96
126.46 82.276 105.81 121.18 60.719 86.224 64.15
В качестве альтернативы можно выиграть недостающие данные за каждый отдельный предиктор с различной статистической величиной на основе информации того предиктора. Для этого используйте fillmissing
для creditscorecard
объект.
load CreditCardData.mat sc = creditscorecard(data); sc = fillmissing(sc,'CustAge','constant',35); predictorinfo(sc,'CustAge')
ans=1×4 table
PredictorType LatestBinning LatestFillMissingType LatestFillMissingValue
_____________ _________________ _____________________ ______________________
CustAge {'Numeric'} {'Original Data'} {'Constant'} {[35]}
sc = fillmissing(sc,'ResStatus','Mode'); predictorinfo(sc,'ResStatus')
ans=1×5 table
PredictorType Ordinal LatestBinning LatestFillMissingType LatestFillMissingValue
_______________ _______ _________________ _____________________ ______________________
ResStatus {'Categorical'} false {'Original Data'} {'Mode'} {'Home Owner'}
sc = autobinning(sc); sc = fitmodel(sc,'display','off'); sc = formatpoints(sc,'Missing','minpoints','WorstAndBestScores',[300 850]); displaypoints(sc)
ans=37×3 table
Predictors Bin Points
______________ ________________ ______
{'CustAge' } {'[-Inf,33)' } 46.396
{'CustAge' } {'[33,37)' } 48.727
{'CustAge' } {'[37,40)' } 58.772
{'CustAge' } {'[40,46)' } 72.167
{'CustAge' } {'[46,48)' } 93.256
{'CustAge' } {'[48,58)' } 95.256
{'CustAge' } {'[58,Inf]' } 126.46
{'CustAge' } {'<missing>' } 48.727
{'ResStatus' } {'Tenant' } 62.421
{'ResStatus' } {'Home Owner' } 82.276
{'ResStatus' } {'Other' } 113.58
{'ResStatus' } {'<missing>' } 82.276
{'EmpStatus' } {'Unknown' } 56.765
{'EmpStatus' } {'Employed' } 105.81
{'EmpStatus' } {'<missing>' } 56.765
{'CustIncome'} {'[-Inf,29000)'} 8.9706
⋮
Значение <missing>
для 'CustAge'
прибывает из значения заливки 35
даже при том, что обучающие данные не имеют никаких отсутствующих значений.
disp(dataMissing(1:5,:));
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
[scr,pts] = score(sc,dataMissing(1:5,:))
scr = 5×1
621.8943
648.1988
560.5569
615.8904
646.8109
pts=5×7 table
CustAge ResStatus EmpStatus CustIncome TmWBank OtherCC AMBalance
_______ _________ _________ __________ _______ _______ _________
95.256 82.276 56.765 121.18 116.05 86.224 64.15
126.46 82.276 105.81 121.18 62.107 86.224 64.15
93.256 62.421 105.81 76.585 116.05 42.287 64.15
48.727 82.276 105.81 121.18 60.719 86.224 110.96
126.46 82.276 105.81 121.18 60.719 86.224 64.15
sc
— Модель протокола результатов кредитаcreditscorecard
объектМодель протокола результатов кредита в виде creditscorecard
объект.
PredictorNames
— Имя creditscorecard
предиктор, недостающие данные которого заполненыИмя creditscorecard
предиктор, чтобы заполнить недостающие данные для в виде скалярного вектора символов, скалярной строки, массива ячеек из символьных векторов или массива строк.
Типы данных: char |
string
| cell
Statistics
— Статистическая величина, чтобы использовать, чтобы заполнить недостающие данные для предикторов'mean'
медиана
режим
, 'original'
, или 'constant'
| представьте в виде строки со значением "mean"
медиана
режим
, "original"
, или "constant"
Статистическая величина, чтобы использовать, чтобы заполнить недостающие данные для предикторов в виде вектора символов или строки с одним из следующих значений.
'mean'
— Замените недостающие данные на среднее или среднее значение. Опция допустима только для числовых данных. 'mean'
вычисляет взвешенное среднее предиктора путем обращения к столбцу предиктора и Weights
столбец от creditscorecard
объект. Для получения дополнительной информации смотрите Взвешенное среднее.
'median'
— Замените недостающие данные на среднее значение. Допустимый для числовых и порядковых данных. 'median'
вычисляет взвешенную медиану предиктора путем обращения к столбцу предиктора и Weights
столбец от creditscorecard
объект. Для получения дополнительной информации смотрите Взвешенную Медиану.
'mode'
— Замените недостающие данные на режим. Допустимый для числовых и и номинальных и порядковых категориальных данных. 'mode'
вычисляет взвешенное mode
из предиктора путем обращения к столбцу предиктора и Weights
столбец от creditscorecard
объект. Для получения дополнительной информации смотрите Взвешенный Режим.
'original'
— Установите недостающие данные для числовых и категориальных предикторов назад к его исходному значению: NaN
если числовой, <undefined>
или <missing>
если категориальный.
'constant'
— Установите недостающие данные для числовых и категориальных предикторов к постоянному значению, которое вы задаете в дополнительном аргументе для ConstantValue
.
Типы данных: char |
string
ConstantValue
— Значение, чтобы заполнить недостающие записи в предикторах, заданных в PredictorNames
[ ]
(значение по умолчанию) | числовой | вектор символов | представляет в виде строки | массив ячеек из символьных векторов | массив строк(Необязательно) Значение, чтобы заполнить недостающие записи в предикторах, заданных в PredictorNames
В виде числового значения, вектора символов, строки или массива ячеек из символьных векторов.
Примечание
Можно использовать ConstantValue
только если вы устанавливаете Statistics
аргумент к 'constant'
.
Типы данных: char |
double
| string
| cell
sc
— Обновленный creditscorecard
creditscorecard
объектОбновленный creditscorecard
объект, возвращенный как объект.
weighted mean похож на обычное среднее значение за исключением того, что вместо каждой из точек данных, способствующих одинаково итоговому среднему значению, некоторые точки данных вносят больше, чем другие.
Взвешенное среднее для непустого конечного мультимножества данных (x) с соответствующими неотрицательными весами (w)
Взвешенная медиана составляет 50% взвешенная процентиль, где процент в общей массе считается вместо общего количества.
Для n отличные упорядоченные элементы (x) положительные веса (w), таким образом, что , взвешенная медиана является элементом x k:
В случае, где соответствующие веса обоих элементов ограничивают среднюю точку набора весов, не инкапсулируя его, каждый элемент задает раздел, равный 1/2. Эти элементы упоминаются как ниже взвешенная средняя и верхняя взвешенная медиана. Взвешенная медиана выбрана, на основе которого элемент сохраняет разделы самыми равными. Эта медиана всегда является взвешенной медианой с самым низким весом. Если верхние и более низкие взвешенные медианы равны, ниже взвешенная медиана принята.
weighted mode набора взвешенных значений данных является значением, которое чаще всего появляется.
Режим выборки является элементом, который чаще всего происходит в наборе. Например, режим выборки [1, 3, 6, 6, 6, 6, 7, 7, 12, 12, 17] равняется 6.
[1] “Базельский комитет по банковскому надзору: исследования валидации внутренних систем оценки”. Рабочий документ № 14, февраль 2005.
[2] Refaat, M. Протоколы результатов Кредитного риска: Разработка и Реализация Используя SAS. lulu.com, 2011.
[3] Loeffler, G. и Posch, P. N. Credit Risk Modeling Using Excel и VBA. Финансы Вайли, 2007.
creditscorecard
| bininfo
| predictorinfo
| modifypredictor
| modifybins
| bindata
| plotbins
| fitmodel
| displaypoints
| formatpoints
| score
| setmodel
| probdefault
| validatemodel
| table
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.