exponenta event banner

Устранение неполадок с результатами кредитной карты показателей

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

Имя предиктора не указано, и синтаксический анализатор возвращает ошибку

При попытке использования modifybins, bininfo, или plotbins и опустить имя предиктора, синтаксический анализатор возвращает ошибку.

load CreditCardData
sc = creditscorecard(data,'IDVar','CustID','GoodLabel',0);
modifybins(sc,'CutPoints',[20 30 50 65])
Error using creditscorecard/modifybins (line 79)
Expected a string for the parameter name, instead the input type was 'double'.

Решение: Не забудьте включить имя предиктора при использовании этих функций. Используйте этот синтаксис для указания PredictorName при использовании modifybins.

load CreditCardData
sc = creditscorecard(data,'IDVar','CustID','GoodLabel',0);
modifybins(sc,'CustIncome','CutPoints',[20 30 50 65]);

Используя bininfo или plotbins Перед Binning

Если вы используете bininfo или plotbins перед объединением результаты могут оказаться непригодными для использования.

load CreditCardData
sc = creditscorecard(data,'IDVar','CustID','GoodLabel',0);
bininfo(sc,'CustAge')
plotbins(sc,'CustAge')
ans = 

      Bin       Good    Bad     Odds         WOE       InfoValue 
    ________    ____    ___    _______    _________    __________

    '21'          2       1          2    -0.011271    3.1821e-07
    '22'          3       1          3      0.39419    0.00047977
    '23'          1       2        0.5      -1.3976     0.0053002
    '24'          3       4       0.75      -0.9921     0.0062895
    '25'          3       1          3      0.39419    0.00047977
    '26'          4       2          2    -0.011271    6.3641e-07
    '27'          6       5        1.2      -0.5221     0.0026744
    '28'         10       2          5      0.90502     0.0067112
    '29'          8       6     1.3333     -0.41674     0.0021465
    '30'          9      10        0.9     -0.80978      0.011321
    '31'          8       6     1.3333     -0.41674     0.0021465
    '32'         13      13          1     -0.70442      0.011663
    '33'          9      11    0.81818     -0.90509      0.014934
    '34'         14      12     1.1667     -0.55027     0.0070391
    '35'         18      10        1.8     -0.11663    0.00032342
    '36'         23      14     1.6429     -0.20798     0.0013772
    '37'         28      19     1.4737     -0.31665     0.0041132
    '38'         24      14     1.7143     -0.16542     0.0008894
    '39'         21      14        1.5     -0.29895     0.0027242
    '40'         31      12     2.5833      0.24466     0.0020499
    '41'         21      18     1.1667     -0.55027      0.010559
    '42'         29       9     3.2222      0.46565     0.0062605
    '43'         29      23     1.2609     -0.47262      0.010312
    '44'         28      16       1.75      -0.1448    0.00078672
    '45'         36      16       2.25      0.10651    0.00048246
    '46'         33      19     1.7368     -0.15235     0.0010303
    '47'         28       6     4.6667      0.83603      0.016516
    '48'         32      17     1.8824    -0.071896    0.00021357
    '49'         38      10        3.8      0.63058      0.013957
    '50'         33      14     2.3571      0.15303    0.00089239
    '51'         28       9     3.1111      0.43056     0.0052525
    '52'         35       8      4.375      0.77149       0.01808
    '53'         14       8       1.75      -0.1448    0.00039336
    '54'         27      12       2.25      0.10651    0.00036184
    '55'         20       9     2.2222     0.094089    0.00021044
    '56'         20      11     1.8182     -0.10658    0.00029856
    '57'         16       7     2.2857      0.12226    0.00028035
    '58'         11       7     1.5714     -0.25243    0.00099297
    '59'         11       6     1.8333    -0.098283    0.00013904
    '60'          9       4       2.25      0.10651    0.00012061
    '61'         11       2        5.5       1.0003     0.0086637
    '62'          8       0        Inf          Inf           Inf
    '63'          7       1          7       1.2415     0.0076953
    '64'         10       0        Inf          Inf           Inf
    '65'          4       1          4      0.68188     0.0016791
    '66'          6       1          6       1.0873     0.0053857
    '67'          2       3    0.66667      -1.1099     0.0056227
    '68'          6       1          6       1.0873     0.0053857
    '69'          6       0        Inf          Inf           Inf
    '70'          1       0        Inf          Inf           Inf
    '71'          1       0        Inf          Inf           Inf
    '72'          1       0        Inf          Inf           Inf
    '73'          3       0        Inf          Inf           Inf
    '74'          1       0        Inf          Inf           Inf
    'Totals'    803     397     2.0227          NaN           Inf

Plot for CustAge demonstrating when there are too many bins

График для CustAge недоступно для чтения, так как в нем слишком много ячеек. Также, bininfo возвращает данные, которые имеют Inf значения для WOE из-за нулевых наблюдений для хорошего или плохого.

Решение: Складирование данных с использованием autobinning или modifybins перед построением графика или запросом статистики ячейки, чтобы избежать слишком большого количества ячеек или NaNs и Infs. Например, можно использовать аргумент пара имя-значение для AlgoOptions с autobinning для определения количества ячеек.

load CreditCardData
sc = creditscorecard(data,'IDVar','CustID','GoodLabel',0);
AlgoOptions = {'NumBins',4};
sc = autobinning(sc,'CustAge','Algorithm','EqualFrequency',...
'AlgorithmOptions',AlgoOptions);
bininfo(sc,'CustAge','Totals','off')
plotbins(sc,'CustAge')
ans = 

        Bin        Good    Bad     Odds       WOE       InfoValue
    ___________    ____    ___    ______    ________    _________

    '[-Inf,39)'    186     133    1.3985    -0.36902      0.03815
    '[39,46)'      195     108    1.8056    -0.11355    0.0033158
    '[46,52)'      192      75      2.56     0.23559     0.011823
    '[52,Inf]'     230      81    2.8395     0.33921      0.02795

Plot for CustAge with appropriate number of bins after using the autobinning function

Если категориальные данные указаны как числовые

Категориальные данные часто записываются с использованием числовых значений и могут храниться в числовом массиве. Хотя вы знаете, что данные должны интерпретироваться как категориальная информация, для creditscorecard этот предиктор выглядит как числовой массив.

Чтобы показать случай, когда категориальные данные даны как числовые данные, данные для переменной ResStatus намеренно преобразуется в числовые значения.

load CreditCardData
data.ResStatus = double(data.ResStatus);
sc = creditscorecard(data,'IDVar','CustID')
sc = 

  creditscorecard with properties:

                GoodLabel: 0
              ResponseVar: 'status'
                 VarNames: {1x11 cell}
        NumericPredictors: {1x7 cell}
    CategoricalPredictors: {'EmpStatus'  'OtherCC'}
                    IDVar: 'CustID'
            PredictorVars: {1x9 cell}

Обратите внимание, что 'ResStatus' появляется как часть NumericPredictors собственность. Если мы применили автоматическое связывание, полученная информация о ячейке поднимает флаги относительно типа предиктора.

sc = autobinning(sc,'ResStatus');
[bi,cg] = bininfo(sc,'ResStatus')
bi = 

       Bin        Good    Bad     Odds        WOE       InfoValue 
    __________    ____    ___    ______    _________    __________

    '[-Inf,2)'    365     177    2.0621     0.019329     0.0001682
    '[2,Inf]'     438     220    1.9909    -0.015827    0.00013772
    'Totals'      803     397    2.0227          NaN    0.00030592


cg =

     2

Числовые диапазоны в метках ячеек показывают, что 'ResStatus' рассматривается как числовая переменная. Это также подтверждается тем фактом, что необязательный выход из bininfo - числовой массив точек реза, в отличие от таблицы с группированием категорий. Более того, выход из predictorinfo подтверждает, что кредитная карта показателей рассматривает данные как числовые.

[T,Stats] = predictorinfo(sc,'ResStatus')
T = 

                 PredictorType        LatestBinning     
                 _____________    ______________________

    ResStatus    'Numeric'        'Automatic / Monotone'


Stats = 

             Value 
            _______

    Min           1
    Max           3
    Mean     1.7017
    Std     0.71863

Решение: Для creditscorecard, 'Categorical' означает категориальный тип данных MATLAB ®. Дополнительные сведения см. в разделеcategorical. Рассматривать'ResStatus' как категорический, изменить 'PredictorType' из PredictorName 'ResStatus' от 'Numeric' кому 'Categorical' использование modifypredictor.

sc = modifypredictor(sc,'ResStatus','PredictorType','Categorical')
[T,Stats] = predictorinfo(sc,'ResStatus')
sc = 

  creditscorecard with properties:

                GoodLabel: 0
              ResponseVar: 'status'
                 VarNames: {1x11 cell}
        NumericPredictors: {1x6 cell}
    CategoricalPredictors: {'ResStatus'  'EmpStatus'  'OtherCC'}
                    IDVar: 'CustID'
            PredictorVars: {1x9 cell}


T = 

                 PredictorType    Ordinal     LatestBinning 
                 _____________    _______    _______________

    ResStatus    'Categorical'    false      'Original Data'


Stats = 

          Count
          _____

    C1    542  
    C2    474  
    C3    184  

Обратите внимание, что 'ResStatus' теперь появляется как часть категориальных предикторов. Также, predictorinfo теперь описывает 'ResStatus' как категориальное и отображает количество категорий.

Если вы подаете заявку autobinning, категории теперь переупорядочены, как показано вызовом bininfo, который также показывает метки категорий, в отличие от числовых диапазонов. Необязательный выход bininfo теперь является таблицей группировки категорий.

sc = autobinning(sc,'ResStatus');
[bi,cg] = bininfo(sc,'ResStatus')
bi = 

      Bin       Good    Bad     Odds        WOE       InfoValue
    ________    ____    ___    ______    _________    _________

    'C2'        307     167    1.8383    -0.095564    0.0036638
    'C1'        365     177    2.0621     0.019329    0.0001682
    'C3'        131      53    2.4717      0.20049    0.0059418
    'Totals'    803     397    2.0227          NaN    0.0097738


cg = 

    Category    BinNumber
    ________    _________

    'C2'        1        
    'C1'        2        
    'C3'        3        

NaNs Возвращено при оценке набора данных «Test»

При применении creditscorecard модель в «тестовый» набор данных с использованием score функция, если наблюдение в наборе данных «test» имеет NaN или <undefined> значение, a NaN общий балл возвращается для каждого из этих наблюдений. Например, creditscorecard объект создается с использованием данных «обучения».

load CreditCardData
sc = creditscorecard(data,'IDVar','CustID');
sc = autobinning(sc);
sc = 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 = 1441.994, Chi2Stat = 5.3511754, PValue = 0.020708306
6. Adding ResStatus, Deviance = 1437.8756, Chi2Stat = 4.118404, PValue = 0.042419078
7. Adding OtherCC, Deviance = 1433.707, Chi2Stat = 4.1686018, PValue = 0.041179769

Generalized Linear regression model:
    logit(status) ~ 1 + CustAge + ResStatus + EmpStatus + CustIncome + TmWBank + OtherCC + AMBalance
    Distribution = Binomial

Estimated Coefficients:
                   Estimate       SE       tStat       pValue  
                   ________    ________    ______    __________

    (Intercept)    0.70239     0.064001    10.975    5.0538e-28
    CustAge        0.60833      0.24932      2.44      0.014687
    ResStatus        1.377      0.65272    2.1097      0.034888
    EmpStatus      0.88565        0.293    3.0227     0.0025055
    CustIncome     0.70164      0.21844    3.2121     0.0013179
    TmWBank         1.1074      0.23271    4.7589    1.9464e-06
    OtherCC         1.0883      0.52912    2.0569      0.039696
    AMBalance        1.045      0.32214    3.2439     0.0011792


1200 observations, 1192 error degrees of freedom
Dispersion: 1
Chi^2-statistic vs. constant model: 89.7, p-value = 1.4e-16

Предположим, что отсутствует наблюдение (Nan) добавляется к данным, а затем newdata оценивается с использованием score функция. По умолчанию точки и оценка, назначенные отсутствующему значению, равны NaN.

newdata = data(1:10,:);
newdata.CustAge(1) = NaN;
[Scores,Points] = score(sc,newdata)
Scores =

       NaN
    1.4646
    0.7662
    1.5779
    1.4535
    1.8944
   -0.0872
    0.9207
    1.0399
    0.8252


Points = 

    CustAge     ResStatus    EmpStatus    CustIncome     TmWBank     OtherCC     AMBalance
    ________    _________    _________    __________    _________    ________    _________

         NaN    -0.031252    -0.076317     0.43693        0.39607     0.15842    -0.017472
       0.479      0.12696      0.31449     0.43693      -0.033752     0.15842    -0.017472
     0.21445    -0.031252      0.31449    0.081611        0.39607    -0.19168    -0.017472
     0.23039      0.12696      0.31449     0.43693      -0.044811     0.15842      0.35551
       0.479      0.12696      0.31449     0.43693      -0.044811     0.15842    -0.017472
       0.479      0.12696      0.31449     0.43693        0.39607     0.15842    -0.017472
    -0.14036      0.12696    -0.076317    -0.10466      -0.033752     0.15842    -0.017472
     0.23039      0.37641      0.31449     0.43693      -0.033752    -0.19168     -0.21206
     0.23039    -0.031252    -0.076317     0.43693      -0.033752     0.15842      0.35551
     0.23039      0.12696    -0.076317     0.43693      -0.033752     0.15842    -0.017472

Также обратите внимание, что, потому что CustAge предиктор для первого наблюдения NaN, соответствующий Scores вывод - NaN также.

Решение: Для решения этой проблемы используйте formatpoints функция с аргументом пара имя-значение Missing. При использовании Missing, вы можете заменить предиктор NaN значение по трем альтернативным критериям ('ZeroWoe', 'MinPoints', или 'MaxPoints').

Например, использовать Missing для замены отсутствующего значения на 'MinPoints' вариант. Строка с отсутствующими данными теперь имеет оценку, соответствующую присвоению ей минимально возможных баллов для CustAge.

sc = formatpoints(sc,'Missing','MinPoints');
[Scores,Points] = score(sc,newdata)
PointsTable = displaypoints(sc);
PointsTable(1:7,:)
Scores =

    0.7074
    1.4646
    0.7662
    1.5779
    1.4535
    1.8944
   -0.0872
    0.9207
    1.0399
    0.8252


Points = 

    CustAge     ResStatus    EmpStatus    CustIncome     TmWBank     OtherCC     AMBalance
    ________    _________    _________    __________    _________    ________    _________

    -0.15894    -0.031252    -0.076317     0.43693        0.39607     0.15842    -0.017472
       0.479      0.12696      0.31449     0.43693      -0.033752     0.15842    -0.017472
     0.21445    -0.031252      0.31449    0.081611        0.39607    -0.19168    -0.017472
     0.23039      0.12696      0.31449     0.43693      -0.044811     0.15842      0.35551
       0.479      0.12696      0.31449     0.43693      -0.044811     0.15842    -0.017472
       0.479      0.12696      0.31449     0.43693        0.39607     0.15842    -0.017472
    -0.14036      0.12696    -0.076317    -0.10466      -0.033752     0.15842    -0.017472
     0.23039      0.37641      0.31449     0.43693      -0.033752    -0.19168     -0.21206
     0.23039    -0.031252    -0.076317     0.43693      -0.033752     0.15842      0.35551
     0.23039      0.12696    -0.076317     0.43693      -0.033752     0.15842    -0.017472


ans = 

    Predictors        Bin         Points  
    __________    ___________    _________

    'CustAge'     '[-Inf,33)'     -0.15894
    'CustAge'     '[33,37)'       -0.14036
    'CustAge'     '[37,40)'      -0.060323
    'CustAge'     '[40,46)'       0.046408
    'CustAge'     '[46,48)'        0.21445
    'CustAge'     '[48,58)'        0.23039
    'CustAge'     '[58,Inf]'         0.479

Обратите внимание, что Scores вывод имеет значение для первой записи клиента, поскольку CustAge теперь имеет значение, и оценка может быть вычислена для первой записи клиента.

См. также

| | | | | | | | | | | | | |

Связанные примеры

Подробнее