爱收集资源网

刷赞网址全网最低价(ks上热门业务)

爱收集资源网 2024-05-18 16:10

↑↑↑关注后"星标"Datawhale

每日干货&,不错过

Datawhale干货

作者:桔了个仔,南洋理工学院,Datawhale成员

知乎|

序言

在中,我们用kaggle的数据集来做了一篇评分卡教程。

其实,实际风控中若果有如此简单,那我就得失业了。这一篇来讲讲实际风控产品化的路上,我们就会碰到什么挑战,作为数据科学家(也有的公司叫算法工程师),我们是怎样解决这种问题的。

其实本文篇幅6000多字,仍然无法详细的述说在实际风控产品中的挑战。那本文就当抛砖引玉吧。本文仅提到“数据科学”部分的挑战,至于”数据工程“方面的挑战,比如建数据库房,ETL,上云等等的那些,本文就先展示不讲了。也欢迎诸位搞风控的大大在评论区讲讲大家在风控过程中遇见的挑战。文章有点长,假如在手机看见,可以先双击收藏标记着,回头再读。

0.挑战在于算法之外

每次他人问我算法工程师的工作内容是哪些,是不是天天写模型,调参数,我都喜欢发这个图过去。图来自论文HiddenTechnicalDebtinMachineLearningSystems

其实,这儿面有一部份并不须要我来做,比如ServingInfrastruture,运维会帮我弄好。作为一个风控领域的数据科学家,说实话,写机器学习代码的时间占用我日常工作时间不到非常之一吧。我的工作须要面对算法之外的挑战。假如你是风控领域有一段时间工作经验的人,你一定会认为我下边要说的内容早已熟悉了。假如你是小白,想笔试风控算法岗位,那假如你能参悟本文,理解这种挑战,但是讲给笔试官听,他一定会对你刮目相看的。

1.定义目标变量(good/bad)

假如你不熟悉风控,你或许不会想到,即使目标变量只有good和bad两种,但定义目标变量的过程居然这么复杂,以至于这个问题我须要花一两千字来讲解。

在上一篇文章里用到的数据里,三年内逾期超过90天定义为bad,否则都为good。但你有没想过,这个目标是怎么定下来的呢?其实Kaggle的数据集和实际生产环境的不一样,但也不是随意给的。假如你认真观察,这个label的定义是由两个诱因决定的:

你或许会想,这么这两个数字是怎样决定的呢?为何还要如此麻烦,直接逾期第三天就去催款不行吗?在实际业务中,既要保证坏帐最小化,也要保证催款的体验,你总不能人家到期第三天忘了还10块钱的帐单就派人上门催款吧?顾客都给你打败了。

1.1逾期天数-迁徙率(FlowRate)剖析

在Reference[1]有个博主写的不错,但他的做法是先设置观察期,再看表现。而我的做法不一样,我的做法是只看每位月的的帐户在下个月的表现。

我们这儿先定义两个概念:

在下边的表里,纵座标是前月的逾期期数情况(时间窗口左侧界),横座标是次月的逾期期数情况(时间窗口左侧界)。上面的数字是如何估算的呢?诸如我们只有两个时间窗口。在时间窗口【1月-2月】里有50个顾客保持未逾期,【2月-3月】有100个顾客保持未逾期,这么座标[1,1]的总量会是150。

假定经过剖析2019年11个时间窗口后,我们得到以下一个统计表:

所有时间窗口的迁徙情况总和

转换成比率,并按照值的大小,用颜色标下来。

所有时间窗口的迁徙情况比率

其中我们只关注红色框框的部份,也就是彩色的部份。为何呢?很简单,这些早已好转了的帐户我们不管了,由于不是我们的催款对象,我们须要看的是逾期情况没有好转甚至恶化的顾客。一个时间窗口内你的逾期情况最多向前一格(遇见天数为31天的有可能小几率逾期两格,但较少发生,统计时可忽视)。用直白的语言说,就是你如今逾期10天,给你一个月,你如何也不可能逾期超过60天吧?

好,回到题外话,迁徙情况比率能说明哪些呢?说明了某个逾期期数的风险情况。我们这儿用“从良”这个不太恰当但好理解的词来形容帐户逾期期数变少。诸如在上表里,当逾期

至于“从良”的比率高于多少就不能接受,则须要和商业部门沟通。但从良的多于1/3确实挺少了。

不过这儿须要澄清下,这儿并不是指逾期真的超过90天才催款,而是说,我预测这个人将来会逾期超过90天,所以我在他达到那种逾期时间前就去催款,防止严重逾期的发生。

1.2观察期剖析——elbowmethod(脖子法则)

刚刚我们通过剖析,确定了目标里的逾期天数是90天以上。这么目标里的观察期是怎样做的呢?

一个顾客开始逾期后(超过三天),要达到90天以上的逾期少则须要3个月,多则可以无限多个月。假如观察期短了,我们会漏抓了好多顾客,假如观察期太长,比如无限长,你确实能抓牢100%的逾期在90天以上顾客,但观察期太长了,逾期的顾客仍然没人理才会仍然恶化。所以一个合理的观察期很重要。

为了找到一个合理的观察期,我们须要剖析逾期月数与逾期顾客总量的情况,比如再某个建行,通过剖析,我得到一个逾期月数与逾期顾客数的情况表:

可以看见,逾期90天以上的顾客,95%的都发生在6个月内。但你或许会说,9个月能测量到97%,不是更好吗?但记得经济学里的“边际效用”这个词吗?意思是再降低投入,新增的产出会变少。用一个知乎上热门的词句来形容,就是“内卷”。我们剖析时也是。再追加一个月观察期,对效用的提高不显著,反倒引入更多风险。当“内卷”发生时,就不再降低观察期了。

所以我的经验是用elbowmethod,也就是找寻曲线的“转折点”,如同手指一样。(假如你熟悉k-means,这么你可能记得,在k-means里,我们决定如何选择k值的一个算法是elbowmethod。这儿就不展开讲k-means了,假如真的不熟悉,也不影响本文阅读)

把上表plot下来,得到下边一个图,其中转折点(或则说‘手肘)用红圈划下来了:

当前热门服务业_ks上热门业务_行业热门

可以见到,但观察期为6个月时,我们能抓到的逾期顾客早已好多了。再加一个月,能抓到的增量也极少了,边际效用显著增加了好多。所以我们就可以把观察期设置为6个月。

对于普通的个贷产品,通常情况下这个转折点还是挺好观察到的。但听到这儿你似乎想问,假如没有显著的转折点(elbow),该如何取舍呢?这就复杂了。但若果你的个贷产品真的找不到一个显著的elbowpoint,你画下来的曲线比前面的曲线平滑得多,怎样办呢?

这确实是一个困局,且没有一个标准的答案。但你可以和商业部份阐述下边几个问题:

2.特点建立形式

不像kaggle大赛里这么简单,在实际业务中,好多时侯特点是须要自己建立和挖掘的。建立特点的思想有几点:

RFM-V框架

哈哈哈,别去google这个词,这是我编的名词,纯粹是为了让你们便捷记忆哈哈哈,是我从RFM模型上得到的启发。RFM模型在的顾客关系管理(CRM)的剖析中经常用到。RFM虽然不是一个模型,只是常用的建立特点思想。

RFM分别代表:

不难理解前面三种情况都和顾客风险有直接关系吧?而V代表Velocity,既速率。诸如我过去1个月刷卡次数为10次,而过去六个月平均每位月刷卡次数5次,这么这个Velocity=10/5=2。当速率小于1时,表示某个特点的值在加速降低,大于1时,表示速率在降低。

V和R类似,但又不同,V是近日情况和远期情况的比较,R仅为近日情况。

V还可以跟F,M自由组合。诸如V和F的组合可以得到诸如“最近刷卡频度降低,风险有可能上升”的信息,V月M的组合可以得到诸如“最近消费飙升,可能风险上升”的信息。

WOE变换

这个方法在上一篇上面也用过了。本质就是把非线性的特点转换成线性的特点,这对于逻辑回归等泛线性模型是十分必要的。

WOE可以把非线性特点转换成线性的

具体变换过程这儿就不再赘言了。假如对WOE不熟悉的同学可以瞧瞧我之前的文章。前面那张图就是我那篇文章的里的。文章链接[桔了个仔:WOE编码为何有效()

Vintage剖析

除此之外,Vintage剖析也是帮助建立特点的方式。原本想自己写一篇的,但Reference[1]里的兄弟写得太好了,我就不再写多一遍了,可以点开看他文章的part2.

3.稳健性

这儿就和机器学习模型有点关系了,也就是我在文章上面说到的“用时不到10%"的部份。其实历时少,但对于模型的效拿来说,确实至关重要。

3.0提高稳健性的通用方式

首先讲讲通用的提高稳健性的方式。虽然你是做其他领域的数据科学或则深度学习,也会有所接触。

风控领域因为对解释性有一定要求,所以很难使用神经网路等复杂模型或则深度学习模型。通常来说,是泛线性模型(比如逻辑回归)和基于树的模型(DecisionTree,RandomForest,XGBoost)等。对这儿两种模型,也有不同的提高模型稳定性的方式。

3.1对于泛线性模型(比如逻辑回归)

对于逻辑回归模型,单个变量的变动会影响模型的输出,但是这些影响是线性的。这会导致两个诱因影响稳定性:

比如我的模型其中一个特点是逾期金额,逾期十块和逾期二十块对于建行来说都是小事,但在模型的某一项里,影响是双倍的。

对outlier值处理复杂

解决方式:

为了模型的稳定性,我们可以对个别连续变量进行分箱,使其弄成离散变量。这也是上面WOE的思想之一。这时侯大于100块的都分到一个组,这么你欠建行一块钱和99块钱都是一样低风险。

分箱后,outlier会手动转换成变成份箱的最左或则最右的那一类。比如我们的顾客里年纪最大的不到100岁,这么我们可以每十岁设置一个分箱,这么可以有[-∞,10],[11,20],....[90,+∞]等十个分箱。这时侯有个顾客不留神岁数20岁输成200岁,这么如此年纪也不会难以处理。

3.2基于树的模型

因为树的split是基于阀值的,使用基于树的用处就是相当于模型给你手动分了箱。对于决策树,数据的打算常常是简单的甚至是何必要的。数的另一个用处是对波动不敏感。数据分布发生微小偏斜时,仍能表现稳定。

但使用单棵决策树容易过拟合。为了避免过拟合我们通常会:

修剪树叶。而且须要大量的剖析与尝试,所以我很少使用单科决策树作为模型。我通常用下一种方式。

使用RandomForest。RandomForest是用训练数据随机的估算出许多决策树,产生了一个森林。这些方式背后的原理可以用“三个臭皮匠定一个诸葛亮”这句名言来概括。随机森林在解决回归问题时,并没有像它在分类中表现的这么好,这是由于它并不能给出一个连续的输出。但在训练数据足够大的情况下,因为

除此之外,我都会用到XGBoost。XGBoost也是基于树的模型,所以决策树在稳健性方面的益处它也有。XGBoost具有特别好的非线性拟合能力,以及对超参数的鲁棒性,因而在Kaggle赛事中你们都在疯狂用。但依赖统计特点,特点的打算须要积累一定周期才有足够置信度,不过在个贷风控场景下,我的项目都有超过一年的数据,使用疗效还是挺好的。

但无论怎样,稳定性无论做得多好,模型总有效用递减的时侯。关于怎么监控模型,第六章会讲。

4.评价指标

模型来说,你们都用AUC。对于二元分类,这个方式是很常用的。并且对于不平衡数据且badrate会有变化的数据,AUC的疗效容易失真,所以仅仅看AUC,对模型的性能理解是失真的。不仅模型性能,还有其他指标也是须要参考的

ks上热门业务_行业热门_当前热门服务业

KS(Kolmogorov-Smirnov)值

KS值评估模型的分辨度(discrimination)是在模型中用于分辨预测正负样本分隔程度的评价指标。KS的估算方式直观解释诸如右图,红色为预期badrate累积函数(由于是累积的,所以最低点为1),红色为goodrate的累积函数。她们之间最大的差值为KS值。用公式来讲,就是KS=max(TPR-FPR),也就是召回率-误诊率的最大值。

这么KS怎样看呢?如何晓得模型的区别能力好不好呢?这儿有个标准,仅供参考,实际应用时可以稍稍改改,但通常来说KS越大越好。

效用提高(LIFT)

效用提高的估算等于模型捕捉到的badrate乘以随机捕捉到的badrate。诸如下表,根据预测的风险排序分成1-5箱,其中1位最高风险,5为最低风险。假如随机把顾客分成5箱,这么每箱上面的badrate应当都是5%。并且通过模型来预测,我第一箱抓到的bad顾客应当是最多的。诸如我看第一箱的LIFT,估算方式为模型抓到的12.5%的bad,这么效用提高就是250%。也就是说,你之前要催款125个顾客能够达到的放款疗效,通过我的模型,如今只须要催款50个,节约了你60%的催款成本。

你可以把第一箱定位高风险,也可以把第一二箱都看为高风险。当你通过这个新的策略,催款前两箱,也就是40%的顾客时,你能抓到(25+10)=35个坏顾客,也就是70%的坏顾客,这么LIFT就是70/40=175%。

当LIFT=100%时,说明模型没啥用,等于胡扯。

群体稳定性指标(PopulationStabilityIndex,PSI)

PSI是评价样本稳定性的指标,除了可以评价样本的总体稳定性,也可以评价某个特点的稳定性。须要注意的是,PSI并不是直接评价模型性能的指标。

PSI的估算很简单,公式为:

PSI=SUM((实际占比-预期占比)*ln(实际占比/预期占比))。

Reference[6]里的文章挺好的解释了PSI的概念与估算,还有代码实现,我这儿就不再赘言了。

在产品运行过程中,假如见到模型的AUC增长了,但你又发觉PSI上升了,说明你须要用新的数据集来训练新的模型了。

5.解释性

因为建行监管要求,风控模型须要满足解释性要求能够批准上线使用(不晓得互联网金融公司有没这个要求),所以模型不是能预测就行的,我们须要对两个方面进行解释:

特点层面

做特点组合时,你须要让特点有意义。如果你通过各类组合,发明了一个特点,发觉用他的月收入减去他家房屋的面积数,得到的特点与风险有较强关联,那也是不可用的。月收入金额减去房屋的面积数这些组合是不好理解的。但若果你真的发觉这些奇怪的组合特点很有用,你须要换个思路,用有意义的特点再进行组合。诸如刚刚发觉月收入减去他家房屋的面积数这个特点很有用,这么你可以想想。他家房屋的面积数和哪些相关联?是不是贷款金额?这么我们可以重新组织一下,组合出一个有意义的特点:DTI(debttoincome),定义是负债乘以收入。事实上顾客的DTI指数也是很常用的特点。

模型决策层面

假如你用逻辑回归和单棵决策树,这么模型就具有自解释性。

对于随机森林和XGBoost,解释上去稍为麻烦点。假如想强行解释随机森林,这么会有点麻烦,可能须要UI的帮助。诸如你随机森林用了100课数,这么你要把这100课数的预测结果先展示一次,之后再把这种结果得到最后结果的估算过程又展示一次。比起深度模型那个黑袋子,XGBoost和RandomForest的工作原理确实能讲下来,但那复杂度他人能懂吗?

所以我们须要直观的解释,尽管理解没这么完全,但难度大大增加。通常会用两种方式:

1.plotimportance。诸如XGBoost模型,你只须要调用plot_importance函数便能得到特点重要度排序

2.LIME。LIME(LocalInterpretableModel-AgnosticExplanations)的主要思想是借助可解释性模型(如线性模型,决策树)局部近似目标黑盒模型的预测,此方式不深入模型内部,通过对输入进行轻微的扰动,侦测黑盒模型的输出发生何种变化,依照这些变化在兴趣点(原始输入)训练一个可解释性模型。具体的工作原理可以看Reference[4]

其实解释性并不是这么简单,这是个大课题,更多相关的方法可以参考Reference[2-5]

6.上线,监控,模型更新

这一点的经验未必和其他风控算法工程师一样。知乎上也有很大风控大牛,她们要么在互联网金融做风控,要么在支付系统做风控,而像我这些在创业公司给建行做风控的人应当不多。

上线

假如你开发的这套风控系统是第一套,这么直接上线就完事了。但在商业应用中,直接切换风控系统是高风险的事情。比如你是技术提供商,农行感觉你开发的风控系统不错,但他也不会马上用你的。通常来说,农行须要先把一部份(比如20%)的帐户分到你的系统来评分,剩余80%还是用原先的系统来评分。持续在线上观察半年,确定你的系统疗效要更好,才能逐步降低更多比列让你的系统评分。

监控

模型上线后,须要持续观测第四节里提及的评价指标,包括特点稳定性,效用,模型AUC等。依据实际情况可以定义。监控周期通常是每位月一次。

模型更新

模型更新示例总结

可以看见,算法尽管是核心,并且仅有核心是不够的,一个完整的风控系统,虽然除开软件工程部份,还是有好多的工作须要做,好多的剖析须要搞。我们常说的人工智能AI,主要指机器智能,但要支持一个平稳的风控系统,须要的是真正的“人工”智能,也就是人本身的智能,机器智能在这儿,也就是辅助。

写文不易,双击三连↓

ks上热门业务