Подгонка логистической регрессионной модели к данным о весе доказательств (WOE) с учетом ограничений на коэффициенты модели
[ подбирает логистическую регрессионую модель к данным о весе доказательств (WOE), удовлетворяющим равенствам, неравенствам или связанным ограничениям коэффициентов модели. sc,mdl] = fitConstrainedModel(sc)fitConstrainedModel сохраняет имена предикторов модели и соответствующие коэффициенты в обновленном creditscorecard sc объекта и возвращает GeneralizedLinearModel mdl объекта который содержит подобранную модель.
[ задает опции, использующие один или несколько аргументы пары "имя-значение" в дополнение к входным параметрам в предыдущем синтаксисе.sc,mdl]
= fitConstrainedModel(___,Name,Value)
Чтобы вычислить счета для creditscorecard объект с ограничениями на равенство, неравенство или ограничения коэффициентов логистической регрессионой модели, используйте fitConstrainedModel. В отличие от fitmodel, fitConstrainedModel решает как задачу без ограничений, так и задачу с ограничениями. Текущий решатель, используемый для минимизации целевой функции для fitConstrainedModel является fmincon, из Optimization Toolbox™.
Этот пример имеет три основных раздела. Во-первых, fitConstrainedModel используется для решения коэффициентов в модели без ограничений. Затем, fitConstrainedModel демонстрирует, как использовать несколько типов ограничений. Наконец, fitConstrainedModel использует bootstrapping для анализа значимости, чтобы определить, какие предикторы отклонить из модели.
Создайте 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необходимо использовать 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 хорошо калиброван.
Ограниченная модель
В подходе с ограничениями модели вы решаете для значений коэффициентов логистической модели, удовлетворяющей ограничениям. Поддерживаемые ограничения являются связанными, равенством или неравенством. Коэффициенты максимизируют определенную функцию правдоподобия по умолчанию для наблюдения , как:
где:
является неизвестным коэффициентом модели
- значения предиктора при наблюдении
- значение отклика; значение 1 представляет собой значение по умолчанию, а значение 0 представляет собой значение, отличное от значения по умолчанию
Эта формула предназначена для невзвешенных данных. Когда наблюдение i имеет вес , это означает, что есть Как много наблюдений i. Поэтому вероятность того, что дефолт происходит при наблюдении i, является продуктом вероятностей дефолта:
Точно так же вероятность ненападения для взвешенного наблюдения i равна:
Для взвешенных данных, если существует значение по умолчанию при заданном наблюдении i, чей вес является , это как если бы был отсчет этого наблюдения, и все они либо все по умолчанию, либо все не по умолчанию. может быть или не быть целым числом.
Поэтому для взвешенных данных функция правдоподобия по умолчанию для наблюдения i в первом уравнении становится
По предположению, все значения по умолчанию являются независимыми событиями, поэтому целевая функция является
или, в более удобных логарифмических терминах:
Применить ограничения к коэффициентам
После калибровки модели без ограничений, как описано в разделе «Модель без ограничений с использованием 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) ylabel('Model Coefficients') title('Comparison Between Unconstrained and Constrained Solutions') legend({'Unconstrained','Constrained'},'Location','best')

Загрузка значения
Для задачи без ограничений стандартные формулы доступны для вычисления p-значений, которые вы используете, чтобы вычислить, какие коэффициенты значительны, а какие должны быть отклонены. Однако для ограниченной задачи стандартные формулы недоступны, и вывод формул для анализа значимости сложен. Практической альтернативой является выполнение анализа значимости посредством начальной загрузки.
В подходе bootstrapping при использовании fitConstrainedModel, вы устанавливаете аргумент имя-значение 'Bootstrap' на true и выберите значение для аргумента имя-значение 'BootstrapIter'. Загрузка означает, что выбирают выборки (с заменой) из исходных наблюдений. В каждой итерации 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
Используя немасштабированные точки, можно следовать оставшейся части рабочего процесса моделирования карты показателей кредита, чтобы вычислить счета и вероятности дефолта и подтвердить модель.
sc - Модель карты показателей кредитаcreditscorecard объектМодель карты показателей кредита, заданная как creditscorecard объект. Использование creditscorecard для создания creditscorecard объект.
Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.
[sc,mdl] = fitConstrainedModel(sc,'LowerBound',2,'UpperBound',100)'PredictorVars' - Переменные предиктора для подбора кривой creditscorecard объектcreditscorecard объект (по умолчанию) | массив ячеек из векторов символовПеременные предиктора для подбора кривой creditscorecard объект, заданный как разделенная разделенными запятой парами, состоящая из 'PredictorVars' и массив ячеек из векторов символов. Если вы предоставляете переменные предиктора, то функция обновляет creditscorecard свойство объекта PredictorsVars. Порядок предикторов в исходном наборе данных принудительно, независимо от порядка, в котором 'PredictorVars' предоставляется. Когда это не предусмотрено, предикторы использовали для создания creditscorecard объект (при помощи creditscorecard) используются.
Типы данных: cell
'LowerBound' - Нижняя граница-Inf (по умолчанию) | скалярный вектор |Нижняя граница, заданная как разделенная разделенными запятой парами, состоящая из 'LowerBound' и скаляр или вектор действительных чисел длины N+ 1, где N - количество коэффициентов модели в creditscorecard объект.
Типы данных: double
'UpperBound' - Верхняя границаInf (по умолчанию) | скалярный вектор |Верхняя граница, заданная как разделенная разделенными запятой парами, состоящая из 'UpperBound' и скаляр или вектор действительных чисел длины N+ 1, где N - количество коэффициентов модели в creditscorecard объект.
Типы данных: double
'AInequality' - Матрица линейных ограничений неравенства[] (по умолчанию) | матрицаМатрица линейных ограничений неравенства, заданная как разделенная разделенными запятой парами, состоящая из 'AInequality' и настоящий M-by- N+ 1 матрица, где M количество ограничений и N - количество коэффициентов модели в creditscorecard объект.
Типы данных: double
'bInequality' - Вектор линейных ограничений неравенства[] (по умолчанию) | векторВектор линейных ограничений неравенства, заданный как разделенная разделенными запятой парами, состоящая из 'bInequality' и настоящий M-by- 1 вектор, где M количество ограничений.
Типы данных: double
'AEquality' - Матрица линейных ограничений равенства[] (по умолчанию) | матрицаМатрица линейных ограничений равенства, заданная как разделенная разделенными запятой парами, состоящая из 'AEquality' и настоящий M-by- N+ 1 матрица, где M количество ограничений и N - количество коэффициентов модели в creditscorecard объект.
Типы данных: double
'bEquality' - Вектор линейных ограничений равенства[] (по умолчанию) | векторВектор линейных ограничений равенства, заданный как разделенная разделенными запятой парами, состоящая из 'bEquality' и настоящий M-by- 1 вектор, где M количество ограничений.
Типы данных: double
'Bootstrap' - Индикатор того, что загрузка определяет точность решенияfalse
(по умолчанию) | логическим со значением true или falseИндикатор того, что загрузка определяет точность решения, заданную как разделенная разделенными запятой парами, состоящая из 'Bootstrap' и логический со значением true или false.
Типы данных: logical
'BootstrapIter' - Количество итераций начальной загрузки100
(по умолчанию) | положительное целое числоКоличество итераций начальной загрузки, заданное как разделенная разделенными запятой парами, состоящая из 'BootstrapIter' и положительное целое число.
Типы данных: double
'Options' — optimoptions объектoptimoptions('fmincon','SpecifiedObjectiveGradient',true,'Display','off') (по умолчанию) | объектoptimoptions объект, заданный как разделенная разделенными запятой парами, состоящая из 'Options' и optimoptions объект. Вы можете создать объект при помощи optimoptions из Optimization Toolbox™.
Типы данных: object
sc - Модель карты показателей кредитаcreditscorecard объектМодель карты показателей кредита, возвращенная как обновленная creditscorecard объект. The creditscorecard объект содержит информацию о предикторах модели и коэффициентах, которые соответствуют данным WOE. Для получения дополнительной информации об использовании creditscorecard объект, см. creditscorecard.
mdl - Подобранная логистическая модельGeneralizedLinearModel объектПодобранная логистическая модель, переделанная как GeneralizedLinearModel объект, содержащий подобранную модель. Для получения дополнительной информации о GeneralizedLinearModel объект, см. GeneralizedLinearModel.
Примечание
Если вы задаете необязательную WeightsVar аргумент при создании creditscorecard объект, затем mdl использует взвешенные счетчики с stepwiseglm и fitglm.
The mdl структура имеет следующие поля:
Coefficients - таблица, в которой RowNames свойство содержит имена коэффициентов модели и имеет один столбец, 'Estimate', содержащего решение.
Bootstrap существует, когда 'Bootstrap' установлено в true, и имеет два поля:
CI содержит 95% доверительный интервал для решения.
Matrix а NИтер-бай- N матрица коэффициентов, где NИтер - это количество итераций и N загрузочных стропов - количество коэффициентов модели.
Solver имеет три поля:
Options дополнительная информация об алгоритме и решении.
ExitFlag содержит целое число, которое кодирует причину остановки решателя. Для получения дополнительной информации см. fmincon.
Output является структурой с дополнительной информацией о процессе оптимизации.
Когда вы используете fitConstrainedModel чтобы решить для коэффициентов модели, функция решает для того же количества параметров, что и заданные вами переменные предиктора, плюс один дополнительный коэффициент для точки пересечения.
Первый коэффициент соответствует точке пересечения. Если вы предоставляете переменные предиктора, используя 'PredictorVars' необязательный входной параметр, затем fitConstrainedModel обновляет creditscorecard свойство объекта PredictorsVars. Порядок предикторов в исходном наборе данных принудительно, независимо от порядка, в котором 'PredictorVars' предоставляется. Когда это не предусмотрено, предикторы использовали для создания creditscorecard объект (при помощи creditscorecard) используются.
Модель с ограничениями сначала калибруется таким образом, что, когда она не ограничена, решение идентично, в пределах определенного допуска, решению, заданному как fitmodel, с 'fullmodel' выбор аргумента имя-значение 'VariableSelection'.
В качестве упражнения можно протестировать калибровку, оставив все параметры имя-значение fitConstrainedModel к их значениям по умолчанию. Решения идентичны в 10-6 к 10-5 допуск.
Если кредитная карта результатов data содержит веса наблюдений, fitConstrainedModel функция использует веса, чтобы калибровать коэффициенты модели.
Для карты показателей кредита data без отсутствующих данных и без весов, функция правдоподобия для i наблюдений
где:
b = [b 1 b 2... b K] для неизвестных коэффициентов модели
<reservedrangesplaceholder8> <reservedrangesplaceholder7> = [<reservedrangesplaceholder6> <reservedrangesplaceholder5> 1 <reservedrangesplaceholder4> <reservedrangesplaceholder3> 2... <reservedrangesplaceholder2> <reservedrangesplaceholder1>] является значениями предсказателя при наблюдении i
y i является значением отклика 1 (значение по умолчанию) или значение 0.
Когда i наблюдения имеют wi веса, это означает, что наблюдений wi. Из-за независимости дефолтов между наблюдениями вероятность того, что существует дефолт при i наблюдений, является продуктом вероятностей дефолта
Точно так же вероятность не-по умолчанию для взвешенных i наблюдения
Для взвешенных данных, если существует значение по умолчанию в заданное наблюдение i чей вес w i, это как если бы было wi значения по умолчанию этого наблюдения, и все они либо все по умолчанию, либо все не по умолчанию. w i может быть или не быть целым числом. Поэтому функция правдоподобия для i наблюдения становится
Аналогично, для данных с отсутствующими наблюдениями (NaN, <undefined>, или “Missing”), модель калибруется путем сравнения случая без ограничений с результатами, полученными fitglm. Где данные содержат отсутствующие наблюдения, входная матрица WOE имеет NaN значения. The NaN значения не представляют никакой проблемы для fitglm (без ограничений), или fmincon (ограниченный). Единственный краевой случай, если все наблюдения данного предиктора отсутствуют, в этом случае этот предиктор отбрасывается из модели.
Bootstrapping является методом для оценки точности решения, полученного после итерации целевой функции NВремя итер.
Когда 'Bootstrap' установлено в true, а fitConstrainedModel функция выполняет выборку с заменой значений ГОРЕ и передается в целевую функцию. В конце итерационного процесса решения сохраняются в NИтер-бай- N+ 1 матрица, где N - количество коэффициентов модели.
Интервал 95% доверия (CI) вернулся в структуру output mdl.Bootstrap содержит значения коэффициентов в 25-м и 97,5-м процентилях.
Логистическая регрессионая модель используется в creditscorecard объект.
Для модели вероятность быть «Плохой» задается ProbBad = exp(-s) / (1 + exp(-s)).
[1] Anderson, R. The Credit Scoring Toolkit. Oxford University Press, 2007.
[2] Refaat, M. Кредитные карты оценки риска: Разработка и реализация с использованием SAS. lulu.com, 2011.
autobinning | bindata | bininfo | creditscorecard | displaypoints | fitglm | fitmodel | fmincon | formatpoints | GeneralizedLinearModel | modifybins | modifypredictor | plotbins | predictorinfo | probdefault | score | setmodel | stepwiseglm | validatemodel
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.