Как вычислить баллы для creditscorecard объект с ограничениями равенства, неравенства или границ на коэффициентах модели логистической регрессии, использование fitConstrainedModel. В отличие от этого, fitmodel, fitConstrainedModel решает как для задачи без ограничений, так и для задачи с ограничениями. Текущий решатель, используемый для минимизации целевой функции для fitConstrainedModel является fmincon, из Toolbox™ Оптимизация.
Этот пример содержит три основных раздела. Во-первых, fitConstrainedModel используется для решения коэффициентов в модели без ограничений. Затем, fitConstrainedModel демонстрирует использование нескольких типов ограничений. Наконец, fitConstrainedModel использует начальную загрузку для анализа значимости, чтобы определить, какие предикторы следует отклонить из модели.
creditscorecard Данные объекта и ячейкиload CreditCardData.mat sc = creditscorecard(data,'IDVar','CustID'); sc = autobinning(sc);
fitConstrainedModelРешение для неограниченных коэффициентов с помощью fitConstrainedModel со значениями по умолчанию для входных параметров. fitConstrainedModel использует внутренний решатель оптимизации fmincon из Toolbox™ Оптимизация. Если ограничения не заданы, fmincon рассматривает модель как неограниченную задачу оптимизации. Параметры по умолчанию для LowerBound и UpperBound являются -Inf и +Infсоответственно. Для ограничений равенства и неравенства по умолчанию используется пустой числовой массив.
[sc1,mdl1] = fitConstrainedModel(sc); coeff1 = mdl1.Coefficients.Estimate; disp(mdl1.Coefficients);
Estimate
_________
(Intercept) 0.70246
CustAge 0.6057
TmAtAddress 1.0381
ResStatus 1.3794
EmpStatus 0.89648
CustIncome 0.70179
TmWBank 1.1132
OtherCC 1.0598
AMBalance 1.0572
UtilRate -0.047597
В отличие от этого, fitmodel который дает p-значения, при использовании fitConstrainedModel, необходимо использовать начальную загрузку, чтобы выяснить, какие предикторы отклоняются от модели, когда на них накладываются ограничения. Это показано в разделе «Imagency Bootstrapping».
fitmodel Сравнение результатов и калибровка моделиfitmodel подходит модель логистической регрессии к данным веса доказательств (WOE), и нет никаких ограничений. Можно сравнить результаты из раздела «Неограниченная модель с помощью fitConstrainedModel» с результатами из fitmodel для проверки правильности калибровки модели.
Теперь решите проблему без ограничений с помощью fitmodel. Обратите внимание, что fitmodel и fitConstrainedModel использовать различные решатели. В то время как fitConstrainedModel использование fmincon, fitmodel использование stepwiseglm по умолчанию. Чтобы включить все предикторы с начала, установите 'VariableSelection' аргумент пары имя-значение fitmodel кому 'fullmodel'.
[sc2,mdl2] = fitmodel(sc,'VariableSelection','fullmodel','Display','off'); coeff2 = mdl2.Coefficients.Estimate; disp(mdl2.Coefficients);
Estimate SE tStat pValue
_________ ________ _________ __________
(Intercept) 0.70246 0.064039 10.969 5.3719e-28
CustAge 0.6057 0.24934 2.4292 0.015131
TmAtAddress 1.0381 0.94042 1.1039 0.26963
ResStatus 1.3794 0.6526 2.1137 0.034538
EmpStatus 0.89648 0.29339 3.0556 0.0022458
CustIncome 0.70179 0.21866 3.2095 0.0013295
TmWBank 1.1132 0.23346 4.7683 1.8579e-06
OtherCC 1.0598 0.53005 1.9994 0.045568
AMBalance 1.0572 0.36601 2.8884 0.0038718
UtilRate -0.047597 0.61133 -0.077858 0.93794
figure plot(coeff1,'*') hold on plot(coeff2,'s') xticklabels(mdl1.Coefficients.Properties.RowNames) ylabel('Model Coefficients') title('Unconstrained Model Coefficients') legend({'Calculated by fitConstrainedModel with defaults','Calculated by fimodel'},'Location','best') grid on

Как показывают таблицы и график, коэффициенты модели совпадают. Вы можете быть уверены, что эта реализация fitConstrainedModel хорошо откалиброван.
В подходе модели с ограничениями выполняется решение для значений коэффициентов логистической модели с учетом ограничений. Поддерживаемые ограничения связаны, равенством или неравенством. Коэффициенты максимизируют функцию правдоподобия по умолчанию, определенную для наблюдения , как:
где:
bK] - неизвестный коэффициент модели
xiK] - предикторные значения при i
- значение отклика; значение 1 представляет значение по умолчанию, а значение 0 представляет значение, отличное от значения по умолчанию
Эта формула используется для невзвешенных данных. Когда наблюдение i имеет вес , это означает, что существует столько же наблюдений i. Поэтому вероятность того, что при наблюдении i произойдет дефолт, является произведением вероятностей дефолта:
Defaulti) wi * yi
Аналогично, вероятность отсутствия дефолта для взвешенного наблюдения i равна:
Defaulti)) wi * (1-yi)
Для взвешенных данных, если есть значение по умолчанию для данного наблюдения i, вес которого равен , это как если бы было значение wi для этого одного наблюдения, и все они либо все по умолчанию, либо все не по умолчанию. может быть или не быть целым числом.
Поэтому для взвешенных данных функция правдоподобия по умолчанию для наблюдения i в первом уравнении становится
wi * (1-yi)
По предположению, все значения по умолчанию являются независимыми событиями, поэтому целевая функция
. × LN
или, в более удобных логарифмических терминах:
Defaulti))]
После калибровки модели без ограничений, как описано в разделе «Модель без ограничений с помощью fitConstrainedModel», можно решить для коэффициентов модели, подверженных ограничениям. Можно выбрать нижнюю и верхнюю границы так, чтобы К, кроме перехвата. Кроме того, поскольку возраст клиента и доход клиента несколько коррелированы, можно также использовать дополнительные ограничения на их коэффициенты, например, < 0.1. Коэффициенты, соответствующие предикторам'CustAge' и 'CustIncome' в этом примере b2 и соответственно.
K = length(sc.PredictorVars); lb = [-Inf;zeros(K,1)]; ub = [Inf;ones(K,1)]; AIneq = [0 -1 0 0 0 1 0 0 0 0;0 -1 0 0 0 -1 0 0 0 0]; bIneq = [0.05;0.05]; Options = optimoptions('fmincon','SpecifyObjectiveGradient',true,'Display','off'); [sc3,mdl] = fitConstrainedModel(sc,'AInequality',AIneq,'bInequality',bIneq,... 'LowerBound',lb,'UpperBound',ub,'Options',Options); figure plot(coeff1,'*','MarkerSize',8) hold on plot(mdl.Coefficients.Estimate,'.','MarkerSize',12) line(xlim,[0 0],'color','k','linestyle',':') line(xlim,[1 1],'color','k','linestyle',':') text(1.1,0.1,'Lower bound') text(1.1,1.1,'Upper bound') grid on xticklabels(mdl.Coefficients.Properties.RowNames) ylabel('Model Coefficients') title('Comparison Between Unconstrained and Constrained Solutions') legend({'Unconstrained','Constrained'},'Location','best')

Для неограниченной задачи доступны стандартные формулы для вычисления p-значений, которые используются для вычисления, какие коэффициенты являются значимыми, а какие должны быть отклонены. Однако для ограниченной задачи стандартные формулы недоступны, и получение формул для анализа значимости является сложным. Практической альтернативой является выполнение анализа значимости посредством начальной загрузки.
В подходе начальной загрузки, при использовании fitConstrainedModel, вы устанавливаете аргумент имя-значение 'Bootstrap' кому true и выберите значение для аргумента имя-значение 'BootstrapIter'. Начальная загрузка означает, что выбираются образцы NIter (с заменой) из исходных наблюдений. В каждой итерации fitConstrainedModel решает ту же проблему с зависимостями, что и в разделе «Модель с зависимостями». fitConstrainedModel получает несколько значений (решений) для каждого коэффициента и их можно построить как boxplot или histogram. Используя boxplot или гистограмму, можно изучить медианные значения, чтобы оценить, находятся ли коэффициенты вне нуля и насколько коэффициенты отклоняются от их средних значений.
lb = [-Inf;zeros(K,1)]; ub = [Inf;ones(K,1)]; AIneq = [0 -1 0 0 0 1 0 0 0 0;0 1 0 0 0 -1 0 0 0 0]; bIneq = [0.05;0.05]; c0 = zeros(K,1); NIter = 100; Options = optimoptions('fmincon','SpecifyObjectiveGradient',true,'Display','off'); rng('default') [sc,mdl] = fitConstrainedModel(sc,'AInequality',AIneq,'bInequality',bIneq,... 'LowerBound',lb,'UpperBound',ub,'Bootstrap',true,'BootstrapIter',NIter,'Options',Options); figure boxplot(mdl.Bootstrap.Matrix,mdl.Coefficients.Properties.RowNames) hold on line(xlim,[0 0],'color','k','linestyle',':') line(xlim,[1 1],'color','k','linestyle',':') title('Bootstrapping with N = 100 Iterations') ylabel('Model Coefficients')

Сплошные красные линии в боксплоте указывают на то, что средние значения и нижний и верхний края соответствуют и процентилям. «Усы» - это минимальное и максимальное значения, не включая отклонения. Пунктирные линии представляют ограничения нижней и верхней границ коэффициентов. В этом примере коэффициенты не могут быть отрицательными по конструкции.
Чтобы помочь решить, какие предикторы сохранить в модели, оцените долю раз каждый коэффициент равен нулю.
Tol = 1e-6; figure bar(100*sum(mdl.Bootstrap.Matrix<= Tol)/NIter) ylabel('% of Zeros') title('Percentage of Zeros Over Bootstrap Iterations') xticklabels(mdl.Coefficients.Properties.RowNames) grid on

На основе графика можно отклонить 'UtilRate' так как он имеет наибольшее число нулевых значений. Можно также принять решение об отклонении 'TmAtAddress' поскольку он показывает пик, хотя и небольшой.
Чтобы установить соответствующие коэффициенты равными нулю, установите их верхнюю границу равной нулю и снова решите модель с помощью исходного набора данных.
ub(3) = 0; ub(end) = 0; [sc,mdl] = fitConstrainedModel(sc,'AInequality',AIneq,'bInequality',bIneq,'LowerBound',lb,'UpperBound',ub,'Options',Options); Ind = (abs(mdl.Coefficients.Estimate) <= Tol); ModelCoeff = mdl.Coefficients.Estimate(~Ind); ModelPreds = mdl.Coefficients.Properties.RowNames(~Ind)'; figure hold on plot(ModelCoeff,'.','MarkerSize',12) ylim([0.2 1.2]) ylabel('Model Coefficients') xticklabels(ModelPreds) title('Selected Model Coefficients After Bootstrapping') grid on

creditscorecardТеперь, когда вы решили для ограниченных коэффициентов, используйте setmodel для установки коэффициентов и предикторов модели. Затем можно вычислить (не масштабированные) точки.
ModelPreds = ModelPreds(2:end); sc = setmodel(sc,ModelPreds,ModelCoeff); p = displaypoints(sc); disp(p)
Predictors Bin Points
______________ _____________________ _________
{'CustAge' } {'[-Inf,33)' } -0.16725
{'CustAge' } {'[33,37)' } -0.14811
{'CustAge' } {'[37,40)' } -0.065607
{'CustAge' } {'[40,46)' } 0.044404
{'CustAge' } {'[46,48)' } 0.21761
{'CustAge' } {'[48,58)' } 0.23404
{'CustAge' } {'[58,Inf]' } 0.49029
{'CustAge' } {'<missing>' } NaN
{'ResStatus' } {'Tenant' } 0.0044307
{'ResStatus' } {'Home Owner' } 0.11932
{'ResStatus' } {'Other' } 0.30048
{'ResStatus' } {'<missing>' } NaN
{'EmpStatus' } {'Unknown' } -0.077028
{'EmpStatus' } {'Employed' } 0.31459
{'EmpStatus' } {'<missing>' } NaN
{'CustIncome'} {'[-Inf,29000)' } -0.43795
{'CustIncome'} {'[29000,33000)' } -0.097814
{'CustIncome'} {'[33000,35000)' } 0.053667
{'CustIncome'} {'[35000,40000)' } 0.081921
{'CustIncome'} {'[40000,42000)' } 0.092364
{'CustIncome'} {'[42000,47000)' } 0.23932
{'CustIncome'} {'[47000,Inf]' } 0.42477
{'CustIncome'} {'<missing>' } NaN
{'TmWBank' } {'[-Inf,12)' } -0.15547
{'TmWBank' } {'[12,23)' } -0.031077
{'TmWBank' } {'[23,45)' } -0.021091
{'TmWBank' } {'[45,71)' } 0.36703
{'TmWBank' } {'[71,Inf]' } 0.86888
{'TmWBank' } {'<missing>' } NaN
{'OtherCC' } {'No' } -0.16832
{'OtherCC' } {'Yes' } 0.15336
{'OtherCC' } {'<missing>' } NaN
{'AMBalance' } {'[-Inf,558.88)' } 0.34418
{'AMBalance' } {'[558.88,1254.28)' } -0.012745
{'AMBalance' } {'[1254.28,1597.44)'} -0.057879
{'AMBalance' } {'[1597.44,Inf]' } -0.19896
{'AMBalance' } {'<missing>' } NaN
Для вычисления баллов и вероятностей по умолчанию, а также для проверки модели можно использовать не масштабированные баллы.
autobinning | bindata | bininfo | compact | creditscorecard | displaypoints | fitmodel | formatpoints | modifybins | modifypredictor | plotbins | predictorinfo | probdefault | score | setmodel | validatemodel