手把手系列—风控模型的调参方法和实际应用

序言:
大数据时代的风控体系必有模型部分的参与,用策略贯穿整个风控体系,以数据为驱动,模型一定是标配内容。于是在模型的建设上,如何精细化地输出一套有效的模型,就是在精细化管理上非常重要的一个差异点。不管传统的逻辑回归也好,还是现在的机器学习也罢,总需要进行的就是模型的调参。如果说在番茄的星球社区中哪类问题最多?

关于风控模型的调参就是各位风控同学经常Q的问题,基于此,年前番茄风控再次输出干货文章:《风控模型的调参方法和实际运用》。

本文不仅有理论,有实操方法,更有数据集跟代码。此外在知识星球中更会手把手讲解具体的实操内容,包括数据展示(excel)、数据案例跟代码(python),基本一看就懂,一跑就会。

为了便于大家对风控模型的调参方法和实际运用进一步的进行参考与了解,在重要的调参上我们选择了目前常用的几类模型作为举例,详细跟大家讲解具体的调参步骤跟方法。本篇不仅仅有基于创作者的调参的介绍,更在最后一部分结合编程代码实现其数据逻辑跟分析过程。

因为完整内容较长,本次整体的内容将分成四大部分跟大家介绍,特别是第四部分,内容更会带领大家领略整个模型调参的内容,整体目录如下:

第一部分:调参前需要了解的内容
第二部分:风控模型常用算法和主要的参数介绍

1.随机森林
2.XGBOOST
3.Lightgbm

第三部分:实际工作中常用的调参方法

1.手动调参
2.半自动调参–网格搜索
3.半自动调参–随机搜索
4.全自动调参–贝叶斯优化
5.调参的两点建议

第四部分:实操–网格搜索和随机搜索调参

正文:
在风控建模的流程中,模型调参是非常重要的一步,我们通过调整算法的参数可以达到更好的模型效果。在调参过程中需要建模人员对算法和数据的理解,细致的分析能力,以及选择合适的调参策略。下面我们基于自身建模的经验,介绍下风控建模中调参的实际应用方法。

Part1.
调参前需要了解的内容
在讲具体的方法前,先抛出下面几个问题:
1)参数是什么?是调整哪些参数?
2)调参的目标是什么?每种参数对目标有什么影响?3)调参的流程大概是怎样的?
4)在调参中需要注意哪些地方?参数在机器学习指的是算法的"超参数",决定了模型结构/框架及算法行为,举个例子,决策树中的"最大树深度"就是一个超参数,它决定了树在生长过程中的层数,会影响到最终模型的预测结果。每种算法的参数我们需要去了解它的含义,取值范围,对模型性能的影响等,才能知道怎么去调整。另外算法中的参数可能很多,但并非所有的参数都同等重要,应该根据目标选择重要的参数来调整。调参的目标,或者说参数对模型效果有什么影响,有以下几点:1)模型分的分布,根据业务sens,我们希望调参后模型分呈近似的正态分布
2)模型分的最大KS,KS反映了模型的区隔能力,我们希望调参能使KS最大化
3)模型分的Lift排序性,在整体或者尾段,我们希望调参后模型有良好的排序能力调参的流程大致分为以下几步
1)确定使用的算法和调参目标
2)建立baseline模型,baseline类似实验中的对照组,后面调参后的模型就是改进版本,来打败baseline版本,baseline中的模型参数需要按经验来设置
3)确定要调整哪些参数,选择合适的调参策略
4)记录每轮调参的结果,最好能可视化的呈现和分析5)比较每组参数的训练结果,选择最好的一组参数来跟baseline版本做对比调参最需要注意的地方在于时间成本。数据规模的大小,参数组合的数量,参数的取值都会影响到调参训练的时间。风控建模的样本一般就几万到十几万,属于小规模样本量,但特征可能有几百维甚至几千维,数据规模越大,训练时间越长,大规模数据集一定要考虑调参耗费的时间。另外我们不可能穷尽所有的参数组合来达到全局最优解,要铭记参数只有更好,没有最好,参数组合数量和取值范围应控制在合理的范围内。总的来说,我们需要平衡模型的效果和调参耗费的时间成本。

Part2.
风控模型常用算法和主要的参数介绍
风控模型常用的算法有逻辑回归(LR),随机森林,xgboost,lightgbm等,其中LR属于线性回归,剩下的都属于集成算法。LR的参数很少,比较重要的一个参数在sklearn中叫"正则化系数"(C),这个参数值越小,正则化强度越大,即防止过拟合的程度更大,但经过我们的实际验证,这个参数对模型效果影响甚微,所以用LR训练时其实不用调参,用算法给的默认参数即可。相比之下集成算法的参数众多,这里我们挑出了主要的一些参数,介绍下参数的含义,对模型性能的影响和常见的取值范围(sklearn中)。并且将参数分为了性能类,效率类,附加类三种。

1.随机森林
随机森林是bagging算法的代表,使用了CART树作为弱分类器,将多个不同的决策树进行组合,利用这种组合来降低单棵决策树的可能带来的片面性和判断不准确性。随机森林一般调整n_estimators,max_depth,max_features,min_samples_split,min_samples_leaf这几个参数。
在这里插入图片描述
2.XGBOOST
xgboost是一种梯度提升的算法,用来解决分类和回归问题。它对GBDT进行了一系列优化,比如损失函数进行了二阶泰勒展开、目标函数加入正则项、特征粒度上支持并行计算和默认缺失值处理等。xgboost一般调整n_estimators,learning_rate,max_depth,min_child_weight,subsample,colsample_bytree这几个参数。
在这里插入图片描述
3.Lightgbm
lightgbm跟xgboost类似,也是一种梯度提升的算法,它相比xgboost的改进在于,训练速度和精度上的优化,以及可以处理类别型特征。lightgbm的很多参数和xgboost是一样的,主要对n_estimators,learning_rate,num_leaves,min_child_sample,subsample,colsample_bytree这几个进行调整。
在这里插入图片描述
Part3.
实际工作中常用的调参方法
通过以上内容的介绍,我们知道了调参的目标,参数的含义及对模型性能的影响,下面我们介绍下实际工作中常用的调参方法,根据自动化的程度,调参可分为手动调参,半自动调参和全自动调参,调参方法的选择要依据你的样本量,特征维度以及时间成本,后面会具体讲解。
1.手动调参手动调参非常依赖建模同学自身的经验,并且要求对数据和算法有深入的理解,具体的步骤为:1)依据经验对baseline版本模型设置参数,并进行模型训练
2)根据目标观察分析baseline的效果,确定影响效果的参数并对其进行调整3)调整后重新训练模型,再观察分析效果,直到调整后的模型满足预期目标举个例子,下面是lightgbm做出的baseline模型,参数组合为:learning_rate为0.05num_leaves为4min_child_samples为50subsample和colsample_bytree都是0.7early_stopping_rounds(早停次数)为10
在这里插入图片描述
从模型分的好坏用户分布图中看出,好用户的分布有凸起(红框所示),我们希望得到的是类正态分布,局部凸起对于整体的排序性会有影响,根据num_leaves只有4,早停次数为10,模型训练到49次就停止的结果,猜测有可能是因为模型训练的不够充分,导致局部欠拟合。我们试着调大num_leaves和早停次数看看,num_leaves改成8,早停改成30,得到下面分布的结果,可以看到凸起没有了,模型分布近似正态且线条顺滑,达到了预期目标。
在这里插入图片描述
手动调参的优缺点:优点在于时间成本低,比如刚才例子中调整一次就达到了目标,就像是医生看病一样,能对症下药,快速解决问题。缺点在于手动调参是人为驱动的,尝试的参数组合少,可能会错过好的参数组合,并且刚才也提到,这种方法门槛较高,新手不建议使用。

2.半自动调参–网格搜索
网格搜索是一种古老原始的调参方法,也是最常用的一种手段,该方法通过"穷举"搜索所有候选参数组合,根据模型评估结果找出表现最好的参数组合作为最终模型的入参。这里还涉及到搜索域的概念,搜索域即为参数的取值范围,例如我们对lightgbm中num_leaves和subsample进行调整,num_leaves搜索域为(4,6,8),subsample为(0.7,0.8,0.9),则网格的搜索次数为3X3=9次,所以随着取值个数和参数增多,搜索次数会呈指数级的增长。网格搜索的调参步骤为:
1)依据经验对baseline版本模型设置参数,并进行模型训练
2)根据baseline的效果确定要调整的参数和取值范围,这里也要依据对数据和算法的理解
3)循环遍历每种参数组合进行模型训练,跑出结果并观察分析
4)根据目标找出最好的一组参数来作为最终模型的入参网格调参的优缺点:优点在于可以尝试很多参数组合,能使模型效果尽量达到最优。缺点也显而易见,当参数组合和取值范围增加时,参数组合数会急剧增长,面对大数据集时会非常耗时,所以网格调参适用于中小规模数据集,且调整的参数不宜过多。

3.半自动调参–随机搜索
随机搜索相比网格搜索的优势在于它不是尝试所有参数组合,而是通过选择每一个参数的随机值来形成随机参数组合,搜索的次数人为来定,可以自由控制时间成本。这样的话参数的取值范围就可以扩大一些,也增加了获得最佳参数的可能性。不过缺点也是这种随机性会有很大概率漏掉好的参数组合。随机搜索的步骤和网格搜索类似:
1)依据经验对baseline版本模型设置参数,并进行模型训练
2)根据baseline的效果确定要调整的参数和取值范围,参数数量和取值范围可以扩大一些
3)设置随机搜索次数,跑出每种随机组合下的模型结果
4)根据目标找出最好的一组参数来作为最终模型的入参网格搜索和随机搜索在sklearn中有对应的包可以直接调用:from sklearn.model_selection importGridSearchCV(网格搜索)from sklearn.model_selection importRandomizedSearchCV(随机搜索)大家可以自己去了解一下如何使用,或者自己写代码实现(后面的实操中会做介绍)

4.全自动调参–贝叶斯优化
网格搜索需要人为指定参数的取值范围,随机搜索能随机探索最佳参数组合的可能性,而贝叶斯方法能够启发式的探索更优参数组合,此方法只需要给它一些观察点(参数,性能),就能根据观察的先验,指导参数进行组合,并权衡性能和时间成本,在这个过程中用到了贝叶斯的方法,所以叫做贝叶斯优化。假设x是参数组合,y是我们的目标,如果模型训练很快,我们可以穷举所有的x来找到最优的y,但实际上模型训练的代价是昂贵的,我们要充分利用已经尝试过的(x,y)结果,来给后面的训练组合做参考,就像xgboost一样,每次迭代都学习一棵树来拟合之前那棵树的预测结果与真实值的残差。贝叶斯优化其实就是想求出后验概率p(y*|x*,x,y)的分布,其中y就是指未尝试参数组合的结果,x就是指对应的未尝试的参数组合,而x,y则是已经尝试过的组合和效果。如果我们能拟合出这个后验概率分布,那么我们就可以在x下,预估y的值,既然结果都预估出来了,那么根据y就能取最优的x。贝叶斯优化在python里也有现成的包可以使用(BayesianOptimization),具体实现的代码这里不做赘述,大家可以自行去学习,简单的步骤为:
1)导入必要的包
2) 定义优化目标
3)定义超参空间和优化器
4)调用优化,最终会自动得到最优的参数组合和模型结果贝叶斯的优点在于可自动进行调参,极大提高调参效率,不过缺点在于原理比较黑盒,并且面对高维度大规模数据集时,速度还是比较慢,且处理的参数维度有限。

5.调参的两点建议:
1)调参在有些情况下只是锦上添花的作用,影响模型效果的主要还是样本和特征,所以大家不要把过多的时间精力放在调参上,要平衡好模型效果和时间成本。2)要结合具体情况选择合适的调参方法,小规模数据可以把网格和随机搜索结合来使用,再加一点人工经验,大规模数据在时间成本允许的情况下可使用随机搜索,不想耗费时间就手工调参吧,根据我们的经验,只要前面特征工程做的好,大规模数据对参数的选择不太敏感,所以可根据经验尝试个几组参数即可。

Part4.
实操–网格搜索和随机搜索调参
在这里插入图片描述
…此处省略部分,请到知识星球参考完整详版内容~

在这里插入图片描述
以上完整版本内容欢迎星球同学移步到知识星球查收完整内容:
在这里插入图片描述
在这里插入图片描述
其中本文相关的数据集跟代码也欢迎参考本周的【星球打榜作业】
在这里插入图片描述

~原创文章

end

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值