В этом примере показано, как обрабатывать отсутствующие значения при работе с creditscorecard объекты. Во-первых, в примере показано, как использовать creditscorecard создание явной ячейки для отсутствующих данных с соответствующими точками. Затем в этом примере описываются четыре различных способа обработки отсутствующих данных для получения окончательной кредитной карты показателей без явных ячеек для отсутствующих значений.
При создании creditscorecard , данные могут содержать отсутствующие значения. При использовании creditscorecard для создания creditscorecard объект, можно задать аргумент пары имя-значение для 'BinMissingData' установить в значение true. В этом случае отсутствуют данные для числовых предикторов (NaN значения) и для категориальных предикторов (<undefined> значения) привязывается к отдельной ячейке с меткой <missing> появляется в конце ячеек. Предикторы без отсутствующих значений в данных обучения не имеют <missing> бункер. Если не указать 'BinMissingData' аргумент или если установлен 'BinMissingData' кому false, creditscorecard функция отбрасывает отсутствующие наблюдения при вычислении частот хорошего и плохого, и ни bininfo ни plotbins функции сообщают о таких наблюдениях.
<missing> ячейка остается на месте в течение всего процесса моделирования карты показателей. Окончательная карта показателей явно указывает точки, которые должны быть назначены отсутствующим значениям для предикторов, имеющих <missing> бункер. Эти точки определяются из значения веса доказательства (WOE) <missing> bin и коэффициент предиктора в логистической модели. Для предикторов без явного <missing> bin, можно назначить точки отсутствующим значениям с помощью аргумента пары имя-значение 'Missing' в formatpoints, как описано в этом примере, или с помощью одного из четырех различных способов «обработки» отсутствующих данных.
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. Применение автоматического binning.
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' в предикторах отсутствуют данные (NaNs и <undefined>). Процесс binning оценивает значения WOE -0.15787 и 0.026469соответственно, для отсутствующих данных в этих предикторах.
Данные обучения для EmpStatus и CustIncome не имеет явного bin для <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> bin применяется, когда функция выполняет преобразование WOE.
[sc,mdl] = fitmodel(sc,'display','off');
Масштабирование точек карты показателей методом «точки-двойные шансы» (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> bin и коэффициенты логистической модели.
Для предикторов, не имеющих отсутствующих данных в обучающем наборе, по умолчанию установлены значения NaN и они приводят к оценке NaN при выполнении score. Это можно изменить, обновив аргумент пары имя-значение '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
Существует четыре различных подхода к лечению недостающих данных.
Подход 1: Заполните недостающие данные с помощью fillmissing функции creditscorecard объект
creditscorecard объект поддерживает fillmissing функция. При вызове функции на предикторе или группе предикторов, fillmissing заполняет отсутствующие данные пользовательской статистикой. fillmissing поддерживает значения заливки 'mean', 'median', 'mode', и 'constant', а также возможность возврата к исходным данным.
Преимущество использования fillmissing что creditscorecard объект отслеживает значение заливки, а также применяет его к данным проверки. Ограничением этого подхода является то, что для заполнения недостающих данных используются только базовые статистические данные.
Для получения дополнительной информации о подходе 1 см. fillmissing.
Подход 2: Заполните недостающие данные с помощью MATLAB ®fillmissing функция
MATLAB ® поддерживает fillmissing функция, которую можно использовать перед созданием creditscorecard объект для обработки отсутствующих значений в числовых и категориальных данных. Преимущество этого метода заключается в том, что можно использовать все опции, доступные в fillmissing для заполнения недостающих данных, а также других функциональных возможностей MATLAB, таких как standardizeMissing и особенности лечения отклонений. Однако недостатком является то, что вы несете ответственность за те же преобразования в данных проверки перед оценкой, что и fillmissing функция находится вне creditscorecard объект.
Для получения дополнительной информации о подходе 2 см. Обработка отсутствующих данных в потоке операций кредитной карты показателей с использованием заполнения MATLAB ®.
Подход 3: Подсчитать недостающие данные с использованием алгоритма k-ближайших соседей (KNN)
Этот подход KNN рассматривает множество предикторов по сравнению с подходом 1 и подходом 2. Как и подход 2, подход KNN выполняется вне creditscoreacrd workflow, и, следовательно, необходимо выполнить вменение как для данных обучения, так и для данных проверки.
Дополнительные сведения о подходе 3 см. в разделе Импутация отсутствующих данных в потоке операций кредитной карты показателей с использованием алгоритма k-ближайших соседей.
Подход 4: Вменять недостающие данные с использованием алгоритма случайного леса
Этот случайный лесной подход аналогичен подходу 3 и использует несколько предикторов для расчета отсутствующих значений. Потому что подход вне creditscorecard workflow-процесс, необходимо выполнить вменение как для данных обучения, так и для данных проверки.
Дополнительные сведения о подходе 4 см. в разделе Импутация отсутствующих данных в потоке операций кредитной карты показателей с использованием алгоритма случайного леса.
bininfo | creditscorecard | fillmissing | plotbins