模型选择
在银行业数据挖掘中最常用的数据挖掘算法主要为线性回归,logistic回归和决策树分类,根据本数据集的特征,主要分析线性回归和logistic回归。
线性回归方法
在方法选择上首先我们选择线性回归方法(linear regression model),基于回归结果进行分类选择。线性回归是最简单的预测模型。在这里我们选用sklearn lib中的库linear_model进行模拟测试。
具体方法如下:对模型进行训练:lrg.fit(X_train, y_train)
得到预测值,及模型打分lrg.predict(X_test)lrg.score(X_test, y_test)由于为分类变量,前期得到的分值较低,可以理解。线性模型变量的系数如下表所示。变量 | Coefficient |
0. | |
LIMIT_BAL | -0.04271721 |
PAY_1 | 0.10171922 |
PAY_2 | 0.01269178 |
PAY_3 | 0.01885383 |
PAY_4 | -0.00203268 |
PAY_5 | 0.00640481 |
PAY_6 | -0.00282735 |
表1:线性回归系数值
模型的AUC=0.723,ROC曲线如下图所示。
我们基于预测结果设计一个分类器。def classify(y_predict,y_test): pipei=0; tp=0; fp=0; tn=0 fn=0; p=0; n=0 num=np.shape(y_predict)[0] #tp,fp,tn,fn for j in range(10): class_Num = float(input('请输入你的分类阀值:')) for i in range(num): if y_test[i]==1: p+=1 else:n+=1 if y_predict[i]>class_Num: if y_test[i]==1: pipei+=1 tp+=1 else:fp+=1 elif y_test[i]==0: tn+=1 pipei+=1 else:fn+=1 print('正确率ACC为:',pipei/num) print('真正率为TPR:', tp / (tp+fn)) print('假正率为FPR:', fp / (fp+tn)) print('真负率为TNR:', tn / (fp+tn)) print('假负率为FNR:', fn / (fn + tp)) print('正例数为:',p) print('负例数为:',n) pipei = 0 tp = 0; fp = 0; tn = 0 fn = 0; p = 0; n = 0
图3-1 分类器不同阀值下正确率、混淆矩阵单元格变化趁势图
图3-1所示,正确率在0.4之前保持平稳,在0.4之后有小的升幅(至max=0.71),后下降后保持平稳。在这里提供两个优先选择点,即阀值1:class_Num=0.42及阀值2:class_Num=0.48.
具体分类阀值的选择,由于不同项目需求会有不同的侧重点,也就会对混淆矩阵值做出不同的选择。如在本例中,假设该模型的需求为:在成本预算内对下月违约客户进行尽可能的提前预防,通过短信提醒、账单提醒等不同形式精确地对存在违约风险的客户进行风险管理。则在本需求下会考虑降低分类阀值以提高tpr,应尽可能提高挖掘出存在违约风险的客户(即正例样本)的比例,在成本允许的情况下找到tpr与tnr之间的一个平衡点。
真正率和假正率之间保持着协同关系,随着一方的增长,也会促使另一方增长。例如,在某个模型设计中,分类器将全部样本划分为负例,这时正样本被全部划分为负例,全部划分错误,真正率=0,负样本则被全部被划分正确,假正率=0.在通常情况下,正负各被划分为一定比例,正负比例被划分的多少完全取决于分类器阀值的设置。在这里以logistic regression模型为例,我们知道logistic model为每个样本的打分在(0,1)之间,当我们将分类阀值设置为1时,则全部样本被划分为负例,当我们将分类器阀值设置为0时,则全部样本被划分为正例。我们也可以将阀值设置为0.5,0.6,0.7等,当阀值由0.5增加至0.6时,则分类器分类结果负例增加,产生假正例减少,假正率降低。分类器分类结果正例减少,产生真正例减少,真正率降低。可见正确率与真正率之间存在一定的冲突,正确率会随着真正率的提高,先上升后出现下降趋势。至阀值为0时,真正率为1,正确率为0.5.可权衡模型目标选取阀值。
为了达到更高的模型可信度,遂进行其他模型的验证。
585



被折叠的 条评论
为什么被折叠?



