Этот пример демонстрирует твердое сокращение и нечеткие подходы увеличения, чтобы отклонить вывод.
Вывод отклонения является методом для улучшения качества протокола результатов кредита путем слияния данных из отклоненных заявок на кредит. Смещение может закончиться, если модель протокола результатов кредита создана только на, принимает и не составляет заявления, отклоненные из-за прошлых отказов для кредита или неизвестного состояния не по умолчанию. При помощи метода вывода отклонения можно вывести производительность отклонений и включать их в модель протокола результатов кредита, чтобы исправить это смещение.
Чтобы разработать протокол результатов кредита, необходимо идентифицировать каждого заемщика или как "хорошего" или как "плохого". Для отклоненных заявлений информация, чтобы идентифицировать заемщиков как "хороших" или "плохих" не доступна. Вы не можете сказать наверняка, к которому группируются, заемщик принадлежал бы, имел, они предоставили ссуду. Метод вывода отклонения позволяет вам выводить, был ли заемщик, вероятно, "хорошим" или "плохим" включением вам включить отклоненные данные приложения в набор данных, который вы используете, чтобы создать протокол результатов кредита.
Когда схема показывает, вывод отклонения требует, чтобы вы определили порог (предел), ниже которого отклонения рассматриваются как "плохие". Этот пример демонстрирует твердое сокращение и нечеткие подходы увеличения, чтобы вычислить этот порог.

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

Рабочий процесс для процесса вывода отклонения:
Создайте логистическую регрессию, основанную на модели на принятии.
Выведите класс отклонений с помощью одного из методов вывода отклонения.
Объедините принятие и отклонения в один набор данных.
Создайте новый протокол результатов, интервал расширенный набор данных, и создайте новую логистическую модель.
Подтвердите итоговую модель.
Существует два типа вывода отклонения:
Простое присвоение не использует процесс вывода отклонения и или игнорирует отклонения или присваивает все отклонения "плохому" классу.
Увеличение использует процесс вывода отклонения, чтобы обработать отклонения на основе модели выигрыша путем объединения исходного набора данных с данными об отклонениях.
Этот пример фокусируется на методах увеличения. Самые популярные методы для увеличения:
Простое увеличение — Используя значение сокращения, этот метод присваивает отклонения с баллами ниже и выше значения к "плохому" или "хорошему" классу, соответственно. Значение сокращения должно отразить, что уровень bads в отклонениях выше, чем в принятом населении. После того, как класс ("хороший" или "плохой") присвоен отклонениям, целое население принимает, и отклонения приспособлены в модели протокола результатов кредита и затем выиграны. Этот подход также называется методом твердого сокращения.
Нечеткое увеличение — Этот метод баллы отклонения при помощи протокола результатов кредита, основанного на модели на принятии. Эти отклонения дублированы в два наблюдения, где каждый определен вероятность того, чтобы быть "хорошим" или "плохим", и затем агрегирован к принятию. Новая модель протокола результатов кредита затем оценивается на новом наборе данных.
В этом примере представлены следующие рабочие процессы:
Оба из этих подходов используют правила раскладывания, сохраненные из исходного протокола результатов, и применяют их к новому протоколу результатов, который основан на объединенном наборе данных.
Примечание: наборы данных в этом примере являются технически наблюдениями через дверь (TTD). Таким образом, принимает, и отклонения смешиваются и дифференцируются на основе их принимать или отклонить решение. Набор данных отклонений затем создается из наблюдений TTD.
Метод твердого сокращения использует предопределенное значение сокращения и присваивает отклонения с баллами и выше значения к "плохому" или "хорошему" классу, соответственно. Значение сокращения должно отразить, что уровень "bads" в отклонениях выше, чем в принятии. После того, как каждое отклонение присвоено класс ("хороший" или "плохой"), целое население принимает, и отклонения приспособлен в модели протокола результатов кредита, и затем что модель выиграна и подтверждена. Этот подход также называется простым методом увеличения. Основная проблема в этом подходе выбирает значение сокращения.
Во-первых, визуализируйте данные для, принимает и отклоняет для выбранного предиктора.
% Load the data load CreditCardData.mat load RejectsCreditCardData.mat Predictor ="CustAge"; фигура; h1 = гистограмма (данные. (Предиктор)); содержание on h2 = гистограмма (Отклонения. (Предиктор)); h1. Нормализация = 'probability'; h2. Нормализация = 'probability'; заголовок (Предиктор) xlabel'Predictor Values') yLabel 'Normalized Count by Probability') содержание off легенда'Accepts','Rejects'},'Location','best');

creditscorecard Объект для принятия и счета данныеИспользуйте creditscorecard создать creditscorecard возразите, что можно использовать для интервала, подгонки, и затем выигрывать принятие.
scHC = creditscorecard(data,'IDVar','CustID'); scHC = autobinning(scHC); scHC = fitmodel(scHC);
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
ScoreRange = [300 850];
scHC = formatpoints(scHC,'WorstAndBestScores',ScoreRange);
ScoresAccepts = score(scHC);Отклонение "хорошо" или "плохо" на основе заданного значения плохого уровня (BR). В общем случае промышленность рейтинга кредитоспособности принимает, что отклонения имеют BR 75%. Это - субъективная оценка, которая обычно основана на неизвестном значении. В этом примере можно настроить значение BR.
CreditCardData.mat входные данные имеют 'status' как ответ. Примите тот GoodLabel (что означает не по умолчанию), класс, который имеет более высокое количество в ответе. В этом примере, GoodLabel 0, что означает, что значение по умолчанию только происходит, когда ответ равен 1.
% Define the BR BR =0.75; % Sort rejects by ascending CustID order N = высота (Отклонения); Отклонения = sortrows (Отклонения); ScoresRejects = счет (scHC, Отклонения); % Find the lowest quantile based on the BR and set the corresponding observations to bad BadLabel = setdiff (уникальный (scHC.Data. (scHC.ResponseVar)), scHC.GoodLabel); ScoreThres = квантиль (ScoresRejects, BR); ResponseRejects = нули (N, 1); ResponseRejects (ScoresRejects <ScoreThres) = BadLabel; ResponseRejects (ScoresRejects> = ScoreThres) = scHC.GoodLabel; % Create the rejects table RejectsTable = [Таблица Rejects (ResponseRejects,'VariableNames', {ScHC.ResponseVar})];
Чтобы проводить более точное сравнение между принятием и объединенным набором данных, используйте те же правила раскладывания от начальной буквы, принимает протокол результатов кредита, и скопируйте их в creditscorecard объект основывался на объединенном наборе данных. Это гарантирует, что присвоение раскладывания не влияет на более позднее сравнение двух моделей протокола результатов кредита. Кроме того, можно визуализировать, как отклонения распространены в области значений данных каждого предиктора.
% Create the final combined scorecard CombinedData = [data(:,2:end);RejectsTable(:,2:end)]; scNewHC = creditscorecard(CombinedData,'GoodLabel',0); % Bin using the same binning rules as the base scorecard Predictors = scHC.PredictorVars; Edges = struct(); for i = 1 : length(Predictors) Pred = Predictors{i}; [bi,cp] = bininfo(scHC,Pred); if ismember(Pred,scHC.NumericPredictors) scNewHC = modifybins(scNewHC,Pred,'CutPoints',cp); else scNewHC = modifybins(scNewHC,Pred,'CatGrouping',cp); end Edges.(Pred) = bi.Bin(1:end-1); end % Visualize the rejects distribution in each bin bd1 = bindata(scHC,data); bd2 = bindata(scHC,CombinedData); Predictor ="CustAge"; фигура; панель (категориальный (Ребра. (Предиктор)), histcounts (bd1. (Предиктор))) содержание on панель (категориальный (Ребра. (Предиктор)), histcounts (bd2. (Предиктор)),'FaceAlpha',0.25) содержание off xlabel'Bins') yLabel 'Counts') легенда'Accepts Only','Combined'},'Location','best')

Сравните начальный creditscorecard объект (scHC) к новому creditscorecard объект (scNewHC) для распределения "товаров" и "bads" для выбранного предиктора.
plotbins(scHC,Predictor);

plotbins(scNewHC,Predictor);

Подбирайте модель логистической регрессии для creditscorecard объект scNewHC и затем выиграйте scNewHC.
scNewHC = fitmodel(scNewHC);
1. Adding CustIncome, Deviance = 1693.9882, Chi2Stat = 114.39516, PValue = 1.0676416e-26
2. Adding TmWBank, Deviance = 1650.6615, Chi2Stat = 43.326628, PValue = 4.6323638e-11
3. Adding AMBalance, Deviance = 1623.0668, Chi2Stat = 27.594773, PValue = 1.4958244e-07
4. Adding EmpStatus, Deviance = 1603.603, Chi2Stat = 19.463733, PValue = 1.0252802e-05
5. Adding CustAge, Deviance = 1592.3467, Chi2Stat = 11.256272, PValue = 0.00079354409
6. Adding ResStatus, Deviance = 1582.0086, Chi2Stat = 10.338134, PValue = 0.0013030966
7. Adding OtherCC, Deviance = 1572.1, Chi2Stat = 9.9086387, PValue = 0.0016450476
Generalized linear regression model:
status ~ [Linear formula with 8 terms in 7 predictors]
Distribution = Binomial
Estimated Coefficients:
Estimate SE tStat pValue
________ ________ ______ __________
(Intercept) 0.48115 0.061301 7.849 4.1925e-15
CustAge 0.50857 0.14449 3.5197 0.00043207
ResStatus 1.151 0.34773 3.3101 0.00093262
EmpStatus 0.78527 0.17826 4.4051 1.0572e-05
CustIncome 0.68743 0.12372 5.5563 2.7555e-08
TmWBank 1.0001 0.16731 5.9779 2.2607e-09
OtherCC 0.97659 0.30956 3.1548 0.0016062
AMBalance 0.91563 0.19073 4.8006 1.5819e-06
1361 observations, 1353 error degrees of freedom
Dispersion: 1
Chi^2-statistic vs. constant model: 236, p-value = 2.29e-47
scNewHC = formatpoints(scNewHC,'WorstAndBestScores',ScoreRange); Scores = score(scNewHC); % Visualize the score distribution histogram(ScoresAccepts) hold on histogram(Scores,'FaceAlpha',0.25) hold off ylabel('Counts') xlabel('Scores') title(sprintf('Score Distribution for a BR = %.2f',BR)) legend({'Accepts Only','Combined'},'Location','best')

Перед валидацией необходимо настроить набор данных. Чтобы настроить набор данных, вы можете также:
Подтвердите принятие для обоих протоколов результатов
Подтвердите объединенный набор данных для обоих протоколов результатов
% Get statistics for the accepts StatsA1 = validatemodel(scHC); StatsA2 = validatemodel(scNewHC,data); % Get the statistics for the combined data set StatsC1 = validatemodel(scHC,CombinedData); StatsC2 = validatemodel(scNewHC); s1 = table(StatsA1.Value,StatsA2.Value,'VariableNames',{'BaseScorecard','CombinedScorecard'}); s2 = table(StatsC1.Value,StatsC2.Value,'VariableNames',{'BaseScorecard','CombinedScorecard'}); Stats = table(StatsA1.Measure,s1,s2,'VariableNames',{'Measure','Accepts','Combined'}); disp(Stats)
Measure Accepts Combined
BaseScorecard CombinedScorecard BaseScorecard CombinedScorecard
________________________ __________________________________ __________________________________
{'Accuracy Ratio' } 0.32258 0.31695 0.47022 0.46565
{'Area under ROC curve'} 0.66129 0.65848 0.73511 0.73282
{'KS statistic' } 0.2246 0.22946 0.34528 0.33681
{'KS score' } 550.72 576.57 512.44 542.85
Нечеткий метод увеличения запускается путем создания протокола результатов с помощью принятия только, и затем эта модель протокола результатов используется, чтобы выиграть отклонения. В отличие от метода твердого сокращения, нечеткий подход увеличения не присваивает "хорошие" или "плохие" классы. Скорее каждое отклонение дублировано в два наблюдения и присвоило взвешенное "хорошее" или "плохое" значение, на основе вероятности того, чтобы быть "хорошим" или "плохим". Взвешенные отклонения затем добавляются к, принимает набор данных, и объединенный набор данных используется, чтобы создать протокол результатов, который является затем подходящим и подтвержден.
Во-первых, визуализируйте данные для, принимает и отклоняет для выбранного предиктора.
% Load the data load CreditCardData.mat load RejectsCreditCardData.mat Predictor ="CustAge"; фигура; h1 = гистограмма (данные. (Предиктор)); содержание on h2 = гистограмма (Отклонения. (Предиктор)); h1. Нормализация = 'probability'; h2. Нормализация = 'probability'; заголовок (Предиктор) xlabel'Predictor values') yLabel 'Normalized Count by Probability') содержание off легенда'Accepts','Rejects'},'Location','best');

creditscorecard Объект для принятия и счета данныеИспользуйте creditscorecard создать creditscorecard объект для принятия, которое вы можете интервал, подгонка, и затем выигрывать.
scFA = creditscorecard(data,'IDVar','CustID'); scFA = autobinning(scFA); scFA = fitmodel(scFA);
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
ScoreRange = [300 850];
scFA = formatpoints(scFA,'WorstAndBestScores',ScoreRange);
ScoresAccepts = score(scFA);% Load the rejects dataset and score the observations load RejectsCreditCardData.mat ScoresRejects = score(scFA,Rejects); % Compute the probabilities of default and use as weights pdRejects = probdefault(scFA,Rejects); % Assign bad status to pd (proability of default) and good status to 1-pd weights BadLabel = setdiff(unique(scFA.Data.(scFA.ResponseVar)),scFA.GoodLabel); Weights = zeros(2*length(pdRejects),1); Response = zeros(2*length(pdRejects),1); Weights(1:2:end) = pdRejects; Response(1:2:end) = BadLabel; Weights(2:2:end) = 1-pdRejects; Response(2:2:end) = scFA.GoodLabel; % Rearrange the response so that each two rows correspond to the same % observation from rejects RejectsTable = repelem(Rejects(:,2:end),2,1); RejectsTable = addvars(RejectsTable,Weights,Response,'NewVariableNames',... {'Weights',scFA.ResponseVar}); % Combine accepts and rejects AcceptsData = addvars(data,ones(height(data),1),'Before',scFA.ResponseVar,... 'NewVariableNames','Weights'); CombinedData = [AcceptsData(:,2:end);RejectsTable];
Чтобы проводить более точное сравнение между принятием и объединенным набором данных, используйте те же правила раскладывания от начальной буквы, принимает протокол результатов кредита, и скопируйте их в creditscorecard объект основывался на объединенном наборе данных. Это гарантирует, что присвоения раскладывания не влияют на более позднее сравнение двух моделей протокола результатов кредита. Кроме того, можно визуализировать, как отклонения распространены в области значений данных каждого предиктора.
scNewFA = creditscorecard(CombinedData,'GoodLabel',0,'WeightsVar','Weights'); % Bin using the same binning rules as the base scorecard Predictors = scFA.PredictorVars; Edges = struct(); for i = 1 : length(Predictors) Pred = Predictors{i}; [bi,cp] = bininfo(scFA,Pred); if ismember(Pred,scFA.NumericPredictors) scNewFA = modifybins(scNewFA,Pred,'CutPoints',cp); else scNewFA = modifybins(scNewFA,Pred,'CatGrouping',cp); end Edges.(Pred) = bi.Bin(1:end-1); end % Visualize the rejects distribution in each bin bd1 = bindata(scFA,data); bd2 = bindata(scFA,CombinedData); Predictor ="CustAge"; фигура; панель (категориальный (Ребра. (Предиктор)), histcounts (bd1. (Предиктор))) содержание on панель (категориальный (Ребра. (Предиктор)), histcounts (bd2. (Предиктор)),'FaceAlpha',0.25) содержание off xlabel'Bins') yLabel 'Counts') легенда'Accepts Only','Combined'},'Location','best')

Сравните начальный creditscorecard объект (scFA) к новому creditscorecard объект (scNewFA) для распределения "товаров" и "bads" для выбранного предиктора.
plotbins(scFA,Predictor);

plotbins(scNewFA,Predictor);

Подбирайте модель логистической регрессии для creditscorecard объект scNewFA и затем выиграйте scNewFA.
scNewFA = fitmodel(scNewFA);
1. Adding CustIncome, Deviance = 1711.3102, Chi2Stat = 54.160619, PValue = 1.8475277e-13
2. Adding TmWBank, Deviance = 1682.5353, Chi2Stat = 28.774866, PValue = 8.1299351e-08
3. Adding AMBalance, Deviance = 1668.2956, Chi2Stat = 14.239727, PValue = 0.00016093686
4. Adding EmpStatus, Deviance = 1658.2944, Chi2Stat = 10.001236, PValue = 0.001564352
5. Adding CustAge, Deviance = 1652.3976, Chi2Stat = 5.8967925, PValue = 0.015168483
6. Adding OtherCC, Deviance = 1647.7632, Chi2Stat = 4.6344022, PValue = 0.031337059
7. Adding ResStatus, Deviance = 1642.8332, Chi2Stat = 4.9299914, PValue = 0.026394448
Generalized linear regression model:
status ~ [Linear formula with 8 terms in 7 predictors]
Distribution = Binomial
Estimated Coefficients:
Estimate SE tStat pValue
________ ________ ______ __________
(Intercept) 0.60838 0.059654 10.198 2.0142e-24
CustAge 0.50755 0.20092 2.5262 0.011532
ResStatus 1.082 0.48919 2.2119 0.026971
EmpStatus 0.74776 0.23526 3.1784 0.0014809
CustIncome 0.6372 0.17519 3.6371 0.00027567
TmWBank 0.96561 0.19664 4.9106 9.0815e-07
OtherCC 0.90699 0.40476 2.2408 0.025039
AMBalance 0.87642 0.25404 3.4499 0.00056077
1522 observations, 1514 error degrees of freedom
Dispersion: 1
Chi^2-statistic vs. constant model: 123, p-value = 2.16e-23
scNewFA = formatpoints(scNewFA,'WorstAndBestScores',ScoreRange); Scores = score(scNewFA); pd = probdefault(scNewFA); % Visualize the score distribution histogram(ScoresAccepts) hold on histogram(Scores,'FaceAlpha',0.25) hold off ylabel('Counts') xlabel('Scores') title('Score Distribution Using Fuzzy Augmentation') legend({'Accepts Only','Combined'},'Location','best')

Перед валидацией необходимо настроить набор данных. Чтобы настроить набор данных, вы можете также:
Подтвердите принятие для обоих протоколов результатов
Подтвердите объединенный набор данных для обоих протоколов результатов
% Get statistics for the accepts data.Weights = ones(height(data),1); StatsA1 = validatemodel(scFA); StatsA2 = validatemodel(scNewFA,data); % Get the statistics for the combined data set StatsC1 = validatemodel(scFA,CombinedData); StatsC2 = validatemodel(scNewFA); s1 = table(StatsA1.Value,StatsA2.Value,'VariableNames',{'BaseScorecard','CombinedScorecard'}); s2 = table(StatsC1.Value,StatsC2.Value,'VariableNames',{'BaseScorecard','CombinedScorecard'}); Stats = table(StatsA1.Measure,s1,s2,'VariableNames',{'Measure','Accepts','Combined'}); disp(Stats)
Measure Accepts Combined
BaseScorecard CombinedScorecard BaseScorecard CombinedScorecard
________________________ __________________________________ __________________________________
{'Accuracy Ratio' } 0.32258 0.32088 0.29419 0.35143
{'Area under ROC curve'} 0.66129 0.66044 0.64709 0.67571
{'KS statistic' } 0.2246 0.22799 0.22596 0.25629
{'KS score' } 550.72 554.84 512.44 520.99
Этот пример демонстрирует, как использовать процесс вывода отклонения в рамках рабочего процесса протокола результатов кредита. Твердое Сокращение и Нечеткие методы Увеличения показывают, как вы можете интервал данные, подобрать модель, интегрировать отклонения с принятием в новую модель протокола результатов кредита, и затем подтвердить новую модель протокола результатов кредита.
Нет никакого ясного заключения, для которого из этих приближается вывод отклонения, является лучшим. Этот пример предназначается, чтобы проиллюстрировать, как использовать функции creditscorecard чтобы реализовать два различных отклонения заключают подходы.
Baesesn, B., Д. Реш и Х. Шеул. Аналитика кредитного риска: техники измерений, приложения и примеры в SAS. Вайли и ряд бизнеса SAS, 2016.
Refaat, M. Протоколы результатов кредитного риска: разработка и реализация Используя SAS. lulu.com, 2011.