exponenta event banner

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

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

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 = [b1 b2... bK] - неизвестный коэффициент модели

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

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

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

pi = p (Defaulti) yi * p (Defaulti) yi *... * p (Defaulti) yiwi times = p (Defaulti) wi * yi

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

pˆi = p (~ Defaulti) 1-yi * p (~ Defaulti) 1-yi *... * p (~ Defaulti) 1-yiwi раз = (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», можно решить для коэффициентов модели, подверженных ограничениям. Можно выбрать нижнюю и верхнюю границы так, чтобы 0≤bi≤1,∀i=1... К, кроме перехвата. Кроме того, поскольку возраст клиента и доход клиента несколько коррелированы, можно также использовать дополнительные ограничения на их коэффициенты, например, | 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-значений, которые используются для вычисления, какие коэффициенты являются значимыми, а какие должны быть отклонены. Однако для ограниченной задачи стандартные формулы недоступны, и получение формул для анализа значимости является сложным. Практической альтернативой является выполнение анализа значимости посредством начальной загрузки.

В подходе начальной загрузки, при использовании 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.

Сплошные красные линии в боксплоте указывают на то, что средние значения и нижний и верхний края соответствуют 25-му и 75-му процентилям. «Усы» - это минимальное и максимальное значения, не включая отклонения. Пунктирные линии представляют ограничения нижней и верхней границ коэффициентов. В этом примере коэффициенты не могут быть отрицательными по конструкции.

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

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

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

См. также

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

Связанные примеры

Подробнее

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