Замените отсутствующие значения для предикторов карты показателей кредита
заменяет отсутствующие значения предиктора 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'
, 'median'
, 'mode'
, 'original'
, или 'constant'
| строку со значением "mean"
, "median"
, "mode"
, "original"
, или "constant"
Statistic, используемая для заполнения недостающих данных для предикторов, заданных в виде вектора символов или строки с одним из следующих значений.
'mean'
- Замените отсутствующие данные средним или средним значением. Опция действительна только для числовых данных. The 'mean'
вычисляет взвешенное среднее значение предиктора путем обращения к столбцу предиктора и Weights
столбец из creditscorecard
объект. Для получения дополнительной информации смотрите Взвешенное среднее.
'median'
- Замените отсутствующие данные медианным значением. Действителен для числовых и порядковых данных. The 'median'
вычисляет взвешенную медиану предиктора путем обращения к столбцу предиктора и Weights
столбец из creditscorecard
объект. Для получения дополнительной информации смотрите Взвешенный Медиан.
'mode'
- Замените отсутствующие данные на режим. Действителен для числовых и как номинальных, так и порядковых категориальных данных. The '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. and Posch, P. N. Моделирование кредитного риска с использованием Excel и VBA. Wiley Finance, 2007.
bindata
| bininfo
| creditscorecard
| displaypoints
| fitmodel
| formatpoints
| modifybins
| modifypredictor
| plotbins
| predictorinfo
| probdefault
| score
| setmodel
| table
| validatemodel
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.