Экран функций с screenpredictors

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

Цель скрининга предикторов состоит в том, чтобы разобрать набор предикторов на подмножество, которое более полезно в предсказании переменной отклика на основе вычисленных метрик. Скрининг позволяет вам выбрать верхние предикторы как ранжированные по заданной метрике, чтобы обучить ваши кредитные карты результатов.

Загрузка данных

Таблица данных кредитной карты содержит идентификатор клиента (CustID), девять предикторов и переменная отклика (status). Некоторые из факторов риска более полезны в прогнозировании вероятности дефолта по кредиту, в то время как другие менее полезны. Процесс скрининга помогает вам выбрать лучшее подмножество предикторов.

Несмотря на то, что набор данных в этом примере содержит только несколько предикторов, на практике наборы данных карты показателей кредита могут быть очень большими. Процесс скрининга предиктора важен, когда наборы данных растут и содержат десятки или сотни предикторов.

% Load credit card data tables.
matFileName = fullfile(matlabroot,'toolbox','finance','findemos','CreditCardData');
load(matFileName) 

% Use the dataMissing data set, which contains some missing values.
data = dataMissing;

% Identify the ID and response variables.
idvar = 'CustID';
responsevar = 'status';

% Examine the structure of the table.
disp(head(data));
    CustID    CustAge    TmAtAddress     ResStatus     EmpStatus    CustIncome    TmWBank    OtherCC    AMBalance    UtilRate    status
    ______    _______    ___________    ___________    _________    __________    _______    _______    _________    ________    ______

      1          53          62         <undefined>    Unknown        50000         55         Yes       1055.9        0.22        0   
      2          61          22         Home Owner     Employed       52000         25         Yes       1161.6        0.24        0   
      3          47          30         Tenant         Employed       37000         61         No        877.23        0.29        0   
      4         NaN          75         Home Owner     Employed       53000         20         Yes       157.37        0.08        0   
      5          68          56         Home Owner     Employed       53000         14         Yes       561.84        0.11        0   
      6          65          13         Home Owner     Employed       48000         59         Yes       968.18        0.15        0   
      7          34          32         Home Owner     Unknown        32000         26         Yes       717.82        0.02        1   
      8          50          57         Other          Employed       51000         33         No        3041.2        0.13        0   

Добавьте дополнительные производные предикторы

Часто предикторы производной могут захватывать дополнительную информацию или давать лучшие результаты по метрикам, например, отношение двух предикторов или преобразование предиктора для предиктора x, такого как x ^ 2 или log (x). Чтобы продемонстрировать это, создайте несколько производных предикторов и добавьте их к набору данных.

data.BalanceUtilRatio = data.AMBalance ./ data.UtilRate;
data.BalanceIncomeRatio = data.AMBalance ./ data.CustIncome;

Вычисление метрик

Использование screenpredictors вычислить несколько показателей прогнозируемости фактора риска. Столбцы выхода таблицы содержат значения метрик для предикторов. Таблица сортируется по информационному значению.

T = screenpredictors(data,'IDVar',idvar,'ResponseVar',responsevar)
T=11×7 table
                          InfoValue    AccuracyRatio     AUROC     Entropy     Gini      Chi2PValue    PercentMissing
                          _________    _____________    _______    _______    _______    __________    ______________

    CustAge                 0.17698        0.1672        0.5836    0.88795    0.42645     0.0020599          0.025   
    TmWBank                 0.15719       0.13612       0.56806    0.89167    0.42864     0.0054591              0   
    CustIncome              0.15572       0.17758       0.58879      0.891    0.42731     0.0018428              0   
    BalanceIncomeRatio     0.097073        0.1278        0.5639    0.90024    0.43303       0.11966              0   
    TmAtAddress            0.094574      0.010421       0.50521    0.90089    0.43377         0.182              0   
    UtilRate               0.075086      0.035914       0.51796    0.90405    0.43575       0.45546              0   
    AMBalance               0.07159      0.087142       0.54357    0.90446    0.43592       0.48528              0   
    BalanceUtilRatio       0.068955      0.026538       0.51327    0.90486    0.43614       0.52517              0   
    EmpStatus              0.048038       0.10886       0.55443    0.90814     0.4381    0.00037823              0   
    OtherCC                0.014301      0.044459       0.52223    0.91347    0.44132      0.047616              0   
    ResStatus             0.0095558      0.049855       0.52493    0.91446    0.44198       0.29879       0.033333   

Пороговые метрики

Установите пороги для предикторов на основе нескольких метрик. Для каждой метрики настройте пороговые ползунки, чтобы задать область значений проходных значений. На графике зеленые полосы указывают предикторы, которые передают порог. Красные полосы указывают предикторы, которые не передают порог. Можно опустить предикторы, которые не «передают» порог из конечного набора данных.

Во-первых, выберите предикторы на основе их информационного значения.

infovalueThresh = 0.08;

Визуализируйте пороги значений метрики для каждого предиктора с помощью локальной функции thresholdPlot, заданный в конце этого примера.

thresholdPlot(T, infovalueThresh, 'InfoValue')

Figure contains an axes. The axes with title Predictor Performance by InfoValue contains 2 objects of type bar, line.

Выберите предикторы на основе их коэффициента точности.

arThresh = 0.08;
thresholdPlot (T, arThresh ,'AccuracyRatio')

Figure contains an axes. The axes with title Predictor Performance by AccuracyRatio contains 2 objects of type bar, line.

Сводные данные по скринингу

Результирующие пороговые результаты в таблицу форме. Последний столбец указывает, какой из предикторов прошел оба пороговых теста, и может быть включен в окончательный набор данных для создания карты показателей кредита. summaryTable и displaySummaryTable являются локальными функциями.

metrics = {'InfoValue', 'AccuracyRatio'};
thresholds = [infovalueThresh arThresh];
S = summaryTable(T, metrics, thresholds);
displaySummaryTable(S)
                          InfoValue    AccuracyRatio    PassedAll
                          _________    _____________    _________

    CustAge                   ✔              ✔              ✔    
    TmWBank                   ✔              ✔              ✔    
    CustIncome                ✔              ✔              ✔    
    BalanceIncomeRatio        ✔              ✔              ✔    
    TmAtAddress               ✔              ✘              ✘    
    UtilRate                  ✘              ✘              ✘    
    AMBalance                 ✘              ✔              ✘    
    BalanceUtilRatio          ✘              ✘              ✘    
    EmpStatus                 ✘              ✔              ✘    
    OtherCC                   ✘              ✘              ✘    
    ResStatus                 ✘              ✘              ✘    

Редукционная таблица

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

% Get a list of all passing predictors.
predictor_list = T.Row;
top_predictors = predictor_list(S.PassedAll);

% Trim the data table to contain only the ID, passing predictors, and
% response.
top_predictor_table = data(:,[idvar; top_predictors; responsevar]);

% Create the credit scorecard using the screened predictors.
sc = creditscorecard(top_predictor_table,'IDVar',idvar,'ResponseVar',responsevar,...
    'BinMissingData', true)
sc = 
  creditscorecard with properties:

                GoodLabel: 0
              ResponseVar: 'status'
               WeightsVar: ''
                 VarNames: {1x6 cell}
        NumericPredictors: {1x4 cell}
    CategoricalPredictors: {1x0 cell}
           BinMissingData: 1
                    IDVar: 'CustID'
            PredictorVars: {1x4 cell}
                     Data: [1200x6 table]

Локальные функции

function passed = thresholdPredictor(T, threshold, metric)
% Threshold a predictor and return a logical vector to indicate passing
% predictors.

% Check which predictors pass the threshold.
switch metric
    case {'InfoValue', 'AccuracyRatio', 'AUROC'}
        passed = T.(metric) >= threshold;
    case {'Entropy', 'Gini', 'Chi2PValue', 'PercentMissing'}
        passed = T.(metric) <= threshold;
end
end


function thresholdPlot(T, threshold, metric)
% Plot bar charts to summarize predictor selection based on metrics thresholds.

% Threshold the predictors.
passed = thresholdPredictor(T, threshold, metric);

% Get all predictors.
predictorNames = T.Row;
nPredictors = length(predictorNames);

% Create the bar charts.
f = figure;
ax = axes('parent',f);
bAR = bar(ax, 1:nPredictors, T.(metric), 'FaceColor', 'flat');
bAR.CData(passed,:) = repmat([0,1,0],sum(passed),1);
bAR.CData(~passed, :) = repmat([1,0,0],sum(~passed),1);
ax.TickLabelInterpreter = 'none';
xticks(ax, 1:nPredictors)
xticklabels(ax, predictorNames)

% Scale the YLim.
delta = max(T.(metric)) - min(T.(metric));
d10 = 0.1 * delta;
ylim = [min(T.(metric)) - d10 max(T.(metric)) + d10];
set(ax,'YLim',ylim);

% Add threshold lines.
hold on
plot(xlim, [threshold threshold],'k--');
xlabel('Predictor')
ylabel(metric)
title(sprintf('Predictor Performance by %s',metric));
hold off
end


function S = summaryTable(T, metrics, thresholds)
% Create table summarizing all thresholds.
S = T;

% Remove metrics that are not thresholded.
unthresholded = setdiff(S.Properties.VariableNames, metrics);
S(:,unthresholded) = [];

% Show thresholding summary.
passed_all = true(numel(T.Row),1);
for i = 1:numel(metrics)
    metrici = metrics{i};
    thresholdi = thresholds(i);
    passed = thresholdPredictor(T, thresholdi, metrici);
    S.(metrici) = passed;
    passed_all = passed_all & passed;
end

% Add summary column.
S.PassedAll = passed_all;
end


function displaySummaryTable(S)
% Display a summary table with check marks for passed thresholds.

cols = S.Properties.VariableNames;

% Convert each column to check marks and X marks.
for i = 1:numel(cols)
    coli = cols{i};
    charvec = repmat(char(10008),size(S,1),1); % Initialize as 'X'.
    charvec(S.(coli)) = char(10004); % Check if it passes the threshold.
    S.(coli) = charvec;
end

disp(S);
end

См. также

| | | | | | | | | | | | | | |

Похожие примеры

Подробнее о

Внешние веб-сайты