CoolGuard风控系统配置评分卡、权重策略|QLExpress脚本

最近在思索关于决策流编排中策略、规则、模型等一些设计问题,在考虑未来接入模型(python模型、pmml模型等)时,看到很多同类系统都有评分卡功能,然后就看到这篇文章juejin.cn/post/731397...,然后就发现,这个不是已经实现了,但是从来没有说明怎么利用现有功能来做评分卡。那这篇就详细展开讲一下。

评分卡示例表

变量 条件区间 分值
age <=20 10
>20, 且<=25 20
>25, 且<=35 30
>35, 且<=45 25
>45 20
gender 10
15
未知 0
maritalStatus 已婚 30
未婚 20
未知 0

通过代码很容易实现上面的评分卡,那么在系统中应该怎么做?

步骤

字段

首先新增了三个字段

接口

因为是新增的字段,还需要配置在接口请求参数中

然后分别配置策略集、策略、规则

策略集

策略集的chain就是决策流,只是目前还是表达式,不是很友好。

如下图表示的是并行执行策略编码为scorecard的策略,当然一条策略串并差别不大。

策略

策略选择权重模式,设置阈值列表,注意最大的分数要足够大,判断时是从小到大直到满足小于等于。

规则

规则是权重策略下的规则时就不用配置处置了,额外需要配置的是计算表达式。

如下配置了6条规则

年龄的评分规划了5条规则,具体的一条规则如下图,其他类似

性别和婚姻状况的评分可以合并为一条规则,如下图,当然想配置和年龄一样的多条也是可以的

java 复制代码
score = 0;
if (N_S_gender == "男") {
    score = score + 10;
} else if (N_S_gender == "女") {
    score = score + 15;
} else {
    score = score + 0;
}

if (N_S_maritalStatus == "已婚") {
    score = score + 30;
} else if (N_S_maritalStatus == "未婚") {
    score = score + 20;
} else {
    score = score + 0;
}
return score;

将所有的策略集、策略、规则发布上线后就可以测试了。

测试

因为现在系统还未提供直接测试规则/策略/策略集的方法,只能发接口形式整体测试

或者如下这种方式

测试如上分别设置年龄30、性别男、已婚,结果如下

再对比阈值列表,(56,89]最终结果为视频

权重策略

其实从上面就能理解权重模式的策略了,简单可以归结为下面公式,权重策略最终分数结果就是所有规则的以下两项乘积之和。
f ( x ) = ∑ i = 0 n c i ( x 1 ) f i ( x i ) f(\text{x}) = \sum_{i=0}^{n} c_i(x_1)f_i(x_i) f(x)=i=0∑nci(x1)fi(xi)

c i ( x i ) c_i(x_i) ci(xi):每个规则条件函数,在代码逻辑中是true/false,但在数据函数中是1/0

f i ( x i ) f_i(x_i) fi(xi):每个规则的函数

之前是有分享过这篇文章的mp.weixin.qq.com/s/_5Cc5IMd1...,但是现在看看其实很多已经变化了,只能简单参考,后续还需要更新一下。

其他玩法

因为这个评分卡相对简单,其实可以有更多的其他玩法

相比于常规的配置一条条规则外,甚至可以写一条脚本实现,如下

java 复制代码
score = 0;

if (age <= 20) {
    score = score + 10;
} else if (age > 20 && age <= 25) {
    score = score + 20;
} else if (age > 25 && age <= 35) {
    score = score + 30;
} else if (age > 35 && age <= 45) {
    score = score + 25;
} else if (age > 45) {
    score = score + 20;
}

if (gender == "男") {
    score = score + 10;
} else if (gender == "女") {
    score = score + 15;
} else {
    score = score + 0;
}

if (maritalStatus == "已婚") {
    score = score + 30;
} else if (maritalStatus == "未婚") {
    score = score + 20;
} else {
    score = score + 0;
}

return score;

单论这个场景脚本位置不限,可以是在动态脚本里

可以是在一个规则里,创建一个规则把脚本作为表达式就行,需要注意的可能就是上面的age、gender、maritalStatus需要换成之前配置的字段,也就是N_N_age、N_S_gender、N_S_maritalStatus

而且这样也有一个很重要的好处:权重策略以分数为基础最终的产出其实也是处置结果,但实际上更多情况分数还会被再次利用,如上假如评分卡产出是信誉分或其他,还会被后面的规则或模型使用,那么他就不能作为结果产出,而是作为一种数据转换(类似于三方接口拿字段数据)。如果作为动态字段那就很合适了,可以以此作为规则条件,甚至可以作为指标等等。

不过也不是所有的评分卡都适合在动态字段里设置,像上面的例子,需要的字段都已经在动态字段之前就存在,就很适合。

最后

另外这段时间还有其他的更新优化,无法一一列举,只说一些关键的吧。

1、消息模版

做了关于消息模版的校验等优化

2、字段设置

如下图,规则命中动作的字段设置,支持清空、设置常量、设置变量。不过还不支持表达式。

3、字段扩展

新增了字段扩展接口,增加灵活性

项目默认实现,在普通字段解析完成后做一些归属地的字段设置。

see you!

相关推荐
En^_^Joy3 小时前
Django项目配置全攻略:settings配置文件
后端·python·django
AC赳赳老秦5 小时前
公开图片 OCR 数据提取:OpenClaw 合规采集公开信息图,识别文字与表格并转化为结构化数据
java·大数据·前端·数据库·python·php·openclaw
谢慧琼5 小时前
2026零基础做企业网站,低成本搭建官方网站
服务器·前端·javascript
weixin_431600446 小时前
前端数据埋点(1):一次点击如何变成一条埋点
前端·js·数据埋点
IT_陈寒6 小时前
Python线程池吞了异常还不告诉我,这谁顶得住啊
前端·人工智能·后端
小强库计算机毕业设计6 小时前
SpringBoot+Vue3 学生宿舍管理系统实战
java·spring boot·后端·vue·学生宿舍管理系统
小狼1836 小时前
实践6|SDD 实战:AI 写的规格被推翻了四次
后端·claude
篮框坏了6 小时前
"DeepSeek Harness 实测:一毛钱干三活,但默认配置是个坑"
后端·ai编程
计算机魔术师6 小时前
同样是AI辅助建造,为什么有的游戏三个月就烂尾了?
前端
jobBridge216 小时前
大模型到底是怎么"想"的?我把 Transformer 拆开,发现它其实是个"接词狂魔"
人工智能·后端·编程语言