Припишите моделированию протокола результатов отсутствующие значения

Этот пример показывает, как обработать отсутствующие значения при работе с объектами 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=33×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
    'CustIncome'    '[-Inf,29000)'    29.375
      ⋮

Заметьте, что точки для интервала <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
    'ResStatus'     'Tenant'               62.161
    'ResStatus'     'Home Owner'           73.305
    'ResStatus'     'Other'                90.777
    'EmpStatus'     'Unknown'              58.846
    'EmpStatus'     'Employed'             86.887
    '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
    '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
    'OtherCC'       'No'                   50.806
    'OtherCC'       'Yes'                  75.642
    '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

В итоговом протоколе результатов нет никаких явных интервалов <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.

Поэтому перед выигрышем, наборы данных должны быть обработаны тем же путем, данные тренировки были обработаны. Использование аргумента '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  

Смотрите также

| |

Похожие темы