Кредитные карты результатов с ограниченными логистическими Коэффициентами регрессии

Чтобы вычислить счета для 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

Figure contains an axes. The axes with title Unconstrained Model Coefficients contains 2 objects of type line. These objects represent Calculated by fitConstrainedModel with defaults, Calculated by fimodel.

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

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

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

Li=p(Defaulti)yi×(1-p(Defaulti))1-yi                    

где:

  • p(Defaulti)=1    1+e-bxi

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

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

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

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

pi=p(Defaulti)yi*p(Defaulti)yi*...*p(Defaulti)yiwitimes=p(Defaulti)wi*yi

Точно так же вероятность ненападения для взвешенного наблюдения i равна:

pˆi=p(~Defaulti)1-yi*p(~Defaulti)1-yi*...*p(~Defaulti)1-yiwitimes=(1-p(Defaulti))wi*(1-yi)

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

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

Li=p(Defaulti)wi*yi×(1-p(Defaulti))wi*(1-yi)

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

L=L1×L2×...×LN

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

log(L)=i=1Nwi*[yilog(p(Defaulti))+(1-yi)log(1-p(Defaulti))]

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

После калибровки модели без ограничений, как описано в разделе «Модель без ограничений с использованием 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)
ylabel('Model Coefficients')
title('Comparison Between Unconstrained and Constrained Solutions')
legend({'Unconstrained','Constrained'},'Location','best')

Figure contains an axes. The axes with title Comparison Between Unconstrained and Constrained Solutions contains 6 objects of type line, text. These objects represent Unconstrained, Constrained.

Загрузка значения

Для задачи без ограничений стандартные формулы доступны для вычисления p-значений, которые вы используете, чтобы вычислить, какие коэффициенты значительны, а какие должны быть отклонены. Однако для ограниченной задачи стандартные формулы недоступны, и вывод формул для анализа значимости сложен. Практической альтернативой является выполнение анализа значимости посредством начальной загрузки.

В подходе bootstrapping при использовании fitConstrainedModel, вы устанавливаете аргумент имя-значение 'Bootstrap' на true и выберите значение для аргумента имя-значение 'BootstrapIter'. Загрузка означает, что NIter выбирают выборки (с заменой) из исходных наблюдений. В каждой итерации fitConstrainedModel решает ту же задачу с ограничениями, что и раздел «Ограниченная модель». fitConstrainedModel получает несколько значений (решений) для каждого коэффициента bi и вы можете построить их как 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')

Figure contains an axes. The axes with title Bootstrapping with N = 100 Iterations contains 72 objects of type line.

Твердые красные линии в прямоугольном графике указывают, что средние значения и нижний и верхние края для 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)
grid on

Figure contains an axes. The axes with title Percentage of Zeros Over Bootstrap Iterations contains an object of type bar.

Исходя из графика, можно отклонить '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

Figure contains an axes. The axes with title Selected Model Coefficients After Bootstrapping contains an object of type line.

Установите ограниченные коэффициенты назад в 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

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

См. также

| | | | | | | | | | | | | | |

Похожие примеры

Подробнее о

Внешние веб-сайты