本文将通过逻辑回归算法实现用户信贷预测模型的建立,本次实验涉及到数据清洗、建模、预测三部分,希望各位读者能有所收获,感谢阅读。

对年轻人来说,还花呗可以说是每个月必备的一项任务了,很有可能刚到手的工资还花呗就已经花去了大半wps的官网下载的网站怎么找。那么在这个快节奏的时代中,有时候我们需要支配一些资金去满足某些需求,但又因为囊中羞涩一时无法拿出太大的数额,为了解决这中尴尬的局面,信贷机构悄然产生了。
信贷业务又称为信贷资产或贷款业务,是商业银行最重要的资产业务,通过放款收回本金和利息,扣除成本后获得利润,所以信贷是商业银行的主要赢利手段。
由于放款脱离了银行的控制,不能按时收回本息的风险较大,所以对信贷应在遵守合同法和贷款通则的基础上,建立严格的贷款制度,其主要内容是:建立贷款关系,贷款申请,贷前调查,贷款审批及发放,贷后检查,贷款收回与展期,信贷制裁等制度。
1.1 逻辑回归算法
1.1.1 Logistic函数
Logistic回归模型中的因变量只有1和0(发生于不发生)两种。假设在p个独立自变量x1,x2…xp作用下,y取1的概率是p = P(y = 1|X)取0的概率是1-p,取1和取0的概率之比为
称为事件的优势比(odds),对odds取自然对数得Logistic变换
令①=z,则
称为Logistic函数
如图:

1.1.2Logistic回归建模步骤
a、根据分析目的设置指标变量(因变量和自变量),然后收集数据,根据收集到的数据,对特征再次进行筛选
b、y取1的概率是p= wps office的免费版的下载的地方怎么找 P(y= 1|X), 取0概率是1-p。用
和自变量列出线性回归方程,估计出模型中的回归系数
c、进行模型检验。模型有效性的检验指标有很多,最基本的有正确率,其次有混淆矩阵、ROC曲线、KS值等。
d、模型应用:输入自变量的取值,就可以得到预测变量的值,或者根据预测变量的值去控制自变量的取值。
实例:
年龄教育工龄地址收入负债率信用卡负债其他负债违约4131712176.009.3011.365.01127110631.0 wps的官网最新的下载网址的方法017.301.364.000
需要数据集请私聊我
利用Scikit-Learn对这个数据进行逻辑回归分析。首先进行特征筛选,特征筛选的方法有很多,主要包含在Scikit_Learn 的feature_ selection 库中,比较简单的有通过F检验(f_ regression)来给出各个特征的F值和p值,从而可以筛选变量(选择F值大的或者p值小的特征)。其次有递归特征消除( Recursive Feature Elimination, RFE)和稳定性选择(StabilitySelection)等比较新的方法。这里使用了稳定性选择方法中的随机逻辑回归进行特征筛选,然后利用筛选后的特征建立逻辑回归模型,输出平均正确率。
逻辑回归代码
结果:
1.2 客户逾期还款业务
在本文中,将通过对收集到的贷款机构数据集进行清洗与建模,预测用户是否具有还款能力并判断是否贷款给该用户,本文将从数据清洗、数据挖掘、数据建模三个方面进行一个小小的实战操作。
1.3 数据源内容解读
数据集是Lending Club平台产生借贷的业务数据,共有52个变量,39522条记录。
让我们先看一下数据集是什么样子wps 的官网最新下载地方在哪(wps下载电脑版的从哪下好)

可以看到数据样本中有很多很多列属性,而每一列都代表什么特征呢?
这里我选取了一部分进行汉化

而在我们真正进行建模的时候,并不是所有的属性都会用到,我们需要先对数据进行预处理。
1.4 Python主要数据预处理函数
在数据挖掘中,海量的原始数据中存在着大量不完整(有缺失值)、不一致、有异常的数据,严重影响到数据挖掘建模的执行效率,甚至可能导致挖掘结果的偏差,所以进行数据清洗就显得尤为重要,数据清洗完成后接着进行或者同时进行数据集成、转换、规约等一系列的处理,该过程就是数据预处理。数据预处理一方面是要提高数据的质量,另一方面是要让数据更好地适应特定的挖掘技术或工具。统计发现,在数据挖掘的过程中,数据预处理工作量占到了整个过程的60%。
数据预处理的主要内容包括:数据清洗、数据集成、数据变换和数据规约
函数名函数功能所属拓展库interpolate一维、高维数据插值Scipyunique去除数据中的重复元素,得到单值元素列表,它是对象的方法名Pandas/Numpyisnull判断是否为空Pandasnotnull判断是否非空PandasPCA对指标变量矩阵进行主成分分析Scikit-Learnrandom生成随机矩阵Numpy
1.4.1wps的官网最新的下载的网址在哪 interpolate
功能: interpolate是Scipy的一一个子库,包含了大量的插值函数,如拉格朗日插值、样条插值、高维插值等。使用前需要用from scipy.interpolate import *引入相应的插值函数,可以根据需要到官网查找对应的函数名。
使用格式:
这里仅仅展示了一维数据的拉格朗日插值的命令,其中x, y为对应的自变量和因变量数据。插值完成后,可以通过f(a) 计算新的插值结果。类似的还有样条插值、多维数据插值等,此处不一一展示。
1.4.2 unique
**功能: ** 去除数据中的重复元素,得到单值元素列表。它既是Numpy库的一个函数(np.unique()),也是Series对象的一个方法。
使用格式:
np.unique(D) ,D是一维数据,可以是list、array、SeriesD.unique(),D是Pandas的Series对象
实例:
求向量A中的单值元素,并返回相关索引
结果:
1.4.3 isnull / notnull
功能: 判断每个元素是否空值 / 非空值
使用格式: D.isnull()/ D.notnull()。这里的D要求是Series对象,返回一个布尔Series。可以通过D [ D.isnull()]或D[D.notnull()]找出D中的空值 / 非空值。
1.4.4andom
wps的电脑版下载地方怎么找
功能: random是Numpy的一个子库(Python本身也自带了random,但Numpy的更加强大),可以用该库下的各种函数生成服从特定分布的随机矩阵,抽样时可使用。
使用格式
np.random.randn(k, m, n,…生成一个k * m * n *… 随机矩阵,其元素均匀分布在区间(0,1)上np.random.randn(k, m, n…)_.生成一个k * m * n * …随机矩阵,其元素服从标准正态分布
1.4.5 PCA
功能: 对指标变量矩阵进行主成分分析,使用前需要用引入该函数。
使用格式: model = PCA()。 注意,Scikit-Learn 下的PCA是一个建模式的对象,也就是说,一般的流程是建模,然后是训练model.fit(D),D为要进行主成分分析的数据矩阵,训练结束后获取模型的参如.components_获取特征向量,以及.explained_ variance. _ratio_获取各个属性的贡献率等。
实例:
使用PCA()对一个10 * 4 维的随机矩阵进行主成分分析
结果:
首先,去掉一些明显没用的特征,如,,并将剩下特征保存到一个新的csv文件中。(也可以使用参数)
2.1 调用warnings包,屏蔽报红
2.2 筛选特征值
分析数据集,显示数据标签,挑选我们不需要的特征
这里先做一个约定,2万行数据中,如果空白值超过一半,则剔除掉这些列
:剔除
这里我们对处理好的数据进行展示
代表有多少列 ,代表有多少行
通常来说,样本中的 和 属性对银行评定是否放贷并没有任何影响,这只是用户所特有的标识;而 (期望贷款的数目)和 (实际贷到的数目)显然与我们要做的预测也没什么关系。在判断一个特征值是否有用时要结合很多实际情况进行分析。这里不做过多讨论,为了实验方便我们选择舍弃这些属性列。
在这里我们看一下用户当前贷款的状态
继续剔除不需要的属性列
那么经过初步筛选后,剩下了多少特征列呢?
确定当前贷款状态(label值)
2.3 LabelEncoder 和 OneHotEncoder
在进行Python数据处理的时候,我们想要将繁杂的数据特征变成简单、容易识别的编码,Python为我们提供了两个非常好用的方法。
通俗来说
是对不连续的数字或者文本进行编号
用于将表示分类的数据扩维
那么对我们拿到的数据集该如何处理呢?
二分类
在进行编码后,数据变成了这个样子
2.4 去掉特征中只有一种属性的列wps office的免费版下载地方在哪
这时只剩下39305行,24列数据了
注:
当我们筛选出特征和标签后,就可以丢给了吗?
当然是不行的,还需要做缺失值、字符值、标点符号、%号、str等值得处理。
2.5 处理缺失值
从统计出的结果可以看出和相对于数据总量来说较少,可以直接去掉缺失值所在的行。
而中的缺失值较多,说明该数据统计的情况较差,在本文中直接将此特征删除即可。
删除后,统计各类型是特征的数目
2.6数据类型的转换
由于库不接受字符型的数据,所以还需将上面特征中12个字符型的数据进行处理。
处理思路
:分期多少个月
:利息,10.65%,后面还要去掉%
:超过10年的看做是10,9年看做是9…
:房屋所有权,是租的、自己的、还是抵押掉了,使用用0 1 2来代替
显示和属性
将工作年限
剩余的其他字符型特征,此处选择使用pandas的get_dummies()函数,直接映射为数值型。
查看指定标签的属性,并记数
总结:
什么时候用OneHotEncoder独热编码和LabelEncoder标签编码?
特征的属性小于等于3 ,用OneHotEncoder,比如:天气、性别 ,属于无序特征
特征的属性大于3,用LabelEncoder,比如:星期属于有序型
数据类型转换
前面花费了大量的时间在进行数据处理,这足以说明在机器学习中数据准备的工作有多重要,有了好的数据才能预测出好的分类结果,对于二分类问题,一般情况下,首选逻辑回归。
首先定义模型效果的评判标准。根据贷款行业的实际情况,在这里我们假设将钱借给了没有还款能力的人,结果损失一千,将钱借给了有偿还能力的人,从每笔中赚0.1的利润,而其余情况收益为零,就相当于预测对十个人才顶上预测错一个人的收益,所以精度不再适用于此模型,为了实现利润最大化,不仅要求模型预测recall率较高,同时是需要要让率较低,故这里采用两个指标和。
3.1 查看预测结果
3.2 逻辑回归的超参数
3.3 分析需求
目的是赚取有能力偿还贷款的客户的利息
第一个实际值为0,客户不会还钱,模型预测客户能还钱,为1 ,假设系统贷给了客户1000块钱,但是一分都没还,说明预测错了为阴性,赔了1000块钱
第二个实际值为1,客户有偿还能力,模型预测客户有能力偿还,就挣了客户的利息钱,1000*0.1 =100块钱
第三个实际值为0,本来客户是不还钱的,模型预测不还钱,并且没有贷款给他
第四个客户能还钱,模型预测客户不能还 ,没有贷款给他
3.4 建立混淆矩阵
这里有个问题:
最终拿什么衡量指标来评价模型?
这个数据集后续观察是不平衡的 ,借钱的有6个,不借钱的有1个,借钱的样本本来就多,不借钱的样本本来就少,相当于7个人来了,有6个人借给他了(定为1),有1个人没借给他(定为0),7个样本的错误率为1/7 ,准确率为6/7 ,用”精度“衡量的时候看一下图例:

第一个实际值为0,没有偿还能力,模型预测客户为1 ,代表不能还,赔1000块钱
后面的实际值为1,代表有偿还能力,模型借给他1000块钱,挣了个利息钱100块
最终-1000 + 600 = -400 用”精度“来衡量最终还是会赔钱的,因为数据集能还钱的样本很多,显然这样是不合理的,所以就不考虑”精度“了。
所以这里我们建立混淆矩阵
真正率TPR: 是指客户的实际值为1,有偿还能力,模型预测也为1,说明这些客户群体越来越多,挣的利息也越来越多(我们想让TRP越高越好)
本质上期望TPR越高越好,FPR越低越好
从得到的结果中发现前20个人几乎都是有能力还款且贷款给他们了,说明来一个人基本都会判断为可以借钱,那显然模型就完全没有分类的意义。
这时候我们就要考虑一个重要的问题了: 权重
为什么会出现这种情况?
问题就出在了前面的数据集中,比如说数据是6:1,绝大多数是1,小部分是0,样本不均衡的情况下,导致分类器错误的认为把所有的样本预测为1,因为负样本少,我们需要进行 “数据增强”。
对数据来说,一部分是6份,另一部分是1份,把6份的权重设置为1,把1份的权重设置为6,设置权重项来进行衡量,把不均衡的样本变得均衡,加了权重项,让正样本对结果的影响小一些
3.5 考虑权重后使用逻辑回归训练
3.6 自定义权重后使用逻辑回归训练
为什么会出现上面极其离谱的现象呢?
这是由于我们的样本是很不均衡的,这就容易导致我们构建的分类器把所有样本都归为样本量较大的那一个类。解决的方法有很多,其中一个是进行数据增强,就是把少的样本增多,但是要添加的数据要么是收集的,要么是自己造的,所以这项工作还是挺难的。所以将考虑权重,将少的样本的权重增大,期望模型能够达到比较均衡的状态。
对上述模型的预测结果进行简单的分析,发现错误率和正确率都达到99.9%,错误率太高,通过观察预测结果发现,模型几乎将所有的样本都判断为正例,通过对原始数据的了解,分析造成该现象的原因是由于政府样本数量相差太大,即样本不均衡造成模型对正例样本有所偏重,这里采用对样本添加权重值的方式进行调整,首先采用默认的均衡调整。
本文中的案例不是着重给出一个正确率的预测模型,只是给出使用机器学习建模的一般流程。
分为两大部分:数据处理和模型学习
第一部分需要大量的街舞知识对原始数据进行清理及特征提取
第二部分模型学习,涉及长时间的模型参数调整,调整方向和策略需要根据经验来灵活调整。
当模型效果不理想时,可以考虑的调整策略:
1、调节正负样本的权重参数wps免费版下载的地方。
2、更换模型算法。
3、同时几个使用模型进行预测,然后取去测的最终结果。
4、使用原数据,生成新特征。
5、调整模型参数
★至此,本文已经将客户贷款预测案例简单讲解完毕,希望各位读者能从文中真正的学到一些东西,最重要的还是面对不同案例时候灵活的应用所知所学,感谢阅读!