一 概述
余额支付的风险识别模型分为两类:(1)盗号交易识别风险 和 (2)盗卡交易识别风险。其中盗卡交易识别风险和余额有关主要是由于骗子注册号码帮盗来的卡,然后进行充值到余额,通过余额支付销赃。(1)和(2)两种针对的情景不一样,采用的特征变量和变量的重要性很大程度是不一样的。针对(1)的问题,主要是看当前交易相对用户之前的行为是否存在异常。针对(2)的问题,主要看用户信息和绑卡的信息匹配的一致性,可信性,以及当前账号的可信度。
在整体篇,提到风险识别领域采用的常规的方法是专家规则系列和模型系列。规则体系中每个规则针更多对单一风险场景和问题来制定的,偏重精准性和稍微兼顾覆盖率。模型系列更加覆盖率,模型不断学习来增加识别各种风险场景的能力。模型的一个好处就是可以不断学习,对各种风险场景可以有个统一的量化评估,比如0-100分。如果一个风控团队想对外输出风控能力,一个必备的能力,就是必须对外输出风险评分,决策层让客户自己做,而不是直接输出拒绝,还是放过。这篇,我主要谈谈关于盗号的风控模型:余额支付盗号交易识别的风险评分模型。主要围绕图1展开:
二 样本和特征
风险评分模型可以看成一个二分类问题,就是设计个模型能把好的交易样本和坏的交易样本尽可能区分出来。做风险评分模型这个项目前,先得积累足够多的数据(样本和特征),不然真是巧妇难为无米之炊。所以,系统需要有套收集数据的机制,尤其是坏样本的数据收集机制。对于交易而言,可以以订单号来标记一条样本,样本由多个特征变量组成,这些特征变量基本可以包含交易维度的变量,交易双方的特征变量等。首先,系统需记录整体交易这些相关的数据。然后,通过人工标记坏样本的方式来记录坏样本订单号,在支付领域坏样本人工标记方式可以通过用户报损反馈,也可以是人工通过相关黑信息关联找出来的标记样本。系统设计是尽可能多的和并且尽可能精准的的收集到坏样本。对于好样本,如果样本特征变量中不包含某些周期性变量,可以负采样过去几天的交易样本,最好有距离目前时间一周以上的时间间隔,方便用户反馈,从里面剔除坏样本和某些设定规则下的过滤的样本(存在异常样本和没有报损的样本)。
在风控建模领域,一个典型的问题就是样本有偏。举个例子说明:假如你发现骗子符合某些聚集特征,你指定策略1进行打击后,骗子的这种欺诈手段被控制,以后的损失案例都不具备这样的聚集特征。如果你的坏样本的收集时间在策略1上线之后,这个时候模型训练的结果极有可能出现满足聚集特征的风险低,不满足聚集特征的交易反而风险高,也就是说聚集特征的权重是负数。这时候模型的解释性出了问题,这个也是模型训练中一个过拟合问题的范畴。为了有效解决这个问题,可以根据业务经验来查看模型中变量的权重是否与经验相悖,如果相悖,需要仔细评估。对于是样本有偏带来的问题,可以通过重新加入符合某些条件的样本来弥补。对于这些弥补的样本获取方法一种可以从拦截样本中选择,一个可以根据经验来人工生成样本。
谈谈模型的不平衡学习。风控模型学习是个典型的不平衡学习问题,他同时具备不平衡学习领域两个问题:(1)正负样本比率悬殊,但是正负类样本都足够多;(2)正样本样本个数也很稀少。第一个问题是基本满足样本在特征空间的覆盖情况,只是比率较大导致某些学习模型应用会出现问题。第二个问题是样本太少,导致样本在特征空间的覆盖很小,极容易过拟合,不能覆盖特征空间和对欺诈场景的覆盖。对于第二个问题,最好的方法还是先收集样本+一些不平衡学习方法。对于正负样本的比率问题,有的用1:1,有的人用1:10,有的说是1:13.这些大多都是经验。我一般用,其实也是经验,1:10。其实,对于比率这个问题,说到底就是负样本该采样多少的问题。我觉得只要保证负样本也尽可能多满足覆盖特征空间就好,因为很多负样本(好的交易样本)模式都是很相似的,对于相似的模式不用保留太多的样本。但是本来正样本就少,如果负样本和正样本一样多,我个人认为随机采样的负样本覆盖的特征空间会很小,所以,我个人不是很赞同1:1的比率。具体可以参考我的这篇博客:http://blog.csdn.net/hero_fantao/article/details/35784773
三 特征预处理
特征大体可以分为连续特征变量和类目特征变量。特征预处理主要会围绕这两类特征来进行的。主要分为缺失值填充,异常值处理,连续特征归一化处理,连续特征离散化处理。
3.1 缺失值填充
特征的缺失值填充前,我们需要先统计特征的缺失值比率。采用某个特征来区别正常交易和异常交易前,这个特征的缺失值比率不能超过一定的阈值。对于缺失值填充的常用方法有:均值,中值,0值等。
3.2 异常值处理
可能由于某些原因,导致系统在收集样本时候,出现错误,特征值过大或者过小。当然,这个可能本来数据就是这样,但是,我们也需要做个处理。常用的方法:设置分位点做截断,比如0.1%,99.9%分位点等。
3.3 连续特征归一化处理
对于连续特征,比如用户的注册时间间隔,原来的值范围各自不同,不在统一的尺度。有的连续特征值范围大,有的连续特征值范围小。如果不做归一化处理,连续特征中值范围的大的特征会淹没值范围小的连续特征对模型的影响。所以,有必要对连续特征做归一化处理。
常用的连续特征归一化处理方法:(1)min-max方法; (2)z-score方法。
对于互联网数据,很多特征呈现长尾power-law分布,所以,大多场景针对这种情况在做min-max 或者z-score之前,会对连续特征先做log(x)变换。
3.4 连续特征离散化处理
相对连续特征归一化处理,还可以对连续特征进行离散化处理。在logistic regression中,大家经常会把连续特征做离散化处理,好处:(1)是避免特征因为和目标值非线性关系带来的影响;(2)离散化也是种给lr线性模型带来非线性的一种方法;(3)方便引入交叉特征;(4)工程实现上的trick。
常见的离散化处理手法:非监督的方法和监督的方法。非监督的方法:等宽,等频,经验,分布图划分等。监督方法:基于信息增益或卡方检验的区间分裂算法和基于信息增益或卡方检验的区间合并算法等。我个人常用的监督的方法是合并算法,其中具体的介绍可以参考我的这篇博客:http://blog.csdn.net/hero_fantao/article/details/34533533
在风控采用lr模型的时候,对于连续特征采用离散化处理会有个这样的问题:因为我们的坏样本是针对过去的欺诈场景的,欺诈手法在长期博弈中不断升级。我们不仅要让模型尽可能多的覆盖过去的欺诈手法,对未来产生欺诈对抗有一定的适应性,不至于失效太快。采用离散化处理后,就可能出现很大的跳变性。假设我们过去的的坏样本都是刚注册不久的用户,那注册时间间隔做离散化处理时候,就可能分为A,B两段,离散化处理后可以看成0-1二值变量,落在A段为1,否则为0。 为1时候风险高,权重为正值。如果这个变量在过去对正负样本区分度很高,可以看成核心变量的话,那如果骗子绕过A段,跳到B段的话,对模型的预测能力衰弱会是致命的。
四 特征选择
模型训练前必不可少的一项工作就是特征选择,包括特征重要性和决定最终哪些特征会进入模型。对于一个领域专家来说,看你采用的特征集合和以及特征的重要性分布基本就能看出你模型大体会对那些场景预测的准,哪些场景你是预测不出来的。在风控领域就相当于特征集合决定你能覆盖哪些欺诈场景,会对哪些场景的正常交易进行了误判。对于一个风控领域新人来说,最快的进入领域就是看目前风控系统模型采用了哪些特征集合以及特征的重要程度。
谈谈在模型训练前做特征选择的几个好处:(1)去除冗余,不相关特征;(2)减少维度灾难;(3)节省工程空间成本。常用的方法:(1)信息值:information value,简称IV值;IV值越大,重要程度越高。(2)信息增益: information gain; 是采用信息熵的方法,信息增益表示信息熵的变化, 增益越大,说明特征区分度越明显。(3)前向后向选择,依赖模型,通过AIC或者BIC来选择最优特征集合。
五 模型
5.1 模型简介
这里采用的模型是logistic regression ,简称LR模型。选择这个模型的理由:(1)简单,可解释性强;(2)线上实施响应时间快,风控有在线实时响应时间限制,所以在特征变量使用和模型复杂度上都有要求。
特征变量方面:基于历史的变量需要提前计算好,调用外部接口所需要的变量要么在支付环节之前某个环节预获取或者采用异步方式(异步方式会影响当前判断的准确性)。
模型方面:最好选择简单和泛化能力强的模型,复杂或者ensemble model在离线实验也许表现好,但是在线上未必好,复杂模型尤其是GBDT这种ensemble模型在风控数据下容易过拟合(风控数据小)。从我在风控应用模型的经验来看,目前阶段还不是拼模型的阶段,更多是找到风险特征。模型对恶意行为识别不好,更多可能是恶意特征没覆盖或者突破了当前模型的几个核心变量。
下图是LR模型的简介:
这是个预测函数,训练样本就是为了求解这个w。这里面涉及损失函数设计问题和最优值求解问题。常用的损失函数是logloss:
模型中采用正则化是为了避免过拟合,我觉得风控建模上一个重要问题就是过拟合,避免几个核心变量的权重过大。常用的最优求解方法有如下几种:(1)batch 梯度下降法;(2)L-BFGS。具体细节可以参考:
http://scikit-learn.org/stable/modules/linear_model.html#logistic-regression
5.2 模型训练和评估
训练: 划分数据集为训练集和测试集: 采用 k-fold cross-validation 交叉验证。K可取5或者10等。选择模型,如Logistic Regression 模型,调节参数,对训练集进行训练,直至模型收敛,然后对测试集进行预测。可以用k-fold的平均结果作为整体预测结果来衡量模型。
评估指标: AUC,准确率和召回率, F1-score等。
下图是ROC曲线和风险评分预测分值的累积分布:
这里面再提一点:就是上面这些评估指标即使表现良好,但是也未必说明模型应用没什么问题。常见的一点:特征的相关性影响(特征相关性对模型抗噪性有影响)。对于强相关的特征需要做下处理,能整合成一个变量最好。特征相关性在模型结果的表现上可能会出现特征的权重正负方向和大家认知相反,比如某个高风险特征和预测结果应该呈现正相关,但是模型结果显示却呈现负相关。这个大多由于另外一个更强特征和该特征呈现相关性造成的。相关性导致的这些问题,会让模型的解释性出现问题。在风控领域,模型解释性很重要。
5.3 风险评分的应用
计算线上不同分值段交易量大小,最好能给出不同分值段恶意交易比率。可以根据不同业务场景设定不同分数阈值,即使同一场景也可以根据不同分数阈值来进行不同的惩罚手段,分数很高的时候可以进行冻结账号等。值得一提的是,交易行为中有一定数量的高危行为,但是这些高危行为未必都是欺诈行为,异常不代表欺诈。很多正常的人某些行为和欺诈很相似,同样欺诈者随着博弈对抗加剧,也越来越伪装成正常交易。在风控,有时候为了增加对欺诈行为的覆盖,牺牲一小部分用户支付体验,也是值得的。我认为,风控一个重要的工作就是在风险和支付体验上获取平衡,如果支付体验不好,风险控制再好,也是没有意义的。
风险评分应用一个重要的方面:对交易评分实时查询,相应变量值展示,以及重要变量触犯展示等一些列解释行为。这块叫做告诉别人为什么你风险高或者为什么风险低。