主要内容

信用记分卡分析案例研究

此示例显示如何创建creditscorecard对象、存储数据、显示和绘制存储数据信息。这个例子还展示了如何拟合逻辑回归模型,获得记分卡模型的分数,并确定违约概率,并使用三个不同的指标验证信用记分卡模型。

步骤1。创建creditscorecard对象。

使用CreditCardData.mat文件来加载数据(使用Refaat 2011的数据集)。如果你的数据包含许多预测器,您可以先使用screenpredictors(风险管理工具箱)将一个潜在的大型预测因子集缩减为最能预测信用记分卡响应变量的子集。类时,可以使用此预测器子集creditscorecard对象。另外,可以使用阈值预测(风险管理工具箱)使用的输出交互地设置信用记分卡预测器阈值screenpredictors(风险管理工具箱)

当创建creditscorecard对象,默认情况下“ResponseVar”设置为数据中的最后一列(“状态”在本例中)和“GoodLabel”到具有最高计数的响应值(0在这个例子中)。的语法creditscorecard表明“CustID”“IDVar”从预测符列表中删除。此外,虽然本例中没有演示,但在创建creditscorecard对象使用creditscorecard,您可以使用可选的名称-值对参数“WeightsVar”指定观察(样品)的权重或“BinMissingData”将丢失的数据归置。

负载CreditCardData头(数据)
CustID CustAge TmAtAddress ResStatus EmpStatus CustIncome TmWBank OtherCC AMBalance UtilRate地位  ______ _______ ___________ __________ _________ __________ _______ _______ _________ ________ ______ 1 53 62租户未知50000 55是的1055.9 - 0.22 0 2 61 22家老板雇用了52000名25是的1161.6 - 0.24 0 3 47 30租户使用0 4 50 75 37000 61 877.23 - 0.29业主雇佣了53000 20是的157.37 - 0.08 0 5 68 56家老板雇用了53000名14是的561.84 - 0.11 0 6 65 13家老板雇佣了4800059是968.18 0.15 0 7 34 32房主未知32000 26是717.82 0.02 18 50 57其他雇员51000 33否3041.2 0.13 0

中的变量CreditCardData为客户ID、客户年龄、现住址时间、居住状况、就业状况、客户收入、开户银行、其他信用卡时间、月平均余额、使用率、默认状态(响应)。

Sc =信用记分卡(数据,“IDVar”“CustID”
sc =信用记分卡与属性:GoodLabel: 0 ResponseVar:“状态”WeightsVar:“VarNames: {'CustID' 'CustAge' 'TmAtAddress' 'ResStatus' 'EmpStatus' 'CustIncome' 'TmWBank' 'OtherCC' 'AMBalance' 'UtilRate' 'status'} NumericPredictors: {'CustAge' 'TmAtAddress' 'CustIncome' 'TmWBank' 'AMBalance' 'UtilRate'} CategoricalPredictors: {'ResStatus' 'EmpStatus' 'OtherCC'} BinMissingData: 0 IDVar: 'CustID' PredictorVars:{'CustAge' 'TmAtAddress' 'ResStatus' 'EmpStatus' 'CustIncome' 'TmWBank' 'OtherCC' 'AMBalance' 'UtilRate'} Data: [1200x11 table]

执行一些初始数据研究。查询分类变量的预测统计数据“ResStatus”并绘制容器信息“ResStatus”

bininfo (sc,“ResStatus”
ans =4×6表Bin Good Bad Odds WOE InfoValue ______________ _____________ _________ _________ {'Home Owner'} 365 177 2.0621 0.019329 0.0001682 {'Tenant'} 307 167 1.8383 -0.095564 0.0036638 {'Other'} 131 53 2.4717 0.20049 0.0059418 {'Totals'} 803 397 2.0227 NaN 0.0097738
plotbins (sc,“ResStatus”

图中包含一个轴对象。标题为ResStatus, ylabel WOE的坐标轴对象包含3个类型为bar, line的对象。这些对象代表好,坏。

此bin信息包含“Good”和“Bad”的频率以及bin统计信息。避免使用频率为0的箱子,因为它们会导致无限或未定义()统计数据。使用modifybinsautobinning函数对数据进行相应的存储。

对于数字数据,常见的第一步是“精细分类”。这意味着将数据放入多个用规则网格定义的箱子中。为了说明这一点,请使用预测器“CustIncome”

Cp = 2000:5000:60000;Sc = modifybins(Sc,“CustIncome”“割点”, cp);bininfo (sc,“CustIncome”
ans =11×6表本好不好悲哀InfoValue几率  _________________ ____ ___ _______ _________ __________ {'[- 正,20000)}3 5 0.6 -1.2152 0.010765{[20000、25000)的}23 16 1.4375 -0.34151 0.0039819{[25000、30000)的}38 47 0.80851 -0.91698 0.065166{[30000、35000)的}131 75 1.7467 -0.14671 0.003782{[35000、40000)的}193 98 1.9694 -0.026696 0.00017359{[40000、45000)的}173 76 2.2763 0.11814 0.0028361{[45000、50000)}131年47 2.7872 0.32063 0.014348{[50000、55000)}82年24 3.4167 0.52425 0.021842{[55000、60000)的}21 8 2.625 0.26066 0.0015642 {'[60000,Inf]'} 8 1 8 1.375 0.010235{'总计'}803 397 2.0227 NaN 0.13469
plotbins (sc,“CustIncome”

图中包含一个轴对象。标题为CustIncome, ylabel WOE的坐标轴对象包含3个类型为bar, line的对象。这些对象代表好,坏。

步骤2。自动bin数据。

使用autobinning函数使用默认值为每个预测器变量执行自动分箱“单调”使用默认算法选项的算法。

Sc = autobinning(Sc);

在自动入箱步骤之后,必须使用bininfo而且plotbins函数和微调。对于信用记分卡来说,证据权重(WOE)的单调、理想的线性趋势是可取的,因为这可以转化为给定预测器的线性点。WOE趋势可以可视化plotbins

预测=“ResStatus”;预测plotbins (sc)

图中包含一个轴对象。标题为ResStatus, ylabel WOE的坐标轴对象包含3个类型为bar, line的对象。这些对象代表好,坏。

不像最初的情节“ResStatus”当记分卡创建时,新的情节为“ResStatus”呈上升趋势。这是因为autobinning函数在默认情况下,通过增加几率对类别排序。

这些图表表明“单调”算法可以很好地发现该数据集的单调的WOE趋势。属性对某些预测器进行少量手动调整即可完成分箱过程modifybins函数。

步骤2 b。使用手动装箱微调垃圾箱。

手动修改bin的常用步骤有:

  • 使用bininfo函数带有两个输出参数,其中第二个参数包含分箱规则。

  • 使用的第二个输出参数手动修改分箱规则bininfo

  • 设置更新后的分箱规则modifybins然后使用plotbinsbininfo查看更新的箱子。

例如,根据情节为“CustAge”在步骤2a中,1号和2号箱子与5号和6号箱子有类似的WOE。使用上述步骤合并这些箱子:

预测=“CustAge”;[bi,cp] = bininfo(sc,Predictor)
bi =8×6表Bin Good Bad Odds WOE InfoValue _____________ _____________ _________ _________ {'[-Inf,33)'} 70 53 1.3208 -0.42622 0.019746 {'[33,37)'} 64 47 1.3617 -0.39568 0.015308 {'[33,40)'} 73 47 1.5532 -0.26411 0.0072573 {'[40,46)'} 174 94 1.8511 -0.088658 0.001781 {'[46,48)'} 61 25 2.44 0.18758 0.0024372 {'[46,58)'} 263 105 2.5048 0.21378 0.013476 {'[58,Inf]'} 98 26 3.7692 0.62245 0.0352{'合计'}803 397 2.0227 NaN 0.095205
cp =6×133 37 40 46 48 58
Cp ([1 5]) = [];合并1、2和5、6号箱Sc = modifybins(Sc,“CustAge”“割点”, cp);plotbins (sc,“CustAge”

图中包含一个轴对象。标题为CustAge, ylabel WOE的坐标轴对象包含3个类型为bar, line的对象。这些对象代表好,坏。

“CustIncome”,根据上面的图,最好合并箱子3,4和5,因为它们有相似的WOE。合并这些箱子:

预测=“CustIncome”;[bi,cp] = bininfo(sc,Predictor)
bi =8×6表Bin Good Bad Odds WOE InfoValue _________________ ______________ _________ __________ {'[-Inf,29000)'} 53 58 0.91379 -0.79457 0.06364 {'[29000,33000)'} 74 49 1.5102 -0.29217 0.0091366 {'[33000,35000)'} 68 36 1.8889 -0.06843 0.00041042 {'[35000,40000)'} 193 98 1.9694 -0.026696 0.00017359 {'[40000,42000)'} 68 34 2 -0.011271 1.0819e-05 {'[42000,47000)'} 164 66 2.4848 0.20579 0.0078175 {'[47000,Inf]'} 183 56 3.2679 0.47972 0.041657 NaN 0.12285
cp =6×129000 33000 35000 40000 42000 47000
Cp ([3 4]) = [];合并3、4和5号仓Sc = modifybins(Sc,“CustIncome”“割点”, cp);plotbins (sc,“CustIncome”

图中包含一个轴对象。标题为CustIncome, ylabel WOE的坐标轴对象包含3个类型为bar, line的对象。这些对象代表好,坏。

“TmWBank”,根据上面的图,最好合并箱子2和3,因为它们有相似的WOE。合并这些箱子:

预测=“TmWBank”;[bi,cp] = bininfo(sc,Predictor)
bi =6×6表Bin Good Bad Odds WOE InfoValue _____________ _____________ ________ _________ {'[-Inf,12)'} 141 90 1.5667 -0.25547 0.013057 {'[12,23)'} 165 93 1.7742 -0.13107 0.0037719 {'[23,45)'} 224 125 1.792 -0.12109 0.0043479 {'[45,71)'} 177 67 2.6418 0.26704 0.013795 {'[71,Inf]'} 96 22 4.3636 0.76889 0.049313{'合计'}803 397 2.0227 NaN 0.084284
cp =4×112 23 45 71
Cp (2) = [];合并2号和3号箱子Sc = modifybins(Sc,“TmWBank”“割点”, cp);plotbins (sc,“TmWBank”

图中包含一个轴对象。标题为TmWBank, ylabel WOE的坐标轴对象包含3个类型为bar, line的对象。这些对象代表好,坏。

“AMBalance”,根据上面的图,最好合并箱子2和3,因为它们有相似的WOE。合并这些箱子:

预测=“AMBalance”;[bi,cp] = bininfo(sc,Predictor)
bi =5×6表本好不好悲哀InfoValue几率  _____________________ ____ ___ ______ ________ _________ {'[- 正无穷,558.88)}346 134 2.5821 0.24418 0.022795{[558.88,1254.28)的}309 171 1.807 -0.11274 0.0051774{[1254.28,1597.44)的}76年44 1.7273 -0.15787 0.0025554{'[1597.44,正]}72年48 1.5 -0.29895 0.0093402{“总数”}803 397 2.0227 0.039868南
cp =3×1103.× 0.5589 1.2543 1.5974
Cp (2) = [];合并2号和3号箱子Sc = modifybins(Sc,“AMBalance”“割点”, cp);plotbins (sc,“AMBalance”

图中包含一个轴对象。标题为AMBalance, ylabel WOE的坐标轴对象包含3个类型为bar, line的对象。这些对象代表好,坏。

现在已经完成了装箱微调,所有预测器的装箱都有接近线性的WOE趋势。

步骤3。拟合逻辑回归模型。

fitmodel函数拟合logistic回归模型与WOE数据。fitmodel内部存储训练数据,将其转换为WOE值,映射响应变量,以便‘好’1,并拟合线性logistic回归模型。默认情况下,fitmodel使用逐步过程来确定哪些预测因子应该在模型中。

Sc = fitmodel(Sc);
1.添加CustIncome, Deviance = 1490.8954, Chi2Stat = 32.545914, PValue = 1.1640961e-08添加TmWBank, Deviance = 1467.3249, Chi2Stat = 23.570535, PValue = 1.2041739e-06添加AMBalance, Deviance = 1455.858, Chi2Stat = 11.466846, PValue = 0.00070848829添加EmpStatus, Deviance = 1447.6148, Chi2Stat = 8.2432677, PValue = 0.0040903428添加CustAge, Deviance = 1442.06, Chi2Stat = 5.5547849, PValue = 0.0184302377.添加ResStatus, Deviance = 1437.9435, Chi2Stat = 4.1164321, PValue = 0.042468555。添加OtherCC, Deviance = 1433.7372, Chi2Stat = 4.2063597, PValue = 0.040272676广义线性回归模型:logit(status) ~ 1 + CustAge + ResStatus + EmpStatus + CustIncome + TmWBank + OtherCC + AMBalance分布=二项估计系数:估计SE tStat pValue ________ _______ ______ __________(拦截)0.7024 0.064 10.975 5.0407e-28 CustAge 0.61562 0.24783 2.4841 0.012988 ResStatus 1.3776 0.65266 2.1107 0.034799 EmpStatus 0.88592 0.29296 3.024 0.0024946 CustIncome 0.69836 0.21715 3.216 0.0013001 TmWBank 1.106 0.23266 4.7538 1.9958e-06 OtherCC 1.0933 0.52911 2.0662 0.038806 AMBalance 1.0437 0.32292 3.2322 0.0012285 1200观测值,1192误差自由度离散度:1 Chi^2统计与常量模型:89.7, p-value = 1.42e-16

步骤4。审查和格式记分卡点。

在拟合logistic模型后,默认情况下,这些点是未缩放的,直接来自WOE值和模型系数的组合。的displaypoints函数总结了计分卡的分数。

P1 = displaypoints(sc);disp (p1)
预测本点  ______________ ____________________ _________ {' CustAge’}{[负无穷,37)的-0.15314{‘CustAge}}{[37、40)的-0.062247}{‘CustAge}{'[40岁,46)}0.045763{‘CustAge}{[46岁,58)的0.22888}{“CustAge”}{的[58岁的Inf]} 0.48354{‘CustAge}{“失踪> <”}南{‘ResStatus}{“租户”}-0.031302{‘ResStatus}{‘业主’}0.12697{‘ResStatus}{‘其他’}0.37652{‘ResStatus}{“失踪> <”}南{‘EmpStatus}{‘未知’}-0.076369{‘EmpStatus}{“雇佣”}0.31456{‘EmpStatus}{“失踪> <”}南{‘CustIncome}{[无穷,29000)的-0.45455}{‘CustIncome}{[29000、33000)的-0.1037}{‘CustIncome}{[33000、42000)的0.077768}{‘CustIncome}{[42000、47000)的0.24406}{‘CustIncome}{”(47000年,正)}0.43536{‘CustIncome}{“失踪> <”}南{‘TmWBank}{[无穷,12)的-0.18221}{‘TmWBank}{[12日45)的-0.038279}{‘TmWBank}{[71)的0.39569}{‘TmWBank}{”(71年,正)}0.95074{‘TmWBank}{“失踪> <”}南{‘OtherCC}{‘不’}-0.193{‘OtherCC}{'是的'}0.15868 {'OtherCC' } {'' } NaN {'AMBalance' } {'[-Inf,558.88)' } 0.3552 {'AMBalance' } {'[558.88,1597.44)'} -0.026797 {'AMBalance' } {'[1597.44,Inf]' } -0.21168 {'AMBalance' } {'' } NaN

这是修改bin标签的好时机,如果这是出于美观的原因而感兴趣的话。要做到这一点,使用modifybins更改bin标签。

Sc = modifybins(Sc,“CustAge”“BinLabels”...“高达36”37年到39年“40到45岁”46至57年58年及以上});Sc = modifybins(Sc,“CustIncome”“BinLabels”...“高达28999”“29000至32999”“33000至41999”“42000至46999”47000及以上});Sc = modifybins(Sc,“TmWBank”“BinLabels”...“到11岁”12到4445至70年1971年及以后});Sc = modifybins(Sc,“AMBalance”“BinLabels”...“高达558.87”“558.88至1597.43”'1597.44及以上'});P1 = displaypoints(sc);disp (p1)
预测本点  ______________ _____________________ _________ {' CustAge}{‘多达36}-0.15314{‘CustAge}{' 37到39}-0.062247{‘CustAge}{40到45的}0.045763{‘CustAge}{“46 57”}0.22888{‘CustAge}{' 58和}0.48354{‘CustAge}{“失踪> <”}南{‘ResStatus}{“租户”}-0.031302{‘ResStatus}{‘业主’}0.12697{‘ResStatus}{‘其他’}0.37652{‘ResStatus}{“失踪> <”}南{‘EmpStatus}{‘未知’}-0.076369{‘EmpStatus}{“雇佣”}0.31456{' EmpStatus}{“失踪> <”}南{‘CustIncome}{‘28999’}-0.45455{‘CustIncome}{“29000 - 32999”}-0.1037{‘CustIncome}{“33000 - 41999”}0.077768{‘CustIncome}{“42000 - 46999”}0.24406{‘CustIncome}{' 47000和'}0.43536{‘CustIncome}{“失踪> <”}南{‘TmWBank}{' 11 '} -0.18221{‘TmWBank}{' 12至44}-0.038279{‘TmWBank}{' 45到70}0.39569{‘TmWBank}{' 71和'}0.95074{‘TmWBank}{“失踪> <”}南{‘OtherCC}{‘不’}-0.193 {' OtherCC '}{'Yes'} 0.15868 {'OtherCC'}{'<缺少>'}NaN {'AMBalance'}{'高达558.87'}0.3552 {'AMBalance'}{'558.88至1597.43'}-0.026797 {'AMBalance'}{'1597.44及以上'}-0.21168 {'AMBalance'}{'<缺少>'}NaN

点通常是有比例的,也经常是圆角的。要做到这一点,请使用formatpoints函数。例如,您可以设置与目标赔率水平相对应的点数目标水平,还可以设置所需的点数加倍赔率(PDO)。

TargetPoints = 500;TargetOdds = 2;Pdo = 50;%点数加倍赔率Sc = formatpoints(Sc,“PointsOddsAndPDO”,[TargetPoints targetods PDO]);P2 = displaypoints(sc);disp (p2)
预测本点  ______________ _____________________ ______ {' CustAge}{‘多达36}53.239{‘CustAge}{' 37到39}59.796{‘CustAge}{40到45的}67.587{‘CustAge}{“46 57”}80.796{‘CustAge}{' 58和}99.166{‘CustAge}{“失踪> <”}南{‘ResStatus}{“租户”}62.028{‘ResStatus}{‘业主’}73.445{‘ResStatus}{‘其他’}91.446{‘ResStatus}{“失踪> <”}南{‘EmpStatus}{‘未知’}58.777{‘EmpStatus}{“雇佣”}86.976 {' EmpStatus '}{“失踪> <”}南{‘CustIncome}{‘28999’}31.497{‘CustIncome}{“29000 - 32999”}56.805{‘CustIncome}{“33000 - 41999”}69.896{‘CustIncome}{“42000 - 46999”}81.891{‘CustIncome}{' 47000和'}95.69{‘CustIncome}{“失踪> <”}南{‘TmWBank}{' 11 '} 51.142{‘TmWBank}{' 12至44}61.524{‘TmWBank}{' 45到70}92.829{‘TmWBank}{' 71和'}132.87{‘TmWBank}{“失踪> <”}南{‘OtherCC}{‘不’}50.364{‘OtherCC}{'是的'}75.732 {' OtherCC '}{'<缺少>'}NaN {'AMBalance'}{'高达558.87'}89.908 {'AMBalance'}{'558.88至1597.43'}62.353 {'AMBalance'}{'1597.44及以上'}49.016 {'AMBalance'}{'<缺少>'}NaN

第5步。对数据进行评分。

分数函数计算训练数据的分数。一个可选的数据输入也可以传递给分数例如,验证数据。每个客户的每个预测器的点数作为可选输出提供。

[分数,分数]=分数(sc);disp(分数(1:10))
528.2044 554.8861 505.2406 564.0717 554.8861 586.1904 441.8755 515.8125 524.4553 508.3169
disp(点(1:10,:))
CustAge ResStatus EmpStatus CustIncome TmWBank OtherCC AMBalance _______ _________ _________ __________ _______ _______ _________ 80.796 62.028 58.777 95.69 92.829 75.732 62.332 99.166 73.445 86.976 61.524 75.764 62.353 80.796 62.028 86.976 69.896 92.829 50.364 62.353 80.796 73.445 86.976 95.69 75.732 61.524 75.732 89.908 73.445 86.976 95.69 92.829 75.732 53.239 73.445 58.777 56.805 61.524 75.732 80.796 91.446 86.976 95.6961.524 50.364 49.016 80.796 62.028 58.777 95.69 61.524 75.732 89.908 80.796 73.445 58.777 95.69 61.524 75.732 62.353

步骤6。计算违约的概率。

要计算违约概率,请使用probdefault函数。

Pd = probdefault(sc);

定义“好”的概率,并将预测的概率与格式化的分数绘制出来。可视化地分析目标点数和目标赔率是否匹配,以及点数与两倍赔率(PDO)关系是否成立。

ProbGood = 1-pd;PredictedOdds = ProbGood./pd;figure scatter(Scores,PredictedOdds)“预测赔率与得分”)包含(“分数”) ylabel (“预测概率”)举行xLimits = xlim;yLimits = ylim;%目标点数和赔率plot([TargetPoints TargetPoints],[yLimits(1) targetods],凯西:”plot([xLimits(1) TargetPoints],[TargetOdds TargetOdds],凯西:”%目标点加上PDOplot([TargetPoints+PDO TargetPoints+PDO],[yLimits(1) 2* targetods],凯西:”) plot([xLimits(1) TargetPoints+PDO],[2*TargetOdds 2*TargetOdds],凯西:”%目标点减去PDOplot([TargetPoints-PDO TargetPoints-PDO],[yLimits(1) targetods /2],凯西:”) plot([xLimits(1) TargetPoints-PDO],[targetods /2 targetods /2],凯西:”)举行

图中包含一个轴对象。axis对象的标题是Odds vs. Score, xlabel Score, ylabel Odds,其中包含7个类型为scatter, line的对象。

步骤7。使用CAP、ROC和Kolmogorov-Smirnov统计量验证信用记分卡模型

creditscorecard类支持三种验金宝app证方法,累积精度剖面(CAP),受试者工作特征(ROC)和Kolmogorov-Smirnov (KS)统计量。有关CAP、ROC和KS的更多信息,请参见累积精度剖面(CAP)受试者工作特征(ROC),Kolmogorov-Smirnov统计量(KS)

[Stats,T] = validatemodel(sc,“阴谋”, {“帽子”“中华民国”“KS”});

图中包含一个轴对象。axis对象的标题为累积精度剖面(CAP)曲线,xlabel Fraction of借贷者,ylabel Fraction of违约者,包含patch, line, text类型的6个对象。

图中包含一个轴对象。axis对象的标题为Receiver Operating Characteristic (ROC) curve, xlabel Fraction of non-defaulters, ylabel Fraction of defaulters,包含patch, line, text类型的3个对象。

图中包含一个轴对象。axis对象的标题为K-S Plot, xlabel Score(风险最高到最安全),ylabel Cumulative Probability包含6个类型为line, text的对象。这些对象代表累积的坏,累积的好。

disp(统计)
测量值  ________________________ _______ {' 精度比0.32225”}{ROC曲线下面积的}0.66113{“KS统计”}0.22324 499.18{“k值”}
disp (T (1:15)):
Scores ProbDefault TrueBads FalseBads TrueGoods FalseGoods Sensitivity FalseAlarm PctObs ______ ___________ ________ _________ _________ __________ ___________ __________ __________ 369.4 0.7535 01 802 397 0 0.0012453 0.00083333 377.86 0.73107 1 802 396 0.0025189 0.0012453 0.0016667 379.78 0.7258 2 1 802 395 0.0050378 0.0012453 0.0012453 0.0033333 394.77 0.68259 3 2 801 394 0.0075567 0.0024907 0.0041667 395.78 0.67954 4 2 801 393 0.010076 0.0024907801 0.005 396.95 0.67598 392 0.012594 0.0024907 0.0058333 398.37 0.67167 801 391 0.015113 0.0024907 0.0066667 401.26 0.66276 801 390 0.017632 0.0024907 0.0075 403.23 0.65664 389 801 0.020151 0.0024907 0.0083333 405.09 0.65081 8 3 800 389 0.020151 0.003736 0.0091667 405.15 0.65062 11 5 798 386 0.027708 0.0062267 0.013333 405.37 0.64991 11 6 797 386 0.027708 0.007472 0.014167 406.18 0.64735 12 6 797 385 0.030227 0.007472 0.015 407.14 0.64433 13 6 797 384 0.032746 0.007472 0.015833

另请参阅

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

相关的例子

更多关于

外部网站