Text2SQL在信贷风控中的工作流实践

一、信贷风控场景的技术痛点与Text2SQL价值

信贷风控的核心是通过多维度数据(如用户征信、交易记录、行为轨迹)构建决策模型,传统方案依赖人工编写SQL查询数据,存在三大痛点:

  1. 需求沟通成本高:业务人员需通过技术团队转译需求,易因术语偏差导致查询偏差;
  2. SQL编写效率低:复杂风控规则(如多表关联、动态条件)需手动编写长SQL,易出错且维护困难;
  3. 结果解析繁琐:SQL返回的原始数据需二次处理才能匹配风控策略(如阈值判断、权重计算)。

Text2SQL技术通过自然语言转SQL,可显著降低技术门槛。结合Coze工作流(一种低代码任务编排框架),能实现从需求输入到结果输出的全链路自动化,尤其适合信贷风控中高频、动态的查询场景。

二、Coze工作流架构设计

1. 整体流程

Coze工作流通过模块化节点串联Text2SQL的核心环节,典型架构如下:

  1. graph TD
  2. A[业务需求输入] --> B[NLU解析]
  3. B --> C[SQL生成]
  4. C --> D[数据库执行]
  5. D --> E[结果解析]
  6. E --> F[风控策略匹配]
  7. F --> G[决策输出]

2. 关键节点设计

(1)NLU解析节点

  • 功能:将自然语言需求拆解为结构化查询要素(如表名、字段、条件)。
  • 实现
    • 使用意图识别模型区分查询类型(如“查询用户逾期记录” vs “计算用户风险评分”);
    • 实体抽取模型提取关键参数(如“时间范围=最近3个月”“阈值=逾期次数>2”)。
  • 示例
    输入:“查找过去6个月内,信用卡消费超过5万元且逾期超过2次的用户”
    输出:
    1. {
    2. "tables": ["credit_card_transactions", "user_overdue_records"],
    3. "conditions": [
    4. {"field": "transaction_date", "operator": ">=", "value": "2023-01-01"},
    5. {"field": "amount", "operator": ">", "value": 50000},
    6. {"field": "overdue_count", "operator": ">", "value": 2}
    7. ]
    8. }

(2)SQL生成节点

  • 功能:将结构化查询要素转换为可执行SQL。
  • 实现
    • 模板引擎:预定义高频查询模板(如多表关联、聚合计算),通过参数填充生成SQL;
    • 动态生成:对复杂需求(如嵌套条件、子查询)使用算法动态拼接SQL片段。
  • 示例
    输入上文JSON后,生成SQL:
    1. SELECT u.user_id, u.name
    2. FROM users u
    3. JOIN credit_card_transactions t ON u.user_id = t.user_id
    4. JOIN user_overdue_records o ON u.user_id = o.user_id
    5. WHERE t.transaction_date >= '2023-01-01'
    6. AND t.amount > 50000
    7. AND o.overdue_count > 2
    8. GROUP BY u.user_id, u.name;

(3)结果解析节点

  • 功能:将SQL返回的原始数据转换为风控策略可用的结构化指标。
  • 实现
    • 字段映射:将数据库字段(如overdue_count)映射为风控变量(如risk_level);
    • 计算逻辑:嵌入阈值判断(如if overdue_count > 3 then risk_level = '高')或权重计算(如score = 0.6*income + 0.4*credit_score)。
  • 示例
    输入SQL返回数据后,输出:
    1. {
    2. "user_id": "1001",
    3. "risk_level": "高",
    4. "reason": "逾期次数=3(阈值>2)"
    5. }

三、信贷风控场景的完整案例演示

1. 案例背景

某金融机构需实现“高风险用户筛查”功能,规则为:

  • 过去3个月内,贷款申请次数≥5次 拒绝率≥80%;
  • 或 信用卡透支额度超过授信额度的90%。

2. Coze工作流实现步骤

(1)需求输入

业务人员在前端输入自然语言:

  1. 筛选高风险用户:
  2. 条件1:最近90天贷款申请次数≥5次且拒绝率≥80%;
  3. 条件2:信用卡透支率>90%。
  4. 满足任一条件即标记为高风险。

(2)NLU解析

工作流解析为结构化数据:

  1. {
  2. "conditions": [
  3. {
  4. "type": "loan",
  5. "time_range": "90 days",
  6. "apply_count_min": 5,
  7. "reject_rate_min": 0.8
  8. },
  9. {
  10. "type": "credit_card",
  11. "overdraft_ratio_min": 0.9
  12. }
  13. ],
  14. "logic": "OR"
  15. }

(3)SQL生成

生成两条SQL并合并结果:
SQL1(贷款条件)

  1. SELECT u.user_id, COUNT(*) as apply_count,
  2. SUM(CASE WHEN status = 'rejected' THEN 1 ELSE 0 END)/COUNT(*) as reject_rate
  3. FROM loan_applications l
  4. JOIN users u ON l.user_id = u.user_id
  5. WHERE l.apply_date >= DATE_SUB(CURRENT_DATE, INTERVAL 90 DAY)
  6. GROUP BY u.user_id
  7. HAVING apply_count >= 5 AND reject_rate >= 0.8;

SQL2(信用卡条件)

  1. SELECT u.user_id, c.used_limit/c.credit_limit as overdraft_ratio
  2. FROM credit_cards c
  3. JOIN users u ON c.user_id = u.user_id
  4. WHERE c.used_limit/c.credit_limit > 0.9;

(4)结果解析与策略匹配

合并SQL结果后,按逻辑“OR”判断:

  • 若用户出现在SQL1或SQL2结果中,则标记为“高风险”;
  • 附加原因说明(如“贷款拒绝率92%”或“透支率95%”)。

最终输出示例:

  1. [
  2. {
  3. "user_id": "2001",
  4. "risk_level": "高",
  5. "reason": "贷款拒绝率92%(申请次数=6)"
  6. },
  7. {
  8. "user_id": "2002",
  9. "risk_level": "高",
  10. "reason": "信用卡透支率95%"
  11. }
  12. ]

四、优化建议与最佳实践

  1. 数据模型优化

    • 预先定义风控场景常用表结构(如用户表、交易表、逾期表)的关联关系,减少动态SQL生成复杂度;
    • 对高频查询字段建立索引(如user_idtransaction_date)。
  2. NLU模型训练

    • 收集历史风控需求文本,标注查询要素(如表名、条件),微调NLU模型提升解析准确率;
    • 对模糊表述(如“最近几个月”)设置默认值(如“最近90天”)。
  3. 错误处理机制

    • SQL语法校验:在生成后执行预检,避免数据库报错;
    • 回退策略:当Text2SQL解析失败时,自动跳转至人工审核流程。
  4. 性能优化

    • 对复杂查询拆分为子查询,减少单次SQL执行时间;
    • 使用缓存存储高频查询结果(如“今日高风险用户列表”)。

五、总结与展望

通过Coze工作流集成Text2SQL技术,信贷风控场景可实现从需求到决策的全自动化,显著提升效率并降低人为错误。未来可进一步探索:

  • 结合大语言模型(LLM)优化NLU解析能力;
  • 引入实时流处理,支持动态风控规则(如交易时实时拦截高风险用户)。

该方案不仅适用于信贷风控,也可扩展至反欺诈、精准营销等金融科技场景,为行业提供可复用的技术范式。