validatemodel

Подтвердите качество модели протокола результатов кредита

Синтаксис

Stats = validatemodel(sc)
Stats = validatemodel(sc,data)
[Stats,T] = validatemodel(sc,Name,Value)
[Stats,T,hf] = validatemodel(sc,Name,Value)

Описание

пример

Stats = validatemodel(sc) подтверждает качество модели creditscorecard.

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

пример

Stats = validatemodel(sc,data) подтверждает качество модели creditscorecard для набора определенных данных, заданного с помощью дополнительного аргумента data.

пример

[Stats,T] = validatemodel(sc,Name,Value) подтверждает качество модели creditscorecard с помощью дополнительных аргументов пары "имя-значение" и возвращает Stats и T выходные параметры.

пример

[Stats,T,hf] = validatemodel(sc,Name,Value) подтверждает качество модели creditscorecard с помощью дополнительных аргументов пары "имя-значение" и возвращается, фигура обрабатывают hf к ПРОПИСНОЙ БУКВЕ, ROC и графикам KS.

Примеры

свернуть все

Создайте объект creditscorecard с помощью файла CreditCardData.mat, чтобы загрузить data (использующий набор данных от Refaat 2011).

load CreditCardData
sc = creditscorecard(data, 'IDVar','CustID')
sc = 
  creditscorecard with properties:

                GoodLabel: 0
              ResponseVar: 'status'
               WeightsVar: ''
                 VarNames: {1x11 cell}
        NumericPredictors: {1x6 cell}
    CategoricalPredictors: {'ResStatus'  'EmpStatus'  'OtherCC'}
           BinMissingData: 0
                    IDVar: 'CustID'
            PredictorVars: {1x9 cell}
                     Data: [1200x11 table]

Выполните автоматическое раскладывание с помощью опций по умолчанию. По умолчанию autobinning использует алгоритм Monotone.

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:
    status ~ [Linear formula with 8 terms in 7 predictors]
    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

Отформатируйте немасштабированные точки.

sc = formatpoints(sc, 'PointsOddsAndPDO',[500,2,50]);

Выиграйте данные.

scores = score(sc);

Подтвердите модель протокола результатов кредита путем генерации ПРОПИСНОЙ БУКВЫ, ROC и графиков KS.

[Stats,T] = validatemodel(sc,'Plot',{'CAP','ROC','KS'});

disp(Stats)
           Measure             Value 
    ______________________    _______

    'Accuracy Ratio'          0.32258
    'Area under ROC curve'    0.66129
    'KS statistic'             0.2246
    'KS score'                 499.62
disp(T(1:15,:))
    Scores    ProbDefault    TrueBads    FalseBads    TrueGoods    FalseGoods    Sensitivity    FalseAlarm      PctObs  
    ______    ___________    ________    _________    _________    __________    ___________    __________    __________

    369.54      0.75313          0           1           802          397                 0     0.0012453     0.00083333
    378.19      0.73016          1           1           802          396         0.0025189     0.0012453      0.0016667
    380.28      0.72444          2           1           802          395         0.0050378     0.0012453         0.0025
    391.49      0.69234          3           1           802          394         0.0075567     0.0012453      0.0033333
    395.57      0.68017          4           1           802          393          0.010076     0.0012453      0.0041667
    396.14      0.67846          4           2           801          393          0.010076     0.0024907          0.005
    396.45      0.67752          5           2           801          392          0.012594     0.0024907      0.0058333
    398.61      0.67094          6           2           801          391          0.015113     0.0024907      0.0066667
    398.68      0.67072          7           2           801          390          0.017632     0.0024907         0.0075
    401.33      0.66255          8           2           801          389          0.020151     0.0024907      0.0083333
    402.66      0.65842          8           3           800          389          0.020151      0.003736      0.0091667
    404.25      0.65346          9           3           800          388           0.02267      0.003736           0.01
    404.73      0.65193          9           4           799          388           0.02267     0.0049813       0.010833
    405.53      0.64941         11           4           799          386          0.027708     0.0049813         0.0125
     405.7      0.64887         11           5           798          386          0.027708     0.0062267       0.013333

Используйте файл CreditCardData.mat, чтобы загрузить данные (dataWeights), который содержит столбец (RowWeights) для весов (использующий набор данных от Refaat 2011).

load CreditCardData

Создайте объект creditscorecard с помощью дополнительного аргумента пары "имя-значение" для 'WeightsVar'.

sc = creditscorecard(dataWeights,'IDVar','CustID','WeightsVar','RowWeights')
sc = 
  creditscorecard with properties:

                GoodLabel: 0
              ResponseVar: 'status'
               WeightsVar: 'RowWeights'
                 VarNames: {1x12 cell}
        NumericPredictors: {1x6 cell}
    CategoricalPredictors: {'ResStatus'  'EmpStatus'  'OtherCC'}
           BinMissingData: 0
                    IDVar: 'CustID'
            PredictorVars: {1x9 cell}
                     Data: [1200x12 table]

Выполните автоматическое раскладывание.

sc = autobinning(sc)
sc = 
  creditscorecard with properties:

                GoodLabel: 0
              ResponseVar: 'status'
               WeightsVar: 'RowWeights'
                 VarNames: {1x12 cell}
        NumericPredictors: {1x6 cell}
    CategoricalPredictors: {'ResStatus'  'EmpStatus'  'OtherCC'}
           BinMissingData: 0
                    IDVar: 'CustID'
            PredictorVars: {1x9 cell}
                     Data: [1200x12 table]

Соответствуйте модели.

sc = fitmodel(sc);
1. Adding CustIncome, Deviance = 764.3187, Chi2Stat = 15.81927, PValue = 6.968927e-05
2. Adding TmWBank, Deviance = 751.0215, Chi2Stat = 13.29726, PValue = 0.0002657942
3. Adding AMBalance, Deviance = 743.7581, Chi2Stat = 7.263384, PValue = 0.007037455

Generalized linear regression model:
    logit(status) ~ 1 + CustIncome + TmWBank + AMBalance
    Distribution = Binomial

Estimated Coefficients:
                   Estimate       SE       tStat       pValue  
                   ________    ________    ______    __________

    (Intercept)    0.70642     0.088702     7.964    1.6653e-15
    CustIncome      1.0268      0.25758    3.9862    6.7132e-05
    TmWBank         1.0973      0.31294    3.5063     0.0004543
    AMBalance       1.0039      0.37576    2.6717     0.0075464


1200 observations, 1196 error degrees of freedom
Dispersion: 1
Chi^2-statistic vs. constant model: 36.4, p-value = 6.22e-08

Отформатируйте немасштабированные точки.

sc = formatpoints(sc, 'PointsOddsAndPDO',[500,2,50]);

Выиграйте данные.

scores = score(sc);

Подтвердите модель протокола результатов кредита путем генерации ПРОПИСНОЙ БУКВЫ, ROC и графиков KS. Когда дополнительный аргумент пары "имя-значение" 'WeightsVar' используется, чтобы задать наблюдение (выборка) веса, таблица T использует статистику, суммы и совокупные суммы, которые взвешиваются количества.

[Stats,T] = validatemodel(sc,'Plot',{'CAP','ROC','KS'});

Stats
Stats=4×2 table
           Measure             Value 
    ______________________    _______

    'Accuracy Ratio'          0.28972
    'Area under ROC curve'    0.64486
    'KS statistic'            0.23215
    'KS score'                 505.41

T(1:10,:)
ans=10×9 table
    Scores    ProbDefault    TrueBads    FalseBads    TrueGoods    FalseGoods    Sensitivity    FalseAlarm     PctObs  
    ______    ___________    ________    _________    _________    __________    ___________    __________    _________

    401.34      0.66253       1.0788           0       411.95        201.95       0.0053135             0     0.0017542
    407.59      0.64289       4.8363      1.2768       410.67        198.19        0.023821     0.0030995     0.0099405
    413.79      0.62292       6.9469      4.6942       407.25        196.08        0.034216      0.011395      0.018929
    420.04      0.60236       18.459      9.3899       402.56        184.57        0.090918      0.022794      0.045285
    437.27        0.544       18.459      10.514       401.43        184.57        0.090918      0.025523      0.047113
    442.83      0.52481       18.973      12.794       399.15        184.06        0.093448      0.031057      0.051655
    446.19      0.51319       22.396       14.15        397.8        180.64         0.11031      0.034349      0.059426
    449.08      0.50317       24.325      14.405       397.54        178.71         0.11981      0.034968      0.062978
    449.73      0.50095       28.246      18.049        393.9        174.78         0.13912      0.043813      0.075279
    452.44      0.49153       31.511      23.565       388.38        171.52          0.1552      0.057204      0.089557

Этот пример описывает обоих присвоение точек для недостающих данных, когда опция 'BinMissingData' установлена в true и соответствующее вычисление статистики проверки допустимости модели.

  • Предикторы, которые имеют недостающие данные в наборе обучающих данных, имеют явный интервал для <missing> с соответствующими точками в итоговом протоколе результатов. Эти точки вычисляются из значения Веса доказательства (WOE) для интервала <missing> и логистических коэффициентов модели. Для выигрыша целей эти точки присвоены отсутствующим значениям и значениям из области значений, и итоговый счет используется, чтобы вычислить статистику проверки допустимости модели с validatemodel.

  • Предикторы без недостающих данных в наборе обучающих данных не имеют никакого интервала <missing>, поэтому никакое ГОРЕ не может быть оценено от данных тренировки. По умолчанию точки для того, чтобы избегать и значений из области значений установлены в NaN, и это приводит к счету NaN при выполнении score. Для предикторов, которые не имеют никакого явного интервала <missing>, используйте аргумент 'Missing' значения имени в formatpoints, чтобы указать, как недостающие данные нужно лечить от выигрыша целей. Итоговый счет используется, чтобы вычислить статистику проверки допустимости модели с validatemodel.

Создайте объект creditscorecard с помощью файла CreditCardData.mat, чтобы загрузить dataMissing с отсутствующими значениями.

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 с набором аргумента 'BinMissingData' значения имени к true к интервалу недостающие числовые или категориальные данные в отдельном интервале. Примените автоматическое раскладывание.

sc = creditscorecard(dataMissing,'IDVar','CustID','BinMissingData',true);
sc = autobinning(sc);

disp(sc)
  creditscorecard with properties:

                GoodLabel: 0
              ResponseVar: 'status'
               WeightsVar: ''
                 VarNames: {1x11 cell}
        NumericPredictors: {1x6 cell}
    CategoricalPredictors: {'ResStatus'  'EmpStatus'  'OtherCC'}
           BinMissingData: 1
                    IDVar: 'CustID'
            PredictorVars: {1x9 cell}
                     Data: [1200x11 table]

Установите минимальное значение нуля для CustAge и CustIncome. С этим, любым отрицательным возрастом или информацией о доходе становится недопустимым или "из области значений". Для выигрыша и вероятности вычислений по умолчанию, значениям из области значений дают те же точки как отсутствующие значения.

sc = modifybins(sc,'CustAge','MinValue',0);
sc = modifybins(sc,'CustIncome','MinValue',0);

Отобразите информацию об интервале для числовых данных для 'CustAge', который включает недостающие данные в отдельный интервал, маркировал <missing>.

bi = bininfo(sc,'CustAge');
disp(bi)
        Bin        Good    Bad     Odds       WOE       InfoValue 
    ___________    ____    ___    ______    ________    __________

    '[0,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

Отобразите информацию об интервале для категориальных данных для 'ResStatus', который включает недостающие данные в отдельный интервал, маркировал <missing>.

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

Для 'CustAge' и предикторов 'ResStatus', там пропускает данные (NaN s и <undefined>) в данных тренировки, и процесс раскладывания оценивает значение WOE -0.15787 и 0.026469 соответственно для недостающих данных в этих предикторах, как показано выше.

Для EmpStatus и CustIncome там не явный интервал для отсутствующих значений, потому что данные тренировки не имеют никаких отсутствующих значений для этих предикторов.

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 
    _______________    ____    ___    _______    _________    __________

    '[0,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 для <недостающего> интервала применяется при выполнении преобразования 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'       '[0,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'    '[0,29000)'     29.375
      ⋮

Заметьте, что точки для интервала <missing> для CustAge и ResStatus явным образом показывают (как 64.9836 и 74.1250, соответственно). Эти точки вычисляются из значения WOE для интервала <missing> и логистических коэффициентов модели.

Для предикторов, которые не имеют никаких недостающих данных в наборе обучающих данных, нет никакого явного интервала <missing>. По умолчанию точки установлены в NaN для недостающих данных, и они приводят к счету NaN при выполнении score. Для предикторов, которые не имеют никакого явного интервала <missing>, используйте аргумент 'Missing' значения имени в formatpoints, чтобы указать, как недостающие данные нужно лечить от выигрыша целей.

В целях рисунка возьмите несколько строк из исходных данных как тестовые данные и введите некоторые недостающие данные. Также введите некоторых недопустимых, или из области значений, значения. Для числовых данных значения ниже минимума (или выше максимума) позволенный рассматриваются недопустимыми, такие как отрицательная величина для возраста (вспомните, что 'MinValue' был ранее установлен в 0 для CustAge и CustIncome). Для категориальных данных недопустимые значения являются категориями, не явным образом включенными в протокол результатов, например, жилое состояние, не ранее сопоставленное с категориями протокола результатов, такими как "Дом" или бессмысленная строка, такими как "abc123".

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

tdata = dataMissing(11:18,mdl.PredictorNames); % Keep only the predictors retained in the model
tdata.status = dataMissing.status(11:18); % Copy the response variable value, needed for validation purposes
% Set some missing values
tdata.CustAge(1) = NaN;
tdata.ResStatus(2) = '<undefined>';
tdata.EmpStatus(3) = '<undefined>';
tdata.CustIncome(4) = NaN;
% Set some invalid values
tdata.CustAge(5) = -100;
tdata.ResStatus(6) = 'House';
tdata.EmpStatus(7) = 'Freelancer';
tdata.CustIncome(8) = -1;
disp(tdata)
    CustAge     ResStatus      EmpStatus     CustIncome    TmWBank    OtherCC    AMBalance    status
    _______    ___________    ___________    __________    _______    _______    _________    ______

      NaN      Tenant         Unknown          34000         44         Yes        119.8        1   
       48      <undefined>    Unknown          44000         14         Yes       403.62        0   
       65      Home Owner     <undefined>      48000          6         No        111.88        0   
       44      Other          Unknown            NaN         35         No        436.41        0   
     -100      Other          Employed         46000         16         Yes       162.21        0   
       33      House          Employed         36000         36         Yes       845.02        0   
       39      Tenant         Freelancer       34000         40         Yes       756.26        1   
       24      Home Owner     Employed            -1         19         Yes       449.61        0   

Выиграйте новые данные и смотрите, как точки присвоены для пропавших без вести CustAge и ResStatus, потому что у нас есть явный интервал с точками для <missing>. Однако для EmpStatus и CustIncome функция score устанавливает точки на NaN.

Результаты валидации ненадежны, очки со значениями NaN сохранены (см. таблицу ValTable валидации ниже), но неясно, что влияет на эти значения NaN, имеют в статистике валидации (ValStats). Это - очень небольшой набор данных валидации, но очки NaN могли все еще влиять на результаты валидации на большем наборе данных.

[Scores,Points] = score(sc,tdata);
disp(Scores)
  481.2231
  520.8353
       NaN
       NaN
  551.7922
  487.9588
       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  
    64.984      90.828       86.937        82.439      61.061     75.622      89.922  
    56.282      74.125       86.937        70.107      61.858     75.622      63.028  
    60.012      62.138          NaN        67.893      61.858     75.622      63.028  
    54.062      73.248       86.937           NaN      61.061     75.622      89.922  
[ValStats,ValTable] = validatemodel(sc,tdata);
disp(ValStats)
           Measure             Value 
    ______________________    _______

    'Accuracy Ratio'          0.16667
    'Area under ROC curve'    0.58333
    'KS statistic'                0.5
    'KS score'                 481.22
disp(ValTable)
    Scores    ProbDefault    TrueBads    FalseBads    TrueGoods    FalseGoods    Sensitivity    FalseAlarm    PctObs
    ______    ___________    ________    _________    _________    __________    ___________    __________    ______

       NaN          NaN         0            1            5            2               0         0.16667      0.125 
       NaN          NaN         0            2            4            2               0         0.33333       0.25 
       NaN          NaN         1            2            4            1             0.5         0.33333      0.375 
       NaN          NaN         1            3            3            1             0.5             0.5        0.5 
    481.22      0.39345         2            3            3            0               1             0.5      0.625 
    487.96       0.3714         2            4            2            0               1         0.66667       0.75 
    520.84       0.2725         2            5            1            0               1         0.83333      0.875 
    551.79      0.19605         2            6            0            0               1               1          1 

Используйте аргумент 'Missing' значения имени в formatpoints, чтобы выбрать, как присвоить точки отсутствующим значениям для предикторов, которые не имеют явного интервала <missing>. В этом примере используйте опцию 'MinPoints' для аргумента 'Missing'. Минимальными точками для EmpStatus в протоколе результатов, отображенном выше, является 58.8072 , и для CustIncome минимальными точками является 29.3753.

Результаты валидации больше не под влиянием значений NaN, поскольку все строки теперь имеют счет.

sc = formatpoints(sc,'Missing','MinPoints');
[Scores,Points] = score(sc,tdata);
disp(Scores)
  481.2231
  520.8353
  517.7532
  451.3405
  551.7922
  487.9588
  449.3577
  470.2267
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  
    64.984      90.828       86.937        82.439      61.061     75.622      89.922  
    56.282      74.125       86.937        70.107      61.858     75.622      63.028  
    60.012      62.138       58.807        67.893      61.858     75.622      63.028  
    54.062      73.248       86.937        29.375      61.061     75.622      89.922  
[ValStats,ValTable] = validatemodel(sc,tdata);
disp(ValStats)
           Measure             Value 
    ______________________    _______

    'Accuracy Ratio'          0.66667
    'Area under ROC curve'    0.83333
    'KS statistic'            0.66667
    'KS score'                 481.22
disp(ValTable)
    Scores    ProbDefault    TrueBads    FalseBads    TrueGoods    FalseGoods    Sensitivity    FalseAlarm    PctObs
    ______    ___________    ________    _________    _________    __________    ___________    __________    ______

    449.36      0.50223         1            0            6            1             0.5               0      0.125 
    451.34      0.49535         1            1            5            1             0.5         0.16667       0.25 
    470.23      0.43036         1            2            4            1             0.5         0.33333      0.375 
    481.22      0.39345         2            2            4            0               1         0.33333        0.5 
    487.96       0.3714         2            3            3            0               1             0.5      0.625 
    517.75      0.28105         2            4            2            0               1         0.66667       0.75 
    520.84       0.2725         2            5            1            0               1         0.83333      0.875 
    551.79      0.19605         2            6            0            0               1               1          1 

Входные параметры

свернуть все

Модель протокола результатов кредита, заданная как объект creditscorecard. Чтобы создать этот объект, используйте creditscorecard.

(Необязательно) данные о Валидации, заданные как таблица MATLAB®, где каждая строка таблицы соответствует отдельным наблюдениям. data должен содержать столбцы для каждого из предикторов в модели протокола результатов кредита. Столбцы данных могут быть любым из следующих типов данных:

  • Числовой

  • Логический

  • Массив ячеек из символьных векторов

  • Массив символов

  • Категориальный

  • Строка

  • StringArray

Кроме того, таблица должна содержать бинарную переменную отклика.

Примечание

Когда веса наблюдения заданы с помощью дополнительного аргумента пары "имя-значение" WeightsVar при создании объекта creditscorecard, веса, сохраненные в столбце WeightsVar, используются при проверке модели на данных тренировки. Если различный набор данных валидации обеспечивается с помощью дополнительного входа data, веса наблюдения для данных о валидации должны быть включены в столбец, имя которого совпадает с WeightsVar, в противном случае модульные веса используются для данных о валидации. Для получения дополнительной информации смотрите Используя validatemodel с Весами.

Типы данных: table

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: sc = validatemodel(sc,data,'AnalysisLevel','Deciles','Plot','CAP')

Тип аналитического уровня, заданного как пара, разделенная запятой, состоящая из 'AnalysisLevel' и вектора символов с одним из следующих значений:

  • 'Scores' — Возвращает статистику (Stats) на уровне наблюдения. Очки сортируются от самого опасного до самого безопасного, и копии удалены.

  • 'Deciles' — Возвращает статистику (Stats) на уровне дециля. Очки сортируются от самого опасного до самого безопасного и сгруппированного с их соответствующей статистикой в 10 децилей (10%, 20%..., 100%).

Типы данных: char

Тип графика, заданного как пара, разделенная запятой, состоящая из 'Plot' и вектора символов с одним из следующих значений:

  • 'none' Никакой график не отображен.

  • \cap Совокупный Профиль Точности. Строит часть заемщиков, чтобы выиграть “s” по сравнению с частью нарушителей, чтобы выиграть “s” ('PctObs' по сравнению со столбцами 'Sensitivity' T дополнительный выходной аргумент). Для получения дополнительной информации смотрите Совокупный профиль точности (CAP).

  • 'ROC' — Рабочая характеристика получателя. Строит часть ненарушителей, чтобы выиграть “s” по сравнению с частью нарушителей, чтобы выиграть “s” ('FalseAlarm' по сравнению со столбцами 'Sensitivity' T дополнительный выходной аргумент). Для получения дополнительной информации смотрите Рабочую характеристику получателя (ROC).

  • 'KS' — Кольмогоров-Смирнов. Графики каждый счет “s” по сравнению с частью нарушителей, чтобы выиграть “s”, и также по сравнению с частью ненарушителей, чтобы выиграть “s” ('Scores' и по сравнению с 'Sensitivity' и по сравнению со столбцами 'FalseAlarm' дополнительного выходного аргумента T). Для получения дополнительной информации смотрите статистическую величину Кольмогорова-Смирнова (KS).

    Совет

    Для опции статистической величины Кольмогорова-Смирнова можно ввести 'KS' или 'K-S'.

Типы данных: char | cell

Выходные аргументы

свернуть все

Меры по валидации, возвращенные как 4-by-2 таблица. Первый столбец, 'Measure', содержит имена следующих мер:

  • Отношение точности (AR)

  • Область под кривой ROC (AUROC)

  • Статистическая величина KS

  • Счет KS

Второй столбец, 'Value', содержит значения, соответствующие этим мерам.

Данные о статистике валидации, возвращенные как N-by-9 таблица данных о статистике валидации, отсортированных, счетом, от самого опасного до самого безопасного. Когда AnalysisLevel установлен в 'Deciles', N равен 10. В противном случае N равен общему количеству уникальных очков, то есть, очков без копий.

Таблица T содержит следующие девять столбцов в этом порядке:

  • 'Scores' — Очки, отсортированные от самого опасного до самого безопасного. Данные в этой строке соответствуют всем наблюдениям до, и включая счет в этой строке.

  • 'ProbDefault' — Вероятность значения по умолчанию для наблюдений в этой строке. Для децилей сообщают о средней вероятности значения по умолчанию для всех наблюдений в данном дециле.

  • 'TrueBads' — Совокупное число “bads” до, и включая, соответствующий счет.

  • 'FalseBads' — Совокупное число “товаров” до, и включая, соответствующий счет.

  • 'TrueGoods' — Совокупное число “товаров” выше соответствующего счета.

  • 'FalseGoods' — Совокупное число “bads” выше соответствующего счета.

  • 'Sensitivity' — Часть нарушителей (или совокупное число “bads”, разделенного на общее количество “bads”). Это - распределение “bads” до и включая соответствующий счет.

  • 'FalseAlarm' — Часть ненарушителей (или совокупное число “товаров”, разделенных на общее количество “товаров”). Это - распределение “товаров” до и включая соответствующий счет.

  • 'PctObs' — Часть заемщиков или совокупное число наблюдений, разделенных на общее количество наблюдений до и включая соответствующий счет.

Примечание

При создании объекта creditscorecard с creditscorecard, если дополнительный аргумент пары "имя-значение" WeightsVar использовался, чтобы задать наблюдение (выборка) веса, то таблица T использует статистику, суммы и совокупные суммы, которые взвешиваются количества.

Изобразите указатель на нанесенные на график меры, возвращенные как указатель фигуры или массив указателей. Когда Plot установлен в 'None', hf является пустым массивом.

Больше о

свернуть все

Совокупный профиль точности (CAP)

ПРОПИСНАЯ БУКВА обычно является вогнутой кривой и также известна как кривую Gini, кривую Степени или кривую Лоренца.

Множество данных наблюдений сортируется от самого опасного до самого безопасного. Для данного дробного M (от 0% до 100%) общих заемщиков, высота кривой ПРОПИСНОЙ БУКВЫ является частью нарушителей, очки которых меньше чем или равны максимальному счету дробного M, также известного как “Чувствительность”.

Область под кривой ПРОПИСНОЙ БУКВЫ, известной как AUCAP, затем по сравнению с той из совершенной или “идеальной” модели, ведя к определению итогового индекса, известного как отношение точности (AR) или коэффициент Gini:

AR=ARAP

где A, R является областью между кривой ПРОПИСНОЙ БУКВЫ и диагональю и A P, является областью между совершенной моделью и диагональю. Это представляет “случайную” модель, где очки присвоены случайным образом, и поэтому пропорция нарушителей и ненарушителей независима от счета. Совершенная модель является моделью, для которой присвоены все нарушители, самые низкие очки, и поэтому, отлично различают между нарушителями и ненарушителями. Таким образом, чем ближе к единице AR, тем лучше модель выигрыша.

Рабочая характеристика получателя (ROC)

Чтобы найти кривую рабочей характеристики получателя (ROC), пропорция нарушителей до данного счета “s” или “Чувствительность”, вычисляется.

Эта пропорция известна как истинный положительный уровень (TPR). Кроме того, пропорция ненарушителей, чтобы выиграть “s “, или “Ложный Сигнальный Уровень”, также вычисляется. Эта пропорция также известна как ложный положительный уровень (FPR). Кривая ROC является графиком “Чувствительности” по сравнению с “Ложным Сигнальным Уровнем”. Вычисление кривой ROC подобно вычислению эквивалента матрицы беспорядка на каждом уровне счета.

Подобно ПРОПИСНОЙ БУКВЕ ROC знали итоговую статистическую величину как область под кривой ROC (AUROC). Чем ближе к единице, тем лучше модель выигрыша. Отношение точности (AR) связано с областью под кривой следующей формулой:

AR=2(AUROC)1

Статистическая величина Кольмогорова-Смирнова (KS)

Кольмогоров-Смирнов (KS), график, также известный как график подозрительного взгляда, является общей статистической величиной, раньше измерял предсказательную силу протоколов результатов.

График KS показывает распределение нарушителей и распределение ненарушителей на том же графике. Для распределения нарушителей каждый счет “s” построен по сравнению с пропорцией нарушителей до “s" или “Чувствительностью". Для распределения ненарушителей каждый счет “s” построен по сравнению с пропорцией ненарушителей до “s", или “Ложным Предупреждением". Статистическая величина интереса называется статистической величиной KS и является максимальной разницей между этими двумя дистрибутивами (“Чувствительность” минус “Ложное Предупреждение”). Счет, в котором достигнут этот максимум, также представляет интерес.

Используя validatemodel с весами

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

Без весов статистические данные валидации на основе того, сколько хороших и плохих наблюдений падает ниже конкретного счета. С другой стороны, когда веса наблюдения обеспечиваются, вес (не количество) накапливается для пользы и плохих наблюдений, которые падают ниже конкретного счета.

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

Не только статистика валидации, но и сами очки протокола результатов кредита зависят от весов наблюдения данных тренировки. Для получения дополнительной информации смотрите Используя fitmodel с Весами и Моделированием Протокола результатов Кредита Используя Веса Наблюдения.

Ссылки

[1] “Базельский комитет по банковскому надзору: исследования валидации внутренних систем оценки”. Рабочий документ № 14, февраль 2005.

[2] Refaat, M. Протоколы результатов кредитного риска: разработка и реализация Используя SAS. lulu.com, 2011.

[3] Loeffler, G. и Posch, P. N. Credit Risk Modeling Using Excel и VBA. Финансы Вайли, 2007.

Представленный в R2015a