python逻辑回归

匿名 (未验证) 提交于 2019-12-02 22:54:36

逻辑回归的概念



Python

20162017

2016python


20161490


图2.2016

#-*- coding: utf-8 -*- import pandas as pd import matplotlib.pyplot as plt  data = pd.read_excel("c:/2018/2016myjb.xlsx") print (data)  x = data.iloc[:,:8].as_matrix() #行全选,列选下标0-7 print ("x: \n", x)   y = data.iloc[:,8].as_matrix()#行全选,列选下标8 print ("y: \n", y)    from sklearn.linear_model import LogisticRegression as LR from sklearn.linear_model import RandomizedLogisticRegression as RLR  #建立随机逻辑回归模型,筛选变量,特征筛选用了默认阈值0.25 rlr = RLR(selection_threshold=0.25)  #训练模型 rlr.fit(x, y)  #获取特征筛选结果,也可以通过.scores_方法获取各个特征的分数 rlr.get_support()  print(u'通过随机逻辑回归模型筛选特征结束') print(u'有效特征为:%s' % ','.join(data.drop('违约', axis=1).columns[rlr_support]))  x = data[data.drop('违约', axis=1).columns[rlr_support]].as_matrix() #筛选好特征 lr = LR() #建立逻辑回归模型 lr.fit(x, y) #用筛选后的特征数据来训练模型 print(u'逻辑回归模型训练结束') print(u'模型的平均正确率为:%s' % lr.score(x, y)) #给出模型的平均正确率  #用测试集预测 te = pd.read_excel("c:/2018/2017myjb.xlsx") print (te)  # 8个属性 xte =te.iloc[:, :8].as_matrix()  # 第九列  结果标签 yte= te.iloc[:, 8].as_matrix()  #筛选特征 xte1 = te[te.drop('违约', axis=1).columns[rlr.get_support()]].as_matrix()  #预测 pte=lr.predict(xte1) print (pte)

我们将得到如下的输出结果:

图3.训练、预测结果


参考图3,我们看到利用逻辑回归分析从2016年某银行历史数据的客户属性中筛选出有效特征:工龄、地址、负债率、信用卡负债,利用这些特征值去构建风险控制模型,模型的平均正确率为81.71%,模型的平均正确率处于较高的水平,因此我们可以采用模型。拿建立模型对同样模板但假设我们不知道客户的违约情况的2017年某银行历史数据进行预测分析,图中1代表预测2017年某银行历史数据中某客户可能会有违约情况发生,0代表预测2017年某银行历史数据中某客户可能不会有违约情况发生。为了评估模型是否可行,我们进行2017年某银行历史数据预测的违约结果与真实结果进行误差比较。继续加上下面这段代码运行。

#二元分类法 from sklearn.metrics import confusion_matrix import matplotlib.pyplot as plt  plt.rcParams["font.sans-serif"] = ["SimHei"] #用来正常显示中文标签 plt.rcParams["axes.unicode_minus"] = False #用来正常显示负号 confusion_matrix = confusion_matrix(yte,pte) print(confusion_matrix) plt.matshow(confusion_matrix) plt.colorbar() plt.ylabel(u"实际类型") plt.xlabel(u"预测类型") plt.show()


图4.预测结果与真实结果比较

为了方便分析,将上图的结果进行表格统计分析


从上表中,我们可以看到2017年某银行历史数据(预测集)一共有480+37+92+91=700条数据,能正确预测客户是否违约的有480+91=571条,占总数据比例为81.57%,不能正确预测客户是否违约的有37+92=129条,占总数据比例为18.43%,其中有37个“实际不违约”的客户被系统错误判断为“预测违约”,有92个“实际违约”客户被系统错误判断为“预测不违约”。我们可以发现对2017年某银行历史数据的违约预测结果与真实结果比较相差不是很大,说明我们建立的风险控制模型是可行的 。就可以建立风险模型对未来2018年的某银行数据进行客户预测是否会有违约情况后决定是否贷款,当输出结果为1时预测客户可能会有违约情况发生,为了避免风险可以决定不贷款给该用户。当输出结果为0时预测客户可能不会有违约情况发生,相对违约可能性会比较小可以决定贷款给该用户。




文章来源: python逻辑回归
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!