竞赛地址:https://tianchi.aliyun.com/competition/entrance/531830/information

一、简介

1.1 赛题描述

赛题以金融风控中的个人信贷为背景,要求选手根据贷款申请人的数据信息预测其是否有违约的可能,以此判断是否通过此项贷款,这是一个典型的分类问题。

1.2 比赛评估

提交结果为每个测试样本是1的概率,也就是y为1的概率。评价方法为AUC评估模型效果(越大越好)。

为了更好地理解AUC值,先说下ROC,以下是ROC曲线,

  • 横坐标:1-Specificity,伪正类率(False positive rate, FPR),预测为正但实际为负的样本占所有负例样本的比例;
  • 纵坐标:Sensitivity,真正类率(True positive rate, TPR),预测为正且实际为正的样本占所有正例样本的比例。

AUC (Area Under Curve) 被定义为ROC曲线下的面积,

1.3数据描述

该数据来自某信贷平台的贷款记录,总数据量超过120w,包含47列变量信息,其中15列为匿名变量。为了保证比赛的公平性,将会从中抽取80万条作为训练集,20万条作为测试集A,20万条作为测试集B,同时会对employmentTitle、purpose、postCode和title等信息进行脱敏。

二、描述性分析

1、读取数据

2、查看数据特征类型

data.info()

根据数据类型划分为类别变量和数值变量,方面后续的分析;

category_features = ['grade', 'subGrade', 'homeOwnership','verificationStatus','issueDate','purpose','postCode','regionCode','initialListStatus','applicationType','earliesCreditLine','title','policyCode']
numerical_features = ['loanAmnt', 'term','employmentLength','interestRate', 'employmentTitle','installment','annualIncome', 'dti','delinquency_2years', 'ficoRangeLow','ficoRangeHigh', 'openAcc', 'pubRec', 'pubRecBankruptcies', 'revolBal', 'revolUtil', 'totalAcc']
anonymity_features = ['n0', 'n1', 'n2', 'n3', 'n4', 'n5', 'n6', 'n7', 'n8','n9', 'n10', 'n11', 'n12', 'n13', 'n14']y_feature= 'isDefault'

3、查看目标变量的分布

从结果中显示,0和1的比例为8:2,即80%用户贷款有违约的,20%的用户贷款没有违约的;

三、特征工程

1、查看缺失特征及缺失率

结果显示,以上特征是存在缺失数值的,为了后面的建模,需要对缺失值进行处理。

2、处理缺失值

(1)对于不同类型的特征,每个特征中缺失率的大小来采取不同的填充方法;对于类别变量,并且缺失值较少的特征,可以使用众数来填充;

employmentTitle_fillna = data['employmentTitle'].mode().values[0]
data['employmentTitle'].fillna(employmentTitle_fillna,inplace=True)
title_fillna = data['title'].mode().values[0]
data['title'].fillna(title_fillna,inplace=True)
postCode_fillna = data['postCode'].mode().values[0]
data['postCode'].fillna(postCode_fillna,inplace=True)

(2)可以根据缺失值与其他特征的关系,根据某个特征进行分组汇总,使用每个组内平均值填充;比如employmentLength:就业年限(年,可以使用同就业职称的平均就业年限填充。

# 处理就业年限(年),<1年令其为0,大于10年令其为10;
data['employmentLength'].replace('< 1 year','0 year',inplace=True)
data['employmentLength'].replace('10+ years','10 year',inplace=True)
data['employmentLength'] = data['employmentLength'].apply(lambda x:float(str(x).split(' ')[0]))# 填充缺失值,使用同就业职称的平均就业年限填充
employmentLenght_fillna = data.groupby('employmentTitle')['employmentLength'].mean().reset_index()
employmentLenght_fillna.rename(columns={'employmentLength':'employmentLengthByTitle'},inplace=True)
data = pd.merge(data,employmentLenght_fillna,on='employmentTitle',how='left')
data['employmentLength'] = np.where(data['employmentLength'].isna(),data['employmentLengthByTitle'],data['employmentLength'])
data.drop(columns='employmentLengthByTitle',inplace=True)

(3)根据特征的现实经济意义填充。比如dti(债务收入比),同时annualIncome(年收入)和loanAmnt(贷款金额)可知,当dti为na值时,年收入为0,从经济含义是上看是由于无年收入导致债务收入比为na,从另一层面上也可以理解成债务收入比为无限大,但是无限大这数据不太符合实际应用,故这里只使用了债务收入比的最大值来填充缺失值。

(4)对于数值特征。可以使用均值填充。

3、处理分类变量

查看分类变量的数目和类别,对于数量较少的进行虚拟化处理,数量较多的进行分组处理;

4、概率密度函数--查看数值特征的分布

  • 检查数据是否满足正态分布:如果不满足则需要进行正态化处理;
  • 正态化的原因:一些情况下正态非正态可以让模型更快的收敛,一些模型要求数据正态(eg. GMM、KNN),保证数据不要过偏态即可,过于偏态可能会影响模型预测结果。
  • 对于严重右偏的数据可以通过log处理;

(1)峰度和偏度

  • 偏度系数等于0为正态,大于零为右偏(负偏),小于零为左偏(负偏);
  • 峰度系数等于3为正态,大于3为尖峰,小于3为平顶;
skewed_feats = data[numerical_features].apply(lambda x: skew(x.dropna())).sort_values(ascending=False)
kurt_feats = data[numerical_features].apply(lambda x: stats.kurtosis(x.dropna())).sort_values(ascending=False)
print("\nSkew and Kurtosis in numerical features: \n")
normal_metric = pd.DataFrame({'Skew' :skewed_feats,'Kurt':kurt_feats})
normal_metric

(2)概率密度函数--查看数值特征的分布

通过直方图和qq图查看数据的分布

sns.distplot(data['interestRate'] , fit=norm);# Get the fitted parameters used by the function
(mu, sigma) = norm.fit(data['interestRate'])
print( '\n mu = {:.2f} and sigma = {:.2f}\n'.format(mu, sigma))#Now plot the distribution
plt.legend(['Normal dist. ($\mu=$ {:.2f} and $\sigma=$ {:.2f} )'.format(mu, sigma)],loc='best')
plt.ylabel('Frequency')
plt.title('贷款的分布')#Get also the QQ-plot
fig = plt.figure()
res = stats.probplot(data['interestRate'], plot=plt)
plt.show()

四、建模与调参

1、构建基础模型

构建分类的基础模型,使用Gradient Boosting Classifier 、XGBoost、LightGBM作为基础模型

2、Simplest Stacking approach : Averaging base models

使用基本模型的预测值,进行投票决定最终预测结果。

3、Less simple Stacking : Adding a Meta-model

使用base model预测结果,并把预测结果作为meta model的输入

五、模型融合

常见的模型融合是指将多个不同的 Base Model 组合成一个 Ensemble Model 的方法。它可以同时降低最终模型的 Bias 和 Variance,从而在提高分数的同时又降低 Overfitting 的风险。

1、常见的ensemble算法

  • Bagging:使用训练数据的不同随机子集来训练每个 Base Model,最后进行每个 Base Model 权重相同的 Vote。也即 Random Forest 的原理。

  • Boosting:迭代地训练 Base Model,每次根据上一个迭代中预测错误的情况修改训练样本的权重。也即 Gradient Boosting,Adaboost 的原理。比 Bagging 效果好,但更容易 Overfit。

Bagging,Boosting二者之间的区别

(1)样本选择上:

Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。

Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。

(2)样例权重:

Bagging:使用均匀取样,每个样例的权重相等

Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大。

(3)预测函数:

Bagging:所有预测函数的权重相等。

Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。

(4)并行计算:

Bagging:各个预测函数可以并行生成

Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。

  • Blending:用不相交的数据训练不同的 Base Model,将它们的输出取(加权)平均。实现简单,但对训练数据利用少了。

  • Stacking:接下来会详细介绍。

stacking是一种分层模型集成框架。以两层为例,第一层由多个基学习器组成,其输入为原始训练集,第二层的模型则是以第一层基学习器的输出作为特征加入训练集进行再训练,从而得到完整的stacking模型。stacking的方法在各大数据挖掘比赛上都很风靡,模型融合之后能够小幅度的提高模型的预测准确度。

2、stacking的含义

stacking是一种分层模型集成框架。以两层为例,第一层由多个基学习器组成,其输入为原始训练集,第二层的模型则是以第一层基学习器的输出作为特征加入训练集进行再训练,从而得到完整的stacking模型。stacking的方法在各大数据挖掘比赛上都很风靡,模型融合之后能够小幅度的提高模型的预测准确度。

3、stacking的详细过程

假设Training data有10000行,test data有2000行,stacking的步骤如下:

对测试集的处理:

(1)将全部数据划分成training set 和test set,training set采用五折交叉验证,划分成5份数据;

(2)对每一折数据使用base model 五分之四的数据训练,五分之一的数据预测,记为a1,a2,a3,a4,a5,最终得到5列2000行的预测值;

(3)拼接上面5列数据,得到1列当前base model的预测,值(10000行);(a1,a2,a3,a4,a5)的转置

(4)假如有10个base model,就会得到10列10000行的预测值;

(5) 最后使用一个模型来训练这10列数据(把这10预测值当作训练数据);

对训练集的处理有两种方法,

  • 一种是上一步训练完成后,一次性预测Test data的;

  • 另一种方法是,对于每个base model每折训练完后,就对test data进行预测,得到b1,1个base model就会有5次的预测值,最终有b1,b2,b3,b4,b5,对这5列2000行的数据取平均值,得到1列数据。10个base model就有10列数据,用上一步最后训练的模型来对10列数据做预测,得到1列预测值

天池竞赛:金融风控-贷款违约预测相关推荐

  1. 【天池】金融风控-贷款违约预测(五)—— 模型融合

    [天池]金融风控-贷款违约预测(五)-- 模型融合 前言 内容介绍 stacking\blending详解 代码示例 总结 前言 [天池]金融风控-贷款违约预测(赛题链接). 上一篇进行数据建模和模型 ...

  2. 【天池】金融风控贷款违约预测task5

    [天池]金融风控贷款违约预测task5 task5学习总结: 1)简单平均和加权平均是常用的两种比赛中模型融合的方式.其优点是快速.简单. 2)stacking在众多比赛中大杀四方,但是跑过代码的小伙 ...

  3. 天池比赛-金融风控贷款违约预测

    一.赛题背景 以金融风控中的个人信贷为背景,要求根据贷款申请人的数据信息预测其是否有违约的可能,以此判断是否通过此项贷款.这是一个典型的分类问题,但也涉及一些金融的业务背景知识. 二.赛题数据 赛题以 ...

  4. DataWhale天池-金融风控贷款违约预测-Task01赛题理解

    目录 一.赛题概况 二.数据集介绍 三.预测指标 理解 通过ROC曲线评估分类器 最佳阈值点选择 一.赛题概况 本次新人赛是Datawhale与天池联合发起的0基础入门系列赛事第四场 -- 零基础入门 ...

  5. 阿里天池学习赛-金融风控-贷款违约预测

    阿里天池学习赛-金融风控-贷款违约预测 1 赛题理解 1.1 赛题数据 1.2 评测标准 2 探索性分析(EDA) 2.1 初窥数据 2.2 查看缺失值占比 2.3 数值型变量 2.3.1 数据分布 ...

  6. Datawhale学习笔记【阿里云天池 金融风控-贷款违约预测】Task2 数据分析

    阿里云天池学习赛[金融风控-贷款违约预测] 赛题数据及背景 python库的导入 国内镜像源网址及使用方法 镜像使用方法 文件读取 数据的总体了解 查看数据集中特征缺失值,唯一值等 检查缺失值 缺失值 ...

  7. 「机器学习」天池比赛:金融风控贷款违约预测

    一.前言 1.1 赛题背景 赛题以金融风控中的个人信贷为背景,要求选手根据贷款申请人的数据信息预测其是否有违约的可能,以此判断是否通过此项贷款,这是一个典型的分类问题. 任务:预测用户贷款是否违约 比 ...

  8. 1.天池金融风控-贷款违约预测新人赛之预备知识

    比赛链接:金融风控-贷款违约预测 因为这是一个金融风控专题的数据挖掘实战,在开始之前先引入一些预备知识. 1.预备知识 1.1预测指标 本次竞赛用AUC作为评价指标,AUC为ROC曲线下与坐标轴围成的 ...

  9. 阿里天池零基础入门金融风控-贷款违约预测文本处理

    阿里天池零基础入门金融风控-贷款违约预测文本处理 文本处理 日期处理 等级处理 就业年限处理 删除含有空值的行 数据归一化 踩坑 文本处理 日期处理 earliesCreditLine: 可以看到ea ...

  10. 基于机器学习与深度学习的金融风控贷款违约预测

    基于机器学习与深度学习的金融风控贷款违约预测 目录 一.赛题分析 1. 任务分析 2. 数据属性 3. 评价指标 4. 问题归类 5. 整体思路 二.数据可视化分析 1. 总体数据分析 2. 数值型数 ...

最新文章

  1. sharding-jdbc分库分表的 4种分片策略
  2. AdventureWorksBI.msi 和 AdventureWorksDB.msi 的官方下载地址及安装方法
  3. 在Mybatis-spring上基于注解的数据源实现方案
  4. CSDN Github Markdown编辑常用功能符号补充
  5. 【论文解读】DeepFM论文总结
  6. java 序列化 兼容_Java序列化 – java.io.InvalidClassException本地类不兼容
  7. C++面向对象编程之类的使用(从struct到class的进阶)
  8. 谷歌员工中位数年薪达 170 万元,却仍买不起房!
  9. 分析Linux 0.11中的kernel部分的makefile文件
  10. [转载] 抽象类中不能有static,final,private修饰的方法--姥姥家的程序员
  11. 五线谱音名和组别对照表_钢琴音区名称及琴键名称对照表
  12. linux 管道 减号,linux shell环境减号”-”的用途
  13. 阿里编程规范(精简版)
  14. ARM开发板开机自启
  15. windows7 配置php开发环境
  16. 对计算机系相关人物进行访谈,瑶湖计算机系副主任姚华访谈录
  17. VM虚拟机过检测全版本
  18. Chrome浏览器安装Adblock Plus插件拦截广告
  19. QualcommMTK平台lcd/tp调试及问题总结(一)----背光
  20. 应用层 DNS域名解析服务器 文件传送协议FTP 简单邮件传送协议SMTP 万维网 HTTP超文本协议

热门文章

  1. Python画美队盾牌
  2. 吃鸡路线(map最短路径)
  3. 2019:自我觉醒的一年
  4. raid功能中spanning和striping模式有什么区别?
  5. 开关电源-反激+单级PFC超低纹波超低THD
  6. 云原生一站式DevOps平台----云效
  7. excel里的一个单元格怎样拆分成几个单元格?
  8. 马云:2019年两大行业,会成就一批千万富翁!
  9. 前台、后台、前端、后端的区分
  10. 有哪些在深度模型添加黑盒水印的方法