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')
Выберите предикторы на основе их коэффициента точности.
arThresh =0.08; thresholdPlot(T, arThresh, 'AccuracyRatio')

Подведите итоги порогов в табличной форме. Последний столбец указывает, какие из предикторов прошли оба пороговых теста и могут быть включены в окончательный набор данных для создания кредитной карты показателей. 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
autobinning | bindata | bininfo | creditscorecard | displaypoints | fitmodel | formatpoints | modifybins | modifypredictor | plotbins | predictorinfo | probdefault | score | screenpredictors | setmodel | validatemodel