Этот пример показывает рабочий процесс для проверки компактной модели протокола результатов кредита путем оценки ПРОПИСНОЙ БУКВЫ, 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);
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