fitConstrainedModel

Подходящая модель логистической регрессии к субъекту данных Веса доказательства (WOE) к ограничениям на коэффициенты модели

Синтаксис

[sc,mdl] = fitConstrainedModel(sc)
[sc,mdl] = fitConstrainedModel(___,Name,Value)

Описание

пример

[sc,mdl] = fitConstrainedModel(sc) соответствует модели логистической регрессии к субъекту данных Веса доказательства (WOE) к равенству, неравенству или связанным ограничениям на коэффициенты модели. fitConstrainedModel хранит образцовые имена предиктора и соответствующие коэффициенты в обновленном объекте creditscorecard sc и возвращает объект GeneralizedLinearModel mdl, который содержит подобранную модель.

пример

[sc,mdl] = fitConstrainedModel(___,Name,Value) задает опции с помощью одного или нескольких аргументов пары "имя-значение" в дополнение к входным параметрам в предыдущем синтаксисе.

Примеры

свернуть все

Чтобы вычислить музыку к объекту 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 хорошо калибруется.

Ограниченная модель

В ограниченном образцовом подходе вы решаете для значений коэффициентов bi из логистической модели согласно ограничениям. Поддерживаемые ограничения связаны, равенство или неравенство. Коэффициенты максимизируют функцию, определяемую вероятности значения по умолчанию для наблюдения i, как:

Li=p(Значение по умолчаниюi)yi×(1-p(Значение по умолчаниюi))1-yi                    

где:

  • p(Значение по умолчаниюi)=    1    1+e-bxi

  • b=[b1 b2...bK] неизвестный коэффициент модели

  • xi=[xi1x2...xiK] значения предиктора при наблюдении i

  • yi значение ответа; значение 1 представляет значение по умолчанию, и значение 0 представляет не по умолчанию

Эта формула для невзвешенных данных. Когда наблюдение у i есть вес wi, это означает, что существует wi как много наблюдений i. Поэтому вероятность, что значение по умолчанию происходит при наблюдении, i - продукт вероятностей значения по умолчанию:

pi=p(Значение по умолчаниюi)yi*p(Значение по умолчаниюi)yi*...*p(Значение по умолчаниюi)yiwi\times=p(Значение по умолчаниюi)wi*yi

Аналогично, вероятность не по умолчанию для взвешенного наблюдения i:

pˆi=p(~Значение по умолчаниюi)1-yi*p(~Значение по умолчаниюi)1-yi*...*p(~Значение по умолчаниюi)1-yiwi\times=(1-p(Значение по умолчаниюi))wi*(1-yi)

Для взвешенных данных, если существует значение по умолчанию при данном наблюдении i, чей вес wi, это - как будто был a wi количество того одного наблюдения и всех их или все значение по умолчанию или все не по умолчанию. wi май или не может быть целым числом.

Поэтому для взвешенных данных, функция вероятности значения по умолчанию для наблюдения i в первом уравнении становится

Li=p(Значение по умолчаниюi)wi*yi×(1-p(Значение по умолчаниюi))wi*(1-yi)

Предположением всеми значениями по умолчанию являются независимые события, таким образом, целевая функция

L=L1×L2×...×LN

или, в более удобных логарифмических терминах:

журнал(L)=i=1Nwi*[yiжурнал(p(Значение по умолчаниюi))+(1-yi)журнал(1-p(Значение по умолчаниюi))]

Примените ограничения на коэффициенты

После калибровки неограниченной модели, как описано в разделе "Unconstrained Model Using fitConstrainedModel", можно решить для коэффициентов модели, подвергающихся ограничениям. Можно выбрать нижние и верхние границы, таким образом что 0bi1,i=1...K, за исключением прерывания. Кроме того, поскольку потребительский возраст и клиент поступают, несколько коррелируются, можно также использовать дополнительные ограничения на их коэффициенты, например, |bCusAge-bCustIncome|<0.1. Коэффициенты, соответствующие предикторам 'CustAge' и 'CustIncome' в этом примере, b2 и b6, соответственно.

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 получает несколько значений (решения) для каждого коэффициента bi и можно построить их как 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)

Твердые красные линии в коробчатой диаграмме указывают, что средние значения и нижняя часть и верхние края для 25th и 75th процентили. "Контактные усики" являются минимальными и максимальными значениями, не включая выбросы. Пунктирные линии представляют ограничения нижней и верхней границы на коэффициенты. В этом примере коэффициенты не могут быть отрицательными конструкцией.

Чтобы помочь решить который предикторы сохранить в модели, оцените пропорцию времен, каждый коэффициент является нулем.

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

Используя немасштабированные точки, можно следовать за остатком от Протокола результатов Кредита, Моделируя Рабочий процесс, чтобы вычислить очки и вероятности значения по умолчанию и подтвердить модель.

Входные параметры

свернуть все

Модель протокола результатов кредита, заданная как объект creditscorecard. Используйте creditscorecard, чтобы создать объект creditscorecard.

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: [sc,mdl] = fitConstrainedModel(sc,'LowerBound',2,'UpperBound',100)

Переменные прогноза для подбора кривой объекту creditscorecard, заданному как пара, разделенная запятой, состоящая из 'PredictorVars' и массива ячеек из символьных векторов. Если вы обеспечиваете переменные прогноза, то функция обновляет свойство объекта creditscorecard PredictorsVars. Порядок предикторов в исходном наборе данных осуществляется, независимо от порядка, в котором обеспечивается 'PredictorVars'. Если не, если, предикторы, используемые, чтобы создать объект creditscorecard (при помощи creditscorecard), используются.

Типы данных: cell

Нижняя граница, заданная как пара, разделенная запятой, состоящая из 'LowerBound' и скаляра или вектора действительных чисел длины N +1, где N является количеством коэффициентов модели в объекте creditscorecard.

Типы данных: double

Верхняя граница, заданная как пара, разделенная запятой, состоящая из 'UpperBound' и скаляра или вектора действительных чисел длины N +1, где N является количеством коэффициентов модели в объекте creditscorecard.

Типы данных: double

Матрица линейных ограничений неравенства, заданных как пара, разделенная запятой, состоящая из 'AInequality' и действительного M-by-N+1 матрица, где M является количеством ограничений и N, является количеством коэффициентов модели в объекте creditscorecard.

Типы данных: double

Вектор линейных ограничений неравенства, заданных как пара, разделенная запятой, состоящая из 'bInequality' и действительного M-by-1 вектор, где M является количеством ограничений.

Типы данных: double

Матрица линейных ограничений равенства, заданных как пара, разделенная запятой, состоящая из 'AEquality' и действительного M-by-N+1 матрица, где M является количеством ограничений и N, является количеством коэффициентов модели в объекте creditscorecard.

Типы данных: double

Вектор линейных ограничений равенства, заданных как пара, разделенная запятой, состоящая из 'bEquality' и действительного M-by-1 вектор, где M является количеством ограничений.

Типы данных: double

Индикатор, что начальная загрузка задает точность решения, заданную как пара, разделенная запятой, состоящая из 'Bootstrap' и логического со значением true или false.

Типы данных: логический

Количество загружающихся итераций, заданных как пара, разделенная запятой, состоящая из 'BootstrapIter' и положительного целого числа.

Типы данных: double

Объект optimoptions, заданный как пара, разделенная запятой, состоящая из 'Options' и объекта optimoptions. Можно создать объект при помощи optimoptions от Optimization Toolbox™.

Типы данных: object

Выходные аргументы

свернуть все

Модель протокола результатов кредита, возвращенная как обновленный объект creditscorecard. Объект creditscorecard содержит информацию об образцовых предикторах и коэффициентах, которые соответствуют данным WOE. Для получения дополнительной информации об использовании объекта creditscorecard смотрите creditscorecard.

Подходящая логистическая модель, повторно настроенная как объект GeneralizedLinearModel, содержащий подобранную модель. Для получения дополнительной информации об объекте GeneralizedLinearModel смотрите GeneralizedLinearModel.

Примечание

Если вы задаете дополнительный аргумент WeightsVar при создании объекта creditscorecard, то mdl использует взвешенные количества с stepwiseglm и fitglm.

Структура mdl имеет следующие поля:

  • Coefficients является таблицей, в которой свойство RowNames содержит имена коэффициентов модели и имеет отдельный столбец, 'Estimate', содержа решение.

  • Bootstrap существует, когда 'Bootstrap' установлен в true и имеет два поля:

    • CI содержит 95%-й доверительный интервал для решения.

    • Matrix N Iter-by-N матрица коэффициентов, где Проход N является количеством итераций начальной загрузки и N, является количеством коэффициентов модели.

  • Solver имеет три поля:

    • Дополнительная информация Options об алгоритме и решении.

    • ExitFlag содержит целое число, которое кодирует причину почему остановленный решатель. Для получения дополнительной информации смотрите fmincon.

    • Output является структурой с дополнительной информацией о процессе оптимизации.

Больше о

свернуть все

Коэффициенты модели

Когда вы используете fitConstrainedModel, чтобы решить для коэффициентов модели, функция решает для того же количества параметров как переменные прогноза, которые вы задаете плюс один дополнительный коэффициент для прерывания.

Первый коэффициент соответствует прерыванию. Если вы обеспечиваете переменные прогноза с помощью 'PredictorVars' дополнительный входной параметр, то fitConstrainedModel обновляет свойство объекта creditscorecard PredictorsVars. Порядок предикторов в исходном наборе данных осуществляется, независимо от порядка, в котором обеспечивается 'PredictorVars'. Если не, если, предикторы, используемые, чтобы создать объект creditscorecard (при помощи creditscorecard), используются.

Калибровка

Ограниченная модель сначала калибруется таким образом, что, когда неограниченный, решение идентично, в определенном допуске, к решению, данному fitmodel, с the'fullmodel' выбором для аргумента 'VariableSelection' значения имени.

Как осуществление, можно протестировать калибровку путем отъезда всех параметров, передаваемых по значению имени fitConstrainedModel к их значениям по умолчанию. Решения идентичны в 10-6 к допуску 10-5.

Калибровка с весами и Недостающими данными

Если протокол результатов кредита, data содержит веса наблюдения, функция fitConstrainedModel, использует веса, чтобы калибровать коэффициенты модели.

Для протокола результатов кредита data без недостающих данных и никаких весов, функции правдоподобия для наблюдения i

Li=p(Значение по умолчаниюi)yi×(1p(Значение по умолчаниюi))1yiгде p(Значение по умолчаниюi)=1(1+ebxi)

где:

  • b = [b 1 b 2... b K] для неизвестных коэффициентов модели

  • x i = [x i 1 x i 2... x iK] является значениями предиктора при наблюдении i

  • y i является значением ответа 1 (значение по умолчанию) или значением 0.

Когда наблюдение, i имеет вес wi, это означает, что существуют наблюдения wi. Из-за независимости значений по умолчанию между наблюдениями вероятность, что существует значение по умолчанию при наблюдении i, является продуктом вероятностей значения по умолчанию

pi=p(Значение по умолчаниюi)yip(Значение по умолчаниюi)yi...p(Значение по умолчаниюi)yi=p(Значение по умолчаниюi)wiyi                                                      wi \times

Аналогично, вероятность не по умолчанию для взвешенного наблюдения i

p^i=p(~Значение по умолчаниюi)1yip(~Значение по умолчаниюi)1yi...p(~Значение по умолчаниюi)1yi=(1p(Значение по умолчаниюi)wi(1yi)                                                      wi \times

Для взвешенных данных, если существует значение по умолчанию при данном наблюдении i, весом которого является w i, это - как будто были значения по умолчанию wi того одного наблюдения и всех их или все значение по умолчанию или все не по умолчанию. w i может или не может быть целым числом. Поэтому функция правдоподобия для наблюдения i становится

Li=p(Значение по умолчаниюi)wiyi×(1p(Значение по умолчаниюi))wi(1yi)

Аналогично, для данных с недостающими наблюдениями (NaN, <undefined> или “Missing”), модель калибруется путем сравнения неограниченного случая с результатами, данными fitglm. Где данные содержат недостающие наблюдения, матрица входа WOE имеет значения NaN. Значения NaN не излагают проблемы (неограниченному) fitglm, или (ограниченный) fmincon. Единственный случай ребра - то, если все наблюдения за данным предиктором отсутствуют, в этом случае, тот предиктор отбрасывается из модели.

Начальная загрузка

Начальная загрузка является методом для оценки точности решения, полученного после итерации целевой функции времена Прохода N.

Когда 'Bootstrap' установлен в true, функция fitConstrainedModel выполняет выборку с заменой значений WOE и передается целевой функции. В конце итеративного процесса решения хранятся в матрице Iter-by-N+1 N, где N является количеством коэффициентов модели.

95%-й доверительный интервал (CI), возвращенный в выходной структуре mdl.Bootstrap, содержит значения коэффициентов в 25-м и 97.5th процентили.

Модели

Модель логистической регрессии используется в объекте creditscorecard.

Для модели вероятность того, чтобы быть “Плохим” дана ProbBad = exp(-s) / (1 + exp(-s)).

Ссылки

[1] Андерсон, R. Инструментарий рейтинга кредитоспособности. Издательство Оксфордского университета, 2007.

[2] Refaat, M. Протоколы результатов кредитного риска: разработка и реализация Используя SAS. lulu.com, 2011.

Введенный в R2019a