Neo's Blog

不抽象就无法深入思考
不还原就看不到本来面目!

0%

风控规则引擎介绍

如何向大家展示自己的工作成果-风控引擎

风控引擎是什么?

风控引擎需要有哪些功能?

如何评估一款引擎的优劣?

业务接入
规则判定
执行决策

总体架构

表达式是

规则引擎的应用场景主要包括以下特点:
流程分支非常复杂,条件判断非常多,常规的(if…else)编码难以实现,维护成本高。
不确定性需求非常多,频率非常高,随时都可能发生业务变更。
业务规则变更要求实时生效。
业务变更不依赖开发人员,可以由相关业务人员直接进行业务变更。

Groovy脚本引擎

选择核心的规则表达语言和规则执行引擎

进行策略的执行顺序:

在资源充足的前提下,一般来说策略的执行都是并行执行的,但是在一些情况下也会要求策略有先后的执行顺序。比如有些策略会依赖一些第三方数据源,这些数据在调用的时候就会产生成本,我们常见的有银行卡四要素、手机三要素等等。

所以有的时候为了节省成本,会将这些策略执行顺序后置,当前面的策略已经足够产出明确的结论时(比如拒绝这次申请/发帖等),就无需执行后续策略。在运算资源上也是同理,会优先执行对运算资源消耗小的策略。

Drools介绍

例子:

事实
今天12:00,mid为10的用户购买了大会员,当时的IP地址为127.0.0.1

基本概念:

场景

在一个场景(Scene)下,会持续不断的发生风险事件(Event)。
这些风险事件

风险事件

风险等级

规则

因子

决策

特征(因子)类型

  1. 参数因子
  2. 表达式因子
    1. 由参数因子以及其他因子衍生而来
  3. 累计因子
    1. 事件在时间纬度上的聚合

风控的一些基本概念

风控引擎的总体架构

在线打击与离线打击如何协作

执行决策

第二部分 Gaia管理后台展示

系统设计部分

引擎与策略同学的协作流程

有哪些模块,以及模块之间调用关系?
rule(规则), factor(因子)
lib(名单库), finger-job(设备指纹)
decisions-job(决策) filter-job(过滤)
gaia-job (异步)

第三部分 规则&因子的预编译 与 执行

开发期间遇到的问题:
多个规则并行执行时,如何减少

AST(抽象语法树)

定义:
任何一个表达式,都可以解析为一棵AST

生成:

  1. 词法分析(对表达式进行Scan, 切分为Token数组)
  2. 语法分析(将词法分析出来的Token数组转换成树形结构)

例子:

抽象语法su
生成:

预编译:将因子表达式处理为叶节点为参数因子的AST数

A = B + 10
B = C + 10

AST的几种节点类型:

  1. identifier符号 (函数 + 变量)

  2. 表达式递归展开成为AST

    1. 如果节点为符号,并且符号为变量,则递归
    2. 否则,后序遍历
  3. AST的递归展开
  4. AST后序遍历,计算Hash值
  5. 将AST转换为DAG
    1. 顶点:树节点的hash值
    2. 边:节点与节点之间有依赖关系
    3. 顶点的入库:该顶点有几个依赖的节点

执行阶段
基于Hash值的图合并
合并图的拓扑排序
图的分层执行与结果缓存
因子的值获取

累计抽象
指标计算可以抽象总结出以下几个固有特征:
时间窗口
事件
过滤条件
主属性
副属性
聚合逻辑

第四部分 未来规划

实时数据的拓宽

  1. 因子特征的精细化监控
    (1)细化因子的类型
    (2)因子的完整度
    以数据为中心

泰山感知

定期输出各指标的性能、数据量、成本等情况,指导实时指标计算系统优化的方向。对于不再使用的指标,及时进行下线清理。

中长周期累计因子
挑战:低区分度,长周期,UV类型聚合

Flink…

累计因子超出阈值后的回扫操作

规则优先级

特征获取成本 与 执行耗时 的权衡

https://www.jianshu.com/p/f4d4e2a4f88c
《Scikit-Learn与TensorFlow机器学习实用指南》

https://tensorflow.google.cn/tutorials/structured_data/time_series#baselines
tensorflow教程

你的支持是我坚持的最大动力!