风控决策系统决策流,策略模式,权重、顺序、投票、最坏

个人语雀:wnhyang

Github:wnhyang - Overview

项目:github.com/wnhyang/coo...,开源版


也是许久没有更新了,多的话就不说了,最近再更一下吧😁

决策流

这里配置一个策略路由,当然现在使用编码方式,非常不友好,有待改善。

使用的是LiteFlow规则编排,参考:liteflow.cc/pages/e7699...

makefile 复制代码
cmpData0 = '{"relation":"AND", "type":"list","leftValue":"N_S_mobileNo","logicType":"in","rightType":"input","rightValue":"globalMobileWhiteList"}';

cmpData1 = '{"relation": "AND", "type": "script", "leftValue": "${N_F_transAmount}%10==0", "logicType": "", "rightType": "input", "rightValue": "" }';

cmpData2 = '{"relation": "AND", "type": "script", "leftValue": "${N_F_transAmount}%10==5", "logicType": "", "rightType": "input", "rightValue": "" }';

cmpData3 = '{"relation": "AND", "type": "script", "leftValue": "${N_F_transAmount}%10==7", "logicType": "", "rightType": "input", "rightValue": "" }';

IF(NOT(cond.data(cmpData0)),
  IF(cond.data(cmpData1),
  policy.tag("apploginweight"),
  IF(cond.data(cmpData2),
    policy.tag("appLoginOrder"),
    IF(cond.data(cmpData3),
      policy.tag("appLoginVote"),
      policy.tag("appLoginWorst")
    )
  )
  )
);

                            

实际上路由流程如下

该策略集下配置了四种策略,如下

接下来,同时具体的例子说明每个策略模式是如何运行的

权重模式

权重模式是最特殊的,需要额外配置阈值列表,如下

其下有三个规则

金额10%,没有任何条件,满足后$交易金额x0.1

时间大于23点金额0.8,事件时间小时大于等于23点,$交易金额x0.8

时间小于5点金额0.7,与上面类似,只不过这里使用三元表达式,同时去掉了额外的条件,事件时间小时小于等于5,$交易金额x0.8

测试一下

发送后,结果如下

通过seqID搜索到一条数据

其策略结果如图,首先看到确实是走了权重策略,命中了"金额10%"规则,结果为5100.1=51,命中了"时间小于5点金额0.7"规则,结果为5100.7=357,最终结果为51+357=408,根据阈值配置"50<拒绝<=999"得出最终结果"拒绝"。

顺序模式

其下配置了三条规则,名称已经说明了规则的配置,就不详细展开了。

顺序模式也可以叫做首次模式,指的是顺序运行规则,在第一个风险规则(除通过外其他是风险规则)命中后返回。

测试一下

同样找到那条数据,看到执行了第二个规则就返回,最终结果"语音"。

此时再看,规则命中率,前两个都100%,最后一个根本没运行

改一下金额参数再试一下,此时就是拒绝了

此时再看,第二个没有命中了,第三条命中,最终结果为"拒绝"。

投票模式

投票模式顾名思义,以处置结果做维度统计命中票数,票数高者为最终结果,票数一致时以配置的处置分值高的为最终结果(如通过是0,语音是36)。

测试一下

可以看到这笔"语音"和"通过"各两笔,因为语言分值更高,最终结果为"语音"。

再来一笔

"通过"3票,"语音"1票,最终结果"通过"

最坏模式

最坏模式更容易理解了,就是取所有命中规则中处置等级最高的,因为这个规则配置了很多指标,测试起来相对复杂,就省略了。

最后补充一下,前面决策流配置的白名单不执行任何策略的吧

命中全局白名单,此时不执行任何规则。

补充

三方请求

决策流还可以有很多玩法

如这里配置了一个三方请求如下

决策流修改,在原先的流程前增加了一个api.tag("1"),表示三方配置id为1的,当然也可以把整个json提取出来作为.data也可以。

接着看效果,随便发一笔,这里是没有传"地区"和"asn"的

但在最终的数据中看到出现了这两个值

对应日志中,发送了这个请求,以配置填充了字段。

扩展函数

系统内置了以下函数,可以在动态字段、脚本条件中使用。

如下展示了动态字段中使用


个人语雀:wnhyang

Github:wnhyang - Overview

项目:github.com/wnhyang/coo...,开源版

相关推荐
Patrick_Wilson2 小时前
Go 为什么需要 defer?从函数怎么收尾说起
后端·go·编程语言
苏三说技术2 小时前
DeepSeek Harness入驻B站,评论区被干成了大型插件集市!
后端
橙序员小站2 小时前
我一句话让 AI 把公众号工作台搭完了:部署实测记录
后端
Patrick_Wilson2 小时前
从文本输出理解 Go 方法与接口
后端·go·编程语言
QCoding3 小时前
企业级Agent Evaluation实战:Agent能跑就能上线?AI Agent到底怎么测?
后端·spring
苍何3 小时前
让 WorkBuddy 操控浏览器,干活有点猛啊1
后端
IT_陈寒4 小时前
当Java的hashCode遇上Lombok,我的缓存被全清了
前端·人工智能·后端
XW4 小时前
常用提示词(Prompt)框架总结
后端
ServBay4 小时前
DeepSeek 再次崩了,DeepSeek V5正在路上?
后端·deepseek