您的位置:首页 > 其它

信用卡违约客户的预测模型的选择(三)线性回归

2018-02-28 10:40 579 查看
模型选择

在银行业数据挖掘中最常用的数据挖掘算法主要为线性回归,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.可权衡模型目标选取阀值。
为了达到更高的模型可信度,遂进行其他模型的验证。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐