学习目标:
TASK1: 赛题理解
by GXWgdut
学习时间:2021.4.21
学习产出及学习内容:
-
学习知识点概要
-
赛题概况:
-
主题:金融风控-贷款违约预测
-
目标:利用给定的数据集,建立模型,来预测未来贷款违约的概率
-
-
训练数据集概况
-
预测指标:
-
竞赛采用AUC作为评价指标
-
-
赛题分析
-
赛题流程
-
-
学习内容
- 赛题概况:
- 目标:
- 利用给定的数据集,建立模型,来预测未来贷款违约的概率
- 训练数据集属性分析:
- 训练数据集:train.csv (csv文件)
- 说明数据集列的性质特征,了解列的性质会有助于我们对于数据的理解和后续分析。 Tip:匿名特征,就是未告知数据列所属的性质的特征列
- 列性质分析: # 可以在jupyter上利用训练数据集来可视化单个或多个列与违约的关系
- id 为贷款清单分配的唯一信用证标识 # 主键
- loanAmnt 贷款金额 # 应该有较大关系,较大的金额可能需要较大的还款能力
- term 贷款期限(year)
- interestRate 贷款利率
- installment 分期付款金额
- grade 贷款等级
- subGrade 贷款等级之子级
- employmentTitle 就业职称
- employmentLength 就业年限(年)
- homeOwnership 借款人在登记时提供的房屋所有权状况
- annualIncome 年收入
- verificationStatus 验证状态
- issueDate 贷款发放的月份
- purpose 借款人在贷款申请时的贷款用途类别
- postCode 借款人在贷款申请中提供的邮政编码的前3位数字
- regionCode 地区编码
- dti 债务收入比
- delinquency_2years 借款人过去2年信用档案中逾期30天以上的违约事件数
- ficoRangeLow 借款人在贷款发放时的fico所属的下限范围
- ficoRangeHigh 借款人在贷款发放时的fico所属的上限范围
- openAcc 借款人信用档案中未结信用额度的数量
- pubRec 贬损公共记录的数量
- pubRecBankruptcies 公开记录清除的数量
- revolBal 信贷周转余额合计
- revolUtil 循环额度利用率,或借款人使用的相对于所有可用循环信贷的信贷金额
- totalAcc 借款人信用档案中当前的信用额度总数
- initialListStatus 贷款的初始列表状态
- applicationType 表明贷款是个人申请还是与两个共同借款人的联合申请
- earliesCreditLine 借款人最早报告的信用额度开立的月份
- title 借款人提供的贷款名称
- policyCode 公开可用的策略_代码=1新产品不公开可用的策略_代码=2
- n系列匿名特征 匿名特征n0-n14,为一些贷款人行为计数特征的处理
-
isDefault 是否违约 # 关键值
-
预测指标:
- 主要指标ROC、AUC、KS
-
对于金融风控预测类常见的评估指标如下:
-
KS(Kolmogorov-Smirnov) KS统计量由两位苏联数学家A.N. Kolmogorov和N.V. Smirnov提出。在风控中,KS常用于评估模型区分度。区分度越大,说明模型的风险排序能力(ranking ability)越强。 K-S曲线与ROC曲线类似,不同在于
- ROC曲线将真正例率和假正例率作为横纵轴
- K-S曲线将真正例率和假正例率都作为纵轴,横轴则由选定的阈值来充当。 公式如下:
𝐾𝑆=𝑚𝑎𝑥(𝑇𝑃𝑅−𝐹𝑃𝑅)KS=max(TPR−FPR)
KS不同代表的不同情况,一般情况KS值越大,模型的区分能力越强,但是也不是越大模型效果就越好,如果KS过大,模型可能存在异常,所以当KS值过高可能需要检查模型是否过拟合。以下为KS值对应的模型情况,但此对应不是唯一的,只代表大致趋势。 - KS<20% 表示模型拟合较差不建议采用
- 20% <= KS <= 75% KS越大表示模型拟合越好
- KS > 75% 表明拟合过于高可能存在问题
-
- 流程分析:
- 数据EDA
- 特征工程
- 建模调参
- 模型融合
- 数据的读取基本流程(基于天池DSW平台)
- 导入数据读取模块 pandas库
-
import pandas as pd # as pd 可以使我们在后续代码利用简写pd来代替pandas调用
-
读取数据:
-
下载到dsw本地,速度快
-
通过网址超链接直接读取,不占用dsw内存,速度慢
-
# 方法一:直接下载到dsw本地,这样的好处是后面数据读取会快点,但是直接下载到本地会占用比较多的内存 # 下载测试数据集 41.33mb # !wget http://tianchi-media.oss-cn-beijing.aliyuncs.com/dragonball/FRC/data_set/testA.csv # 下载训练数据集 166.77mb # !wget http://tianchi-media.oss-cn-beijing.aliyuncs.com/dragonball/FRC/data_set/train.csv # (推荐)方法二:直接读取链接数据,这样的好处是不占dsw内存,但是读取速度相对会比较慢点 train = pd.read_csv('http://tianchi-media.oss-cn-beijing.aliyuncs.com/dragonball/FRC/data_set/train.csv') testA = pd.read_csv('http://tianchi-media.oss-cn-beijing.aliyuncs.com/dragonball/FRC/data_set/testA.csv') # 调用pandas库读取csv格式的文件 train = pd.read_csv('train.csv') testA = pd.read_csv('testA.csv')
-
-
训练集和测试集数据简单查看与分析
-
print('Train data shape:',train.shape) print('TestA data shape:',testA.shape) # Train data shape: (800000, 47) # TestA data shape: (200000, 46) # 训练集有800000条,47个属性....
-
train.info() # 发现部分数值残缺 count < 800000 <class 'pandas.core.frame.DataFrame'> RangeIndex: 800000 entries, 0 to 799999 Data columns (total 47 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 id 800000 non-null int64 1 loanAmnt 800000 non-null float64 2 term 800000 non-null int64 3 interestRate 800000 non-null float64 4 installment 800000 non-null float64 5 grade 800000 non-null object .......... 44 n12 759730 non-null float64 45 n13 759730 non-null float64 46 n14 759730 non-null float64 dtypes: float64(33), int64(9), object(5) memory usage: 286.9+ MB
-
train.head() 可以查看前几条数据
-
- 目标:
- 赛题概况:
-
-
学习问题与解答
- 问题
- 模型评价分析是否是提交后看得分,还是的自己计算AUC或KS
- 如何使train.head() 完全显示属性值 // 属性字段过长会被省略
- 解决
- pd.set_option('display.max_columnse',30) #设置显示的最大列数,同时,也可以根据需要通过set_option函数设置其他的属性
- 问题
-
学习思考与总结
- 思考
- 拟合标准是要以最终与真实数据测试集的isDefault相匹配程度高为主,还是以KS指标为主
- 每个字段属性的重要性,权重应该如何解决
- 总结
- 赛题理解是开始比赛的第一步,赛题的理解有助于对竞赛全局的把握。通过赛题理解有助于对赛题的业务逻辑把握,对于后期的特征工程构建和模型选择都尤为重要。
- 在开始比赛之前要对赛题进行充分的了解
- 相似比赛优秀经验博客代码借鉴
- 了解比赛使用的是什么评价指标,可以选择相同的评价指标作为线下验证的方式
- 思考