exponenta event banner

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]

Выполните автоматическое binning с использованием параметров по умолчанию. По умолчанию 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]

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

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

  • Предикторы без отсутствующих данных в обучающем наборе не имеют <missing> bin, поэтому невозможно оценить WOE по данным обучения. По умолчанию точки для отсутствующих и выходящих за пределы диапазона значений имеют значение NaN, и это приводит к оценке NaN при выполнении score. Для предикторов, не имеющих явных <missing> bin, используйте аргумент имя-значение '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 в ячейку отсутствующих числовых или категориальных данных в отдельной ячейке. Применение автоматического binning.

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> bin, с соответствующим значением WOE, вычисленным на основе данных. При использовании fitmodelсоответствующее значение WOE для < missing > bin применяется при выполнении преобразования 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

Масштабируйте точки карты показателей по методу «points, bodds and points to удвоить шансы (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> bin и коэффициенты логистической модели.

Для предикторов, не имеющих отсутствующих данных в обучающем наборе, нет явных <missing> бункер. По умолчанию для точек установлено значение NaN для отсутствующих данных, и они приводят к оценке NaN при выполнении score. Для предикторов, не имеющих явных <missing> bin, используйте аргумент имя-значение '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 должен содержать столбцы для каждого из предикторов в модели кредитной карты показателей. Столбцами данных может быть любой из следующих типов данных:

  • Числовой

  • Логичный

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

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

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

  • Последовательность

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

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

Примечание

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

  • Коэффициент точности (AR)

  • Площадь под кривой ROC (AUROC)

  • Статистика KS

  • Оценка КС

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

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

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

  • 'Scores' - Баллы отсортированы от самых рискованных до самых безопасных. Данные в этой строке соответствуют всем наблюдениям до и включая оценку в этой строке.

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

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

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

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

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

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

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

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

Примечание

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

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

Подробнее

свернуть все

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

CAP обычно является вогнутой кривой и также известна как кривая Джини, кривая мощности или кривая Лоренца.

Оценки данных наблюдений сортируются от самых рискованных до самых безопасных. Для данной дроби M (от 0% до 100%) от общего числа заемщиков, высота кривой CAP - доля неплательщиков, баллы которых меньше или равны максимальному баллу доли M, также известный как «Чувствительность».

Площадь под кривой CAP, известная как AUCAP, затем сравнивается с площадью совершенной или «идеальной» модели, что приводит к определению суммарного индекса, известного как коэффициент точности (AR) или коэффициент Джини:

AR = ARAP

где AR - площадь между кривой CAP и диагональю, а AP - площадь между совершенной моделью и диагональю. Это представляет «случайную» модель, где оценки назначаются случайным образом, и, следовательно, доля неплательщиков и неплательщиков не зависит от оценки. Идеальная модель - это модель, для которой всем неплательщикам присваиваются самые низкие баллы, и поэтому идеально различает неплательщиков и неплательщиков. Таким образом, чем ближе к единице AR, тем лучше модель оценки.

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

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

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

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

AR = 2 (AUROC) − 1

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

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

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

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

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

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

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

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

Ссылки

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

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

[3] Лоэффлер, Г. и Пош, П. Н. Моделирование кредитных рисков с использованием Excel и VBA. Уайли Финанс, 2007.

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