知乎|智能风控决策引擎系统可落地实现方案(一)规则引擎实现

I.决策引擎系统介绍

风控决策引擎系统是在大数据支撑下,根据行业专家经验制定规则策略、以及机器学习/深度学习/AI领域建立的模型运算,对当前的业务风险进行全面的评估,并给出决策结果的一套系统。

file

决策引擎,常用于金融反欺诈、金融信审等互金领域,由于黑产、羊毛党行业的盛行,风控决策引擎在电商、支付、游戏、社交等领域也有了长足的发展,刷单、套现、作弊,凡是和钱相关的业务都离不开风控决策引擎系统的支持保障。决策引擎和规则引擎比较接近(严格说决策引擎包含规则引擎,之前也有叫专家系统,推理引擎),它实现了业务决策与程序代码的分离。

一套商业决策引擎系统动辄百万而且需要不断加钱定制,大多数企业最终仍会走上自研道路,市场上有些开源规则引擎项目可参考,比较出名的开源规则引擎有drools、urule,都是基于Rete算法,都是基于java代码实现,一些企业会进行二次开发落地生产。而这类引擎功能强大但也比较“笨重”,易用性以及定制性并不够好,对其他语言栈二次开发困难。今天我们对决策引擎进行抽象建模,一步步打造一套简单实用的实现,这里会基于golang语言进行实现。

关于如何实现决策引擎的文章市面极少见,实践生产落地的经验分享也基本没有。我会结合工作实践及个人思考,从业务抽象建模,产品逻辑规划以及最终技术架构和代码实现等方面给出全方位的解决方案。

II.规则和决策抽象建模

举例说明什么是规则和决策:

“如果年龄小于18岁,那么就拒绝处理”

对这条规则进行抽象建模成条件表达式:特征 (年龄) 运算符(小于) 阈值(18) ---> 触发结果(拒绝)

这里产生几个概念:特征feature、运算符operator、阈值value,这三要素构成条件表达式condition,加上触发结果decision,组成了规则rule的基础元素
进一步举例:
“如果年龄小于18岁或年龄大于50岁,那么就拒绝处理”

条件表达式1:特征 (年龄) 运算符(小于) 阈值(18)

条件表达式2:特征 (年龄) 运算符(大于) 阈值(50)

逻辑关系:(或)

触发结果:(拒绝) 任何一个为false即为拒绝

这里多了逻辑关系,规则可由多个条件表达式组成,对表达式结果再进行逻辑运算。

再举个例子:

“如果职业是学生,那么就拒绝处理”

条件表达式:特征(职业) 运算符(等于) 阈值(学生)触发结果(拒绝)

其他可选阈值:老师、工人、农民、程序员

“如果订单返回结果中包含exception字样,那么就异常处理“

条件表达式:特征(订单返回结果)运算符(contain) 阈值(exception)触发结果 (异常)

这里有了不同的特征类型,一般特征类型总结如下:

数值型,对应运算符可以有 >、<、=、>=、<=、==、!=,值必须为数字。
枚举型,对应运算符只有==,值为字符串数组[...]{"学生","老师","工人","农民","程序员"}
字符串型,对应运算符有= 、 != 、like 、in 、contain, 值为字符串或字符串数组。
触发结果:可以为“通过”、“拒绝”、“记录”、“告警”、“异常”等,任意自定义结果。

对于一些名单类特征,比如规则是“命中黑名单则触发拒绝”,将命中结果抽象为枚举型特征,对应条件表达式就是:命中黑名单 等于 true/false。

这里做个总结:一条规则的执行,先通过数据(身份证号)计算出特征(年龄),然后带入条件表达式(年龄<18)计算,并对多个表达式结果做逻辑运算,最终根据逻辑运算决定是否触发结果。

file


相关文章:
知乎|智能风控决策引擎系统可落地实现方案(一)规则引擎实现
智能风控筑基手册:全面了解风控决策引擎

为者常成,行者常至