Подбирайте модель логистической регрессии к субъекту данных Веса доказательства (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
использование, загружающееся для анализа значения, чтобы определить, который предикторы отклонить из модели.
Создайте 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 {'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
- 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
.
Типы данных: логический
'BootstrapIter'
— Количество загружающихся итераций
(значение по умолчанию) | положительное целое числоКоличество загружающихся итераций в виде разделенной запятой пары, состоящей из 'BootstrapIter'
и положительное целое число.
Типы данных: double
'Options'
— optimoptions
объектoptimoptions('fmincon','SpecifiedObjectiveGradient',true,'Display','off')
(значение по умолчанию) | объектoptimoptions
объект в виде разделенной запятой пары, состоящей из 'Options'
и optimoptions
объект. Можно создать объект при помощи optimoptions
от Optimization 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
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
где:
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, является продуктом вероятностей значения по умолчанию
Аналогично, вероятность не по умолчанию для взвешенного наблюдения i
Для взвешенных данных, если существует значение по умолчанию в заданном наблюдении i, весом которого является w i, это - как будто были значения по умолчанию wi того одного наблюдения и всех их или все значение по умолчанию или все не по умолчанию. w i может или не может быть целым числом. Поэтому функция правдоподобия для наблюдения i становится
Аналогично, для данных с недостающими наблюдениями (NaN
, <undefined>
, или “Missing”
), модель калибруется путем сравнения неограниченного случая результатами, данными fitglm
. Где данные содержат недостающие наблюдения, матрица входа WOE имеет NaN
значения. NaN
значения не излагают проблемы fitglm
(неограниченный), или fmincon
(ограниченный). Единственный случай ребра - то, если все наблюдения за данным предиктором отсутствуют, в этом случае, тот предиктор отбрасывается из модели.
Начальная загрузка является методом для оценки точности решения, полученного после итерации целевой функции N
Времена прохода.
Когда 'Bootstrap'
установлен в true
, fitConstrainedModel
функция выполняет выборку с заменой значений WOE и передается целевой функции. В конце итеративного процесса решения хранятся в N
Iter-by-N
+1 матрица, где
N
количество коэффициентов модели.
95%-й доверительный интервал (CI), возвращенный в структуре output mdl.Bootstrap
содержит значения коэффициентов в 25-м и 97.5th процентили.
Модель логистической регрессии используется в creditscorecard
объект.
Для модели вероятность того, чтобы быть “Плохим” дана ProbBad = exp(-s) / (1 + exp(-s))
.
[1] Андерсон, R. Инструментарий рейтинга кредитоспособности. Издательство Оксфордского университета, 2007.
[2] Refaat, M. Протоколы результатов кредитного риска: разработка и реализация Используя SAS. lulu.com, 2011.
GeneralizedLinearModel
| autobinning
| bindata
| bininfo
| creditscorecard
| displaypoints
| fitglm
| fitmodel
| fmincon
| formatpoints
| modifybins
| modifypredictor
| plotbins
| predictorinfo
| probdefault
| score
| setmodel
| stepwiseglm
| validatemodel
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.