В этом разделе показаны некоторые результаты при использовании кредитных карт результатов, которые нуждаются в поиске и устранении проблем. Эти примеры охватывают полную область значений рабочего процесса по кредитным счетам карточным картам. Для получения дополнительной информации об общем процессе создания и разработки карт результатов кредита, смотрите Рабочий процесс моделирования карты показателей кредита.
Если вы пытаетесь использовать modifybins
, bininfo
, или plotbins
и опускает имя предиктора, анализатор возвращает ошибку.
load CreditCardData sc = creditscorecard(data,'IDVar','CustID','GoodLabel',0); modifybins(sc,'CutPoints',[20 30 50 65])
Error using creditscorecard/modifybins (line 79) Expected a string for the parameter name, instead the input type was 'double'.
Решение: Обязательно включите имя предиктора при использовании этих функций. Используйте этот синтаксис, чтобы задать PredictorName
при использовании modifybins
.
load CreditCardData sc = creditscorecard(data,'IDVar','CustID','GoodLabel',0); modifybins(sc,'CustIncome','CutPoints',[20 30 50 65]);
bininfo
или plotbins
Перед раскладываниемЕсли вы используете bininfo
или plotbins
перед раскладывание результаты могут оказаться непригодными для использования.
load CreditCardData sc = creditscorecard(data,'IDVar','CustID','GoodLabel',0); bininfo(sc,'CustAge') plotbins(sc,'CustAge')
ans = Bin Good Bad Odds WOE InfoValue ________ ____ ___ _______ _________ __________ '21' 2 1 2 -0.011271 3.1821e-07 '22' 3 1 3 0.39419 0.00047977 '23' 1 2 0.5 -1.3976 0.0053002 '24' 3 4 0.75 -0.9921 0.0062895 '25' 3 1 3 0.39419 0.00047977 '26' 4 2 2 -0.011271 6.3641e-07 '27' 6 5 1.2 -0.5221 0.0026744 '28' 10 2 5 0.90502 0.0067112 '29' 8 6 1.3333 -0.41674 0.0021465 '30' 9 10 0.9 -0.80978 0.011321 '31' 8 6 1.3333 -0.41674 0.0021465 '32' 13 13 1 -0.70442 0.011663 '33' 9 11 0.81818 -0.90509 0.014934 '34' 14 12 1.1667 -0.55027 0.0070391 '35' 18 10 1.8 -0.11663 0.00032342 '36' 23 14 1.6429 -0.20798 0.0013772 '37' 28 19 1.4737 -0.31665 0.0041132 '38' 24 14 1.7143 -0.16542 0.0008894 '39' 21 14 1.5 -0.29895 0.0027242 '40' 31 12 2.5833 0.24466 0.0020499 '41' 21 18 1.1667 -0.55027 0.010559 '42' 29 9 3.2222 0.46565 0.0062605 '43' 29 23 1.2609 -0.47262 0.010312 '44' 28 16 1.75 -0.1448 0.00078672 '45' 36 16 2.25 0.10651 0.00048246 '46' 33 19 1.7368 -0.15235 0.0010303 '47' 28 6 4.6667 0.83603 0.016516 '48' 32 17 1.8824 -0.071896 0.00021357 '49' 38 10 3.8 0.63058 0.013957 '50' 33 14 2.3571 0.15303 0.00089239 '51' 28 9 3.1111 0.43056 0.0052525 '52' 35 8 4.375 0.77149 0.01808 '53' 14 8 1.75 -0.1448 0.00039336 '54' 27 12 2.25 0.10651 0.00036184 '55' 20 9 2.2222 0.094089 0.00021044 '56' 20 11 1.8182 -0.10658 0.00029856 '57' 16 7 2.2857 0.12226 0.00028035 '58' 11 7 1.5714 -0.25243 0.00099297 '59' 11 6 1.8333 -0.098283 0.00013904 '60' 9 4 2.25 0.10651 0.00012061 '61' 11 2 5.5 1.0003 0.0086637 '62' 8 0 Inf Inf Inf '63' 7 1 7 1.2415 0.0076953 '64' 10 0 Inf Inf Inf '65' 4 1 4 0.68188 0.0016791 '66' 6 1 6 1.0873 0.0053857 '67' 2 3 0.66667 -1.1099 0.0056227 '68' 6 1 6 1.0873 0.0053857 '69' 6 0 Inf Inf Inf '70' 1 0 Inf Inf Inf '71' 1 0 Inf Inf Inf '72' 1 0 Inf Inf Inf '73' 3 0 Inf Inf Inf '74' 1 0 Inf Inf Inf 'Totals' 803 397 2.0227 NaN Inf
График для CustAge
невозможно считать, поскольку в нем слишком много интервалов. Кроме того, bininfo
возвращает данные, которые Inf
значения для ГОРЕ из-за нулевых наблюдений для Good или Bad.
Решение: отобразите данные используя autobinning
или modifybins
перед построением графика или запросами о статистике интервала, чтобы избежать наличия слишком большого количества интервалов или NaN
s и Inf
s. Например, можно использовать аргумент пары "имя-значение" для AlgoOptions
с autobinning
функция для определения количества интервалов.
load CreditCardData sc = creditscorecard(data,'IDVar','CustID','GoodLabel',0); AlgoOptions = {'NumBins',4}; sc = autobinning(sc,'CustAge','Algorithm','EqualFrequency',... 'AlgorithmOptions',AlgoOptions); bininfo(sc,'CustAge','Totals','off') plotbins(sc,'CustAge')
ans = Bin Good Bad Odds WOE InfoValue ___________ ____ ___ ______ ________ _________ '[-Inf,39)' 186 133 1.3985 -0.36902 0.03815 '[39,46)' 195 108 1.8056 -0.11355 0.0033158 '[46,52)' 192 75 2.56 0.23559 0.011823 '[52,Inf]' 230 81 2.8395 0.33921 0.02795
Категориальные данные часто записываются с помощью числовых значений и могут храниться в числовом массиве. Хотя вы знаете, что данные должны интерпретироваться как категориальная информация, для creditscorecard
этот предиктор выглядит как числовой массив.
Чтобы показать случай, когда категориальные данные заданы как числовые данные, данные для переменной ResStatus
преднамеренно преобразуется в числовые значения.
load CreditCardData data.ResStatus = double(data.ResStatus); sc = creditscorecard(data,'IDVar','CustID')
sc = creditscorecard with properties: GoodLabel: 0 ResponseVar: 'status' VarNames: {1x11 cell} NumericPredictors: {1x7 cell} CategoricalPredictors: {'EmpStatus' 'OtherCC'} IDVar: 'CustID' PredictorVars: {1x9 cell}
Обратите внимание, что 'ResStatus'
появляется как часть NumericPredictors
свойство. Если мы применили автоматическое раскладывание, получившаяся информация о интервал поднимает флаги, касающиеся типа предиктора.
sc = autobinning(sc,'ResStatus'); [bi,cg] = bininfo(sc,'ResStatus')
bi = Bin Good Bad Odds WOE InfoValue __________ ____ ___ ______ _________ __________ '[-Inf,2)' 365 177 2.0621 0.019329 0.0001682 '[2,Inf]' 438 220 1.9909 -0.015827 0.00013772 'Totals' 803 397 2.0227 NaN 0.00030592 cg = 2
Числовые области значений в метках интервала показывают, что 'ResStatus'
рассматривается как числовая переменная. Это также подтверждается тем фактом, что необязательный выход из bininfo
является числовым массивом точек разреза, в отличие от таблицы с группами категорий. Более того, выход из predictorinfo
подтверждает, что кредитная карта показателей обрабатывает данные как число.
[T,Stats] = predictorinfo(sc,'ResStatus')
T = PredictorType LatestBinning _____________ ______________________ ResStatus 'Numeric' 'Automatic / Monotone' Stats = Value _______ Min 1 Max 3 Mean 1.7017 Std 0.71863
Решение: Для creditscorecard
, 'Categorical'
означает MATLAB® категориальный тип данных. Для получения дополнительной информации см. categorical
. Лечить 'ResStatus'
как категориально, измените 'PredictorType'
от PredictorName
'ResStatus'
от 'Numeric'
на 'Categorical'
использование modifypredictor
.
sc = modifypredictor(sc,'ResStatus','PredictorType','Categorical') [T,Stats] = predictorinfo(sc,'ResStatus')
sc = creditscorecard with properties: GoodLabel: 0 ResponseVar: 'status' VarNames: {1x11 cell} NumericPredictors: {1x6 cell} CategoricalPredictors: {'ResStatus' 'EmpStatus' 'OtherCC'} IDVar: 'CustID' PredictorVars: {1x9 cell} T = PredictorType Ordinal LatestBinning _____________ _______ _______________ ResStatus 'Categorical' false 'Original Data' Stats = Count _____ C1 542 C2 474 C3 184
Обратите внимание, что 'ResStatus'
теперь появляется как часть Категориальных предикторов. Также, predictorinfo
теперь описывает 'ResStatus'
как категориальный и отображает счетчики категорий.
Если вы подаете заявку autobinning
, категории теперь переупорядочены, как показано по вызову bininfo
, который также показывает метки категорий, в отличие от числовых областей значений. Необязательный выход bininfo
теперь является таблицей группировок категорий.
sc = autobinning(sc,'ResStatus'); [bi,cg] = bininfo(sc,'ResStatus')
bi = Bin Good Bad Odds WOE InfoValue ________ ____ ___ ______ _________ _________ 'C2' 307 167 1.8383 -0.095564 0.0036638 'C1' 365 177 2.0621 0.019329 0.0001682 'C3' 131 53 2.4717 0.20049 0.0059418 'Totals' 803 397 2.0227 NaN 0.0097738 cg = Category BinNumber ________ _________ 'C2' 1 'C1' 2 'C3' 3
NaN
s Возвращено при подсчете «тестового» набора данныхПри применении creditscorecard
моделировать в «тестовый» набор данных с помощью score
функция, если наблюдение в наборе данных «test» имеет NaN
или <undefined>
значение, a NaN
общий счет возвращается для каждого из этих наблюдений. Для примера, a creditscorecard
создается с использованием «обучающих» данных.
load CreditCardData sc = creditscorecard(data,'IDVar','CustID'); sc = autobinning(sc); sc = fitmodel(sc);
1. Adding CustIncome, Deviance = 1490.8527, Chi2Stat = 32.588614, PValue = 1.1387992e-08 2. Adding TmWBank, Deviance = 1467.1415, Chi2Stat = 23.711203, PValue = 1.1192909e-06 3. Adding AMBalance, Deviance = 1455.5715, Chi2Stat = 11.569967, PValue = 0.00067025601 4. Adding EmpStatus, Deviance = 1447.3451, Chi2Stat = 8.2264038, PValue = 0.0041285257 5. Adding CustAge, Deviance = 1441.994, Chi2Stat = 5.3511754, PValue = 0.020708306 6. Adding ResStatus, Deviance = 1437.8756, Chi2Stat = 4.118404, PValue = 0.042419078 7. Adding OtherCC, Deviance = 1433.707, Chi2Stat = 4.1686018, PValue = 0.041179769 Generalized Linear regression model: logit(status) ~ 1 + CustAge + ResStatus + EmpStatus + CustIncome + TmWBank + OtherCC + AMBalance Distribution = Binomial Estimated Coefficients: Estimate SE tStat pValue ________ ________ ______ __________ (Intercept) 0.70239 0.064001 10.975 5.0538e-28 CustAge 0.60833 0.24932 2.44 0.014687 ResStatus 1.377 0.65272 2.1097 0.034888 EmpStatus 0.88565 0.293 3.0227 0.0025055 CustIncome 0.70164 0.21844 3.2121 0.0013179 TmWBank 1.1074 0.23271 4.7589 1.9464e-06 OtherCC 1.0883 0.52912 2.0569 0.039696 AMBalance 1.045 0.32214 3.2439 0.0011792 1200 observations, 1192 error degrees of freedom Dispersion: 1 Chi^2-statistic vs. constant model: 89.7, p-value = 1.4e-16
Предположим, что отсутствующее наблюдение (Nan
) добавляется к данным и затем newdata
оценивается с помощью score
функция. По умолчанию точки и счета, присвоенные отсутствующему значению NaN
.
newdata = data(1:10,:); newdata.CustAge(1) = NaN; [Scores,Points] = score(sc,newdata)
Scores = NaN 1.4646 0.7662 1.5779 1.4535 1.8944 -0.0872 0.9207 1.0399 0.8252 Points = CustAge ResStatus EmpStatus CustIncome TmWBank OtherCC AMBalance ________ _________ _________ __________ _________ ________ _________ NaN -0.031252 -0.076317 0.43693 0.39607 0.15842 -0.017472 0.479 0.12696 0.31449 0.43693 -0.033752 0.15842 -0.017472 0.21445 -0.031252 0.31449 0.081611 0.39607 -0.19168 -0.017472 0.23039 0.12696 0.31449 0.43693 -0.044811 0.15842 0.35551 0.479 0.12696 0.31449 0.43693 -0.044811 0.15842 -0.017472 0.479 0.12696 0.31449 0.43693 0.39607 0.15842 -0.017472 -0.14036 0.12696 -0.076317 -0.10466 -0.033752 0.15842 -0.017472 0.23039 0.37641 0.31449 0.43693 -0.033752 -0.19168 -0.21206 0.23039 -0.031252 -0.076317 0.43693 -0.033752 0.15842 0.35551 0.23039 0.12696 -0.076317 0.43693 -0.033752 0.15842 -0.017472
Кроме того, заметьте это, потому что CustAge
предиктор для первого наблюдения NaN
, соответствующий Scores
выход NaN
также.
Решение: Чтобы решить эту проблему, используйте formatpoints
функция с аргументом пары "имя-значение" Missing
. При использовании Missing
можно заменить NaN
предиктора значение по трем альтернативным критериям (
'ZeroWoe'
, 'MinPoints'
, или 'MaxPoints'
).
Для примера используйте Missing
чтобы заменить отсутствующее значение на 'MinPoints'
опция. Строка с отсутствующими данными теперь имеет счет, соответствующее присвоению ей минимально возможных точек для CustAge
.
sc = formatpoints(sc,'Missing','MinPoints'); [Scores,Points] = score(sc,newdata) PointsTable = displaypoints(sc); PointsTable(1:7,:)
Scores = 0.7074 1.4646 0.7662 1.5779 1.4535 1.8944 -0.0872 0.9207 1.0399 0.8252 Points = CustAge ResStatus EmpStatus CustIncome TmWBank OtherCC AMBalance ________ _________ _________ __________ _________ ________ _________ -0.15894 -0.031252 -0.076317 0.43693 0.39607 0.15842 -0.017472 0.479 0.12696 0.31449 0.43693 -0.033752 0.15842 -0.017472 0.21445 -0.031252 0.31449 0.081611 0.39607 -0.19168 -0.017472 0.23039 0.12696 0.31449 0.43693 -0.044811 0.15842 0.35551 0.479 0.12696 0.31449 0.43693 -0.044811 0.15842 -0.017472 0.479 0.12696 0.31449 0.43693 0.39607 0.15842 -0.017472 -0.14036 0.12696 -0.076317 -0.10466 -0.033752 0.15842 -0.017472 0.23039 0.37641 0.31449 0.43693 -0.033752 -0.19168 -0.21206 0.23039 -0.031252 -0.076317 0.43693 -0.033752 0.15842 0.35551 0.23039 0.12696 -0.076317 0.43693 -0.033752 0.15842 -0.017472 ans = Predictors Bin Points __________ ___________ _________ 'CustAge' '[-Inf,33)' -0.15894 'CustAge' '[33,37)' -0.14036 'CustAge' '[37,40)' -0.060323 'CustAge' '[40,46)' 0.046408 'CustAge' '[46,48)' 0.21445 'CustAge' '[48,58)' 0.23039 'CustAge' '[58,Inf]' 0.479
Заметьте, что Scores
выход имеет значение для первой записи клиента, поскольку CustAge
теперь имеет значение, и счет может быть рассчитан для первой записи клиента.
autobinning
| bindata
| bininfo
| creditscorecard
| displaypoints
| fitmodel
| formatpoints
| modifybins
| modifypredictor
| plotbins
| predictorinfo
| probdefault
| score
| setmodel
| validatemodel