В этом примере показано, как обработать отсутствующие значения при работе с creditscorecard
объекты. Во-первых, пример показывает, как использовать creditscorecard
функциональность, чтобы создать явный интервал для недостающих данных с соответствующими точками. Затем пример показывает, как "обработать" недостающие данные, чтобы получить итоговый протокол результатов без явных интервалов для отсутствующих значений. Чтобы разработать протокол результатов без явных интервалов для недостающих данных, данные должны быть обработаны, и обработки для старых и новых наборов данных до выигрыша должны быть сопоставимыми.
При создании creditscorecard
объект, данные могут содержать отсутствующие значения. При использовании creditscorecard
создать creditscorecard
объект, можно задать аргумент пары "имя-значение" для 'BinMissingData'
установите на true
. В этом случае, недостающие данные для числовых предикторов (NaN
значения) и для категориальных предикторов (<undefined>
значения), сгруппировано в отдельном интервале, пометил <missing>
это появляется в конце интервалов. Предикторы без отсутствующих значений в обучающих данных не имеют никакого <missing>
интервал. Если вы не задаете 'BinMissingData'
аргумент или если вы устанавливаете 'BinMissingData'
к false
, creditscorecard
функционируйте отбрасывания недостающие наблюдения когда вычислительные частоты Хороших и Плохих, и ни один bininfo
ни plotbins
функции сообщают о таких наблюдениях.
<missing>
интервал остается на месте в течение процесса моделирования протокола результатов. Итоговый протокол результатов явным образом указывает на точки, которые будут присвоены отсутствующим значениям для предикторов, которые имеют <missing>
интервал. Эти точки определяются из Веса доказательства (WOE) <missing>
интервал и коэффициент предиктора в логистической модели. Для предикторов без явного <missing>
интервал, можно присвоить точки отсутствующим значениям.
dataMissing
таблица в CreditCardData.mat
файл имеет два предиктора, CustAge
и ResStatus
, с отсутствующими значениями.
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
объект с помощью CreditCardData.mat
файл, чтобы загрузить dataMissing
таблица с отсутствующими значениями. Установите 'BinMissingData'
аргумент к true
. Примените автоматическое раскладывание.
sc = creditscorecard(dataMissing,'IDVar','CustID','BinMissingData',true); sc = autobinning(sc);
Информация об интервале и интервал строят для предикторов, которые имеют недостающие данные оба, показывают <missing>
интервал в конце.
bi = bininfo(sc,'CustAge');
disp(bi)
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')
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
plotbins(sc,'ResStatus')
Обучающие данные для 'CustAge'
и 'ResStatus'
предикторы имеют недостающие данные (NaN
s и <undefined>
). Процесс раскладывания оценивает значения WOE -0.15787
and 0.026469
, соответственно, для недостающих данных в этих предикторах.
Обучающие данные для EmpStatus
и CustIncome
не имеет никакого явного интервала для <missing>
значения, потому что нет никаких отсутствующих значений для этих предикторов.
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 _________________ ____ ___ _______ _________ __________ {'[-Inf,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>
интервал с соответствующим значением WOE, вычисленным из данных. При использовании fitmodel
, соответствующее значение WOE для <missing>
интервал применяется при выполнении преобразования 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
Масштабируйте точки протокола результатов точками, чтобы удвоить разногласия (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' } {'[-Inf,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>
интервал и логистические коэффициенты модели.
Предикторы, которые не имеют никаких недостающих данных в наборе обучающих данных, не имеют никакого явного <missing>
интервал. По умолчанию точки установлены в NaN
для недостающих данных и они приводят к счету NaN
при выполнении score
. Для предикторов, которые не имеют никакого явного <missing>
интервал, используйте аргумент 'Missing'
значения имени в
formatpoints
указать, как недостающие данные нужно лечить от выигрыша целей.
Протокол результатов готов к выигрышу новых наборов данных. Можно также использовать протокол результатов, чтобы вычислить вероятности значения по умолчанию или выполнить проверку допустимости модели. Для получения дополнительной информации смотрите score
, probdefault
, и validatemodel
. Чтобы далее исследовать обработку недостающих данных, возьмите несколько строк из исходных данных как тестовые данные и введите некоторые недостающие данные.
tdata = dataMissing(11:14,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; 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
Выиграйте новые данные и смотрите, как точки для недостающих данных по-другому присвоены для CustAge
и ResStatus
и для EmpStatus
и CustIncome
. CustAge
и ResStatus
имейте явный <missing>
интервал для недостающих данных. Однако для EmpStatus
и CustIncome
score
функционируйте устанавливает точки на NaN
.
[Scores,Points] = score(sc,tdata); disp(Scores)
481.2231 520.8353 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
Используйте аргумент 'Missing'
значения имени в
formatpoints
выбрать, как присвоить точки отсутствующим значениям для предикторов, которые не имеют явного <missing>
интервал. В данном примере используйте 'MinPoints'
опция для 'Missing'
аргумент. Для EmpStatus
и CustIncome
, минимальными количествами точек в протоколе результатов является 58.8072
и 29.3753
, соответственно.
sc = formatpoints(sc,'Missing','MinPoints'); [Scores,Points] = score(sc,tdata); disp(Scores)
481.2231 520.8353 517.7532 451.3405
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
Можно использовать один из двух альтернативных рабочих процессов, чтобы разработать протокол результатов без явных интервалов для недостающих данных.
Первая альтернатива должна отбросить недостающие данные во время анализа. Если creditscorecard
создается с 'BinMissingData'
набор аргумента к false
(по умолчанию это установлено в false
если не заданный), недостающие наблюдения отбрасываются когда вычислительные частоты Good
и Bad
и не сообщаются bininfo
или plotbins
. Для подбора кривой логистической модели также отбрасываются строки с отсутствующими значениями. С этим подходом недостающие данные косвенно влияют на результаты, потому что общее количество наблюдений использовалось для расчета статистики интервала, такой как Вес доказательства (WOE), или общее количество строк, используемых, чтобы подбирать логистическую модель, сокращено количеством недостающих наблюдений. Для получения дополнительной информации об этом рабочем процессе см., что Протокол результатов Кредита Моделирует Рабочий процесс.
Вторая альтернатива должна сначала собрать информацию об отсутствующих значениях, затем обработать или заменить отсутствующие значения так, чтобы обучающие данные не имели никаких недостающих наблюдений, и затем создайте creditscorecard
объект с обработанным набором данных. Этот подход изменяет обучающие данные, позволяя создание отчетов недостающих наблюдений в количестве интервалов и включения недостающих наблюдений для того, чтобы подбирать логистическую модель. Однако в этом подходе, обработке обучающих данных и обработке любого нового набора данных, который требует, выигрыш должен быть тем же самым.
Следующий пример объясняет второй альтернативный рабочий процесс, который собирает недостающие данные, обрабатывает обучающие данные, разрабатывает новый creditscorecard
, и обрабатывает новые данные перед выигрышем.
dataMissing
таблица в CreditCardData.mat
файл имеет два предиктора, CustAge
и ResStatus
, с отсутствующими значениями.
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
объект с помощью CreditCardData.mat
файл, чтобы загрузить dataMissing
с отсутствующими значениями и набором 'BinMissingData'
аргумент к true
явным образом сообщать информацию об отсутствующих значениях. Примените автоматическое раскладывание.
sc = creditscorecard(dataMissing,'IDVar','CustID','BinMissingData',true); sc = autobinning(sc);
Информация об интервале и интервал строят для предикторов, которые имеют недостающие данные оба, показывают <missing>
интервал в конце. Этими двумя предикторами с отсутствующими значениями в этом наборе данных является CustAge
и ResStatus
.
bi = bininfo(sc,'CustAge');
disp(bi)
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')
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
plotbins(sc,'ResStatus')
Чтобы обработать отсутствующие значения, можно применить различные критерии. Этот пример следует за прямым подходом, чтобы заменить недостающие наблюдения на наиболее распространенное или типичное значение в распределении данных, которое является значением mode
для данных. В данном примере mode
оказывается, имеет подобное значение WOE как исходный <missing>
интервал. Подобие в значениях благоприятно, потому что подобные значения WOE означают подобные точки в протоколе результатов.
Для CustAge
, интервал 4 является интервалом с большинством наблюдений и mode
значением исходных данных является 43
.
modeCustAge = mode(dataMissing.CustAge); disp(modeCustAge)
43
Значение WOE <missing>
интервал похож на значение WOE интервала 4. Поэтому заменяя отсутствующие значения в CustAge
со значением mode
разумно.
Чтобы обработать данные, создайте копию данных и заполните отсутствующие значения.
dataTreated = dataMissing;
dataTreated.CustAge = fillmissing(dataTreated.CustAge,'constant',modeCustAge);
Для ResStatus
, значение 'Home Owner'
значение mode
из данных и значения WOE <missing>
интервал является самым близким к тому из 'Home Owner'
интервал.
modeResStatus = mode(dataMissing.ResStatus); disp(modeResStatus)
Home Owner
Замените недостающие данные на 'Home Owner'
. Заменение отсутствующих значений сохраняет и наблюдаемые значения WOE и типичные характеристики, наблюдаемые в наборе данных.
dataTreated.ResStatus = fillmissing(dataTreated.ResStatus,'constant',string(modeResStatus));
Обработанный набор данных теперь не имеет никаких отсутствующих значений.
disp(any(any(ismissing(dataTreated))))
0
Используя обработанный набор данных, примените типичный creditscorecard
рабочий процесс. Создайте creditscorecard
объект с обработанными данными и применением автоматического раскладывания.
scTreated = creditscorecard(dataTreated,'IDVar','CustID'); scTreated = autobinning(scTreated);
Сравните информацию об интервале необработанных данных для CustAge
с информацией об интервале лечивших данных для CustAge
.
bi = bininfo(sc,'CustAge');
disp(bi)
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
biTreated = bininfo(scTreated,'CustAge');
disp(biTreated)
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,45)' } 156 86 1.814 -0.10891 0.0024345 {'[45,48)' } 94 39 2.4103 0.17531 0.0033002 {'[48,58)' } 256 103 2.4854 0.20603 0.01223 {'[58,Inf]' } 93 25 3.72 0.60931 0.032198 {'Totals' } 803 397 2.0227 NaN 0.089977
Первые несколько интервалов являются тем же самым, но обработка отсутствующих значений влияет на результаты раскладывания, начиная с интервала, куда недостающие данные помещаются. Можно далее исследовать результаты раскладывания с помощью autobinning
с различным алгоритмом или можно вручную изменить интервалы с помощью modifybins
.
Для ResStatus
, результаты для обработанных данных выглядят похожими на начальные результаты, за исключением более высоких количеств в 'Home Owner'
интервал из-за обработки. Для категориальной переменной с большим количеством категорий (или уровни), автоматический алгоритм может найти группы категории, и результаты могут показать больше различий для до и после обработки. Можно далее исследовать результаты раскладывания с помощью autobinning
с различным алгоритмом или можно вручную изменить интервалы с помощью modifybins
.
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
biTreated = bininfo(scTreated,'ResStatus');
disp(biTreated)
Bin Good Bad Odds WOE InfoValue ______________ ____ ___ ______ _________ __________ {'Tenant' } 296 161 1.8385 -0.095463 0.0035249 {'Home Owner'} 379 184 2.0598 0.018182 0.00015462 {'Other' } 128 52 2.4615 0.19637 0.0055808 {'Totals' } 803 397 2.0227 NaN 0.0092603
Подбирайте логистическую модель, масштабируйте точки и отобразите итоговый протокол результатов.
scTreated = fitmodel(scTreated,'Display','off'); scTreated = formatpoints(scTreated,'PointsOddsAndPDO',[500 2 50]); ScPoints = displaypoints(scTreated); disp(ScPoints)
Predictors Bin Points ______________ _____________________ ______ {'CustAge' } {'[-Inf,33)' } 53.507 {'CustAge' } {'[33,37)' } 55.798 {'CustAge' } {'[37,40)' } 59.646 {'CustAge' } {'[40,45)' } 66.868 {'CustAge' } {'[45,48)' } 79.013 {'CustAge' } {'[48,58)' } 80.326 {'CustAge' } {'[58,Inf]' } 97.559 {'CustAge' } {'<missing>' } NaN {'ResStatus' } {'Tenant' } 62.161 {'ResStatus' } {'Home Owner' } 73.305 {'ResStatus' } {'Other' } 90.777 {'ResStatus' } {'<missing>' } NaN {'EmpStatus' } {'Unknown' } 58.846 {'EmpStatus' } {'Employed' } 86.887 {'EmpStatus' } {'<missing>' } NaN {'CustIncome'} {'[-Inf,29000)' } 29.906 {'CustIncome'} {'[29000,33000)' } 56.219 {'CustIncome'} {'[33000,35000)' } 67.938 {'CustIncome'} {'[35000,40000)' } 70.123 {'CustIncome'} {'[40000,42000)' } 70.931 {'CustIncome'} {'[42000,47000)' } 82.3 {'CustIncome'} {'[47000,Inf]' } 96.647 {'CustIncome'} {'<missing>' } NaN {'TmWBank' } {'[-Inf,12)' } 51.05 {'TmWBank' } {'[12,23)' } 61.018 {'TmWBank' } {'[23,45)' } 61.818 {'TmWBank' } {'[45,71)' } 92.921 {'TmWBank' } {'[71,Inf]' } 133.14 {'TmWBank' } {'<missing>' } NaN {'OtherCC' } {'No' } 50.806 {'OtherCC' } {'Yes' } 75.642 {'OtherCC' } {'<missing>' } NaN {'AMBalance' } {'[-Inf,558.88)' } 89.788 {'AMBalance' } {'[558.88,1254.28)' } 63.088 {'AMBalance' } {'[1254.28,1597.44)'} 59.711 {'AMBalance' } {'[1597.44,Inf]' } 49.157 {'AMBalance' } {'<missing>' } NaN
Нет никакого явного <missing>
интервалы в итоговом протоколе результатов. Если необходимо выиграть новый набор данных, и он содержит недостающие данные, по умолчанию score
функционируйте устанавливает точки на NaN
. Чтобы далее исследовать обработку недостающих данных, возьмите несколько строк из исходных данных как тестовые данные и введите некоторые недостающие данные.
tdata = dataTreated(11:14,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; 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
Выиграйте новые данные и смотрите, как точки установлены в NaN
, который приводит к NaN
баллы.
[Scores,Points] = score(scTreated,tdata); disp(Scores)
NaN NaN NaN NaN
disp(Points)
CustAge ResStatus EmpStatus CustIncome TmWBank OtherCC AMBalance _______ _________ _________ __________ _______ _______ _________ NaN 62.161 58.846 67.938 61.818 75.642 89.788 80.326 NaN 58.846 82.3 61.018 75.642 89.788 97.559 73.305 NaN 96.647 51.05 50.806 89.788 66.868 90.777 58.846 NaN 61.818 50.806 89.788
Для необработанных предикторов, таких как EmpStatus
или CustIncome
, можно использовать аргумент 'Missing'
значения имени в
formatpoints
выбрать, как присвоить точки отсутствующим значениям.
Используйте 'MinPoints'
опция для 'Missing'
аргумент. Это присваивает минимальный номер возможных точек в протоколе результатов к недостающим данным. В этом примере, минимальном количестве возможных точек для CustIncome
29.906
, таким образом, последняя строка в таблице получает 29.906
точки для недостающего CustIncome
значение.
scTreated = formatpoints(scTreated,'Missing','MinPoints'); [Scores,Points] = score(scTreated,tdata); disp(Scores)
469.7003 510.0812 518.0013 448.8099
disp(Points)
CustAge ResStatus EmpStatus CustIncome TmWBank OtherCC AMBalance _______ _________ _________ __________ _______ _______ _________ 53.507 62.161 58.846 67.938 61.818 75.642 89.788 80.326 62.161 58.846 82.3 61.018 75.642 89.788 97.559 73.305 58.846 96.647 51.05 50.806 89.788 66.868 90.777 58.846 29.906 61.818 50.806 89.788
Однако для предикторов, которые были обработаны в обучающих данных, таких как CustAge
, эффект 'Missing'
аргумент противоречив с обработкой обучающих данных. Например, для CustAge
, первое наблюдение получает 53.507
точки для отсутствующего значения, все же если новые данные были "обработаны", и отсутствующее значение для CustAge
были заменены mode
из обучающих данных (возраст 43
), это наблюдение обрушивается [40,45), интервал, и получает 66.868
'points'.
Поэтому перед выигрышем, наборы данных должны быть обработаны тем же путем, обучающие данные были обработаны. Использование 'Missing'
аргумент все еще важен, чтобы присвоить точки для необработанных предикторов, и обработанные предикторы получают очки способом, который сопоставим со способом, которым была разработана модель.
tdataTreated = tdata; tdataTreated.CustAge = fillmissing(tdataTreated.CustAge,'constant',modeCustAge); tdataTreated.ResStatus = fillmissing(tdataTreated.ResStatus,'constant',string(modeResStatus)); disp(tdataTreated)
CustAge ResStatus EmpStatus CustIncome TmWBank OtherCC AMBalance _______ __________ ___________ __________ _______ _______ _________ 43 Tenant Unknown 34000 44 Yes 119.8 48 Home Owner Unknown 44000 14 Yes 403.62 65 Home Owner <undefined> 48000 6 No 111.88 44 Other Unknown NaN 35 No 436.41
[Scores,Points] = score(scTreated,tdataTreated); disp(Scores)
483.0606 521.2249 518.0013 448.8099
disp(Points)
CustAge ResStatus EmpStatus CustIncome TmWBank OtherCC AMBalance _______ _________ _________ __________ _______ _______ _________ 66.868 62.161 58.846 67.938 61.818 75.642 89.788 80.326 73.305 58.846 82.3 61.018 75.642 89.788 97.559 73.305 58.846 96.647 51.05 50.806 89.788 66.868 90.777 58.846 29.906 61.818 50.806 89.788
bininfo
| creditscorecard
| plotbins