Этот пример демонстрирует жесткие и нечеткие подходы к увеличению для отклонения вывода.
Вывод отклонения является методом улучшения качества карты результатов кредита путем включения данных из отклоненных заявок на ссуду. Смещение может возникнуть, если модель карты показателей кредита построена только на принятии и не учитывает заявки, отклоненные из-за прошлых отклонений кредита или неизвестного статуса nondefault. Используя метод вывода отклонения, можно вывести эффективность отклонений и включить их в модель карты показателей кредита, чтобы исправить это смещение.
Чтобы разработать кредитную карту результатов, необходимо определить каждого заемщика как «хорошего» или «плохого». Для отклоненных заявок информация для идентификации заемщиков как «хороших» или «плохих» недоступна. Вы не можете точно определить, к какой группе принадлежал бы заемщик, если бы ему был предоставлен кредит. Метод вывода отклонения позволяет вам определить, будет ли заемщик «хорошим» или «плохим», что позволяет включать отклоненные данные приложения в набор данных, который вы используете для создания карты результатов кредитования.
Как показывает схема, вывод отклонения требует, чтобы вы определили порог (точку отсечения), ниже которого отклонения рассматриваются как «плохие». Этот пример демонстрирует жесткий и нечеткий подходы увеличения для вычисления этого порога.
Следующая схема показывает типичный процесс создания модели карты показателей. Красный прямоугольник представляет процесс вывода отклонения, в котором оценивается эффективность ранее отклоненных заявок, а затем используется для переобучения модели карты показателей кредита.
Рабочий процесс для процесса вывода отклонения:
Создайте логистическую регрессионую модель на основе принятых.
Вывод класса отклонений с помощью одного из методов вывода отклонений.
Объедините приемки и отклонения в один набор данных.
Создайте новую карту показателей, сохраните расширенный набор данных и создайте новую логистическую модель.
Проверьте окончательную модель.
Существует два типа вывода отклонения:
Простое назначение не использует процесс вывода отклонения и игнорирует отклонения или присваивает все отклонения «плохому» классу.
Увеличение использует процесс вывода отклонения, чтобы обработать отклонения на основе модели оценки путем объединения исходного набора данных с данными отклонений.
Этот пример фокусируется на методах увеличения. Наиболее популярными методами увеличения являются:
Простое увеличение - используя значение отсечения, этот метод присваивает отклонения с счетами ниже и выше значения классу «плохо» или «хорошо», соответственно. Значение среза должно отражать, что скорость бадов в отклонениях выше, чем в принятом населении. После присвоения класса («хороший» или «плохой») отклонениям всёсь население приемок и отклонений подгоняется в модели карты показателей кредита и затем оценивается. Этот подход также называется жестким методом отключения.
Нечеткое увеличение - этот метод оценивает отклонения с помощью модели карты результатов кредита на основе принятых. Эти отклонения дублируются в два наблюдения, где каждому присваивается вероятность быть «хорошим» или «плохим», а затем агрегируются к принятию. Новая модель карты показателей кредита затем оценивается на новом наборе данных.
В этом примере представлены следующие рабочие процессы:
Оба этих подхода используют правила раскладывания, сохраненные в исходной карте показателей, и применяют их к новой карте показателей, основанной на объединенном наборе данных.
Примечание. Наборы данных в этом примере являются технически сквозными (TTD) наблюдениями. То есть, принятие и отклонение объединяются и дифференцируются на основе их принятия или отклонения решения. Набор данных отклоняет затем создается из наблюдений TTD.
Метод жесткого отсечения использует предопределенное значение отсечения и присваивает отклонения ниже отсечения как «плохие» и выше отсечения как «хорошие». Значение отсечения должно отражать, что скорость «bads» в отклонениях выше, чем в приемлемых. После того, как каждому отклонению присваивается класс («хороший» или «плохой»), всёсь население утверждений и отклонений подгоняется в модели карты показателей кредита, а затем эта модель оценивается и проверяется. Этот подход также называется простым методом увеличения. Основной проблемой в этом подходе является выбор значения отсечения.
Во-первых, визуализируйте данные для приемов и отклонений для выбранного предиктора.
% Load the data load CreditCardData.mat load RejectsCreditCardData.mat Predictor = "CustAge"; рисунок; h1 = гистограмма (данные. (Предиктор)); держаться on h2 = гистограмма (Rejects. (Predictor)); h1. Нормализация = 'probability'; h2. Нормализация = 'probability'; заголовок (Предиктор) xlabel ('Predictor Values') ylabel ('Normalized Count by Probability') держаться off легенда ({'Accepts','Rejects'},'Location','best');
creditscorecard
Объект для принятия и счета данныхИспользование creditscorecard
для создания creditscorecard
объект, который можно использовать, чтобы складывать, подгонка, а затем оценивать accepts.
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
.
The CreditCardData.mat
входные данные имеют 'status'
как ответ. Предположим, что GoodLabel
(что означает nondefault) - это класс, который имеет более высокое количество в ответе. В этом примере GoodLabel
является 0
, что означает, что по умолчанию происходит только, когда ответ равен 1
.
% Define the BR BR = 0.75; % Sort rejects by ascending CustID order N = высота (Отклонения); Rejects = sortrows (Rejects); ScoresRejects = счет (scHC, Rejects); % Find the lowest quantile based on the BR and set the corresponding observations to bad Bad Label = setdiff (уникальный (sc HC.D ata. (sc HC. Response Var)), sc HC.G ood Label); ScoreThres = квантиль (ScoresRejects, BR); ResponseRejects = нули (N, 1); ResponseRejects (ScoresRejects < ScoreThres) = BadLabel; ResponseRejects (ScoresRejects > = ScoreThres) = scHC.GoodLabel; % Create the rejects table RejectsTable = [Отклонения таблицы (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"; рисунок; bar (категориальный (Ребра. (Предиктор)), гистограммы (bd1. (Предиктор))) держаться on bar (категориальный (Ребра. (Предиктор)), гистограммы (bd2. (Предиктор)),'FaceAlpha',0.25) держаться off xlabel ('Bins') ylabel ('Counts') легенда ({'Accepts Only','Combined'},'Location','best')
Сравните начальные creditscorecard
объект (scHC
) к новому creditscorecard
объект (scNewHC
) для распределения «товаров» и «бадсов» для выбранного предиктора.
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
Метод нечеткого увеличения начинается с создания карты показателей, используя только accepts, и затем эта модель карты показателей используется для оценки отклонений. В отличие от жесткого метода отключения, нечеткий подход увеличения не присваивает классы «хорошо» или «плохо». Скорее каждый отказ дублируется в два наблюдения и присваивается взвешенное «хорошее» или «плохое» значение, основанное на вероятности быть «хорошим» или «плохим». Взвешенные отклонения затем добавляются к набору данных accepts, и объединенный набор данных используется для создания карты показателей, которая затем подгоняется и проверяется.
Во-первых, визуализируйте данные для приемов и отклонений для выбранного предиктора.
% Load the data matFileName = fullfile(matlabroot,'toolbox','finance','findemos','CreditCardData'); load(matFileName) load RejectsCreditCardData.mat Predictor = "CustAge"; рисунок; h1 = гистограмма (данные. (Предиктор)); держаться on h2 = гистограмма (Rejects. (Predictor)); 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"; рисунок; bar (категориальный (Ребра. (Предиктор)), гистограммы (bd1. (Предиктор))) держаться on bar (категориальный (Ребра. (Предиктор)), гистограммы (bd2. (Предиктор)),'FaceAlpha',0.25) держаться off xlabel ('Bins') ylabel ('Counts') легенда ({'Accepts Only','Combined'},'Location','best')
Сравните начальные creditscorecard
объект (scFA
) к новому creditscorecard
объект (scNewFA
) для распределения «товаров» и «бадсов» для выбранного предиктора.
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
Этот пример демонстрирует, как использовать процесс вывода отклонения в рамках рабочего процесса карты показателей кредита. Методы Hard-Cutoff и Fuzzy Augmentation показывают, как можно складывать данные, подгонять модель, интегрировать отклонения с приемками в новую модель карты показателей кредита, а затем подтвердить новую модель карты показателей кредита.
Нет четкого вывода, для какого из этих подходов к выводу отклонения является лучшим. Этот пример предназначен для иллюстрации того, как использовать функции creditscorecard
для реализации двух различных подходов к выводу отклонений.
Baesn, B., D. Rösch, and H. Scheule. Аналитика кредитных рисков: методы измерения, приложения и примеры в SAS. Wiley and SAS Business Series, 2016.
Refaat, M. Credit Risk Scorecards: Разработка и реализация с использованием SAS. lulu.com, 2011.
autobinning
| bindata
| bininfo
| creditscorecard
| displaypoints
| fitmodel
| formatpoints
| modifybins
| modifypredictor
| plotbins
| predictorinfo
| probdefault
| score
| screenpredictors
| setmodel
| validatemodel