Соответствие модели логистической регрессии данным веса доказательств (WOE) при условии ограничения коэффициентов модели
[ подходит модель логистической регрессии для данных веса доказательств (WOE), подверженных равенству, неравенству или связанным ограничениям коэффициентов модели. sc,mdl] = fitConstrainedModel(sc)fitConstrainedModel сохраняет имена предикторов модели и соответствующие коэффициенты в обновленном creditscorecard объект sc и возвращает значение GeneralizedLinearModel объект mdl который содержит подогнанную модель.
[ указывает параметры, использующие один или несколько аргументов пары имя-значение в дополнение к входным аргументам в предыдущем синтаксисе.sc,mdl] = fitConstrainedModel(___,Name,Value)
Как вычислить баллы для 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
Для вычисления баллов и вероятностей по умолчанию, а также для проверки модели можно использовать не масштабированные баллы.
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 object (по умолчанию) | массив ячеек символьных векторовПеременные предиктора для подгонки 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около-N+1 матрица, где M - количество ограничений и N - количество коэффициентов модели в creditscorecard объект.
Типы данных: double
'bInequality' - Вектор линейных ограничений неравенства[] (по умолчанию) | векторВектор линейных ограничений неравенства, определяемый как разделенная запятыми пара, состоящая из 'bInequality' и настоящий Mоколо-1 вектор, где M - количество ограничений.
Типы данных: double
'AEquality' - Матрица линейных ограничений равенства[] (по умолчанию) | матрицаМатрица линейных ограничений равенства, заданная как разделенная запятыми пара, состоящая из 'AEquality' и настоящий Mоколо-N+1 матрица, где M - количество ограничений и N - количество коэффициентов модели в creditscorecard объект.
Типы данных: double
'bEquality' - Вектор линейных ограничений равенства[] (по умолчанию) | векторВектор линейных ограничений равенства, заданный как разделенная запятыми пара, состоящая из 'bEquality' и настоящий Mоколо-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 из Toolbox™ оптимизации.
Типы данных: object
sc - Модель кредитной карты показателейcreditscorecard объектМодель кредитной карты показателей, возвращенная как обновленная creditscorecard объект. creditscorecard объект содержит информацию о предикторах модели и коэффициентах, соответствующих данным WOE. Для получения дополнительной информации об использовании creditscorecard объект, см. creditscorecard.
mdl - Встроенная логистическая модельGeneralizedLinearModel объектПодогнанная логистическая модель, перепрофилированная в GeneralizedLinearModel объект, содержащий подогнанную модель. Для получения дополнительной информации о GeneralizedLinearModel объект, см. GeneralizedLinearModel.
Примечание
Если указать необязательный параметр WeightsVar аргумент при создании creditscorecard объект, затем mdl использует взвешенные счетчики с stepwiseglm и fitglm.
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
Defaulti) = 1 (1 + e − bxi)
где:
b = [b1 b2...bK] для неизвестных коэффициентов модели
xi = [x1 xi2...xiK] - предикторные значения при наблюдении i
yi - значение ответа 1 (значение по умолчанию) или значение 0.
Когда наблюдение i имеет вес wi, это означает, что есть наблюдения wi. Из-за независимости значений по умолчанию между наблюдениями вероятность того, что при наблюдении i имеется значение по умолчанию, является произведением вероятностей по умолчанию.
Аналогично, вероятность отсутствия дефолта для взвешенного наблюдения i равна
Для взвешенных данных, если есть значение по умолчанию для данного наблюдения i, вес которого равен wi, это как если бы были значения по умолчанию для этого одного наблюдения, и все они либо все по умолчанию, либо все не по умолчанию. wi может быть или не быть целым числом. Следовательно, функция правдоподобия для наблюдения i становится
wi∗ (1 − yi)
Аналогичным образом, для данных с отсутствующими наблюдениями (NaN, <undefined>, или “Missing”), модель калибруется путем сравнения неограниченного случая с результатами, данными fitglm. Если данные содержат отсутствующие наблюдения, входная матрица WOE имеет NaN значения. NaN значения не создают проблем для fitglm (без ограничений), или fmincon (с зависимостью). Единственным краевым случаем является отсутствие всех наблюдений данного предиктора, в этом случае этот предиктор отбрасывается из модели.
Начальная загрузка - это метод оценки точности решения, полученного после итерации целевой функции. NВремена Итера.
Когда 'Bootstrap' имеет значение true, fitConstrainedModel функция выполняет выборку с заменой значений WOE и передается целевой функции. В конце итеративного процесса решения хранятся в NИтер-би-N+1 матрица, где N - количество коэффициентов модели.
95% доверительный интервал (CI), возвращенный в структуре вывода mdl.Bootstrap содержит значения коэффициентов на 25-м и 97,5-м процентилях.
Модель логистической регрессии используется в creditscorecard объект.
Для модели вероятность быть «Bad» задаётся ProbBad = exp(-s) / (1 + exp(-s)).
[1] Андерсон, R. The Credit Скоринг Toolkit. Издательство Оксфордского университета, 2007 год.
[2] Рефаат, М. Карты оценки кредитных рисков: разработка и внедрение с использованием 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.