Этот пример демонстрирует твердое сокращение и нечеткие подходы увеличения, чтобы отклонить вывод.
Вывод отклонения является методом для улучшения качества протокола результатов кредита путем слияния данных из отклоненных заявок на кредит. Смещение может закончиться, если модель протокола результатов кредита создана только на, принимает и не составляет заявления, отклоненные из-за прошлых отказов для кредита или неизвестного состояния не по умолчанию. При помощи метода вывода отклонения можно вывести эффективность отклонений и включать их в модель протокола результатов кредита, чтобы исправить это смещение.
Чтобы разработать протокол результатов кредита, необходимо идентифицировать каждого заемщика или как "хорошего" или как "плохого". Для отклоненных заявлений информация, чтобы идентифицировать заемщиков как "хороших" или "плохих" не доступна. Вы не можете сказать наверняка, к которому группируются, заемщик принадлежал бы, имел, они предоставили ссуду. Метод вывода отклонения позволяет вам выводить, был ли заемщик, вероятно, "хорошим" или "плохим" включением вам включить отклоненные данные приложения в набор данных, который вы используете, чтобы создать протокол результатов кредита.
Когда схема показывает, вывод отклонения требует, чтобы вы определили порог (предел), ниже которого отклонения рассматриваются как "плохие". Этот пример демонстрирует твердое сокращение и нечеткие подходы увеличения, чтобы вычислить этот порог.
Следующая схема показывает типичный процесс для того, чтобы создать модель протокола результатов. Красное поле представляет процесс вывода отклонения, где эффективность ранее отклоненных заявлений оценивается и затем используется, чтобы переобучить модель протокола результатов кредита.
Рабочий процесс для процесса вывода отклонения:
Создайте логистическую регрессию, основанную на модели на принятии.
Выведите класс отклонений с помощью одного из методов вывода отклонения.
Объедините принятие и отклонения в один набор данных.
Создайте новый протокол результатов, интервал расширенный набор данных, и создайте новую логистическую модель.
Подтвердите итоговую модель.
Существует два типа вывода отклонения:
Простое присвоение не использует процесс вывода отклонения и или игнорирует отклонения или присваивает все отклонения "плохому" классу.
Увеличение использует процесс вывода отклонения, чтобы обработать отклонения на основе модели выигрыша путем объединения исходного набора данных с данными об отклонениях.
Этот пример фокусируется на методах увеличения. Самые популярные методы для увеличения:
Простое увеличение — Используя значение сокращения, этот метод присваивает отклонения с баллами ниже и выше значения к "плохому" или "хорошему" классу, соответственно. Значение сокращения должно отразить, что уровень 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 matFileName = fullfile(matlabroot,'toolbox','finance','findemos','CreditCardData'); load(matFileName) 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 (probability 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.
creditscorecard
| screenpredictors
| autobinning
| bininfo
| predictorinfo
| modifypredictor
| modifybins
| bindata
| plotbins
| fitmodel
| displaypoints
| formatpoints
| score
| setmodel
| probdefault
| validatemodel