Подтвердите качество компактной модели протокола результатов кредита

Этот пример показывает рабочий процесс для проверки компактной модели протокола результатов кредита путем оценки ПРОПИСНОЙ БУКВЫ, ROC и графиков KS. Сначала необходимо разработать объект creditscorecard, преобразовать объект creditscorecard в объект compactCreditScorecard, и затем перейти к проверке компактной модели протокола результатов кредита.

Разработайте модель протокола результатов

Создайте объект creditscorecard с помощью файла CreditCardData.mat, чтобы загрузить data. 'IDVar' установлен в 'CustID'.

load CreditCardData.mat
sc = creditscorecard(data,'IDVar','CustID');

Выполните автоматическое раскладывание с помощью опций по умолчанию. По умолчанию, интервалы autobinning все предикторы и использование алгоритм Monotone.

sc = autobinning(sc);

Используйте fitmodel, чтобы соответствовать модели логистической регрессии использование данных о Весе доказательства (WOE). fitmodel внутренне преобразовывает все переменные прогноза в значения WOE, с помощью интервалов, найденных с автоматическим процессом раскладывания. fitmodel соответствует модели логистической регрессии использование пошагового метода (по умолчанию).

sc = fitmodel(sc,'Display','off');

Используйте formatpoints, чтобы масштабироваться путем обеспечения точек, уровни разногласий и PDO (указывает, чтобы удвоить разногласия). Предположим, что вы хотите, чтобы счет 500 точек имел разногласия 2 (вдвое более вероятный быть хорошими, чем быть плохими) и что разногласия удваивают каждые 50 точек (так, чтобы 550 точек имели бы разногласия 4).

sc = formatpoints(sc, 'PointsOddsAndPDO',[500,2,50]);

Создайте компактную модель протокола результатов

Используйте объект creditscorecard с функцией compact, чтобы создать объект compactCreditScorecard .

ccsc = compact(sc);

Выиграйте данные тренировки путем передачи его в функцию score объекта compactCreditScorecard. data раньше выигрывал, данные тренировки. Однако можно использовать функцию score с любым data, пока форма data сопоставима с входом data для объекта creditscorecard.

[scr, pts] = score(ccsc, data);

Вычислите вероятность значения по умолчанию с помощью функции probdefault с объектом compactCreditScorecard . data, используемый, чтобы вычислить вероятность значения по умолчанию, является данными тренировки. Однако можно использовать функцию probdefault с любым data, пока форма data сопоставима с входом data для объекта creditscorecard.

pd = probdefault(ccsc, data);

Подтвердите компактную модель протокола результатов

Для объекта compactCreditScorecard вычислите меры по валидации как Отношение точности (AR), область под Кривой Рабочей характеристики получателя (ROC) и Кольмогоровым-Смирновым (KS) статистическая величина и отобразите результаты в табличной форме.

[x,y,t,auc] = perfcurve(data.status, pd, 1);
[KSValue, KSInd] = max(y - x);
ar = 2 * auc - 1;

Measure = {'Accuracy Ratio','Area Under ROC curve','KS Statistic'}';
Value  = [ar;auc;KSValue];

Stats = table(Measure,Value);
disp(Stats);
           Measure             Value 
    ______________________    _______

    'Accuracy Ratio'          0.32258
    'Area Under ROC curve'    0.66129
    'KS Statistic'             0.2246

Подтвердите компактную модель протокола результатов кредита путем генерации ПРОПИСНОЙ БУКВЫ, ROC и графиков KS.

CAP_figure = hPlotCAP(data.status, y, scr, ar);

ROC_figure = hPlotROC(x,y,auc);

KS_figure = hPlotKS(scr, x, y, KSInd, KSValue);

Localfunctions

function roc_figure = hPlotROC(x,y,auc)
% helper function to plot the ROC curve
roc_figure = figure;
ax = axes(roc_figure);
X = [x;1;1;0];
Y = [y;1;0;0];
Color = [1, 1, 0.6];
hp1 = fill(X,Y,Color);
ax.XLim = [0 1];
ax.YLim = [0 1];
set(hp1,'Parent',ax,'EdgeColor','none')
hold(ax,'on')
plot(ax,x,y,'k-')
box(ax,'on')
TextInPlot = sprintf('AUROC = %0.3f',auc);
text(0.6,0.2,TextInPlot,...
    'HorizontalAlignment','Center','Parent',ax)
xlabel('Fraction of Non-defaulters')
ylabel('Fraction of Defaulters')
title(ax,'Receiver Operating Characteristic (ROC) Curve')
end

function ks_figure = hPlotKS(scr, x, y, KSInd, KSValue)
% helper function for the K-S plot
sorted_scr = unique(scr);
sorted_scr = [sorted_scr(1);sorted_scr];

KSScore = sorted_scr(KSInd);
ks_figure = figure;
ax = axes('Parent',ks_figure);

plot(ax,sorted_scr,y,sorted_scr,x);
hl = legend({'Cumulative Bads','Cumulative Goods'},'location','Best',...
    'AutoUpdate','Off');
set(hl,'Parent',ks_figure)
xlabel('Score (Riskiest to Safest)')
ylabel('Cumulative Probability')

hold(ax,'on')
xLimits = get(ax,'XLim');
yLimits = get(ax,'YLim');

plot(ax,[KSScore KSScore],yLimits,'k:')
plot(ax,[xLimits(1) KSScore],[y(KSInd) y(KSInd)],'k:')
plot(ax,[xLimits(1) KSScore],[x(KSInd) x(KSInd)],'k:')

TextInPlot = sprintf('K-S %3.1f%%, at %g',KSValue*100,KSScore);
text((xLimits(1)+KSScore)/2,(y(KSInd)+x(KSInd))/2,TextInPlot,...
    'HorizontalAlignment','Center','Parent',ax)

title(ax,'K-S Plot')
hold(ax,'off')
end

function cap_figure = hPlotCAP(status, y, scr, ar)
% helper function to plot the CAP curve
sorted_scr = sort(scr);
[~, idx] = unique(sorted_scr);
PctObs = ((1:length(status))./length(status))';
PctObs = [0; PctObs(idx)];
PctDefault = sum(status == 1) / length(status);
xPerfMdl = [0; PctDefault; 1];
yPerfMdl = [0; 1; 1];

cap_figure = figure;
ax  = axes('Parent',cap_figure);

xLimits = get(ax,'XLim');
yLimits = get(ax,'YLim');

hp1 = fill([PctObs;flipud(PctObs)],[PctObs;flipud(y)],[1, 1, 0.6]);
ax.XLim = [0 1];
ax.YLim = [0 1];
set(hp1,'Parent',ax,'EdgeColor','none')
hold(ax,'on')

hp2 = fill([PctObs;flipud(xPerfMdl)],[y;flipud(yPerfMdl)],[0.8, 1, 1]);
set(hp2,'Parent',ax,'EdgeColor','none')

box(ax,'on')
plot(ax,PctObs,y,'k-')
plot(ax,PctObs,PctObs,'k--')
plot(ax,xPerfMdl,yPerfMdl,'k')
TextInPlot = sprintf('AR = %0.3f',ar);
text(0.6*diff(xLimits),0.2*diff(yLimits),TextInPlot,...
    'HorizontalAlignment','Center','Parent',ax)
xlabel('Fraction of Borrowers')
ylabel('Fraction of Defaulters')
title(ax,'Cumulative Accuracy Profile (CAP) Curve')
end