金融风控规则引擎实战:贷前用户筛查与额度授信的完整流程

本文基于 JVS-Rules 规则引擎,手把手搭建一个完整的贷前风控决策流,涵盖数据接入、变量加工、规则集、评分卡、额度决策及API调用。


一、风控业务背景

贷前审批是信贷业务的第一道防线。一个典型的流程包括:

  1. 用户实名验证(身份证、手机号)

  2. 黑名单过滤(内部黑名单、第三方欺诈库)

  3. 反欺诈规则(设备指纹、异常行为)

  4. 信用评估(征信分、收入负债比、多头借贷)

  5. 额度计算(评分卡 → 授信额度)

传统实现方式:每个环节硬编码或使用 Drools DRL 文件。维护成本高,策略上线慢(周级),且业务人员无法参与。

使用 JVS-Rules 可视化决策流后,风控策略可做到小时级上线,且业务人员可独立完成 80% 的规则调整。


二、整体决策流设计

我们设计的贷前风控决策流包含以下节点(按执行顺序):

序号 节点类型 功能说明
1 开始节点 定义入参(用户ID、申请金额等)
2 数据源节点 调用征信API、查询内部数据库
3 变量加工节点 将原始数据转换为业务因子(负债收入比、多头借贷次数等)
4 规则集节点 硬规则拒绝(年龄不符、黑名单、征信分过低)
5 评分卡节点 对通过硬规则的用户进行信用评分
6 决策表节点 根据评分结果映射授信额度
7 结束节点 返回审批结果(通过/拒绝)、额度、拒绝原因码

下面逐步拆解每个节点的配置细节。


三、第一步:配置入参(开始节点)

在决策流基本信息中定义入参,供后续节点使用。本例入参如下:

参数名 字段Key 类型 说明
用户ID userId String 唯一标识
申请金额 applyAmount Double 用户申请贷款金额
身份证号 idNo String 用于身份核验

入参 JSON 格式自动生成:

json

复制代码
{
  "userId": "U10001",
  "applyAmount": 50000,
  "idNo": "410***************"
}

四、第二步:数据源接入

风控决策需要多种数据来源。JVS-Rules 支持三种数据源接入方式:

4.1 接入征信API(API数据源)

配置步骤

  1. 进入「数据源」管理,点击「新增」→「API 数据源」

  2. 填写数据方名称:「百行征信」

  3. 配置接口:

    • URL:https://api.baixingcredit.com/v1/query

    • 请求方式:POST

    • 请求头:Authorization: Bearer {``{token}}

    • 入参:{ "idNo": "{``{idNo}}" }

  4. 配置数据解析规则:返回 JSON 中提取 creditScore(征信分)、overdueCount(逾期次数)、debtAmount(负债总额)

  5. 保存并测试接口

4.2 接入内部黑名单表(MySQL数据源)

配置步骤

  1. 新增 MySQL 数据源,填入数据库连接信息

  2. 点击「同步结构」,选择 blacklist

  3. 创建复合变量「黑名单查询」:

    • 数据过滤条件:idNo = {``{idNo}}

    • 输出字段:is_black(存在记录即命中)

4.3 接入用户历史订单表(SQL变量)

如果内部数据库表结构复杂,可使用 SQL 变量直接写查询语句:

sql

复制代码
SELECT 
  COUNT(*) AS order_count_90d,
  SUM(amount) AS total_amount_90d
FROM orders
WHERE user_id = #{userId}
  AND create_time >= DATE_SUB(NOW(), INTERVAL 90 DAY)

配置参数:userId(String,必填),模拟值:"U10001"


五、第三步:变量加工

原始数据不能直接用于规则,需要加工成业务因子。

5.1 基础变量(函数加工)

在「变量管理」中创建以下基础变量:

变量名 计算公式 说明
年龄 AGE(idNo) 从身份证号提取年龄
负债收入比 DIVIDE(debtAmount, monthlyIncome) 负债总额 / 月收入
多头借贷次数 SUM(applyCount_30d) 近30天申请机构数
是否高龄 GT(age, 60) 布尔值,年龄>60为true

JVS-Rules 提供 100+ 内置函数,包括文本、数学、逻辑、集合、时间等。上述 AGEDIVIDEGT 均为内置。

5.2 复合变量(多行数据聚合)

我们需要「近6个月逾期次数」。创建复合变量:

  • 数据源:repayment_record

  • 过滤条件:user_id = #{userId} AND status = '逾期' AND due_date >= DATE_SUB(NOW(), INTERVAL 6 MONTH)

  • 分组:无(直接统计)

  • 聚合:COUNT(*) → 输出 overdue_count_6m

然后创建基础变量 has_overdueGT(overdue_count_6m, 0)


六、第四步:硬规则过滤(规则集节点)

在决策流画布上拖入「规则集」节点,配置多条并行判断的规则。规则之间为 OR 关系(任何一条命中即触发拒绝)。

规则集配置如下:

规则名称 条件表达式 命中后动作
年龄不符 年龄 < 18 OR 年龄 > 65 拒绝,原因码 A01
黑名单命中 黑名单查询.is_black == true 拒绝,原因码 B02
征信分过低 creditScore < 550 拒绝,原因码 C03
严重逾期 overdue_count_6m >= 3 拒绝,原因码 D04
多头借贷超限 多头借贷次数 > 5 拒绝,原因码 E05

配置界面操作

  1. 点击规则集节点 → 「添加规则」

  2. 每条规则中点击「添加关系组」,选择变量、比较符、比较值

  3. 设置命中后的分支:可连接到结束节点(拒绝),或继续执行(若设计为累计规则)

本案例设计为:任何硬规则命中,直接跳转到结束节点返回拒绝。在画布上将规则集的「拒绝」连线连接到结束节点,「通过」连线连接到评分卡节点。


七、第五步:信用评分(评分卡节点)

通过硬规则的用户进入评分卡。评分卡节点采用「简单评分卡」或「复杂评分卡」。本例使用简单评分卡。

配置评分卡

  1. 拖入「简单评分卡」节点

  2. 设置评分维度(每个维度独立评分,最后加权求和):

维度 条件范围 分值 权重
年龄 25-40岁 30 1
年龄 41-55岁 20 1
年龄 18-24岁 或 56-60岁 10 1
月收入 ≥20000元 40 1
月收入 10000-19999元 25 1
月收入 5000-9999元 10 1
征信分 ≥700 30 1
征信分 600-699 15 1
征信分 550-599 5 1
负债收入比 <0.3 20 1
负债收入比 0.3-0.5 10 1
负债收入比 >0.5 -10 1

总分计算:简单求和(权重均为1时,总分 = 各维度分值之和)。最高分 = 30+40+30+20 = 120,最低分可能出现负数。

评分卡节点输出 totalScore 变量,供后续决策表使用。


八、第六步:额度决策(决策表节点)

根据评分结果和申请金额,决策表输出最终额度(或拒绝)。

决策表配置

评分区间 申请金额 ≤ 额度上限 审批结果 授信额度 拒绝原因
≥100 任意 通过 申请金额 × 1.0 -
80-99 ≤30000 通过 30000 -
80-99 >30000 拒绝 0 额度不足
60-79 ≤10000 通过 10000 -
60-79 >10000 拒绝 0 额度不足
<60 任意 拒绝 0 信用评分低

在 JVS-Rules 决策表节点中:

  1. 点击「新增维度」添加条件列:totalScore 区间、applyAmount 比较

  2. 添加结果列:result(通过/拒绝)、creditLimit(数值)、rejectReason(字符串)

  3. 逐行填写规则

决策表节点输出结果变量,供结束节点使用。


九、第七步:结束节点自定义输出

结束节点可以自定义输出字段。本例输出:

输出字段 类型 说明 取值来源
approved Boolean 是否通过 决策表.result == "通过"
creditLimit Double 授信额度 决策表.creditLimit
rejectCode String 拒绝原因码 规则集命中的原因码 或 决策表.rejectReason
totalScore Integer 评分卡得分 评分卡.totalScore

配置方式:在结束节点属性中点击「新增结果」,选择「变量」类型,从下拉框中选择上述变量。


十、在线测试与API调用

10.1 在线测试

决策流配置完成后,点击「模拟测试」按钮,输入测试数据:

json

复制代码
{
  "userId": "U10001",
  "applyAmount": 50000,
  "idNo": "410***************"
}

点击「执行」,系统会:

  • 高亮显示实际执行的节点路径

  • 鼠标悬停任何节点可查看输入输出

  • 最终显示结束节点的输出结果

10.2 API 调用

决策流启用后,业务系统可通过 HTTP 调用:

请求示例(cURL)

bash

复制代码
curl -X POST https://your-domain/api/risk/projectFlow/call/FLOW_CREDIT_001 \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk_xxxxx" \
  -d '{"userId":"U10001","applyAmount":50000,"idNo":"410***************"}'

响应示例

json

复制代码
{
  "code": 0,
  "msg": "success",
  "data": {
    "approved": true,
    "creditLimit": 50000,
    "rejectCode": "",
    "totalScore": 95
  },
  "timestamp": "2026-04-13T14:30:00.123Z"
}

10.3 调用日志

每次调用都会记录在「执行日志」中,可查看:

  • 完整入参和出参

  • 各节点执行耗时

  • 决策路径可视化回放

这对风控合规审计非常关键。


十一、总结

通过 JVS-Rules 规则引擎,我们仅用拖拽配置 + 少量函数就完成了一个企业级贷前风控决策流。相比硬编码方式:

对比项 传统硬编码 JVS-Rules 规则引擎
策略上线周期 3-5 天 2 小时
业务人员参与度 低(只能提需求) 高(可配置规则、评分卡、决策表)
规则变更风险 高(代码回归) 低(可视化测试,路径高亮)
合规审计 需人工审查代码 自动记录版本、执行日志
维护成本 高(专职开发) 低(运维+业务)

本文完整决策流已在 JVS-Rules 中验证通过。如果你正在构建或重构风控系统,建议尝试规则引擎方案。

注:JVS-Rules 社区版开源免费,可满足大部分中小企业的风控需求。商业版提供动态公式、交叉决策表、异步执行等高级功能。

相关推荐
低代码布道师15 小时前
微搭低代码MBA 培训管理系统实战 30——学习卡
学习·低代码·rxjava
低代码布道师15 小时前
微搭低代码MBA 培训管理系统实战 29——我的课表
低代码
踩着两条虫1 天前
VTJ核心引擎开源项目概览
前端·vue.js·低代码
聊点儿技术2 天前
从“查到”到“用对”:查IP归属地后的5步决策框架
ip·电商·ip归属地查询·广告投放·风控·金融风控·ip地址查询
墨香幽梦客3 天前
遗留系统现代化:利用低代码平台快速封装老旧ERP接口的实践案例
低代码
低代码布道师4 天前
微搭低代码MBA 培训管理系统实战 27——快捷功能入口与班级公告展示实现
低代码
踩着两条虫4 天前
效率翻倍!AI智能体深度解析:自然语言 → DSL → Vue组件
前端·人工智能·低代码
冲浪中台4 天前
2026年低代码选型思考
低代码
云捷配低代码5 天前
低代码库存管理系统实战:实现库存预警、出入库自动化管理
运维·低代码·自动化·数字化·敏捷流程·数字化转型