玩过数据挖掘竞赛的同学应该听过stacking这种“大杀器”,它不是算法,而是一种模型的集成框架,通过集多个模型的长处来产生更好的结果。番茄风控将会在文章中介绍stacking的原理结构以及其在实际工作中的应用,并且会跟大家介绍相关的数据集来实操演示如何搭建一个基本的stacking框架。本次内容,干货十足,我们将会分成上下两部分别跟各位同学介绍这个内容。

本次总体内容,分享大纲如下:
Part1. stacking的原理及框架结构
Part2. stacking在实际工作中的使用分享
Part3. 实操演示搭建stacking框架
Part4. Stacking效果展示

今天跟大家介绍集成模型Stacking算法,以下为正文部分。
Part1. stacking的原理及框架结构
做stacking的目的是为了提升模型的预测效果,大家都知道,数据内部的空间结构和数据之间的关系是十分复杂的,而不同的算法对于挖掘数据关系的侧重点不一样:例如KNN关注样本之间的距离关系,决策树则更关注特征分裂前后样本的不纯度变化。
既然不同的算法观测数据的角度不同,那把它们都结合一下,相互取长补短,那对数据的挖掘能更加全面,预测结果能更好。stacking就是基于这个方法的一种集成策略。
stacking既然是对多个不同算法模型的融合,那它的搭建流程简单来说就两步,第一步做多个不同的模型,第二步用一种方法将它们的模型结果进行融合来输出最后的结果,相当于做两层结构。下面通过底下这张图来具体讲下它的运行过程:

首先我们有一份数据集,把它拆分成训练集(train)和测试集(test),另外我们要选择多种算法来做第一层结构的基模型,例如常用的xgboost,RandomForest,lightgbm,GBDT,LR,SVM等。

然后进行如下操作:
1)选择第一个基模型,将训练集分为不交叉的5份,标记为train1到train5
2)先用train5作为预测样本,将train1到train4作为训练样本建模,然后预测train5, 并保留结果,然后将train4作为预测样本,用train1,2,3,5来建模,预测train4,如此操作下去,直到把train1到train5都预测一遍,train1到train5的预测结果合并在一块就是训练集在基模型上的stacking转换,相当于一个新的特征。
3)在第二步中相当于建立了5个模型,这5个模型分别对测试集做预测,产生5个预测结果,然后将这5个结果取平均值,来作为测试集在基模型上的stacking转换。
4)选择第二个基模型,重复2-3的步骤,得到整个数据集在第二个基模型上的stacking
转换。这样的话有几个基模型就会生成几个新的特征。
5)上述1-4的步骤就是框架的第一层,第二层就是对新生成的特征再用一种算法进行训练预测,一般使用LR做第二层的模型,这样相当于对多个基模型做了融合。

从上述流程中可以看出stacking结果好坏取决于第一层框架,各个基模型要保证自身的效果要好。并且因为每个模型所用的数据和特征是一样的,那做第二层融合时可能就会出现过拟合,所以基模型不仅要效果好,之间的差异化也要大,追求“准而不同”,为了解决stacking的过拟合问题,第二层也倾向用LR这种简单的算法,另外在第一层中用了交叉验证来构造新特征,也可以有效避免过拟合。

Part2. stacking在实际工作中的使用分享
本次我们开发实操介绍stacking算法,借鉴了我们以往的项目基于支付信用分项目,借鉴了stacking这种框架思想,为大家详细讲解这个代码。
这个项目用到的是电商消费类和支付行为类的数据,这类数据由于是弱金融属性,在构建信贷预测模型时遇到的最大问题就是很多特征都是弱特征,我们先用LR做单模型,效果很差,再用xgboost做效果也不是很好,所以想到了用stacking这种方法来尽量提升模型的预测能力。
具体实现流程包括三个部分:线下stacking模型开发,线上stacking部署,后期模型监控。
1.线下stacking模型开发步骤:
1)设计模型框架,第一层用xgboost构建多个子模型,第二层用LR对子模型做融合。相比于传统stacking的不同之处是,第一层只用xgboost,而不是多种算法,另外传统stacking 中每个子模型用的特征都是一样的,但这里子模型之间用到的特征不同,所以子模型间的差异不是在算法上,而是特征上。
2)对特征进行分类,从特征背后的业务含义出发,将反映用户消费能力的特征归为一类,反映用户消费偏好的归为一类,每类特征单独做子模型,这样不仅可以让子模型之间做到差异化,也能提高子模型的业务可解释性。
3)构建第一层子模型,过程跟stacking一样,用交叉验证的方法生成新的特征,并且将预测结果转换为分数,这样就得到了反映用户不同维度风险的模型分,包括消费能力分,消费偏好分,消费稳定性分,支付风险分等。
4)第二层用LR对多个子模型分进行训练,并且要检查子模型分之间的相关性,保证子模型之间尽量是相互独立的,不会对最终模型的可解释性造成影响。
5)stacking与单模型效果的对比,跟LR单模型做比较,KS提升0.05左右,而跟xgboost单模型对比,KS提升0.02左右,说明stacking在实际应用中确实能提升模型效果。

  1. 线上stacking模型部署
    上线时需要部署两层模型,在部署第一层时遇到了一个问题,由于在构建单个子模型时使用了交叉验证,假如用了5折交叉,那生成一个子模型分是用到了5个模型,实际上线如果全部用这5个,上线的复杂度和后期维护成本太大,所以我们采取的方案是用全部的训练集(train)再生成一个模型。
    如果这个模型的预测值跟5个模型的平均值相差不大,说明这个模型可以综合代表交叉验证的5个模型。第一层输出并缓存各个子模型的分数,然后第二层再用LR输出最后的模型分。由于第一层子模型数量不是特别多,整个stacking框架的线上预测时间仍可控制在预期之内。
  2. 后期stacking的监控
    上线一段时间后,我们将stacking模型和xgboost单模型做了稳定性和效果的对比,在稳定性方面,由于stacking内部结构更加复杂,所以相比单模型会稍差一些,所以在后期模型迭代中,着重对每个子模型做了调优来保证第二层模型的稳定性。从线上效果来看,stacking模型的KS没有出现明显的下滑,且比单模型的效果要好。
  3. 对于stacking实际应用的一些思考总结:
    1)什么场景下适合用stacking
    数据量大且特征维度多,stacking不适合小的数据集。
    大量特征都是比较弱的特征,就像这里提到的项目一样,其实就是用stacking将一部分弱特征合成一个强特征。
    业务目的更加追求模型的预测能力,而不是可解释性。
    线上平台支持这种复杂框架的部署,并且框架的运算开销在预期之内。
    2)做stacking的一些注意点
    第一层基模型之间一定要体现差异化,要么在算法上,要么在样本和特征上。且每个基模型的效果要好,这样集成后的模型才会更加稳健和精准。
    Stacking层数不用过多,两层其实已经够了,多层的stacking会更突显过拟合问题,且带来的提升效果有限。最后一层适合用简单的线性模型。
    在构建第一层时,要保证基模型的CV稳定,如果基模型在CV和test上表现差异很大,就很可能出现问题。

Part3. 实操演示搭建stacking框架
实操的数据来自某项目现金贷数据集,我们预先做了清洗和处理。搭建的stacking有两层,第一层用各种集成算法来构建基模型,第二层用LR。
代码的运行过程(python):
1.导入各种算法包和数据

2.划分训练集和测试集

3.设定每个基模型的训练参数,这里的算法用到了xgboost,lightgbm,随机森林,极端随机树,catboost,adaboost,GBDT这7种算法。由于这些都是树模型,参数类似,所以每个算法的之间的参数值要体现差异性。

4.搭建第一层stacking的框架,这里采用K折交叉验证,每个基模型预测的结果都转换成模型分。

5.第一层stacking训练,生成新的训练集和测试集


6.第二层stacking训练,用LR做模型融合。并对新测试集做预测


Part4. Stacking效果展示
stacking模型与单模型的效果对比,我们拿算法性能不错的catboost进行比较,用KS作为评估指标,可以看到单模型catboost 测试集KS为0.372,stacking模型的KS为0.396,相比单模型提升了0.024 的KS。

本文中所涉及实操代码与数据集是本周,星球打榜赛的作业,各位要练手的童鞋请到番茄风控查收本次内容,本周我们将会公布答案,具体请看:

本次集成模型完整内容请看:

~原创文章

end

模型优化在风控中的运用(全)相关推荐

  1. 广告流量反作弊风控中的模型应用

    作者:vivo 互联网安全团队- Duan Yunxin 商业化广告流量变现,媒体侧和广告主侧的作弊现象严重,损害各方的利益,基于策略和算法模型的业务风控,有效保证各方的利益:算法模型可有效识别策略无 ...

  2. 一站式完成车牌识别任务:从模型优化到端侧部署

    交通领域的应用智能化不断往纵深发展,其中最为成熟的车牌识别早已融入人们的日常生活之中,在高速公路电子收费系统.停车场等场景中随处可见.一些企业在具体业务中倾向采用开源方案降低研发成本,但现有公开的方案 ...

  3. 【杂谈】有三AI秋季划火热进行中,如何深入学习模型优化,人脸算法,图像质量等研究方向...

    文/编辑 | 言有三 这是我们最后一次CV季划,关于春季划和夏季划的说明,大家可以阅读往期文章. 这个春天,有三最后一月的学习"季划"招生 最后24小时,有三AI夏季划报名即将截止 ...

  4. 推荐算法炼丹笔记:科学调参在模型优化中的意义

    作者:九羽 ,公众号:炼丹笔记 基于Embedding的推荐算法模型一直是近几年研究的热门,在各大国际会议期刊都能看到来自工业界研究与实践的成果.MF(Matrix Factorization)作为传 ...

  5. 智能风控中的全场景化的模型组合包括哪些内容

    近期某些网贷的广告,频上热搜,近有某东,远有某60,相信在大家的WX朋友圈更有大量"精彩"广告诱惑各位提前消费.于目前的政策而言,当下网贷行业的监管已达到最顶峰,网贷再也回不到巅峰 ...

  6. python 组合优化 回撤最小_【揭秘专业投资者的武器】经典组合优化模型 在行业资产配置中的应用示例...

    组合优化的目的在于给予高收益,低风险的标的更多的权重,来提高组合整体表现.策略里面大部分情况下都会默认平均持仓的方法,由于没有考虑各个标的风险的不同,标的之间的相关性,并未较好的解决鸡蛋在一个篮子里的 ...

  7. 清华优博论文丨物体检测中的特征构建与模型优化

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 摘 要:本文针对物体检测中的环境变化多样.物体尺度变化不一.搜索空 ...

  8. 【完结】如何学习AutoML在模型优化中的应用,这12篇文章可以作为一个参考

    文/编辑 | 言有三 自动化机器学习技术是非常重要的基础研究,也是如今深度学习模型优化中的热点方向,我们开辟了一个专栏,专门讲解AutoML在深度学习模型优化中的一些重要思路,本次来给大家进行总结. ...

  9. 风控中的EAD、PD与LGD模型都有啥区别?

    不论是金融机构的贷前评分卡.贷中评分卡跟贷后评分卡,在整个风险体系中其业务的落脚点,都有一个量化公式贯穿始中: 预期损失EL=PDEADLGD*F(m) ECL-风险敞口 PD-逾期损失 LGD-违约 ...

最新文章

  1. linux密码加密文件,Linux下加密/解密及用密码保护文件的七把利器
  2. time函数及其用法
  3. 5 网络层----IP协议相关技术
  4. 使用img.src跨域请求
  5. tga文件怎么打开_教你win10系统怎么打开stp文件
  6. 实现点击页面其他地方,隐藏div(vue)
  7. 2020年朋友圈十大谣言:包括蚊蝇可以传播新冠病毒等
  8. php可变方法,php 函数使用可变数量的参数方法
  9. ps_基础技术提升topic基础知识调研
  10. CYQ.Data 轻量数据访问层(七) 自定义数据表实现绑定常用的数据控件(上)
  11. 【Matlab】mat2cell用法
  12. 小米note2鸿蒙ROM,小米Note2官方原版系统rom线刷刷机包_小米Note2线刷官方包
  13. pytorch-cpn可视化标注信息
  14. Git 使用tag标签
  15. 慧数纵览:日产在华三大工厂将减产30,000辆
  16. HTTPS证书文件格式转换
  17. 从配置 Kivy、Buildozer 到 Android app 运行
  18. 《系统集成项目管理》第七章 项目范围管理
  19. 前端项目中使用百度地图api,含实例
  20. Apifox 学习笔记 - 前置操作

热门文章

  1. java求最大值时i的值_java 输入一组数组,求最大值。
  2. python3.7.3安装失败_python 3.7.3安装web.py报错解决方法
  3. 天翼网关3.0说明书_天翼网关3.0(tewa-708g)续
  4. mysql查询语句块_mysql查询语句
  5. convert.todatetime指定日期格式_java组件huTool日期DateUtil工具的使用
  6. win10 linux uefi启动不了系统安装教程,win10更新失败,提示硬盘布局不受UEFI固件支持如图,怎么解决?...
  7. 微型计算机的硬件系统普遍采用,2016年9月计算机一级《MS Office》考题与答案
  8. 事业编还是程序员_头条员工为不加班,降薪去事业单位,结果蒙了:还不如当程序员...
  9. eigrp配置实验_【实验】思科与华为的差别——路由的优选
  10. pytorch gather_【CV】10分钟理解Focal loss数学原理与Pytorch代码