4. 规则语言与表达:DRL、决策表、决策树、评分卡

在风控规则引擎中,规则的语言与表达形式直接决定了业务人员与系统之间的沟通效率、规则的维护成本以及推理性能。本章深入剖析四种主流的规则表达形式:DRL(Drools Rule Language)、决策表、决策树和评分卡,并对比其适用场景与优劣。

4.1 DRL(Drools Rule Language)

DRL 是 Drools 规则引擎的原生规则语言,是一种声明式编程语言,允许用户以“当条件满足时执行动作”的方式定义业务逻辑。DRL 文件通常以 .drl 为后缀,包含规则包(package)、导入(import)、全局变量(global)、函数(function)以及规则(rule)等核心元素。

4.1.1 DRL 基本结构

package com.example.fraud.rules

import com.example.fraud.model.Transaction
import com.example.fraud.model.Account

global com.example.fraud.service.AlertService alertService

rule "High Amount Transaction"
    when
        $t: Transaction(amount > 10000, currency == "USD")
        $a: Account(accountId == $t.accountId, riskLevel == "HIGH")
    then
        alertService.sendAlert("High risk transaction detected: " + $t.getTransactionId());
        $t.setFlag("MANUAL_REVIEW");
end
关键要素解析:
  • package:定义规则所属的包名,用于命名空间隔离。
  • import:导入 Java 类或事实类型。
  • global:定义全局变量,通常用于服务注入或日志记录。
  • rule:规则主体,包含 when(条件部分,LHS)和 then(动作部分,RHS)。
  • 模式匹配:使用 $变量名: 类名(属性约束) 进行事实绑定与过滤。

4.1.2 DRL 高级特性

特性 说明 示例
复合条件 使用 &&、||、! 组合多个约束 amount > 1000 && amount < 5000
存在性检查 检查是否存在满足条件的事实 exists(Transaction(amount > 10000))
累积函数 对集合进行聚合计算 accumulate( $t: Transaction(), sum($t.amount) )
规则继承 通过 extends 复用规则属性 rule "BaseRule" ... end → rule "ChildRule" extends "BaseRule"
Salience(优先级) 控制规则触发顺序,值越大优先级越高 salience 100

4.2 决策表(Decision Table)

决策表是一种以表格形式表达规则集合的方式,特别适合条件维度较多、动作组合固定的场景。Drools 支持基于 Excel(.xls/.xlsx) 或 CSV 的决策表,通过 spreadsheet compiler 编译为 DRL 规则。

4.2.1 决策表结构

条件列1:交易金额 条件列2:用户等级 条件列3:设备指纹 动作:风险等级 动作:处置方式
> 50000 VIP 未知 HIGH 人工审核
10000 ~ 50000 普通 已知 MEDIUM 增强验证
< 10000 任意 任意 LOW 放行
最佳实践:决策表适合规则数量在 20~200 条之间的场景。超过 200 条时,建议拆分为多个决策表或改用决策树,以保持可读性。

4.3 决策树(Decision Tree)

决策树是一种树形结构的规则表达方式,每个内部节点代表一个属性测试,每个分支代表测试结果,每个叶子节点代表一个决策结果。在风控中,决策树常用于构建可解释的评分模型或规则集。

4.3.1 决策树与规则引擎的映射

决策树可以等价转换为一系列 if-then 规则,每条从根到叶子的路径对应一条规则。这种转换使得决策树既能保持可视化可解释性,又能直接部署到规则引擎中执行。

决策树结构及规则映射 交易金额 > 5000 <= 5000 用户等级 LOW 风险 VIP 普通 MEDIUM 风险 HIGH 风险 规则映射 规则1: 金额>5000 & VIP → MEDIUM 规则2: 金额>5000 & 普通 → HIGH 规则3: 金额<=5000 → LOW

4.4 评分卡(Scorecard)

评分卡是一种基于权重的线性评分模型,广泛应用于信用评估和欺诈评分。在规则引擎中,评分卡通常以 特征-分值映射表 的形式存在,引擎根据输入特征查找对应分值并累加,最终根据总分阈值做出决策。

4.4.1 评分卡结构示例

特征 取值区间 分值
年龄 18-25 10
年龄 26-40 30
年龄 41-60 25
收入(月) < 5000 5
收入(月) 5000-20000 20
收入(月) > 20000 35
历史逾期次数 0 40
历史逾期次数 1-2 15
历史逾期次数 >=3 0
评分卡决策逻辑:
  • 总分 = 年龄分值 + 收入分值 + 历史逾期次数分值
  • 若总分 ≥ 70:低风险,自动放行
  • 若 40 ≤ 总分 < 70:中风险,增强验证
  • 若总分 < 40:高风险,拒绝交易

4.5 四种表达形式对比

维度 DRL 决策表 决策树 评分卡
可读性 中(需熟悉语法) 高(表格直观) 高(树形可视化) 高(分值透明)
灵活性 极高(支持复杂逻辑) 中(适合固定组合) 中(路径固定) 低(线性累加)
维护成本 中(需开发人员) 低(业务人员可维护) 低(剪枝后稳定) 低(调分即可)
执行性能 高(Rete 算法优化) 高(编译为 DRL) 高(O(log n)) 极高(O(n) 查表)
适用场景 复杂规则、动态条件 多条件组合、合规清单 可解释性要求高的分类 信用评分、额度计算

4.6 混合使用策略

在实际风控系统中,通常不会只使用一种规则表达形式,而是根据场景混合使用:

  • 顶层决策:使用决策树快速分流(如区分新用户/老用户、高/低风险渠道)。
  • 中间层规则:使用 DRL 处理复杂交叉条件(如设备指纹 + 地理位置 + 交易行为组合)。
  • 底层评分:使用评分卡对用户信用、交易风险进行量化打分。
  • 配置层:使用决策表让业务人员快速调整参数化规则(如黑名单、白名单、限额配置)。
风控规则引擎混合使用架构 决策树(快速分流) DRL(复杂交叉规则) 评分卡(量化打分) 决策表(参数配置) 混合架构优势:各层职责清晰,决策树降低计算量,DRL 处理复杂逻辑,评分卡提供可解释分数,决策表赋能业务自助配置
注意事项:混合使用时,必须统一规则引擎的 事实模型(Fact Model) 和 全局变量,避免不同表达形式之间产生数据冲突。建议在规则包层面进行命名空间隔离,并通过 agenda-group 或 activation-group 控制规则执行顺序。