validatemodel

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

Описание

пример

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 на графики CAP, 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);

Проверьте модель карты показателей кредита путем создания графиков CAP, ROC и KS.

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

Figure contains an axes. The axes with title Cumulative Accuracy Profile (CAP) curve contains 6 objects of type patch, line, text.

Figure contains an axes. The axes with title Receiver Operating Characteristic (ROC) curve contains 3 objects of type patch, line, text.

Figure contains an axes. The axes with title K-S Plot contains 6 objects of type line, text. These objects represent Cumulative Bads, Cumulative Goods.

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

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

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

Figure contains an axes. The axes with title Cumulative Accuracy Profile (CAP) curve contains 6 objects of type patch, line, text.

Figure contains an axes. The axes with title Receiver Operating Characteristic (ROC) curve contains 3 objects of type patch, line, text.

Figure contains an axes. The axes with title K-S Plot contains 6 objects of type line, text. These objects represent Cumulative Bads, Cumulative Goods.

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' предикторы, отсутствуют данные (NaNs и <undefined>) в обучающих данных и процессе раскладывания оценивает значение ГОРЕ -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соответствующее значение ГОРЕ для < отсутствующего > интервала применяется при выполнении преобразования ГОРЕ.

[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, соответственно). Эти точки вычисляются из значения ГОРЕ для <missing> интервал и коэффициенты логистической модели.

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

Для целей рисунка берите несколько строк из исходных данных в качестве тестовых данных и вводите некоторые недостающие данные. Также введите некоторые недопустимые или вне области допустимого значения. Для числовых данных значения ниже минимума (или выше максимума) считаются недопустимыми, например, отрицательное значение для возраста (recall '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® таблица, где каждая строка таблицы соответствует отдельным наблюдениям. The data должны содержать столбцы для каждого из предикторов в модели карты показателей кредита. Столбцы данных могут быть любым из следующих типов данных:

  • Числовой

  • Логичный

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

  • Символьный массив

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

  • Строка

  • Строковые массивы

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

Примечание

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

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

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

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. 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' или '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' - Совокупное количество «бадсов» до соответствующего счета включительно.

  • 'FalseBads' - Совокупное количество «товаров» до соответствующего счета включительно.

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

  • 'FalseGoods' - Совокупное число «бадсов» выше соответствующего счета.

  • 'Sensitivity' - Доля дефолтов (или совокупное число «бадсов», разделенных на общее число «бадов»). Это распределение «бадсов» до соответствующего счета включительно.

  • 'FalseAlarm' - Доля дефолтных лиц (или совокупное число «товаров», разделенных на общее число «товаров»). Это распределение «товаров» до соответствующего счета включительно.

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

Примечание

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

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

Подробнее о

свернуть все

Профиль кумулятивной точности (CAP)

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

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

Область под кривой ПРОПИСНАЯ БУКВА, известная как AUCAP, затем сравнивается с областью идеальной или «идеальной» модели, что приводит к определению итогового индекса, известного как коэффициент точности (AR) или коэффициент Джини:

AR=ARAP

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

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

Чтобы найти приемник кривую рабочей характеристики (ROC), вычисляется доля дефолтов до заданных счетов «s» или «Sensitivity».

Эта доля известна как истинная положительная скорость (TPR). Кроме того, вычисляется доля недефейтеров до «s» или «False Alarm Rate». Эта доля также известна как ложноположительная частота (FPR). Кривая ROC является графиком «Чувствительности» по сравнению с «Частотой ложных предупреждений». Вычисление кривой ROC подобно вычислению эквивалента матрицы неточностей на каждом уровне счета.

Подобно CAP, ROC имеет сводную статистическую величину, известную как площадь под кривой ROC (AUROC). Чем ближе к единству, тем лучше модель скоринга. Коэффициент точности (AR) связан с площадью под кривой по следующей формуле:

AR=2(AUROC)1

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

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

График KS показывает распределение дефолтов и распределение не-дефолтов на том же графике. Для распределения дефолтов каждый счет «s» строится по сравнению с долей дефолтов до «s» или «Sensitivity». Для распределения не-дефолтеров каждый счет «s» строится по сравнению с долей не-дефолтеров до «s» или «False Alarm». Интересующая статистика называется KS statistic и является максимальным различием между этими двумя распределениями («Sensitivity» минус «False Alarm»). Счет, при котором достигается этот максимум, также представляет интерес.

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

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

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

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

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

Ссылки

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

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

[3] Loeffler, G. and Posch, P. N. Моделирование кредитного риска с использованием Excel и VBA. Wiley Finance, 2007.

Введенный в R2015a