Чтобы вычислить музыку к объекту creditscorecard
с ограничениями для равенства, неравенство или границы на коэффициентах модели логистической регрессии, использует fitConstrainedModel
. В отличие от fitmodel
, fitConstrainedModel
решает для обоих неограниченную и ограниченную проблему. Текущим решателем, используемым, чтобы минимизировать целевую функцию для fitConstrainedModel
, является fmincon
от Optimization Toolbox™.
Этот пример имеет три основных раздела. Во-первых, fitConstrainedModel
используется, чтобы решить для коэффициентов в неограниченной модели. Затем fitConstrainedModel
демонстрирует, как использовать несколько типов ограничений. Наконец, использование fitConstrainedModel
, загружающееся для анализа значения, чтобы определить, который предикторы отклонить из модели.
creditscorecard
load CreditCardData.mat sc = creditscorecard(data,'IDVar','CustID'); sc = autobinning(sc);
fitConstrainedModel
Решите для неограниченных коэффициентов с помощью fitConstrainedModel
со значениями по умолчанию для входных параметров. fitConstrainedModel
использует внутренний решатель оптимизации fmincon
от Optimization 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
, необходимо использовать начальную загрузку, чтобы узнать, какие предикторы отклоняются из модели, когда подвергающийся ограничениям. Это проиллюстрировано в разделе "Significance Bootstrapping".
Используя fitmodel
, чтобы сравнить результаты и калибровать модель
fitmodel
соответствует модели логистической регрессии к данным о Весе доказательства (WOE) и нет никаких ограничений. Можно сравнить результаты раздела "Unconstrained Model Using 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) xtickangle(45) ylabel('Model Coefficients') title('Unconstrained Model Coefficients') legend({'Calculated by fitConstrainedModel with defaults','Calculated by fimodel'},'Location','best') grid on
И как таблицы и как график показывают, соответствие коэффициентов модели. Можно быть уверены, что эта реализация fitConstrainedModel
хорошо калибруется.
В ограниченном образцовом подходе вы решаете для значений коэффициентов из логистической модели согласно ограничениям. Поддерживаемые ограничения связаны, равенство или неравенство. Коэффициенты максимизируют функцию, определяемую вероятности значения по умолчанию для наблюдения , как:
где:
неизвестный коэффициент модели
значения предиктора при наблюдении
значение ответа; значение 1 представляет значение по умолчанию, и значение 0 представляет не по умолчанию
Эта формула для невзвешенных данных. Когда наблюдение у i есть вес , это означает, что существует как много наблюдений i. Поэтому вероятность, что значение по умолчанию происходит при наблюдении, i - продукт вероятностей значения по умолчанию:
Аналогично, вероятность не по умолчанию для взвешенного наблюдения i:
Для взвешенных данных, если существует значение по умолчанию при данном наблюдении i, чей вес , это - как будто был a количество того одного наблюдения и всех их или все значение по умолчанию или все не по умолчанию. май или не может быть целым числом.
Поэтому для взвешенных данных, функция вероятности значения по умолчанию для наблюдения i в первом уравнении становится
Предположением всеми значениями по умолчанию являются независимые события, таким образом, целевая функция
или, в более удобных логарифмических терминах:
Примените ограничения на коэффициенты
После калибровки неограниченной модели, как описано в разделе "Unconstrained Model Using fitConstrainedModel", можно решить для коэффициентов модели, подвергающихся ограничениям. Можно выбрать нижние и верхние границы, таким образом что , за исключением прерывания. Кроме того, поскольку потребительский возраст и клиент поступают, несколько коррелируются, можно также использовать дополнительные ограничения на их коэффициенты, например, . Коэффициенты, соответствующие предикторам 'CustAge'
и 'CustIncome'
в этом примере, и , соответственно.
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) xtickangle(45) ylabel('Model Coefficients') title('Comparison Between Unconstrained and Constrained Solutions') legend({'Unconstrained','Constrained'},'Location','best')
Для неограниченной проблемы стандартные формулы доступны для вычислительных p-значений, которые вы используете, чтобы оценить, какие коэффициенты являются значительными и которые должны быть отклонены. Однако для ограниченной проблемы, стандартные формулы не доступны, и деривация формул для анализа значения является сложной. Практическая альтернатива должна выполнить анализ значения посредством начальной загрузки.
В загружающемся подходе, при использовании fitConstrainedModel
, вы устанавливаете аргумент 'Bootstrap'
значения имени на true
и выбрали значение для аргумента 'BootstrapIter'
значения имени. Начальная загрузка средних значений это выборки (с заменой) от исходных наблюдений выбраны. В каждой итерации fitConstrainedModel
решает для той же ограниченной проблемы как раздел "Constrained Model". fitConstrainedModel
получает несколько значений (решения) для каждого коэффициента и можно построить их как boxplot
или histogram
. Используя коробчатую диаграмму или гистограмму, можно исследовать средние значения, чтобы оценить, вдали ли коэффициенты от нуля и сколько коэффициенты отклоняют от их средних значений.
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') xtickangle(45)
Твердые красные линии в коробчатой диаграмме указывают, что средние значения и нижняя часть и верхние края для и процентили. "Контактные усики" являются минимальными и максимальными значениями, не включая выбросы. Пунктирные линии представляют ограничения нижней и верхней границы на коэффициенты. В этом примере коэффициенты не могут быть отрицательными конструкцией.
Чтобы помочь решить который предикторы сохранить в модели, оцените пропорцию времен, каждый коэффициент является нулем.
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) xtickangle(45) 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) xtickangle(45) 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 'ResStatus' 'Tenant' 0.0044307 'ResStatus' 'Home Owner' 0.11932 'ResStatus' 'Other' 0.30048 'EmpStatus' 'Unknown' -0.077028 'EmpStatus' 'Employed' 0.31459 '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 '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 'OtherCC' 'No' -0.16832 'OtherCC' 'Yes' 0.15336 '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
Используя немасштабированные точки, можно следовать за остатком от Протокола результатов Кредита, Моделируя Рабочий процесс, чтобы вычислить очки и вероятности значения по умолчанию и подтвердить модель.