这要求风控系统一定要有实时性。
本文就介绍一种实时风控解决方案。
1.总体架构
风控是业务场景的产物,风控系统直接服务于业务系统,与之相关的还有惩罚系统和分析系统,各系统关系与角色如下:
-
业务系统,通常是APP+后台 或者 web,是互联网业务的载体,风险从业务系统触发;
其中
风控系统和
分析系统是本文讨论的重点,而为了方便讨论,我们假设业务场景如下:
-
电商业务;
-
风控范围包括:
-
登陆,盗号登陆;
-
交易,盗刷客户余额;
-
活动,优惠活动薅羊毛;
-
风控实现方案:事中风控,目标为拦截异常事件;
2.风控系统
规则可以组合成规则组,为了简单起见,我们这里只讨论规则。
规则其实包括三个部分:
-
条件,判断的逻辑,如某事实的某属性大于某个指标;
规则可由运营专家凭经验填写,也可由数据分析师根据历史数据发掘,但因为规则在与黑产的攻防之中会被猜中导致失效,所以无一例外都需要动态调整。
基于上边的讨论,我们设计一个风控系统方案如下:
该系统有三条数据流向:
-
准实时指标数据流,由蓝线标识,异步写入,为实时风控部分准备指标数据;
-
准实时/离线分析数据流,由绿线标识,异步写入,为风控系统的表现分析提供数据;
本节先介绍前两部分,分析系统在下一节介绍。
2.1 实时风控
实时风控是整个系统的核心,被业务系统同步调用,完成对应的风控判断。
前面提到规则往往由人编写并且需要动态调整,所以我们会把风控判断部分与规则管理部分拆开。规则管理后台为运营服务,由运营人员去进行相关操作:
-
场景管理,决定某个场景是否实施风控,比如活动场景,在活动结束后可以关闭该场景;
-
黑白名单,人工/程序找到系统的黑白名单,直接过滤;
-
阈值管理,管理指标的阈值,比如规则为某IP最近1小时注册账号数不能超过10个,那1和10都属于阈值;
2.1.1 前置过滤
这部分逻辑非常简单。
2.1.2 实时数据准备
在进行判断之前,系统必须要准备一些事实数据,比如:
redis/hbase的数据产出我们会在第2.2节准实时数据流中进行介绍。
2.2.3 规则判断
在得到事实数据之后,系统会根据规则和阈值进行判断,然后返回结果,整个过程便结束了。
整个过程逻辑上是清晰的,我们常说的规则引擎主要在这部分起作用,一般来说这个过程有两种实现方式:
-
基于Groovy等动态语言自己完成,这里不做赘述。可参考文章【2】;
这两种方案都支持规则的动态更新。
2.2 准实时数据流
这部分属于后台逻辑,为风控系统服务,准备事实数据。
把数据准备与逻辑判断拆分,是出于系统的性能/可扩展性的角度考虑的。
这部分数据流非常简单:
-
业务系统把埋点数据发送到Kafka;
-
Flink订阅Kafka, 完成原子粒度的聚合;
-
注:Flink仅完成原子粒度的聚合是和规则的动态变更逻辑相关的。举例来说,在注册场景中,运营同学会根据效果一会要判断某IP最近1小时的注册账号数,一会要判断最近3小时的注册账号数,一会又要判断最近5小时的注册账号数……也就是说这个最近N小时的N是动态调整的。那Flink在计算时只应该计算1小时的账号数,在判断过程中根据规则来读取最近3个1小时还是5个1小时,然后聚合后进行判断。因为在Flink的运行机制中,作业提交后会持续运行,如果调整逻辑需要停止作业,修改代码,然后重启,相当麻烦;同时因为Flink中间状态的问题,重启还面临着中间状态能否复用的问题。所以假如直接由Flink完成N小时的聚合的话,每次N的变动都需要重复上面的操作,有时还需要追数据,非常繁琐。
通过把数据计算和逻辑判断拆分开来并引入Flink,我们的风控系统可以应对极大的用户规模。
3.分析系统
在衡量整体效果方面,我们需要:
在为系统提供规则/逻辑升级依据方面,我们需要:
-
发现全局规则,比如某人在电子产品的花费突然增长了100倍,单独来看是有问题的,但整体来看,可能很多人都出现了这个现象,原来是苹果发新品了……
-
识别某种行为的组合,单次行为是正常的,但组合是异常的,比如用户买菜刀是正常的,买车票是正常的,买绳子也是正常的,去加油站加油也是正常的,但短时间内同时做这些事情就不是正常的。
-
群体识别,比如通过图分析技术,发现某个群体,然后给给这个群体的所有账号都打上群体标签,防止出现那种每个账号表现都正常,但整个群体却在集中薅羊毛的情况。
这便是分析系统的角色定位,在他的工作中有部分是确定性的,也有部分是探索性的,为了完成这种工作,该系统需要尽可能多的数据支持,如:
-
业务系统的数据,业务的埋点数据,记录详细的用户、交易或活动数据;
这是一个典型的大数据分析场景,架构也比较灵活,我仅仅给出一种建议的方式。
相对来说这个系统是最开放的,既有固定的指标分析,也可以使用机器学习/数据分析技术发现更多新的规则或模式,限于篇幅,这里就不详细展开了。
原文链接
本文为云栖社区原创内容,未经允许不得转载。