3. 决策表入门
在风控系统中,规则一旦超过三五个条件,用 if-else 堆叠就会迅速失控:分支嵌套深、遗漏组合、修改时牵一发动全身。决策表(Decision Table)正是为解决这类“多条件组合决策”而生的结构化工具。它把复杂的条件逻辑压缩成一张二维表格,让业务、产品、开发和测试能在同一张表上对齐认知。
一、决策表的定义与组成要素
决策表是一种以表格形式表达“条件组合 → 动作结果”的决策模型。它的核心思想是:把所有影响决策的条件列出来,穷举或合并它们的取值组合,再为每种组合指定应执行的动作。一张标准决策表由四个象限组成:
- 条件桩(Condition Stub):左上区,列出所有参与判断的条件名称,如“用户年龄”“历史逾期次数”“设备风险分”。
- 条件项(Condition Entry):右上区,列出每个条件在各规则下的取值,通常用 Y/N 或具体值表示。
- 动作桩(Action Stub):左下区,列出所有可能的决策动作,如“通过”“人工审核”“拒绝”“二次验证”。
- 动作项(Action Entry):右下区,用 X 或 ✓ 标记某条规则下要执行哪些动作。
此外,每条纵向的列称为一条“规则(Rule)”,代表一种条件组合及其对应动作。规则数量由条件取值数决定:若 3 个条件各有 2 种取值,理论组合数为 2³=8 条规则。
核心公式:规则总数 = 条件1取值数 × 条件2取值数 × … × 条件n取值数。当条件较多时,需通过“合并等价规则”和“使用无关项(—)”来压缩表规模。
二、条件与动作的表达方法
决策表的可读性取决于条件项和动作项的写法。常见约定如下:
| 符号 | 含义 | 示例 |
|---|---|---|
| Y | 条件成立 | 年龄 ≥ 18 |
| N | 条件不成立 | 年龄 < 18 |
| — | 无关项,该条件不影响本规则 | 设备分高低均可 |
| X / ✓ | 该规则下执行此动作 | 拒绝申请 |
| 1,2,3 | 条件的具体枚举值 | 风险等级=高 |
下面是一张简化的风控决策表,用于判断是否放款:
条件桩 规则1 规则2 规则3 规则4
信用分 ≥ 700 Y Y N N
历史逾期次数 = 0 Y N Y N
─────────────────────────────────────────────
动作桩 规则1 规则2 规则3 规则4
直接放款 X — — —
人工审核 — X X —
拒绝放款 — — — X
规则1表示信用分高且无逾期,直接放款;规则2、3进入人工审核;规则4直接拒绝。可以看到,决策表把“什么条件下做什么”表达得非常紧凑。
三、决策表与决策树的对比及适用场景
决策表和决策树是风控中两种最常见的规则表达方式,它们并非互斥,而是各有擅长。决策树以树形分支展开,适合条件有先后顺序、逐层收窄的场景;决策表以二维矩阵展开,适合条件之间相对独立、需要穷举组合的场景。
| 对比维度 | 决策表 | 决策树 |
|---|---|---|
| 结构形式 | 二维表格,条件与规则交叉 | 树形分支,逐层判断 |
| 组合覆盖 | 显式穷举,易发现遗漏 | 隐式覆盖,深层分支易被忽略 |
| 条件顺序 | 不强调顺序,条件并列 | 强调顺序,先判断根节点 |
| 可维护性 | 增删条件需调整整表 | 局部增删分支较灵活 |
| 适用场景 | 条件组合有限、需审计全覆盖 | 条件有优先级、需快速分流 |
选择建议:当条件数 ≤ 4 且组合需要严格审计时,优先用决策表;当条件存在明显优先级(如先查黑名单再查信用分)时,用决策树更自然。实际项目中,常先用决策树做粗筛,再用决策表做精细组合判断。
四、常见误区与复盘
初学者使用决策表时,最容易踩以下三个坑:
- 条件项取值不完整。例如只写了“信用分高/低”,却漏掉“信用分缺失”这一情况,导致线上出现未定义行为。复盘方法:对每个条件列出所有可能取值,包括异常值和空值。
- 规则冲突未检测。两条规则条件项相同但动作项不同,系统执行时结果不确定。复盘方法:在表完成后做一次“同条件项扫描”,确保没有重复列。
- 无关项滥用。为了压缩表格,把本应区分的条件标成“—”,导致规则语义模糊。复盘方法:每使用一个“—”,都要问“这个条件真的不影响动作吗?”
关键提醒:决策表不是写完就结束的文档,而是需要和测试用例一一对应的“可执行规格”。建议每条规则至少对应一个测试用例,规则覆盖率达到 100% 才算合格。