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

В этом примере показано, как обработать отсутствующие значения, когда вы работаете с creditscorecard объекты. Во-первых, пример показывает, как использовать creditscorecard функциональность, чтобы создать явный интервал для недостающих данных с соответствующими точками. Затем этот пример описывает четыре различных способа "обработать" недостающие данные, чтобы получить протокол результатов окончательного кредита без явных интервалов для отсутствующих значений.

Разработайте протокол результатов кредита с явными интервалами для отсутствующих значений

Когда вы создаете creditscorecard объект, данные могут содержать отсутствующие значения. При использовании creditscorecard создать creditscorecard объект, можно установить аргумент пары "имя-значение" для 'BinMissingData' установите на true. В этом случае, недостающие данные для числовых предикторов (NaN значения) и для категориальных предикторов (<undefined> значения), сгруппировано в отдельном интервале, пометил <missing> это появляется в конце интервалов. Предикторы без отсутствующих значений в обучающих данных не имеют никакого <missing> интервал. Если вы не задаете 'BinMissingData' аргумент или если вы устанавливаете 'BinMissingData' к false, creditscorecard функционируйте отбрасывания недостающие наблюдения когда вычислительные частоты Хороших и Плохих, и ни один bininfo ни plotbins функции сообщают о таких наблюдениях.

<missing> интервал остается на месте в течение процесса моделирования протокола результатов. Итоговый протокол результатов явным образом указывает на точки, которые будут присвоены отсутствующим значениям для предикторов, которые имеют <missing> интервал. Эти точки определяются из значения веса доказательства (WOE) <missing> интервал и коэффициент предиктора в логистической модели. Для предикторов без явного <missing> интервал, можно присвоить точки отсутствующим значениям с помощью аргумента пары "имя-значение" '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. Примените автоматическое раскладывание.

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')

Figure contains an axes object. The axes object with title CustAge contains 3 objects of type bar, line. These objects represent Good, Bad.

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')

Figure contains an axes object. The axes object with title ResStatus contains 3 objects of type bar, line. These objects represent Good, Bad.

Обучающие данные для 'CustAge' и 'ResStatus' предикторы имеют недостающие данные (NaNs и <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,'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> интервал и логистические коэффициенты модели.

Точки для предикторов, которые не имеют никаких недостающих данных в наборе обучающих данных, по умолчанию, установлены в 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'медианарежим, и 'constant', а также опция, чтобы переключиться назад на исходные данные.

Преимущество использования fillmissing это creditscorecard объект отслеживает значение заливки и также применяет его к данным о валидации. Ограничение этого подхода - то, что только базовые статистические данные используются, чтобы заполнить недостающие данные.

Для получения дополнительной информации о Подходе 1, смотрите fillmissing.

Приблизьтесь 2: Заполните недостающие данные с помощью MATLAB® fillmissing функция

MATLAB® поддерживает fillmissing функция, которую можно использовать прежде, чем создать creditscorecard возразите, чтобы обработать отсутствующие значения в числовых и категориальных данных. Преимущество этого метода состоит в том, что можно использовать все опции, доступные в fillmissing заполнять недостающие данные, а также другую функциональность MATLAB, такую как standardizeMissing и функции обработки выбросов. Однако оборотная сторона - то, что вы ответственны за те же преобразования к данным о валидации прежде, чем выиграть как fillmissing функция находится вне creditscorecard объект.

Для получения дополнительной информации о Подходе 2, смотрите Обработку пропустить Данные в Рабочем процессе Протокола результатов Кредита Используя MATLAB® fillmissing.

Приблизьтесь 3: Припишите недостающие данные с помощью алгоритма k - ближайших соседей (KNN)

Этот подход KNN полагает, что несколько предикторов, как сравнено Приближаются 1 и Подход 2. Как Подход 2, подход KNN сделан вне creditscoreacrd рабочий процесс, и следовательно, необходимо выполнить обвинение и для данных об обучении и для валидации.

Для получения дополнительной информации о Подходе 3, смотрите, Приписывают Недостающие Данные в Рабочем процессе Протокола результатов Кредита Используя Алгоритм k - ближайших соседей.

Приблизьтесь 4: Припишите недостающие данные с помощью случайного лесного алгоритма

Этот случайный лесной подход подобен, чтобы Приблизиться 3 и использует несколько предикторов, чтобы приписать отсутствующие значения. Поскольку подход находится вне creditscorecard рабочий процесс, необходимо выполнить обвинение и для данных об обучении и для валидации.

Для получения дополнительной информации о Подходе 4, смотрите, Приписывают Недостающие Данные в Рабочем процессе Протокола результатов Кредита Используя Случайный Лесной Алгоритм.

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

| | |

Похожие темы