任务要求:
本项目的背景为某互联网贷款网站提供的贷款人的个人信息,通过建立模型来预测新来了一个人银行是否对他进行放贷并评估模型的效果。
大致思路:
本项目的数据量很大且非常冗余,因此先进行数据预处理,对数据进行清洗,然后采用逻辑回归模型预测是否要对某人房贷,模型的建立比较简单,关键是在评估模型效果的时候发现效果很一般,通过数据增强效果也没有好太多,于是换成集成森林模型来评估,发现集成森林和逻辑回归模型的效果差不多。
代码详解:
1.数据预处理
1.1删除无用的列
通过观察数据,发现数据量是非常庞大的,特征列数量的庞大,导致我们不可能将所有特征都作为模型的划分依据,必然有一些特征是不重要的,对模型结果影响较小的,我们可以去掉这些特征,减少模型计算量。
import pandas as pd
loans_2007=pd.read_csv('C:\Anaconda\machine-leaning-data\loan-maxx\loans_2007.csv') #读取数据,由于第一行是列名,所以跳过
loans_2007.drop_duplicates()
print(loans_2007.iloc[0])#看一下第一行内容
print(loans_2007.shape[1])#看一下列数
#将没用的列给删掉
loans_2007 = loans_2007.drop(["id", "member_id", "funded_amnt", "funded_amnt_inv", "grade", "sub_grade", "emp_title", "issue_d"], axis=1)
loans_2007 = loans_2007.drop(["zip_code", "out_prncp", "out_prncp_inv", "total_pymnt", "total_pymnt_inv", "total_rec_prncp"], axis=1)
loans_2007 = loans_2007.drop(["total_rec_int", "total_rec_late_fee", "recoveries", "collection_recovery_fee", "last_pymnt_d", "last_pymnt_amnt"], axis=1)
print(loans_2007.iloc[0])
print(loans_2007.shape[1])
1.2将贷款状态变为01二分类
print(loans_2007['loan_status'].value_counts())
由输出就可以看到,贷款状态只有Fully Paid,Charged Off是明确的,其余参数不明确,也不知道银行到底贷没贷款,所以这个结果就可以变为一个二分类问题,Fully Paid代表已放款为1,Charged Off代表拒贷为0。所以用字典将这两种状态给替换成0/1,代码如下:
#取出拥有这两个属性的行
loans_2007