金融 AI 合规要点

CSRC/PBOC 监管下的算法交易、信贷评分与可解释性要求


金融 AI 面临最严格的监管

金融是 AI 应用最广泛也最敏感的领域。AI 做出的信贷审批、投资建议、风险评估直接影响资金安全和个人权益。中国金融监管对 AI 应用有明确的合规要求,违规代价高昂——从罚款到吊销牌照。

本文梳理 CSRC(证监会)、PBOC(央行)、CBIRC(原银保监会,现金融监管总局)对金融 AI 的核心监管要求。


一、监管框架总览

1.1 监管体系

┌─────────────────────────────────────────────────────┐
│              金融 AI 监管体系                          │
├─────────────────────────────────────────────────────┤
│                                                      │
│  国务院                                              │
│  └── 《促进人工智能与金融深度融合的指导意见》            │
│                                                      │
│  中国人民银行 (PBOC)                                  │
│  ├── 《金融科技发展规划》                              │
│  ├── 《人工智能算法金融应用评价规范》JR/T 0258         │
│  └── 《金融数据安全分级指南》JR/T 0197                 │
│                                                      │
│  证监会 (CSRC)                                       │
│  ├── 《证券期货业人工智能应用指引》                     │
│  └── 《程序化交易管理规定》                            │
│                                                      │
│  金融监管总局 (原 CBIRC)                              │
│  ├── 《银行保险机构信息科技外包风险管理办法》            │
│  └── 《商业银行互联网贷款管理暂行办法》                 │
│                                                      │
│  国家标准                                             │
│  ├── GB/T 42015《人工智能 知识图谱技术框架》           │
│  └── GB/T 43241《金融业算法安全评价规范》              │
│                                                      │
└─────────────────────────────────────────────────────┘

1.2 核心监管要求矩阵

监管领域 监管方 核心要求 合规难度
算法交易 CSRC 报备 + 风控 + 熔断
信贷评分 PBOC + 金融监管总局 公平性 + 可解释 + 人工复核
智能投顾 CSRC 适当性 + 信息披露 + 持牌
反欺诈 PBOC 准确性 + 数据安全 + 隐私
风险评估 金融监管总局 可解释 + 可审计 + 压力测试
客户服务 金融监管总局 身份验证 + 记录留存 + 投诉

二、算法交易合规

2.1 程序化交易管理规定要点

要求 内容 实现方式
报备义务 向交易所报备算法策略 策略说明文档 + 技术参数
风险控制 多层风控机制 价格/数量/频率限制
异常交易 防止操纵市场 异常检测 + 自动熔断
系统安全 灾备 + 应急 双机热备 + 应急预案
信息隔离 防止信息泄露 中国墙 + 访问控制
留痕存档 交易记录保存 >= 20 年保存

2.2 风控架构

交易信号生成
     │
     ▼
[Pre-trade Risk Check]
  ├── 价格偏离检查: 委托价不超过基准价 +/- N%
  ├── 数量限制: 单笔/日累计不超过限额
  ├── 频率限制: 报撤比/委托频率在阈值内
  ├── 集中度限制: 单品种持仓不超过限额
  └── 资金检查: 可用资金充足
     │
     ├── 未通过 -> 拒绝 + 告警
     │
     └── 通过 -> 委托下达
                    │
                    ▼
              [Intra-trade Monitoring]
                ├── 实时盈亏监控
                ├── 回撤监控
                ├── 异常交易模式检测
                └── 市场冲击评估
                    │
                    ├── 触发阈值 -> 自动减仓/停止
                    │
                    └── 正常 -> 持续监控
                                  │
                                  ▼
                          [Post-trade Analysis]
                            ├── 交易归因分析
                            ├── 风险指标回顾
                            ├── 合规检查
                            └── 审计报告

2.3 熔断机制

class TradingCircuitBreaker:
    """Multi-level circuit breaker for algorithmic trading."""

    LEVELS = {
        "L1_WARNING": {
            "drawdown": 0.02,    # 2% drawdown
            "action": "alert",
            "description": "Alert trader, continue trading"
        },
        "L2_REDUCE": {
            "drawdown": 0.05,    # 5% drawdown
            "action": "reduce_position",
            "reduction": 0.5,    # Reduce by 50%
            "description": "Reduce position size by 50%"
        },
        "L3_STOP": {
            "drawdown": 0.10,    # 10% drawdown
            "action": "stop_trading",
            "description": "Stop all new orders, flatten positions"
        },
        "L4_EMERGENCY": {
            "drawdown": 0.15,    # 15% drawdown
            "action": "emergency_stop",
            "description": "Emergency stop, cancel all orders, human intervention"
        }
    }

    async def check(self, portfolio_state: dict) -> CircuitBreakerAction:
        """Check circuit breaker levels."""
        drawdown = portfolio_state["current_drawdown"]
        order_rejection_rate = portfolio_state["order_rejection_rate"]
        error_rate = portfolio_state["system_error_rate"]

        # Check drawdown levels
        for level, config in sorted(
            self.LEVELS.items(),
            key=lambda x: x[1]["drawdown"],
            reverse=True
        ):
            if drawdown >= config["drawdown"]:
                return CircuitBreakerAction(
                    level=level,
                    action=config["action"],
                    reason=f"Drawdown {drawdown:.1%} >= threshold {config['drawdown']:.1%}"
                )

        # Check system health
        if error_rate > 0.01:
            return CircuitBreakerAction(
                level="L3_STOP",
                action="stop_trading",
                reason=f"System error rate {error_rate:.1%} > 1%"
            )

        return CircuitBreakerAction(level="NORMAL", action="continue")

三、信贷评分公平性

3.1 监管要求

要求 法规来源 具体内容
禁止歧视 《互联网贷款管理办法》 不得基于种族、性别等因素拒贷
可解释 PBOC 算法评价规范 借款人有权知道拒贷原因
人工复核 《个保法》第24条 可拒绝纯自动化决策
数据限制 《征信业管理条例》 不得使用非征信数据做信贷决策
利率公平 最高法利率红线 不得基于算法变相提高弱势群体利率

3.2 公平性检测框架

class CreditFairnessAuditor:
    """Audit credit scoring model for fairness compliance."""

    PROTECTED_ATTRIBUTES = [
        "gender",
        "age_group",
        "marital_status",
        "region",
        "ethnicity"  # Only for bias detection, never as feature
    ]

    def audit(self, model, test_data: pd.DataFrame) -> FairnessReport:
        """Run comprehensive fairness audit."""
        results = {}

        for attr in self.PROTECTED_ATTRIBUTES:
            if attr not in test_data.columns:
                continue

            groups = test_data[attr].unique()
            group_metrics = {}

            for group in groups:
                mask = test_data[attr] == group
                group_data = test_data[mask]
                predictions = model.predict(group_data)
                labels = group_data["default_label"]

                group_metrics[group] = {
                    "approval_rate": (predictions > 0.5).mean(),
                    "avg_score": predictions.mean(),
                    "accuracy": accuracy_score(labels, predictions > 0.5),
                    "count": len(group_data)
                }

            # Disparate impact ratio (four-fifths rule)
            rates = [m["approval_rate"] for m in group_metrics.values()]
            di_ratio = min(rates) / max(rates) if max(rates) > 0 else 0

            results[attr] = {
                "groups": group_metrics,
                "disparate_impact_ratio": di_ratio,
                "pass_four_fifths": di_ratio >= 0.8,
                "max_approval_gap": max(rates) - min(rates)
            }

        overall_pass = all(r["pass_four_fifths"] for r in results.values())

        return FairnessReport(
            attribute_results=results,
            overall_pass=overall_pass,
            recommendation="APPROVE" if overall_pass else "REMEDIATE"
        )

3.3 拒贷原因生成

def generate_rejection_reasons(
    application: dict,
    model_output: dict,
    top_k: int = 3
) -> list[str]:
    """Generate human-readable rejection reasons (PBOC requirement)."""

    # Feature importance from model
    feature_contributions = model_output["feature_contributions"]

    # Map to human-readable reasons
    REASON_MAP = {
        "credit_score": "信用评分未达到最低要求",
        "debt_ratio": "负债收入比偏高",
        "employment_length": "在职时间较短",
        "income_level": "收入水平未达到产品要求",
        "repayment_history": "近期还款记录有逾期",
        "credit_inquiries": "近期信用查询次数较多",
        "account_age": "信用账户开户时间较短",
        "outstanding_debt": "未偿还债务金额较高",
    }

    # Sort by negative contribution (most impactful rejection factors)
    sorted_factors = sorted(
        feature_contributions.items(),
        key=lambda x: x[1]
    )

    reasons = []
    for feature, contribution in sorted_factors[:top_k]:
        if feature in REASON_MAP and contribution < 0:
            reasons.append(REASON_MAP[feature])

    if not reasons:
        reasons.append("综合信用评估未通过,详情请咨询客服")

    return reasons

四、可解释性要求

4.1 金融 AI 可解释性三层要求

层级 受众 内容 法规要求
用户层 消费者/投资者 为什么拒贷/推荐这个产品 PIPL 第24条
业务层 客户经理/合规 模型决策的关键因素 PBOC 算法评价规范
审计层 监管/内审 完整推理链 + 技术细节 CSRC/金融监管总局

4.2 可解释性技术方案

方法 类型 适用模型 优点 缺点
SHAP 事后解释 所有模型 理论完善 计算慢
LIME 事后解释 所有模型 直观 局部性
特征重要性 全局解释 树模型/线性模型 简单 非因果
决策路径 逻辑解释 规则系统 完全透明 能力有限
注意力可视化 过程解释 Transformer 直观 不一定可靠
反事实解释 对比解释 所有模型 可操作 可能不唯一

4.3 监管合规的解释输出

信贷审批解释 (监管级别):

1. 决策结果: 拒绝
   模型版本: credit-score-v3.2
   决策时间: 2026-02-28 14:30:25
   审批编号: CRD-20260228-001234

2. 主要拒绝因素 (Top 5):
   | 因素         | 申请人值 | 通过阈值 | 影响度 |
   |-------------|---------|---------|-------|
   | 负债收入比   | 65%     | <= 50%  | -0.32 |
   | 近期逾期     | 2 次    | 0 次    | -0.28 |
   | 信用查询     | 8 次/6月 | <= 4次  | -0.15 |
   | 在职时间     | 3 月    | >= 12月 | -0.12 |
   | 信用评分     | 620     | >= 650  | -0.08 |

3. 反事实分析:
   若负债收入比降至 45% 且无逾期记录,
   模型预测结果将变为: 通过 (置信度: 78%)

4. 人工复核通道:
   如对结果有异议, 可申请人工复核
   复核时限: 5 个工作日
   联系方式: [投诉渠道]

五、数据安全

5.1 金融数据分级

级别 数据类型 保护要求 AI 使用限制
1 级(公开) 公开市场数据 基础安全 可自由使用
2 级(内部) 内部运营数据 访问控制 需授权使用
3 级(敏感) 客户交易数据 加密 + 审计 脱敏后使用
4 级(重要) 账户密码/生物特征 最高保护 禁止用于训练
5 级(核心) 国家金融安全数据 专网 + 审批 严格禁止出境

5.2 金融 AI 数据使用清单

Data Usage Checklist for Financial AI:

数据收集:
  [ ] 个人金融信息收集有单独同意
  [ ] 征信数据使用有合法授权
  [ ] 非必要数据不收集(最小必要)

数据处理:
  [ ] 训练数据已脱敏/匿名化
  [ ] 敏感字段加密存储
  [ ] 数据访问有审计日志

数据使用:
  [ ] 不使用非征信数据做信贷决策
  [ ] 不使用社交数据推断信用
  [ ] 不使用地理位置做歧视性定价

数据保存:
  [ ] 交易记录保存 >= 20 年
  [ ] 客户信息保存遵循留存政策
  [ ] 过期数据按规定删除

数据共享:
  [ ] 不向非持牌机构共享客户数据
  [ ] 共享有合同 + 脱敏
  [ ] 跨境传输已完成评估

六、合规实施路线图

6.1 金融 AI 合规 90 天计划

Month 1: 现状评估
  Week 1-2: 盘点所有 AI 应用场景
    - 模型清单 + 数据清单 + 风险清单
  Week 3-4: 差距分析
    - 对照监管要求,找出合规缺口

Month 2: 基础建设
  Week 5-6: 技术基础设施
    - 模型注册中心 + 审批工作流
    - 偏差检测 + 可解释性模块
  Week 7-8: 流程制度
    - AI 治理制度 + 操作流程
    - 培训计划 + 应急预案

Month 3: 验证完善
  Week 9-10: 合规验证
    - 内部审计 + 模拟检查
    - 缺口修复
  Week 11-12: 持续运营
    - 监控系统上线
    - 定期审计机制建立
    - 合规报告自动化

总结

金融 AI 合规的核心框架:

金融 AI 合规 = 持牌合规 x 算法合规 x 数据合规 x 消保合规

  持牌合规: 金融业务必须持牌经营,AI 不改变这个前提
  算法合规: 模型可解释、可审计、可控制、无歧视
  数据合规: 数据分级、最小必要、加密保护、合法使用
  消保合规: 适当性义务、知情权、拒绝权、投诉权

金融 AI 合规的核心逻辑是技术不能凌驾于金融消费者权益之上。AI 可以提升效率、降低成本、改善风控,但不能以此为借口绕过公平性、透明度和可控性要求。合规不是成本,而是金融 AI 可持续发展的基础。


Maurice | maurice_wen@proton.me