exponenta event banner

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

В этом примере показано, как обрабатывать отсутствующие значения при работе с 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')

Figure contains an axes. The axes 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. The axes with title ResStatus contains 3 objects of type bar, line. These objects represent Good, Bad.

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

См. также

| | |

Связанные темы