基于规则引擎的风控决策系统介绍与演示
基于规则引擎的风控决策系统介绍与演示
项目介绍
项目地址:https://github.com/wnhyang/coolGuard
基于规则引擎的风控决策系统,旨在为企业提供高效、灵活且可扩展的风险控制解决方案。
核心功能
以下是终极目标,部分已经实现,部分未实现,开源版本不会包含所有功能
实时指标计算,同步决策,异步决策,反馈
普通字段与动态字段:普通字段支持字符串、整数、小数、日期、布尔值、枚举,动态字段通过普通计算计算而来,高度可配置
数据接入:灵活配置数据接入的入参和出参
指标:基于时间计算的指标,目前已有:求和、次数统计、最大值、最小值、平均值、关联次数、历史取值,未来计划加入:移动距离、移动速度、趋势、方差、标准差、业务链、连续次数(不同与次数统计,中间插入其他状态则重新统计)、公式等
规则:条件支持:普通条件、指标条件、名单条件、正则条件、公式/脚本条件,动作支持:添加标签、添加名单、设置字段、发送消息,可设置正式和模拟状态
策略:模式分为:顺序模式、最坏模式、投票模式、权重模式
策略集:编排策略,是规则引擎核心作用的体现
指标、规则、策略、策略集版本管理
事件中心:事件数据分析、可视化、报表
豁免管理:配置式豁免决策,临时通行
数据服务:名单、标签、IP/证件号/经纬度/手机解析
三方集成:将三方以配置的方式接入系统
流量治理:熔断、限流、降级
监控中心:指标/规则/策略/执行、结果、效率监控等
系统管理:用户管理、角色管理、权限管理、日志管理、系统配置等
高级实验特性:A/BTest、冠军挑战、回测、仿真、模型、图谱分析
技术栈
JDK 17
Maven 3.5+
Spring Boot 3
MyBatis-Plus
Redisson
MapStruct
SaToken
LiteFlow
存储与中间件
MySQL 5.7+
Redis
Kafka
Elasticsearch
架构
待补充
演示
字段

字段分为普通字段与动态字段,普通字段就是基础字段,表示接入系统的变量,类型有布尔、日期、枚举、小数、整数、字符串。动态字段是普通字段的初步加工,可以将其理解为函数,需要设置动态字段脚本,也就是公式,这里是用的是QLExpress。这里动态字段脚本只是普通的文本域,这是最简单的实现方式,如果想扩展考Mentions组件,像聊天输入框一样可以@某字段,终极方案就是使用编辑器组件,不仅能提示关键字还能提示方法等。
.102arilfjj.webp)
字段是系统的基础,用于后面的指标计算、规则配置、数据存储等等方面,非常重要。
另外,字段组是将字段进行分类,目前规划其主要作用是用于后面数据展示更清晰。
.45hsqgfuge.webp)
接入
字段定义了系统可以处理哪些变量,接入决定了数据接入的方式与转换方法。
接入的输入和输出都是可配置的,未来可以考虑加入加解密或者是身份认证等安全保障措施。
另外每个接入配置对应三个RequestMapping,分别是{accessCode}/test、{accessCode}/async、{accessCode}/sync,test用于接口测试,async用于异步决策,通常用于事后事件,计划是可以通过读取数据源或者订阅MQ方式接入,sync用于同步实时决策,这也是风控决策的重要体现。
.58hi1cbobx.webp)
已有的接入配置提供了前端快捷测试页面,参数根据配置的字段类型动态生成的,有的是输入框,有的是日期选择框,有的是开关,有的是选择框等。
应用
.41y6sqmrql.webp)
应用是对事件的定级划分,未来可以考虑以此做数据权限。图中展示的密钥暂时还没用。
指标
.6m415dmqct.webp)
前面已经有很多篇关于指标的文章了,这里还是说一下。
之前的指标管理设置两个tab(运行区和编辑区),但后面在做策略集/策略/规则的管理时,将这个舍弃了,因为运行区的功能都能在编辑区体现,而且这样稍微有些割裂。优化后,运行的就体现在名称右面的标签上了,有历史版本但未运行的也体现了,可以通过搜索条件筛选。
.7pf9s4tt8.webp)
目前只支持了图上这些类型,要注意的是不同的指标配置是不同的,所以整个表单也是动态的。
另外再讲一下指标有场景的划分,目前场景类型有应用和策略集,这是有点缺憾的。
如下,可以从应用和策略集的角度选择,但是缺少跨应用的,当然你说策略集角度时选择policy1.2和policy2.2这不就是跨应用吗?
确实,这样也没错,但是更好方法是为策略集设置多标签,从标签的角度选择。
如下,策略加上标签后,从标签角度选择就行了。这样既做到跨应用也有利于后面的事件分析。
比如app1和app2都有相关与登录的策略集
.6pnn33ft2j.webp)
处置
.2dotvjwhkb.webp)
处置就是风控决策结果,划分了等级,用于比较。
策略集
.26lm04ac4r.webp)
策略集编排的重要体现,目前只是文本域输入的方式写LiteFlow的EL,未来会做成像LogicFlow这样的。
可编排的不仅是策略,还有三方(其实除了本系统外都可以算三方,包含公司内部的,通常会是一些数据解析服务提供方、征信、公安涉诈等等,而且这些一般是付费通过包年包月或是计量的,未来还会加入这方面的管理),组合这些组件除了简单的条件分流,还可以是A/BTEST,仿真等等。
策略
.6ikf7ntnmy.webp)
策略我也发了好几篇文章讲过了,尤其是关于策略模式(顺序、最坏、权重、投票)推荐一看。
规则
.7sncdzbmy2.webp)
简单来讲规则就是IF(x){a}ELSE{b},如上条件是组合形式,命中后未命中都可以设置额外的内容,如:将本次事件中某些字段加入某些名单,为整个事件打标签,取事件中的手机、关联邮箱或webhook等等发送消息。
.2obnopbppl.webp)
事件
决策的流程已经介绍完了,每笔事件都通过Kafka异步记录在ElasticSearch里,数据至少包含:1、字段;2、指标(信息、版本、结果);3、策略集(即最终结果,包括策略集、策略与规则的信息、版本、结果等);4、标签等等
.175imy7kyw.webp)
es数据检索还未集成在项目中,计划是收费内容,敬请期待吧。
可视化是使用Kibana配置的DashBoard通过iFrame或外链方式还是使用Echart还待确定。
.9dd3dg8uef.webp)
其他
.67xleiefhj.webp)
基础的系统管理就不过多介绍了。
在线体验
计划中,方案后面再讲吧。
大致是:关注公众号,分配一个有效期为当天的账号密码,限制访问时间和权限,每天定时清空数据。
声明
前端源码仅对企业级用户开放,需付费购买。 未经授权,禁止使用本项目源码申请软著和专利,保留追究法律责任的权力!
联系
Github:https://github.com/wnhyang/coolGuard,关注项目发展
公众号:无奈何杨,关注多元内容
B站:无奈何杨,关注视频分享
QQ频道:https://pd.qq.com/s/crz7xwtsg,关注讨论聊天
服务与支持
