机器学习在目前数字金融领域具有重要的地位,因此学习各类ML方法对于解决金融识别、信用评估、政策判断有很大的帮助作用。本文是我偶然间发现Kaggle上最新的一个dataset,基于此贷款数据loandata进行了相关的Python操作,利用随机森林的集成方法解决金融政策判断的问题,同时进行了调参优化(无手撕推导 非算法)。
研究内容 | 软件 | 日期 |
---|---|---|
机器学习;随机森林;调参 | Python3 | 2021年7月25日 |
一、数据背景
我之前利用Modeler完成了一个关于信贷风险的贝叶斯神经网络建模项目。【链接:SPSS Modeler:贝叶斯网络在预测银行信贷风险中的应用】该项目也是应用为主,对于机器学习原理没有过多介绍,因此在特定情况下调参优化会成为一个难题。本次项目我选择从Python出发,利用sklearn机器学习撸代码解决类似的问题。
关于数据:这个贷款数据是我在kaggle挑选的最新的一个数据集,它是来自LendingClub.com 的公开数据。该俱乐部将需要钱的人(借款人)与有钱的人(投资者)联系起来。有希望地,作为投资者,您希望投资那些表现出很有可能回报您的人。我将使用 2007-2010 年的贷款数据,并尝试对借款人是否全额偿还贷款进行分类和预测。该数据集共14个字段,9600条记录,字段描述如下所示:
target是credit policy,如果客户符合LendingClub.com的信用承保标准,则为1,否则为0。本身这是一个针对因变量为0-1二元选择的一个求解问题,我们可以参考两种思路,一种是进行逻辑回归,把他当做一个寻找回归器regressor的问题,当然最优解还是把他当做二元的分类问题寻找一个classifier。
最后,以下是该数据集部分的一个简单概览,准备动手吧!
二、数据准备与特征选择
首先数据导入并导一些简单的数据操作包。
#1.导包 数据准备
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
data = pd.read_csv("D:\\py\\loan_data.csv")
接着进行数据清洗,我们可以发现purpose是目的是一个分类别的字段,要用分类器则将6个类别转化为数字1-6。导入编码包encoder进行编码。
#2.数据清洗
from sklearn.preprocessing import LabelEncoder
data['purpose']= LabelEncoder().fit_transform(data['purpose'])
再进行描述性统计,查看数据的基本情况,如缺失、分布、类别等。
#3.描述性统计及相关性分析
data.info() # 展示data的概览信息 无缺失值
data.describe() # 展示data描述性统计
均已转化为整型或者浮点了,并且无缺失值可以直接开始特征选择。
查看数据的相关性,寻找相关性高的变量予以剔除。(注:本步骤其实进行了很多次调整,不是简单的因为fico与int.rate的高相关性而删除了int.rate变量)
data.corr() #相关性显示fico 和 int.rate 相关性0.7较高,模型中考虑删除某项
figure, ax = plt.subplots(figsize=(12, 12))
sns.heatmap(data.corr(), square=True, annot=True, ax=ax)
plt.show()
可以看出0.71属于一个高相关性,对这两个变量需要进行取舍,中间进行了逻辑回归并且验证了向后剔除法是去掉rate变量后更优因此后续删除了该变量获得最终结果。x3为输入的自变量字段,y3为target。
#4.删除int.rate以后 继续优化
data_del2 = data.drop('int.rate', axis =