validatemodel

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

Описание

пример

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

пример

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

пример

[Stats,T,hf] = validatemodel(___,Name,Value) задает опции с помощью одного или нескольких аргументов пары "имя-значение" в дополнение к входным параметрам в предыдущем синтаксисе и возвращает выходные параметры Stats и T и фигура обрабатывает hf к ДНУ, ROC и графикам KS.

Примеры

свернуть все

Вычислите статистику проверки допустимости модели для компактной модели протокола результатов кредита.

Создать compactCreditScorecard объект, необходимо сначала разработать модель протокола результатов кредита использование creditscorecard объект.

Создайте 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]);

Преобразуйте creditscorecard объект в compactCreditScorecard объект. compactCreditScorecard объект является легкой версией creditscorecard объект, который используется в целях развертывания.

csc = compactCreditScorecard(sc);

Подтвердите компактную модель протокола результатов кредита путем генерации ДНА, ROC и графиков KS. Этот пример использует учебный data. Однако можно использовать любые данные о валидации, пока:

  • Данные имеют те же имена предиктора и типы предиктора, как данные раньше создавали начальный creditscorecard объект.

  • Данные имеют столбец ответа с тем же именем как 'ResponseVar' свойство в начальном creditscorecard объект.

  • Данные имеют столбец весов (если веса использовались, чтобы обучить модель) с тем же именем как 'WeightsVar' свойство в начальном creditscorecard объект.

[Stats,T] = validatemodel(csc,data,'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

Вычислите статистику проверки допустимости модели для компактной модели протокола результатов кредита с весами.

Создать compactCreditScorecard объект, необходимо сначала разработать модель протокола результатов кредита использование creditscorecard объект.

Используйте 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]

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

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]);

Преобразуйте creditscorecard объект в compactCreditScorecard объект. compactCreditScorecard объект является легкой версией creditscorecard объект, который используется в целях развертывания.

csc = compactCreditScorecard(sc);

Подтвердите компактную модель протокола результатов кредита путем генерации ДНА, ROC и графиков KS. Когда вы используете дополнительный аргумент пары "имя-значение" 'WeightsVar' задавать наблюдение (выборка) веса в исходном creditscorecard объект, T таблица для validatemodel статистика использования, суммы и совокупные суммы, которые взвешиваются количества.

Этот пример использует обучающие данные (dataWeights). Однако можно использовать любые данные о валидации, пока:

  • Данные имеют те же имена предиктора и типы предиктора, как данные раньше создавали начальный creditscorecard объект.

  • Данные имеют столбец ответа с тем же именем как 'ResponseVar' свойство в начальном creditscorecard объект.

  • Данные имеют столбец весов (если веса использовались, чтобы обучить модель) с тем же именем как 'WeightsVar' свойство в начальном creditscorecard объект.

[Stats,T] = validatemodel(csc,dataWeights,'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' опция.

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

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

Создать compactCreditScorecard объект, необходимо сначала разработать модель протокола результатов кредита использование creditscorecard объект.

Создайте 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' предикторы, обучающие данные содержат недостающие данные (NaNs и <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 для <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=38×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
    {'EmpStatus'}    {'<missing>' }       NaN
      ⋮

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

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

Используйте compactCreditScorecard преобразовывать creditscorecard объект в compactCreditScorecard объект. compactCreditScorecard объект является легкой версией creditscorecard объект, который используется в целях развертывания.

csc = compactCreditScorecard(sc);

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

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

tdata = dataMissing(11:200,mdl.PredictorNames); % Keep only the predictors retained in the model
tdata.status = dataMissing.status(11:200); % 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(1:10,:))
    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   
      NaN      Home Owner     Employed         51000         11         Yes       519.46        1   
       52      Other          Unknown          42000         12         Yes       1269.2        0   

Используйте validatemodel для compactCreditScorecard объект с набором данных валидации (tdata).

[ValStats,ValTable] = validatemodel(csc,tdata,'Plot',{'CAP','ROC','KS'});

disp(ValStats)
            Measure              Value 
    ________________________    _______

    {'Accuracy Ratio'      }    0.35376
    {'Area under ROC curve'}    0.67688
    {'KS statistic'        }    0.32462
    {'KS score'            }     493.35
disp(ValTable(1:10,:))
    Scores    ProbDefault    TrueBads    FalseBads    TrueGoods    FalseGoods    Sensitivity    FalseAlarm     PctObs  
    ______    ___________    ________    _________    _________    __________    ___________    __________    _________

    597.33          NaN         0            1           135           54                0      0.0073529     0.0052632
    598.54          NaN         0            2           134           54                0       0.014706      0.010526
    601.18          NaN         1            2           134           53         0.018519       0.014706      0.015789
     637.3          NaN         1            3           133           53         0.018519       0.022059      0.021053
       NaN      0.69421         2            3           133           52         0.037037       0.022059      0.026316
       NaN      0.65394         2            4           132           52         0.037037       0.029412      0.031579
       NaN      0.64441         2            5           131           52         0.037037       0.036765      0.036842
       NaN      0.62799         3            5           131           51         0.055556       0.036765      0.042105
    390.86      0.58964         4            5           131           50         0.074074       0.036765      0.047368
    404.09      0.57902         6            5           131           48          0.11111       0.036765      0.057895

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

свернуть все

Компактная модель протокола результатов кредита в виде compactCreditScorecard объект.

Создать compactCreditScorecard объект, используйте compactCreditScorecard или compact от Financial Toolbox™.

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

  • Числовой

  • Логический

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

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

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

  • Строка

  • Массив строк

Кроме того, таблица должна содержать бинарную переменную отклика, и имя этого столбца должно совпадать с именем ResponseVar свойство в compactCreditScorecard объект. (ResponseVar свойство в compactCreditScorecard копируется с ResponseVar свойство исходного creditscorecard объект.

Примечание

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

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

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

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

Пример: csc = validatemodel(csc,data,'Plot','CAP')

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

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

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

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

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

    Совет

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

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

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

свернуть все

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

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

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

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

  • Счет KS

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

Данные о статистике валидации, возвращенные как N- 9 таблица данных о статистике валидации, отсортированных по счету от самого опасного до самого безопасного. 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 с Весами

Если вы обеспечиваете веса наблюдения, validatemodel функция включает веса наблюдения при вычислении статистики проверки допустимости модели.

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

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

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

Ссылки

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

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

[3] Loeffler, G. и П. Н. Пош. Credit Risk Modeling Using Excel и VBA. Финансы Вайли, 2007.

Введенный в R2019b