1.项目背景
问题是要求对用户贷款是否会违约进行预测,是一个二分类问题,评价指标是AUC,一共有8个数据集,包括1个主训练集,1个测试集和6个辅助信息表,主训练集特征主要有用户的个人属性,包括用户的性别,职业,是否有车,是否有房,房子面积等基本信息,辅助信息表包括用户的历史申请信息,历史账户余额信息,分期付款信息,信用卡信息,信用局信息和在信用局上的额度信息。这些表之间可以通过一些特定键相连接。我认为我做这个项目最大亮点主要是在理解业务的基础上,对特征进行了比较深的挖掘,做出质量比较好的特征工程。
2. 项目流程
第一步是对数据做一些可视化分析,探索数据集,目标主要是两点,第一点是对数据集中的缺失值、异常值进行探索,为后面的数据处理做准备。第二点是探索违约用户和非违约
用户特征的分布情况,建立违约用户的基本画像,理解数据为后面的特征工程做基础。
3.数据可视化+数据清洗
首先是对缺失值的探索,在这里我先查看了不同特征的缺失分布情况,缺失度最高的列是74%,因为选择的模型是
lgb模型,可以自动对缺失值做出处理,所以这里我没有对缺失值做一些填补操作,在缺失值探索中,我发现很有
意思的一点是有一些特征它们的缺失度是完全一样的,并且发现这些特征都是用户的房屋信息,由此我猜测这些
值的缺失是有规律的,用户可能是没有房屋才会缺失房屋相关的信息,由此我做出了一个新的特征,一个是房屋
信息有缺失的用户,一个是房屋信息没有缺失的用户,经验证这个特征是对预测有区分度的,房屋信息有缺失的
用户违约率更高然后是对异常值的观察,比如在雇佣时间这一列特征里,有些用户的雇佣时间显示超过了100
年,这明显是不合理的,我的理解是这些值可能实质上是缺失值,所以就将其替换成nan。
在数据质量做完探索后,我再对违约用户和非违约用户的特征分布做了一些探索,对违约用户的画像有了一个基
本的概念,比如男性比女性更容易违约,年纪小的人比年纪大的人更容易违约,住在城市以外的人要比住在城市
里的人更容易违约等等。
4.特征工程
在对数据清洗完毕后是做特征工程,我是主要是从两个角度来对违约用户的画像进行刻画,一个是用户的个人信
息特征,包括用户的收入,职业,是否有车,是否有房等这么一些基本信息特征。第二个角度是从用户的行为出
发,衡量用户是否是一个具有高风险倾向的人
基于上面两个思路,首先在个人信息这里,除了用户基本的年龄等信息外,我从辅助数据集里还增加了一些统计
特征,比如说通过征信数据可以知道用户在不同金融机构的开户时间,我计算了用户的平均信用历史时间长度,
这个时间越长说明用户具有越长的信用记录,其违约的可能性就越小。
在用户行为特征的角度,我也增加了一些新的特征,比如说用户申请的金额和他年收入的比值,这个比值越高说
明用户在申请高于其年收入的贷款,贷款很有可能会超出他的还款能力,违约的概率可能就比较高。
最终在做完特征工程后,我使用lgb模型进行建模预测
数据一共有122列,有67列存在缺失情况,最高缺失值的列缺失度为69.9%,对缺失值的处理在房价预测案例中已经提到过,对于缺失值的处理一是我们可以采用XGBoost这种能够自动处理缺失值的模型,这样我们就无需处理缺失值。二是可以进行填补,三是可以对缺失值较高的列直接删除这里有一点大家注意,可以发现前面的几列特征缺失度的都是一样的,并且它们都是属于房屋信息,根据这个规律我们可以猜测用户缺失房屋信息可能是因为某种特定原因导致的,而不是随机缺失,这点我们会在后面的特征工程用上。
异常值探索
对主训练集进行一些异常值的探索,这次异常值探索,我们采取最简单的描述统计的方法,即查看特征的均值、极大值、极小值等信息判断是否有异常值
查看用户年龄的数据分布情况(因为数据中,年龄的数值是负数,反映的是申请贷款前,这个用户活了多少天,所以这里我除了负365做了下处理),发现数据的分布还是比较正常的,最大年龄69岁,最小年龄20岁,没有很异常的数字
查看用户的工作时间分布情况发现(同样工作时间也是负数,所以我除了负365),最小值是-1000年,这里
的-1000年明显是一个异常数据,没有人的工作时间是负数的,这可能是个异常值
看一下用户受工作时间的数据分布情况,发现所有的异常值都是一个值,365243,对于这个异常值我的理解是它
可能是代表缺失值,所以我的选择是将这个异常值用空值去替换,这样可以保留这个信息,又抹去了异常值,替
换之后我们再看一下工作时间的分布情况,正常了很多
违约用户画像探索
这部分分析的目标主要是查看违约用户和非违约用户的特征分布情况,目标是对违约用户的画像建立一个基本的
了解,为后续特征工程打下基础。比如数据集里面有很多字段,包括性别、年龄、工作时间等等,那么是男性更
容易违约还是女性?是年龄大的人更容易违约还是年龄小的人?查看这些数据的话,可以帮助我们对数据有更好
的理解。这也是和数据分析的业务紧密相关的部分。
先作图:
首先来看一下男性和女性用户的违约率情况,发现男性用户违约率更高,男性用户违约率为10%,女性为7%
下面我们再来看一下违约用户和正常用户的年龄分布情况,因为年龄是连续型变量,和性别不同,所以我们使用分布图去看年龄的分布情况,通过数据分布我们可以看到,违约用户年轻用户分布更多,所以我们可以推断的结论是用户年龄越小,违约的可能性越大
我们可以对用户的年龄进行分捅,进一步观察观察不同年龄段用户的违约概率,发现确实是用户年龄越小,违约的可能性越高
再来看一下不同贷款类型的违约率情况,对于现金贷款和流动资金循坏贷款,现金贷款的违约率更高
看下用户有没有房和车对违约率的影响,发现没有车和房的人违约率更高,但相差并不是很大
从家庭情况看,申请的用户大多已经结婚,单身和世俗结婚的违约率较高,寡居的违约率最低
看一下子女信息,大部分申请者没有孩子或孩子在3个以下,孩子越多的家庭违约率越高,发现对于有9、11个孩子的家庭违约率达到了100%(和样本少也有关系)
根据申请者的收入类型区分,可以发现休产假和没有工作的人违约率较高,在35%以上,对于这两类人群放款需较为谨慎
从职业来看,越相对收入较低、不稳定的职业违约率越高,比如低廉劳动力、司机、理发师,而像会计、高科技员工等具有稳定高收入的职业违约率就较低。
贷款申请人受教育程度大多为中学,学历越低越容易违约
特征工程
接下来我们通过对特征的一些理解,尝试做出一些新的特征
CREDIT_INCOME_PERCENT: 贷款金额/客户收入,预期是这个比值越大,说明贷款金额大于用户的收入,用户违约的可能性就越大
ANNUITY_INCOME_PERCENT: 贷款的每年还款金额/客户收入,逻辑与上面一致
CREDIT_TERM: 贷款的每年还款金额/贷款金额,贷款的还款周期,猜测还款周期短的贷款,用户的短期压力可能会比较大,违约概率高
DAYS_EMPLOYED_PERCENT: 用户工作时间/用户年龄
INCOME_PER_CHILD:客户收入/孩子数量,客户的收入平均到每个孩子身上,同样的收入,如果这个人的家庭很大,孩子很多,那么他的负担可能比较重,违约的可能性可能更高
HAS_HOUSE_INFORMATION : , 这里我们根据客户是否有缺失房屋信息设计一个二分类特征,如果未缺失的话是1,缺失的是0
看一下通过缺失值设计的这个特征,通过下图我们可以看到,缺失房屋信息的用户违约概率要明显高于未缺失用户,这在模型的预测中可以算是一个比较有效的特征了
最后,利用现有的主数据集先进行一次建模预测,模型的话选择是LGB模型
这部分代码过长,我放在了腾讯文档中:【腾讯文档】银行信贷风险相关代码
https://docs.qq.com/doc/DZVJER3VFR0Nja2tG
通过使用 LGM 模型在主训练集上进行建模预测结果可以看出,贷款的还款周期、三个外部源数据标准化分数、用户年龄等特征变量对于预测用户违约率较为重要,外部源数据标准化分数在特征描述表中未做过多描述。