kaggle竞赛 - Home Credit Default Risk金牌心得

转自:知乎 https://zhuanlan.zhihu.com/p/43323121

正文

最优单模已在kaggle分享,本地CV为7993,线上最终的私榜成绩为7996,我们最终融合的成绩为8012,欢迎大家帮我在kaggle点赞。https://www.kaggle.com/xucheng/cv-7993-private-score-7996/

刚刚结束了kaggle竞赛Home Credit Default Risk,在长达2个月的不懈努力下,终于拿到了kaggle的第一块kaggle金牌(23/7265)。18年初拿下toxic第一块银牌,随后拿下了talkdata的银牌和如今home credit的金牌,6个月时间master成就快速达成。哈哈,自我陶醉下,好了,接下来分享一下home credit的参赛心得吧。

home credit在7月的争夺战中曾经一度爬上了榜首,但最终因为本身实力不足,8月里PB未能有任何提升,最终掉至23位。好了,废话到此打住,现在说说本文的宗旨:数据驱动下的Home Credit Default Risk。

一、比赛简介

因为在知乎的专栏写的文章,所以我谷歌翻译了下,感兴趣的朋友可以直接点这阅读原文。比赛目标就是预测一个用户的违约概率。

二、比赛的数据

HOME CREDIT一共提供了7张表,一共218个字段,细心的队友对这些字段进行了翻译,但是这些字段的含义,直到比赛结束我仍然是不明不白的。通过模型输出的重要性,依稀可以分辨出哪些字段对于预约逾期特别重要,但是始终没有一个清晰的认识。真正的风险控制专家肯定明白各个字段的真正含义,以及它对于客户的违约概率意味着什么。创建模型肯定也是从业务经验出发,提取更多业务上可解释的特征。

数据科学真正强大的地方也正是如此,让一个业务小白从数据出发,最终的模型也能达到一个业务专家的业务水平。

三、如何快速达成比赛

优秀的可扩展的代码框架

kaggle是一个相对于国内更OPEN的社区平台,每次比赛都有kaggler提供优秀精巧的开源代码,因此在无任何业务经验的大前提下,有一个优秀的可扩展的代码框架,无疑可以达到事半功倍的效果,本次比赛我是从一个开源的PB成绩0.774的代码框架开始做的,这份代码让我了解到了以下几件事情:

1、哪些特征的重要性非常高,比如说EXT_SOURCE_1~EXT_SOURCE_3、AMT_ANNUITY、AMT_CREDIT等,因此下意识的工作自然是对于这些TOP特征做一些交互的操作,比如说比值,乘积等,看是否能交互出更优秀的特征。

2、接下来的工作,我该从哪里出发,开源的代码提炼的特征虽然不多,但是框架搭的特别棒,一些开源代码未做的特征统计,可以在这个基础上进一步尝试,看线上反馈带来的效果。

通过这些尝试,你的模型在评价效果上将会有一个大幅度的提升。

更多维度的尝试

时间维度的尝试:HOME CREDIT中期的一个提升,就来源于在时间维度的尝试,这个其实也非常容易理解,对于客户的近期行为和远期行为,对于客户违约逾期肯定有着不同的影响,在各张表上都进行了30天、90天、120天、365天不同时间段的数据统计。

行为次数维度的尝试:部分表在行为次数维度上进行了尝试,比如最近5次,10次,15次的行为数据的数据统计,2种维度的统计方法进行了混用,最终选择了一套在PB上表现更优秀的划分策略。

但是随之而来也引入了一个问题,就是特征的共线性问题,通过对特征的共线性统计,存在大量的相关系数为1的特征,虽然LIGHTGBM对于共线性特征不是特别的敏感,但是去掉共线性特征后,PB有一定程度的提升。

数据驱动的模型,这应该是一个必然的过程,因为对特征字段的不了解,盲目暴力的引入特征,导致特征共线性严重,这样的特征在LR或者SVM模型下,表现必然是一塌糊涂,好在干部(XGB,LGB)系列的模型拯救了我们。

更细致的调整参数

通过测试发现,开源模型的参数和自己调优的模型参数,在本地CV上存在相当大的差异,可乐大佬提供的模型参数,CV表现上比原始参数高4个千分点,以往的比赛中往往更注重特征的提取,但是在KAGGLE这样竞争异常激烈的比赛中,显然只怼特征是远远不够的,这也从侧门反映了团队作战的好处。

特征字段的交互

对于一些多个表中都存在的字段,我尝试进行了一些交互操作,因为并不真正了解字段的含义,因此也是采用了暴力测试的手段,因此一不小心又整了一大堆特征出来,最后从中选择了一些特征重要性比较高的特征,但是自己也无法理解暴力交互出来特征的业务含义。最终特征数量在3200个左右,基本是自己这台联想启天商务机的极限了。

STACK,kaggle比赛的屠龙技

Kaggle比赛想要达成更优秀的结果,stack这步操作是离不开的,因为不同模型的侧重点各有不同,通过STACK的操作,可以有效的提升模型的得分,这次比赛我们采用了常规的stack操作,这里就不在赘述了。

运气

本次比赛开榜后震动非常大,金牌区可以说是大洗牌,最终我们能挂在金牌区边缘拿下金牌,运气自然是非常重要了,感谢来自超越妹妹的祝福。

 

 

博主笔记

1.发现大部分东西都是基本套路,可以发现一个master或者说比赛得奖,其实就是在于用心和坚持,他是在公开区用的别人的代码为基地开始做提升[从开源的别人搭好的框架开始,能事半功倍]:

(1).从源码中重要度高的特征里面做了变换,这些TOP特征做一些交互的操作,比如说比值,乘积等,看是否能交互出更优秀的特征(尝试)

(2).做一些开源没做到的统计特征,还会有提升(有提升)。

(3).时间维度特征的尝试,在各张表上都进行了30天、90天、120天、365天不同时间段的数据统计(尝试 且有提升)

(4).行为次数维度的尝试:在行为次数维度上进行了尝试,比如最近5次,10次,15次的行为数据的数据统计,2种维度的统计方法进行了混用[时间和行为],最终选择出一套在PB上表现更优秀的划分策略 (大量方式尝试,有提升,很费劲、费事的)

2.对特征的进一步处理:

(1) 造出的大量特征之间共线性的问题,去除共线性高得特征,记住没用的、冗余的特征会干扰模型,影响模型结果[lgb同样会被影响]。 (共线性问题是在对特征字段不了解情况下,盲目一套走,引入大量特征的附带的大问题,这样的有高共线性的特征对于LR或者SVM势必有非常大的影响)

(2) 特征筛选问题,这里他直接使用了特征重要度高的特征,我认为他在说的是 用模型做筛选,通过暴力做特征[各种交互、统计]这样,得到了好几千特征,最后确定下来做了一些筛选,特征数量在3200左右吧。

3.模型上应该是用了树模型方案,加Stacking融合就ok了。 多模型融合会有所进一步的提升,方法上没任何创新。

 

可以看出关键词:暴力造特征[统计、交互、时间、行为次数(其实相似问题的比赛,对这种特征套路都有很明白的揭露)]、去除共线性、特征筛选【如何从大量特征中提取有效的强特,这是很重要的问题】、Stacking。

 

  • 7
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值