其他
基于 Apache Flink 和规则引擎的实时风控解决方案
1.总体架构
风控系统,为业务系统提供支持,根据业务系统传来的数据或埋点信息来判断当前用户或事件有无风险; 惩罚系统,业务系统根据风控系统的结果来调用,对有风险的用户或事件进行控制或惩罚,比如增加验证码、限制登陆、禁止下单等等; 分析系统,该系统用以支持风控系统,根据数据来衡量风控系统的表现,比如某策略拦截率突然降低,那可能意味着该策略已经失效,又比如活动商品被抢完的时间突然变短,这表明总体活动策略可能有问题等等,该系统也应支持运营/分析人员发现新策略;
电商业务; 风控范围包括: 注册,虚假注册; 登陆,盗号登陆; 交易,盗刷客户余额; 活动,优惠活动薅羊毛; 风控实现方案:事中风控,目标为拦截异常事件;
2.风控系统
用户名与身份证姓名不一致; 某 IP 最近 1 小时注册账号数超过 10 个; 某账号最近 3 分钟登陆次数大于 5 次; 某账号群体最近 1 小时购买优惠商品超过 100 件; 某账号最近 3 分钟领券超过 3 张;
事实,即被判断的主体和属性,如上面规则的账号及登陆次数、IP 和注册次数等; 条件,判断的逻辑,如某事实的某属性大于某个指标; 指标阈值,判断的依据,比如登陆次数的临界阈值,注册账号数的临界阈值等;
实时风控数据流,由红线标识,同步调用,为风控调用的核心链路; 准实时指标数据流,由蓝线标识,异步写入,为实时风控部分准备指标数据; 准实时/离线分析数据流,由绿线标识,异步写入,为风控系统的表现分析提供数据;
场景管理,决定某个场景是否实施风控,比如活动场景,在活动结束后可以关闭该场景; 黑白名单,人工/程序找到系统的黑白名单,直接过滤; 规则管理,管理规则,包括增删或修改,比如登陆新增 IP 地址判断,比如下单新增频率校验等; 阈值管理,管理指标的阈值,比如规则为某 IP 最近 1 小时注册账号数不能超过 10 个,那 1 和 10 都属于阈值;
2.1.1 前置过滤
2.1.2 实时数据准备
注册场景,假如规则为单一 IP 最近 1 小时注册账号数不超过 10 个,那系统需要根据 IP 地址去 Redis/Hbase 找到该 IP 最近 1 小时注册账号的数目,比如 15; 登陆场景,假如规则为单一账号最近 3 分钟登陆次数不超过 5 次,那系统需要根据账号去 Redis/Hbase 找到该账号最近 3 分钟登陆的次数,比如 8;
2.2.3 规则判断
借助成熟的规则引擎,比如 Drools,Drools 和 Java 环境结合的非常好,本身也非常完善,支持很多特性,不过使用比较繁琐,有较高门槛,可参考文章【1】; 基于 Groovy 等动态语言自己完成,这里不做赘述。可参考文章【2】;
业务系统把埋点数据发送到 Kafka;
Flink 订阅 Kafka,完成原子粒度的聚合;
Flink 把汇总的指标结果写入 Redis 或 Hbase,供实时风控系统查询。两者问题都不大,根据场景选择即可。
3.分析系统
判断规则是否失效,比如拦截率的突然降低; 判断规则是否多余,比如某规则从来没拦截过任何事件; 判断规则是否有漏洞,比如在举办某个促销活动或发放代金券后,福利被领完了,但没有达到预期效果;
发现全局规则,比如某人在电子产品的花费突然增长了 100 倍,单独来看是有问题的,但整体来看,可能很多人都出现了这个现象,原来是苹果发新品了…… 识别某种行为的组合,单次行为是正常的,但组合是异常的,比如用户买菜刀是正常的,买车票是正常的,买绳子也是正常的,去加油站加油也是正常的,但短时间内同时做这些事情就不是正常的。 群体识别,比如通过图分析技术,发现某个群体,然后给给这个群体的所有账号都打上群体标签,防止出现那种每个账号表现都正常,但整个群体却在集中薅羊毛的情况。
业务系统的数据,业务的埋点数据,记录详细的用户、交易或活动数据; 风控拦截数据,风控系统的埋点数据,比如某个用户在具有某些特征的状态下因为某条规则而被拦截,这条拦截本身就是一个事件数据;
4.参考资料
Apache Flink 及大数据领域盛会 Flink Forward Asia 2019 将于 11月28-30日在北京国家会议中心举办,大会议程已上线,点击「阅读原文」可了解大会议程详情。