主要内容

基于逻辑回归与决策树的信用评分比较

这个例子展示了创建和比较两个信用评分模型的工作流程:基于逻辑回归的信用评分模型和基于决策树的信用评分模型。

信用评级机构和银行使用挑战者模型来测试信用评分模型的可信度和优点。在本例中,基本模型是逻辑回归模型,挑战模型是决策树模型。

逻辑回归通过逻辑回归函数将评分和违约概率(PD)联系起来,是您使用时的默认拟合和评分模型creditscorecard对象。然而,决策树在信用评分中越来越受欢迎,现在通常被用于拟合数据和预测违约。决策树中的算法遵循自顶向下的方法,在每一步中,选择分割数据集的“最佳”变量。“最佳”可以用几个指标中的任何一个来定义,包括基尼指数、信息价值或熵。有关更多信息,请参见决策树

在这个例子中,你:

  • 同时使用逻辑回归模型和决策树模型来提取pd。

  • 通过比较挑战者模型和基本模型之间的关键度量值来验证挑战者模型。

使用逻辑回归计算违约概率

首先,使用实例创建基本模型creditscorecard对象和默认的逻辑回归函数fitmodel.符合creditscorecard对象采用全模型,其中包括所有预测因子,对广义线性回归模型进行拟合算法。然后,计算pd使用probdefault.有关此工作流的详细描述,请参见信用记分卡分析案例研究

创建creditscorecard对象,bin数据,并拟合逻辑回归模型负载CreditCardData.matSCL =信用记分卡(数据,“IDVar”“CustID”);SCL = autobinning(SCL);SCL = fitmodel“VariableSelection”“fullmodel”);
广义线性回归模型:状态~[9个预测因子中有10项的线性公式]分布=二项估计系数:估计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 1200离散度:1 Chi^2统计量vs常数模型:91,p值= 1.05e-15
计算相应的违约概率pdL = probdefault(scl);

使用决策树计算违约概率

接下来,创建挑战者模型。使用统计和机器学习工具箱™方法fitctree使决策树(DT)适合数据。默认情况下,拆分标准为Gini的多样性指数。在本例中,模型是函数的输入参数,以及响应“状态”包含算法开始时的所有预测因子。对于本例,请参阅中的名称-值对fitctree到最大分割数,以避免过拟合,并指定预测器为分类。

创建并查看分类树CategoricalPreds = {“ResStatus”“EmpStatus”“OtherCC”};Dt = fitctree(数据,的状态~ CustAge + TmAtAddress + ResStatus + EmpStatus + CustIncome + TmWBank + OtherCC + UtilRate '...“MaxNumSplits”30岁的“CategoricalPredictors”, CategoricalPreds);disp (dt)
分类树PredictorNames: {1x8 cell} ResponseName: 'status' CategoricalPredictors: [3 4 7] ClassNames: [0 1] ScoreTransform: 'none' NumObservations: 1200

决策树如下所示。你也可以使用视图函数的名称-值对参数“模式”设置为“图”将树可视化为图形。

视图(dt)
决策树分类1如果CustIncome < 30500节点2 elseif CustIncome > = 30500其他节点3 0 2如果TmWBank < 60节点4 elseif TmWBank > = 60那么其他节点5 1 3如果TmWBank < 32.5然后节点6 elseif TmWBank > = 32.5那么其他节点7 0 4如果TmAtAddress < 13.5然后节点8 elseif TmAtAddress > = 13.5那么其他节点9 1 5如果UtilRate < 0.255然后节点10 elseif UtilRate > = 0.255那么其他节点11 0 6如果CustAge < 60.5然后节点12 elseif CustAge > = 60.5那么其他节点13 0 7如果CustAge < 46.5,那么节点14 elseif CustAge>=46.5 then node 15 else 0 8 if CustIncome<24500 then node 16 elseif CustIncome>=24500 then node 17 else 1 9 if TmWBank<56.5 then node 18 elseif TmWBank>=56.5 then node 19 else 1 10 if CustAge<21.5 then node 20 elseif CustAge>=21.5 then node 21 else 0 11 class = 1 12 if EmpStatus=Employed then node 22 elseif EmpStatus=Unknown then node 23 else 0 13 if TmAtAddress<131 then node 24 elseif TmAtAddress>=131 then node 25 else 0 14 if TmAtAddress<97.5 then node 26 elseif TmAtAddress>=97.5 then node 27 else 0 15 class = 0 16 class = 0 17 if ResStatus in {Home Owner Tenant} then node 28 elseif ResStatus=Other then node 29 else 1 18 if TmWBank<52.5 then node 30 elseif TmWBank>=52.5 then node 31 else 0 19 class = 1 20 class = 1 21 class = 0 22 if UtilRate<0.375 then node 32 elseif UtilRate>=0.375 then node 33 else 0 23 if UtilRate<0.005 then node 34 elseif UtilRate>=0.005 then node 35 else 0 24 if CustIncome<39500 then node 36 elseif CustIncome>=39500 then node 37 else 0 25 class = 1 26 if UtilRate<0.595 then node 38 elseif UtilRate>=0.595 then node 39 else 0 27 class = 1 28 class = 1 29 class = 0 30 class = 1 31 class = 0 32 class = 0 33 if UtilRate<0.635 then node 40 elseif UtilRate>=0.635 then node 41 else 0 34 if CustAge<49 then node 42 elseif CustAge>=49 then node 43 else 1 35 if CustIncome<57000 then node 44 elseif CustIncome>=57000 then node 45 else 0 36 class = 1 37 class = 0 38 class = 0 39 if CustIncome<34500 then node 46 elseif CustIncome>=34500 then node 47 else 1 40 class = 1 41 class = 0 42 class = 1 43 class = 0 44 class = 0 45 class = 1 46 class = 0 47 class = 1

当你使用fitctree,您可以调整名称-值对参数这取决于你的用例。例如,您可以设置一个较小的最小叶大小,这将产生更好的精度比(请参阅模型验证),但会导致模型过度拟合。

决策树有一个预测函数,当与第二个和第三个输出参数一起使用时,将提供有价值的信息。

提取违约概率[~,ObservationClassProb,Node] = predict(dt,data);pdDT = ObservationClassProb(:,2);

该语法有以下输出:

  • ObservationClassProb返回一个NumObs——- - - - - -2在所有观测值中使用类概率数组。类的顺序与中相同dt。类名称.在本例中,类名为[0 1]好的标签,根据原始数据中数量最多的类别来选择0.因此,第一列对应于非默认值,第二列对应于实际的pd。pd稍后在工作流程中用于评分或验证。

  • 节点返回一个NumObs——- - - - - -1包含与给定观测值相对应的节点编号的向量。

预测的重要性

在预测器(或变量)选择中,目标是选择尽可能少的预测器,同时保留尽可能多的关于数据的信息(预测精度)。在creditscorecard类,fitmodel函数在内部选择预测器并返回p-每个预测器的值。然后,分析人员可以在creditscorecard工作流,为这些设置一个阈值p-值并选择值得保留的预测因子和要丢弃的预测因子。当预测器的数量很大时,这一步很有用。

通常,训练数据集用于执行预测器选择。关键目标是找到一组最佳预测器,根据客户违约的可能性对其进行排名,并估计其pd。

用逻辑回归分析预测因子的重要性

预测器的重要性与预测器权重的概念有关,因为预测器的权重决定了它在最终评分分配中的重要性,因此也决定了它在PD中的重要性。计算预测器权重是一种粗略的技术,通过将每个预测器的点的范围除以整个点的总范围来确定权重creditscorecard对象。有关此工作流的详细信息,请参见信用记分卡分析案例研究

对于本例,使用formatpoints有选项PointsOddsandPDO扩展。这不是一个必要的步骤,但它有助于确保所有的点都落在期望的范围内(即非负的点)。的PointsOddsandPDO缩放意味着对于给定的值“靶点而且TargetOdds(通常是2),赔率是“两倍”,然后formatpoints求解缩放参数,使PDO需要积分才能使赔率翻倍。

选择目标点、目标几率和PDO值TargetPoints = 500;TargetOdds = 2;Pdo = 50;%格式点和计算点范围SCL = formatpoints(SCL,“PointsOddsAndPDO”,[TargetPoints targetods PDO]);[PointsTable,MinPts,MaxPts] = displaypoints(scl);PtsRange = MaxPts - MinPts;disp (PointsTable (1:10)):
预测本点  _______________ _____________ ______ {' CustAge’}{[无穷,33)的37.008}{‘CustAge}{[33岁,37)的38.342}{‘CustAge}{[37、40)的44.091}{‘CustAge}{[40岁,46)的51.757}{‘CustAge}{[46岁,48)的63.826}{‘CustAge}{[48, 58)的64.97}{“CustAge”}{的[58岁的Inf]} 82.826{‘CustAge}{“失踪> <”}南{‘TmAtAddress}{[无穷,23)的49.058}{‘TmAtAddress} {57.325} [23, 83)
流('最小积分%g,最大积分%g\n'、MinPts MaxPts)
最低分:348.705,最高分:683.668

权重定义为任何给定预测器的积分范围,除以整个计分卡的积分范围。

预测器=唯一的(PointsTable。预测,“稳定”);NumPred =长度(预测器);权重= 0 (NumPred,1);ii = 1: NumPred Ind = strcmpi(Predictor{ii}, pointtable . predictors);MaxPtsPred = max(pointtable . points (Ind));MinPtsPred = min(pointtable . points (Ind));重量(ii) = 100*(MaxPtsPred-MinPtsPred)/PtsRange;结束PredictorWeights = table(Predictor,Weight);PredictorWeights(end+1,:) = PredictorWeights(end,:);PredictorWeights。预测{结束}=“总”;PredictorWeights.Weight(end) = sum(Weight);disp (PredictorWeights)
预测权重_______________ _______ {'CustAge'} 13.679 {'TmAtAddress'} 5.1564 {'ResStatus'} 8.7945 {'EmpStatus'} 8.519 {'CustIncome'} 19.259 {'TmWBank'} 24.557 {'OtherCC'} 7.3414 {'AMBalance'} 12.365 {'UtilRate'} 0.32919 {'Total'} 100
绘制权重的直方图图栏(PredictorWeights.Weight(1:end-1))“使用Logit预测器重要性估计”);ylabel (“估计(%)”);包含(“预测”);xticklabels (PredictorWeights.Predictor (1: end-1));

图中包含一个轴对象。使用Logit进行标题预测重要性估计的axes对象包含一个类型为bar的对象。

使用决策树计算预测器的重要性

使用决策树时,可以使用predictorImportance函数。在每个预测器上,该函数通过使用分支节点的数量对由于分裂而导致的风险变化进行求和和归一化。输出数组中的高值表示强预测器。

imp =预测重要性(dt);图;酒吧(100 * imp /总和(imp));%以0-100%的范围归一化标题(“使用决策树估计预测器的重要性”);ylabel (“估计(%)”);包含(“预测”);xticklabels (dt.PredictorNames);

图中包含一个轴对象。标题为“使用决策树的预测器重要性估计”的axes对象包含一个类型为bar的对象。

在这种情况下,“CustIncome”(父节点)是最重要的预测因子,其次是“UtilRate”,即第二次分裂发生的地方,以此类推。预测因子重要性步骤可以帮助预测因子筛选具有大量预测因子的数据集。

注意,不仅模型之间的权重不同,而且每个模型中所选择的预测因子也不同。的预测因素“AMBalance”而且“OtherCC”决策树模型中缺失的部分,以及“UtilRate”在逻辑回归模型中缺失。

使用从0到100%的百分比将决策树的预测器重要性归一化,然后在组合直方图中比较两个模型。

Ind = ismember(Predictor,dt.PredictorNames);w = 0 (size(Weight));w(Ind) = 100*imp'/sum(imp);图酒吧([重量,w]);标题(“预测者重要性估计”);ylabel (“估计(%)”);包含(“预测”);H = gca;xticklabels(预测)传说({分对数的“DT”})

图中包含一个轴对象。带有标题Predictor Importance Estimates的axes对象包含2个类型为bar的对象。这些对象表示logit和DT。

类型选择的分箱算法决定这些结果creditscorecard中使用的参数fitctree建立决策树。

模型验证

creditscorecard函数validatemodel尝试根据内部计算的点计算分数。当您使用决策树时,您不能直接运行验证,因为模型系数是未知的,不能从pd映射。

验证creditscorecard对象采用逻辑回归,使用validatemodel函数。

信用记分卡的模型验证[StatsL,tL] = validatemodel(scl);

要验证决策树,可以直接计算验证所需的统计信息。

计算ROC下的面积[x,y,t,AUC] = perfcurve(data.status,pdDT,1);KSValue = max(y - x);Ar = 2 * auc - 1;创建统计表输出测量= {的精度比“ROC曲线下面积”“KS统计”} ';Value = [AR;AUC;KSValue];StatsDT = table(测量值,值);

ROC曲线

接受者工作特征(AUROC)曲线下的面积是分类问题的性能度量。AUROC衡量的是可分离性的程度——也就是说,模型可以在多大程度上区分类。在本例中,要区分的类是缺省类和非缺省类。AUROC越高,预测能力越好。

ROC曲线以真阳性率(也称为敏感性或回忆率)与假阳性率(也称为沉降物或特异性)绘制。当AUROC0.7,该模型有70%的机会正确区分类别。当AUROC0.5时,该模型不具有判别能力。

该图比较了使用相同数据集的两个模型的ROC曲线。

图绘制([0;tL.FalseAlarm], [0; tL.Sensitivity],“年代”)举行情节(x, y,“v”)包含(“非违约者的比例”) ylabel (“违约者的比例”)({传奇分对数的“DT”},“位置”“最佳”)标题(受试者工作特征(ROC)曲线

图中包含一个轴对象。标题为接收者工作特征(ROC)曲线的轴对象包含类型线的2个对象。这些对象表示logit和DT。

tValidation = table(Measure,StatsL.Value(1:end-1),StatsDT.Value,“VariableNames”...“测量”分对数的“DT”});disp (tValidation)
测量分对数DT  ________________________ _______ _______ {' 精度比}0.32515 0.38903 {ROC曲线下面积的}0.66258 - 0.69451 0.23204 - 0.29666{“KS统计”}

如AUROC值所示,给定数据集和所选的分箱算法creditscorecard结果表明,决策树模型比逻辑回归模型具有更好的预测能力。

总结

这个例子比较了逻辑回归和决策树评分模型使用CreditCardData.mat数据集。提出了一个使用决策树计算和比较pd的工作流程。对决策树模型进行了验证,并与逻辑回归模型进行了对比。

在查看结果时,请记住这些结果取决于数据集的选择和逻辑回归工作流中的默认分箱算法(单调相邻池化算法)。

  • 逻辑回归或决策树模型是更好的评分模型取决于数据集和分箱算法的选择。虽然本例中的决策树模型是一个更好的评分模型,但逻辑回归模型产生了更高的准确率(0.42), auroc (0.71), KS统计量(0.30)如果creditscorecard对象的分箱算法设置为“分裂”基尼作为分割准则。

  • validatemodel函数需要缩放分数来计算验证指标和值。如果使用决策树模型,则缩放分数不可用,并且必须在creditscorecard对象。

  • 为了演示工作流,本示例使用相同的数据集来训练模型和进行测试。然而,要验证模型,使用单独的测试数据集是理想的。

  • 决策树的伸缩选项不可用。要使用缩放,请选择决策树以外的模型。

另请参阅

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

相关的例子

更多关于

外部网站