为什么要写这篇文章,因为决策引擎对很多风控从业者来说都是绕不开的必学知识点,每一个与金融业务相关的技术框架,都需要一个成熟稳定的决策引擎组件来支持,而目前,只有15%左右的互联网产品,配置了这一工具。
本文旨在帮助大家认识决策引擎,包括前台规则配置与后台技术搭建,另外提供几个比较不错的轻量级开源引擎供大家进一步学习。
全文总计1.6w字,因内容较长,可分四部分进行阅读:
本着对读者负责的态度,笔者行文时尽可能做到以下几点:结构完整、内容真实、逻辑清晰、重点突出、删繁就简,用关键词、数据、配图和案例体现决策引擎的定义优势、应用方法、框架流程等。
另,感谢开源引擎radar开发者“飞虎”、信数风控引擎老师“海棠”、maze开发者张宁以及drools社群对笔者的指导和支持。
本文内容难免有疏忽,会不断更新完善,请关注知乎**“正阳”及专栏“大数据风控”**,多谢!
正阳:https://www.zhihu.com/people/wx971a6f47df448a18?utm_source=wechat_session&utm_medium=social&utm_oi=987230029830549504
专栏【大数据风控】:https://zhuanlan.zhihu.com/sun-energy-field?utm_source=wechat_session&utm_medium=social&utm_oi=987230029830549504
注:文中内容,如有侵权处,请联系笔者删除,感谢支持。
决策,指做决定时所用的策略或方法,是人们为各种事件出主意、做决定的过程。它是一个复杂的思操作过程,是信息搜集、加工、整合最后作出判断、得出结论的过程。在消费金融业务场景中,决策主要指技术人员、业务人员、管理人员共同参与制定的面向整个用户信贷生命周期各环节的策略规则。
传统的风控规则模型主要内嵌在后台代码中,直接用硬编码的方式实现数据的获取、规则的定义、风险的判断。
伪代码如下:
if (StringUtil.isBlank(fieldA)
|| StringUtil.isBlank(fieldB)
|| StringUtil.isBlank(fieldC)
|| StringUtil.isBlank(fieldD)) {
return ResultDOFactory.createResultDO(Code.PARAM_ERROR, "门店参数缺少必填项");
}
if (fieldA.length() < 10) {
return ResultDOFactory.createResultDO(Code.PARAM_ERROR, "门店名称长度不能少于10个字符");
}
if (!isConsistent(fieldB, fieldC, fieldD)) {
return ResultDOFactory.createResultDO(Code.PARAM_ERROR, "门店xxx地址、行政区和经纬度不一致");
}
基于特定业务场景开发的定制引擎,可视为一种推理引擎。
通用决策引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件。实现的功能包括:将业务决策从应用程序代码中分离出来,使用预定义的语义模块编写业务决策,接收数据输入,解释业务规则,并根据业务决策做出业务规则。
简单点,可以理解为:
决策引擎特点:
决策引擎功能:
可以看到,常用决策引擎在传统风控决策的基础上,提供更加丰富的功能,包括:
核心技术与挑战:
在目前围绕大数据、大数据决策为核心的风控技术体系中,整体的数据量达到一定水平,存在的挑战将会是数据的稀疏化。随着风控业务覆盖的行业越来越多,平台间的数据稀疏问题就越明显。
此外,对于大数据来说,具有数据和大数据决策,却没很稳定的落地平台也不行。大数据应用要做到完整,还需要符合以下要求的平台:
更高阶的风控决策引擎,在现有的风控决策引擎上融入了自言语言处理平台、流计算平台、实时预警、深度学习、可视化科学计算等,提升了现有决策引擎的算力和处理时效。
随着技术的革新,未来的决策引擎,会向着功能更加丰富,性能更加优良的风控实时决策系统演进。
互联网金融行业是近期发展最为迅速的一个金融业务领域,而其中的风险控制更是整体业务体系的核心环节。互联网金融的门槛核心在于风控系统,面向C端客群的线上产品线,如消费分期、现金贷及信用卡代偿等业务方向,需实时支持大量业务的自动化处理,风控系统将承担贷前、贷中和贷后的风控评估、处理及预警的角色,极大地解放人工处理的瓶颈与效率。
业务规则的制定和变更,是贯穿于金融行业的各项业务环节中的重要任务之一。如:
这些业务中都有大量的规则,规则的来源包括:
好的决策引擎产品甚至无需 IT 人员的参与 就可以实现规则的变更, 减少了维护的成本。同时决策引擎响应规则变更的速度相当快,1-3 天就可以完成,大幅度减少业务人员与技术人员的沟通成本,花更少的时间处理数据,加速业务扩展。
一个优秀的决策系统,应该具备以下几个条件:
支持模型的部署——线性回归、决策树等简单模型容易将其变成规则来部署,但支持向量机、深度学习等对模型支持的功能有更高的要求。
无论是单个规则文件、或是用户调用的规则包,都可以提供完善的版本控制机制。对于规则文件来说只要有需要,就可以回退到任何一个历史版本; 对于给用户调用的规则包,可以在不同的历史版本之间灵活切换。
满足以下条件:
得以解决一下问题:
使用者通过浏览器打开规则设计器来定义业务规则,完成后的业务规则文件会被存储在规则存储仓库中(规则存储仓库既可以是文件系统中的某个目录,也可以存储于数据库当中)。规则文件调用时引擎会从规则存储仓库里把指定的规则文件取出,再通过规则构建引擎对规则进行解析、编译,最后由规则执行引擎执行并返回结果。
开发人员在程序中使用规则引擎基本遵循以下5个典型的步骤:
接下来我们分步拆解,着重了解规则模块的组件功能及使用流程。
规则引擎平台一般由两部分构成:一个是设计器部分;另一个是规则执行引擎部分。设计器部分主要是由库文件设计器以及具体的规则文件设计器两部分构成,由浏览器直接可视化、图形化操作。
库文件设计器包括变量库设计器、参数库设计器、常量库设计器以及动作库设计器四个部分,通过这些库文件设计器,可以将业务系统中使用的实体对象、枚举值、常量以及需要在规则中调用的Java方法映射到引擎中备用。
在业务系统开发过程中,会用到大量包含Getter和Setter方法的简单的Java对象,它们被称之为POJO(Plain Ordinary Java Object),或BOM(Business Object Model)对象,这些对象在开发中作为数据的载体,负责数据的传递。变量库就是用来映射这些POJO对象,从而使得我们可以在具体的规则文件中使用它们,从而完成规则与业务数据的交互。
规则库中所需要的变量通过预处理,可存储为特征因子,提高变量复用率和规则的简洁度。
根据全域风控需求,特征库中的特征因子分为用户特征因子和全局特征因子。用户特征因子以账户为主键,聚合用户维度的特征数据。得到的数据是反应用户维度的交易、登录、设备等特征。全局特征因子是从全局数据中抽象所需要的其他维度进行组合、计算。
此外,由于商业规则和业务场景不断变化,规则经常需要根据实际变化做出频繁调整。业务人员在前端的特征管理界面,对特征库中的特征因子进行增删改查的操作,不直接对规则库进行频繁变更,避免了特征因子的重复开发。因此,特征因子的存储具有稳定性、聚合性和可复用性。
1)内部数据
2)名单库
名单数据的维度包括:用户ID、IP、设备号、支付账号、手机号。
名单包含三个类型:黑、白、灰名单
名单必须属于某个项目(用于确定名单的范围),可以在名单管理-名单项目管理中添加项目。
后续也可以根据自己的需求扩充其他的维度。为名单型策略提供基础的数据管理功能。
变量库、参数库、动作库、常量库这些库文件定义好后,就可以在各种类型的规则文件中导入并使用它们,一旦某个库文件在规则中被使用,我们就不能再随便修改这些已定义好的库文件的名称、值或数据类型,如果因为业务调整需要必须要进行修改,那么可以通过这些变量、常量、参数、动作定义的操作列上的重构图标来对它们进行修改,这样可以保证引用文件同步更新;如果不采用重构功能而直接修改的话,那么引用的其它类型的规则文件就会出现打开报错的情况。
3)其他数据
在业务系统开发过程中,常常会用到一个枚举数据,比如用户的性别、学历等,在URule Pro当中,通过定义常量库文件,可以将系统中使用的这些枚举数据映射到规则中使用,这样就可以避免规则定义过程中枚举数据手工输入存在错误的可能性。
在规则的条件判断与计算过程当中,难免会用到一些临时的变量来存储值,这些临时变量数量和类型都可能是不固定的,对于这种类型的临时变量,以参数的形式提供,通过参数库就可以定义这些在规则中要使用到的临时变量。
动作库文件的作用是对配置在spring中的bean方法进行映射,使得我们可以直接在规则当中调用这些方法。
如果我们的业务给出的是零散的逻辑规则,那么可以使用规则集来实现;如果给出的是表格形式的业务规则,那么可以直接使用对应的决策表或交叉决策表(决策矩阵)来实现;如果需要对实体进行综合评分,则可以使用评分卡或复杂评分卡来实现;最后还可以通过规则流对一系列复杂的规则个体进行编排,将这个规则流作为实际业务规则调用入口,从而实现任意复杂的业务规则。
规则模块常用的产品实现方式主要有规则集、规则表、规则树。
规则集也叫决策集,是一种由一组普通规则和循环规则构成的规则集合,是使用频率最高的一种业务规则实现方式。
普通规则由变量、表达式、条件值、决策结果组成,是指一种由如果、那么、否则三个部分构成的规则,如下:
而循环规则就是可循环的规则,它允许指定一个集合类型的对象,对这个集合中每个对象进行循环迭代,在循环体中则是若干个由如果、那么、否则构成的普通规则。
在执行的循环规则时,需要添加循环条件,以及循环结束后输出的决策结果,在风控决策引擎中,循环规则运用的较少。
规则集按照使用者的不同,也可以分为向导式规则集和脚本式规则集:
脚本式规则集里可以实现向导式规则中能实现的所有功能,反过来也是一样。
决策表是一种以表格形式表现规则的工具,它非常适用于描述处理判断条件较多,各条件又相互组合、有多种决策方案的情况,决策表提供精确而简洁描述复杂逻辑的方式,可将多个条件及与这些条件满足后要执行动作以图形化形式进行对应。
交叉决策表又叫决策矩阵,是一种特殊类型的决策表。与普通决策表相比,交叉决策表的条件由纵向和横向两个维度决定,而普通决策表的条件只是由纵向维度决定;但在普通决策表的动作部分可以是三种类型,分别是赋值、输出和执行方式,而在交叉决策表中动作部分就是纵向和横向两个维度交叉后的单元格的值,一般来说,这种交叉后单元格的值都是赋给某个变量或参数,所以交叉决策表的动作基本就一个,那就是赋值。
从excel中导入决策表
决策树又称为规则树,是规则引擎中另外一种构建规则的方式,它以一棵躺倒的树形结构来表现规则(之所以将其躺倒是为了节省空间,否则一棵稍微大点的树将会占用很大的页面空间),决策树表现业务规则更为形象,实际上,无论是决策树、决策表还是评分卡,都可以通过决策集来实现,只是,对于某些业务规则来说,通过决策树或决策表或评分卡实现起来更为形象、快捷。
评分是对个人或机构的相关信息进行分析之后的一种数值表达,表示此人或此机构由于信用活动的拒付行为所造成损失风险的可能性,评分通常用于对个人或机构的风险管理与评估。
使用二维表形式展示目标对象的各个属性,针对不同属性设置不同区段的条件,每个区段条件对应不同的分值,运行时引擎会根据定义的区段条件自动计算目标对象的评分。一个定义好的评分卡效果如下图所示:
对于普通评分卡,它可以针对某个对象的一些属性值进行评分,但只能针对是单个对象属性进行条件判断,如果需要对多个对象属性进行条件叠加判断,那么普通评分卡就实现不了,所以需利用复杂评分卡,实现评分时多条件叠加判断,进而使得评分卡的功能更加的完善和强大。
通过主观意识借助实体或者虚拟表现构成客观阐述形态结构的一种表达目的的物件(物件并不等于物体,不局限于实体与虚拟、不限于平面与立体),风控决策引擎中使用的模型更多的是数据模型,描述的是目标的行为和特征。
模型在决策引擎中,对于决策引擎平台实际是一个已经封装好了的产品,决策引擎只会负责入参变量的配置、出参变量的配置以及模型的调用,所以这个模块的核心主要是考虑模型的类型(py、model)、调用逻辑、入参以及出参变量的配置。
决策流又称规则流,它整个的结构类似于工作流,用来对已有的决策集、决策表、交叉决策表、决策树、评分卡、复杂评分卡或其它决策流的执行顺序进行编排,清晰直观的实现一个大的复杂的业务规则。
规则引擎中的决策流可以实现对已有的决策集、决策表、交叉决策表、决策树、评分卡、复杂评分卡或其它决策流进行编排执行;编排过程中即可以常见串行执行,也可以并行执行、或者是根据条件选择分支执行。
基于网页的流程设计器,通过简单拖曳就可以快速实现对已有的决策集、决策表、交叉决策表、决策树、评分卡、复杂评分卡或其它决策流执行顺序的编排。
可把不同的规则和模型串到一起,形成一个决策流,实现贷前、贷中、贷后的全流程监控。它要可实现对数据的按需调用,比如把成本低的数据放到前面,逐步把成本较高的数据放到后面。因为有些决策在前面成本较低的数据下已经可以形成,就不必调用高成本的数据。
决策流核心的构成包含“开始节点、规则/评分卡/模型等已封装好的规则包节点、决策节点、分支节点、聚合节点。
开始节点为一个决策流开始的地方,决策流程必须有始有终且必须以开始节点作为开始;
规则包节点,实际就是用来添加之前在规则、评分卡、模型、表达式中已经创建好的规则产品;
决策节点是在决策时,根据为其下流出连接配置的条件来决定究竟应该走哪条连接的节点,所以根据这一特性,决策节点下流出连接至少要有两条,否则决策节点就没有意义了;
分支节点实现规则流多条并行的节点,通过这个节点,可以根据当前节点下流出连线数量,将当前规则流实现拆分成若干条子的规则流实例并行运行;
聚合节点用来聚合由分支节点拆分出来的多个子的规则流,实现多条规则流的汇合;
有始有终,决策流程的结束,一般是伴随着决策总、分的流程的执行,执行到最后节点自动结束,输出决策结果。
由于每日风控请求量都是海量的,首先利用专家阈值进行初步过滤,基于多维度指标的静态阈值对明显存在风险的账号和行为执行相应的风控措施。专家阈值是基于专家征询法(DelphiMethod)对单个指标的阈值进行一一确定,具有客观性和代表性。
用户行为模型是基于用户行为,动态调整阈值的一种综合性方法。技术路径流程具体分为三个步骤:
特征工程来源于风控系统的离线特征库。深度模型用于离线环境下的模型训练,包含用于特征探索的非监督模型和用于风险概率预测的监督模型,输出结果为预测的风险概率。
时间序列(或称动态数列)是指将同一统计指标的数值按其发生的时间先后顺序排列而成的数列。时间序列分析的主要目的是根据已有的历史数据对未来进行预测。
传统的时间序列预测方法有:简单平均法、移动平均法、指数平滑法等。风控系统的阈值计算常使用移动平均法(moving average),即:通过对时间序列逐期递移求得平均数加/减标准差作为预测值。
规则监控针对的是对知识包调用的监控。规则是放在知识包是调用的,所以规则监控也就是对知识包的监控。
知识库的权限控制指的是针对规则项目、项目里的各种类型文件的读写权限控制。
知识库里多个规则项目,每个项目由不同的人负责,同时又有多人负责定义规则项目里不同的规则文件,这时就有必要通过知识库权限控制机制,让不同的操作人员只能读写自己负责的规则项目或规则文件,这样可以防止误操作的发生。
购买/搭建
购买或者自主搭建决策引擎,注意配套的产品文档、说明文档、技术支持。
运行模式
实际使用时,有三种使用方式,分别是嵌入式模式、分布式计算模式以及独立服务模式。
权限配置
客户端服务器配置
服务器配置
项目可以用于定义需要设定复杂决策的业务场景,当调用引擎时,传入相应的项目编码,决策引擎会将不同事件的数据请求路由到相应的策略集合中进行相应运算。
项目包含以下几部分:
项目名称建议使用易理解的业务场景名称,设置成功后一般不支持修改。
一个决策流里面可以包含若干个具体的规则文件,这些文件可以是若干个规则集(决策集)、决策表、交叉决策表(决策矩阵)、评分卡、复杂评分卡以及决策流。需要注意的是,规则文件里引入的库文件(变量库、参数库、常量库以及动作库文件)是不需要导入的,引擎会自动处理规则中包含的库文件。
策略创建
策略基础信息输入
策略计算逻辑
输入条件名称,此项为非必填项,为方便可视化预览时直观展示策略逻辑,建议输入易于理解的内容。
计算逻辑与预览
计算逻辑编排采用条件序号与符号进行编排。输入编排的内容后,点击“可视化逻辑”即可预览。
策略输出与状态
策略输出标签指,在前面的步骤中设定的策略条件逻辑满足的情况下,决策引擎系统返回的内容。
策略运行状态定义
草稿状态为保存但不执行计算的状态;试运行为保存且执行计算但不执行输出标签;正式运行为保存且执行计算和执行输出标签。为减少配置操作风险,建议先将策略置为试运行状态,观察运行后再切换为正式运行。
按照业务需求将规则文件定义好后,就可以将涉及到的所有规则文件打包成知识包备用。
规则新增或修改后,业务方需要分析效果。本模块会提供:规则内部执行路径、运行时参数和结果的镜像数据,数据可以存储在hbase上。
对于规则修改、调优时尤其重要。两套规则跑所有的数据,最终来比较规则的效果。另一种是分流——10%跑新规则,90%跑老规则,随着时间的推移来根据测试结果的有效性。
冠军/挑战者实验:
aswan 是陌陌开发的风控系统静态规则引擎,零基础简易便捷的配置多种复杂规则,实时高效管控用户异常行为。
MazeGO核心主要由3部分构成:资源管理器、知识库和MazeGO引擎。另外两个辅助模块是流量控制器和规则效果分析模块。基本构成如下图。
主要由3个模块构成。
负责提供配置视图和模式因子。知识库之所以叫“知识”库一个很重要的特征是知识库可以低成本扩展知识。知识扩展包括视图和模式的添加,视图和模式有一对一映射关系。
**视图:**用于业务分析师等非技术背景的人员配置规则。作用两方面:
**模式:**构成规则的最小单位,不可拆分,可以直接被规则引擎执行。
负责管理规则。
**版本管理:**支持规则迭代更新、回滚和灰度等功能。
**依赖管理:**负责将规则解析为模式树。为了最大限度地增强规则的表达能力,每一个模式设计都很“原子”,如果想配置一个完整语义的规则,则必须由多个子规则共同构成,因此规则之间会有树形依赖关系。如$参数1 + $参数2 > $参数3这样的规则便是由多个模式“复合”而成,则他的依赖关系如下所示。
最终结果 /** 变量模式 */
|
|
中间结果 > $参数3 /** 关系运算模式 */
|
|
$参数1 + $参数2 /** 算数运算模式 */
负责执行规则
**调度器:**根据规则的依赖关系以及硬件资源驱动模式执行器执行模式,目标是达到最大吞吐或最低延迟。
**模式执行器:**负责直接执行模式。执行器可以根据业务的表达能力需求选择基于Drools、Aviator等第三方引擎,甚至可以基于ANTLR定制。
MazeQL引擎核心模块如下图:
总体来看,系统组成模块及功能如下:
其中,规则引擎由核心组件构成的最小功能集及扩展组件提供的扩展功能组成。由于规则引擎解耦了业务规则和系统代码,使得实时数据在处理时变的抽象,对数据监控、报警提出了更高的要求。
规则引擎核心组件为构成规则引擎的最小集合,用以支持完成基础规则判断。
负责不同版本规则的调度。方便业务方修改规则后,灰度部分流量到新规则。
格式化数据存储于关系型数据库,例如:用于离线分析的会员属性数据、历史订单数据等;非关系型数据库用于存储需要频繁更新的数据;实时风控请求数据、设备指纹数据。
在构建一个风控系统之前,需要根据企业的业务场景确定数据来源,通常需要解决跨业务系统的数据接入问题。
在关键业务节点,需要设置业务埋点、SDK数据采集等配合,实现对风控事件的实时追踪,并将实时数据接入到数据存储模块中。
变量库、直属库、规则库
由于规则引擎是软件组件,所以只有开发人员才能够通过程序接口的方式来使用和控制它,规则引擎的程序接口至少包含以下几种API:
规则大多由多个规则组合而成,因此也需要调度管理,实现层面完全一致。
驱动平台进行规则计算。
首先为了避免访问规则时需要实时执行远程调用而造成较大的时延,另外规则并不是时刻发生变更没有必要每次访问时拉取一次最新版本,基于以上两个原因规则管理模块会在引擎初始化阶段将有效版本的规则实例缓存在本地并且监听规则变更事件(监听可以基于ZooKeeper实现)。
因为规则每次编译执行会导致性能问题,因此会在引擎初始化和规则有变更这两个时机将增量版本的规则预编译成可执行代码。
包括实时计算集群和离线计算集群。实时计算集群用于实时风控所需的预计算,为后续的规则判断而准备。通常需要借助统计方法,得到所需维度的统计值。离线计算集群用于周期性执行的任务,通常周期时间至少为一天。
主要用于满足非实时的大数据分析和模型训练的需求,将原始的风控数据在计算层进行计算处理,形成各个维度的特征数据,例如:频次统计、最大统计、最近统计等。
时间窗模块为规则引擎提供时间窗因子。时间窗因子可用于统计时间窗口内行为发生的次数、时间等。
规则引擎扩展组件在核心组件的基础上,增强规则引擎功能。
自定义函数可以扩充规则引擎功能,规则引擎可通过自定义函数执行因子及规则条件,如调用用户画像等第三方服务。
定时触达模块支持为规则设定定时执行时间,延后某些规则的执行以满足运营活动规则。定时触达模块涉及的数据流图如图所示:
对比离线数据,实时数据在使用过程中出现问题不易感知。由于系统针对的运营活动直接面向C端,在出现系统异常或数据质量异常时,如果没有及时发现,将会直接造成运营成本浪费,严重影响活动转化率等活动效果评估指标。针对系统稳定性问题,从监控与报警两个角度入手解决。
利用公司数据平台现有产品,对系统处理的实时事件按其事件ID上报,以时间粒度聚合,数据上报后可实时查看各类事件量,通过消息量评估活动规则和活动效果是否正常。
监控只能作为Dashboard供展示及查看,无法实现自动化报警。由于用于监控所上报的聚合数据存储于时序数据库中,需基于HTTP API,定制报警模块,定时调度、拉取数据,对不同事件,按事件量级、活动重要性等指标,应用环比、绝对值等不同报警规则及阈值。超出设定阈值后,通过公司IM及时发送报警信息。
引入规则引擎后,业务需求被转换为具体场景和规则进行执行
规则引擎在执行规则过程中,涉及以下数据模型:
在规则的模式匹配中,使用Rate算法提升匹配效率,减少了重复计算造成的时间冗余性。在规则数量和事实样本较多时,每条事实数据都需要与Rete网络中的Aplha节点相匹配。
大多数规则所含的条件原子相同,即存在被多个规则同时包含的条件原子,依次与每个Alpha节点匹配就存在了一定时间浪费。
因此,一个预匹配模块,将多条规则聚合成少量的规则组。通过规则组筛选,在预匹配阶段过滤掉部分正常数据,减少事实和节点的匹配次数。实现逻辑是将含有多个相同条件原子的规则划分到同一规则组中,规则组中出现次数最多的条件原子作为该规则组的特征条件。
全量数据通过预匹配模块中规则组的筛选,即可过滤掉部分数据,对剩余样本执行所在规则组内的规则判断。对于多条规则的规则组划分,需要首先构建一个键值对,存储所有条件原子和该条件在所有规则中出现的次数。
也可以从业务角度设计规则组,按照不同的业务线划分规则所属的规则组。但系统的响应速度容易受到业务场景的影响。
有效的风控规则体系包括识别风险用户,以及实时的风险拦截措施,防患于未然。同时,风险措施将直接作用于产品终端,影响到用户体验。
因此,基于业务的风控系统需要将风险的误报率和漏报率降低到可接受的范围内,提升产品终端的用户体验。本系统基于规则触发次数和风控反馈结果,构建了规则评价体系,以验证规则有效性,并有助于业务人员对风控规则进行监控和优化调整。规则评价机制的作用逻辑如图所示。
规则评价机制根据两种数据来源进行,一是根据风控分值得到的触发次数分布;二是触发规则后对风控措施进行响应,所得到的最终请求结果。
规则引擎输出每条规则的触发次数,基于此计算查准率(p)和召回率(r);其中,TP为触发规则但未通过验证的请求次数,以及来自黑名单中用户的请求;FP为触发规则中通过验证的请求次数;FN为未触发规则中来自黑名单用户的请求次数。
查准率反应了该规则识别风险用户的准确率,召回率反应了规则能否识别出尽可能多的风险用户。当上述风险评价机制的性能指标超过了正常范围,系统或自动发送报警邮件,通知策略负责人员核实策略的准确性。
系统根据每次请求的返回分值,匹配滑动窗口验证、短信验证、禁止访问等实时风控措施。对于验证类措施,请求的验证结果有助于区分该请求是否来源于黑产群体的模拟用户。
接下来,我们进入第四部分,在调研期间,笔者总计独立测试了4款产品,包括规则管理平台的测试和模型引擎的部署。分别做如下介绍:
Drools 是用 Java 语言编写的开放源码规则引擎,使用 Rete 算法对所编写的规则求值。Drools 允许使用声明方式表达业务逻辑。可以使用非 XML 的本地语言编写规则,从而便于学习和理解。并且,还可以将 Java 代码直接嵌入到规则文件中,这令 Drools 的学习更加吸引人。
Drools 还具有其他优点:
Drools 是业务逻辑集成平台,被分为4个项目:
官网:http://www.drools.org/#
官方文档:http://www.drools.org/learn/documentation.html
测试结果
使用Drools后的规则配置流程如下图
规则主题代码演示:
rule "1.1"
when
poi : POI( source == 1 && brandType == 1 )
then
System.out.println( "1.1 matched" );
poi.setPassedNodes(1);
end
rule "1.2"
when
poi : POI( source == 1 && brandType == 2 )
then
System.out.println( "1.2 matched" );
end
rule "2.1"
when
poi : POI( source == 2 && brandType == 1 )
then
System.out.println( "2.1 matched" );
poi.setPassedNodes(2);
end
rule "2.2"
when
poi : POI( source == 2 && brandType == 2 )
then
System.out.println( "2.2 matched" );
poi.setPassedNodes(3);
end
在实践中,Drools方案有以下几个优缺点:
一款基于java语言,使用Springboot + Mongodb + Groovy + Es等框架搭建的轻量级实时风控引擎,适用于反欺诈应用场景,极简的配置,真正做到了开箱即用。
通过学习本项目能快速了解风险的定义,进而量化风险 ,最后达到集中管理风险的目的。
项目特点:
相关站点
Gitee: https://gitee.com/freshday/radar // 码云为镜像网站,贡献代码请提交到 github
Github: https://github.com/wfh45678/radar
官网: http://radar.pgmmer.top
Wiki: https://gitee.com/freshday/radar/wikis/home
开源版测试过程演示:
URule是一款纯Java规则引擎,它以RETE算法为基础,提供了向导式规则集、脚本式规则集、决策表、交叉决策表(PRO版提供)、决策树、评分卡及决策流共六种类型的规则定义方式,配合基于WEB的设计器,可快速实现规则的定义、维护与发布。
URule提供了两个版本:一个是基于Apache-2.0协议开源免费版本,URule开源版本第一款基于Apache-2.0协议开源的中式规则引擎;另一个是商用PRO版本。
演示文档:
http://www.bstek.com/resources/doc/
URULE PRO版与开源版主要功能比较 | ||
---|---|---|
特性 | URULE PRO版 | URULE开源版 |
向导式决策集 | 有 | 有 |
脚本式决策集 | 有 | 有 |
决策树 | 有 | 有 |
决策流 | 有 | 有 |
决策表 | 有 | 有 |
交叉决策表 | 有 | 无 |
复杂评分卡 | 有 | 无 |
文件名、项目名重构 | 有 | 无 |
参数名、变量常量名重构 | 有 | 无 |
Excel决策表导入 | 有 | 无 |
规则集模版保存与加载 | 有 | 无 |
中文项目名和文件名支持 | 有 | 无 |
服务器推送知识包到客户端功能的支持 | 有 | 无 |
知识包优化与压缩的支持 | 有 | 无 |
客户端服务器模式下大知识包的推拉支持 | 有 | 无 |
规则集中执行组的支持 | 有 | 无 |
规则流中所有节点向导式条件与动作配置的支持 | 有 | 无 |
循环规则多循环单元支持 | 有 | 无 |
循环规则中无条件执行的支持 | 有 | 无 |
导入项目自动重命名功能 | 有 | 无 |
规则树构建优化 | 有 | 无 |
对象查找索引支持 | 有 | 无 |
规则树中短路计算的支持 | 有 | 无 |
规则条件冗余计算缓存支持 | 有 | 无 |
基于方案的批量场景测试功能 | 有 | 无 |
知识包调用监控 | 有 | 无 |
更为完善的文件读写权限控制 | 有 | 无 |
知识包版本控制 | 有 | 无 |
SpringBean及Java类的热部署 | 有 | 无 |
技术支持 | 有 | 无 |
开源版测试过程演示:
http://www.bstek.com/resources/doc/2an-zhuang-yu-pei-zhi.html
体验版测试过程演示:
【文章】智能风控平台核心之风控决策引擎(一)http://www.woshipm.com/pd/2814156.html
【文章】如何正确使用决策引擎https://jingyan.baidu.com/article/d5c4b52b4f1788da560dc515.html
【文章】风险决策引擎应用入门指南https://mp.weixin.qq.com/s/vFz0i_tiMI5B7OOR_GKuXw
【文章】DetRank博士说|一文看懂风控决策引擎https://mp.weixin.qq.com/s/gSVCY0nIEJBxv5emDHD8CA
【文章】智能风控之决策引擎https://mp.weixin.qq.com/s/Yxcqu3n-bnG5ndAzYtkyAw
【文章】从0到1:构建强大且易用的规则引擎https://mp.weixin.qq.com/s/E-9GR0Mun1pudC0V1nXCsg
【文章】架构实战:基于条件配置的简单规则引擎实现https://mp.weixin.qq.com/s/WoYQOJe3ACAi2eeRaf6K-w
【文章】为什么要用规则引擎?(试读) https://mp.weixin.qq.com/s/FFIRYE6eJGNJ6SM7suUXHw
【文章】美团酒旅实时数据规则引擎应用实践https://mp.weixin.qq.com/s/UYN4cxH4gT0WsFTrBKRKGA
【文章】基于 Apache Flink 和规则引擎的实时风控解决方案 https://mp.weixin.qq.com/s/RnUnMtlm4M6nPvjvmo8HWw
【文章】基于规则引擎及智能阈值的实时业务风控系统https://mp.weixin.qq.com/s/oA4gqQewjhOCwdavp1r2eg
【文章】WAF专题4 规则引擎原理https://mp.weixin.qq.com/s/1CcSS-cBYBEehrz1AVxfsA
【文章】专栏 | 神经规则引擎:让符号规则学会变通https://mp.weixin.qq.com/s/GYe1psxy1KMCbV7f3K8f4Q
【文章】规则引擎的原理与功能https://mp.weixin.qq.com/s/G9tTZilh8ysEChDtlgiibw
【文章】java规则引擎开发教程https://wenku.baidu.com/view/075e7678814d2b160b4e767f5acfa1c7aa0082cf.html?rec_flag=default&sxts=1585552556232
【文章】瀚云雾计算Drools规则引擎组件使用分享https://mp.weixin.qq.com/s/GoOnoP6GeFfSw1zmI1G7xg
【教程】Drools介绍与使用https://www.jianshu.com/p/697b756b7453
【教程】Drools5规则引擎开发教程https://wenku.baidu.com/view/a6516373f242336c1eb95e7c.html
【文章】规则引擎drools的rete算法实现原理和事实匹配过程https://cloud.tencent.com/developer/article/1477434
【项目】开源引擎:radar https://github.com/wfh45678/radar
【项目】开源引擎:urule 上海锐道信息技术有限公司 :https://gitee.com/youseries/urule?_from=gitee_search
【项目】开源引擎:aswan 陌陌风控系统静态规则引擎 https://www.oschina.net/p/aswan
【项目】商用引擎:信数 商用决策引擎:http://www.xinshucredit.com/h-col-221.html
至此,与大家一起完成决策引擎的初步了解及梳理。
我是正阳, 很高兴能通过文字认识你,点个关注,后会有期。