AI 审计框架:从模型到业务

模型审计、数据审计与流程审计:构建全栈 AI 治理的审计能力


AI 审计的必要性

当 AI 系统做出影响人的决策(信贷审批、招聘筛选、合规判定),我们需要一套机制来回答:这个决策公平吗?数据来源可靠吗?过程可追溯吗?结果可解释吗?

AI 审计不是"做完了检查一下",而是贯穿 AI 生命周期的持续性治理活动。


一、AI 审计三层架构

1.1 全景视图

┌─────────────────────────────────────────────────────┐
│                    AI 审计框架                        │
├─────────────┬─────────────┬─────────────────────────┤
│  模型审计    │  数据审计    │  流程审计               │
│             │             │                         │
│  偏差/公平   │  质量/溯源   │  治理/合规              │
│  准确性     │  完整性      │  授权/审批              │
│  鲁棒性     │  时效性      │  变更管理               │
│  安全性     │  合规性      │  监控/报告              │
│             │             │                         │
│  对象: 模型  │  对象: 数据   │  对象: 组织/流程        │
│  周期: 季度  │  周期: 月度   │  周期: 持续             │
└─────────────┴─────────────┴─────────────────────────┘

1.2 审计维度矩阵

审计维度 审计对象 关键指标 频率 审计方
模型偏差 AI 模型 各群体预测差异 季度 内审 + 三方
模型准确性 AI 模型 准确率/召回率/F1 月度 内审
数据质量 训练/推理数据 完整性/准确性/一致性 月度 内审
数据溯源 数据来源 来源合法性/授权链 季度 内审 + 法务
流程合规 开发/部署流程 审批/变更/测试记录 持续 内审
监管报告 监管要求 报告完整性/及时性 按要求 合规部门

二、模型审计

2.1 偏差与公平性审计

公平性定义 描述 计算方式 阈值
统计均等 各群体的正预测率相同 P(Y=1|A=0) = P(Y=1|A=1) 差异 < 5%
机会均等 各群体的真正率相同 TPR_0 = TPR_1 差异 < 5%
预测均等 各群体的正预测值相同 PPV_0 = PPV_1 差异 < 5%
四五分之规则 少数群体通过率 >= 多数群体的 80% min(R_0/R_1, R_1/R_0) >= 0.8 >= 0.8

2.2 偏差检测实现

class BiasAuditor:
    """Audit AI model for bias across protected attributes."""

    def audit_fairness(
        self,
        predictions: list[float],
        labels: list[int],
        protected_attribute: list[int],  # 0 or 1
    ) -> FairnessReport:
        """Run comprehensive fairness audit."""
        group_0 = [i for i, a in enumerate(protected_attribute) if a == 0]
        group_1 = [i for i, a in enumerate(protected_attribute) if a == 1]

        metrics = {}

        # Statistical parity
        pos_rate_0 = np.mean([predictions[i] > 0.5 for i in group_0])
        pos_rate_1 = np.mean([predictions[i] > 0.5 for i in group_1])
        metrics["statistical_parity_diff"] = abs(pos_rate_0 - pos_rate_1)

        # Equal opportunity (TPR)
        tpr_0 = self._true_positive_rate(predictions, labels, group_0)
        tpr_1 = self._true_positive_rate(predictions, labels, group_1)
        metrics["equal_opportunity_diff"] = abs(tpr_0 - tpr_1)

        # Four-fifths rule
        ratio = min(pos_rate_0, pos_rate_1) / max(pos_rate_0, pos_rate_1)
        metrics["four_fifths_ratio"] = ratio

        # Overall assessment
        issues = []
        if metrics["statistical_parity_diff"] > 0.05:
            issues.append("Statistical parity violation")
        if metrics["equal_opportunity_diff"] > 0.05:
            issues.append("Equal opportunity violation")
        if metrics["four_fifths_ratio"] < 0.8:
            issues.append("Four-fifths rule violation")

        return FairnessReport(
            metrics=metrics,
            issues=issues,
            pass_audit=len(issues) == 0
        )

2.3 模型准确性审计

审计流程:

1. 准备测试集
   - 代表性样本(覆盖各场景/群体)
   - 金标准标注(专家标注 + 交叉验证)
   - 样本量 >= 1000(按场景分层)

2. 执行评估
   - 整体指标: Accuracy, Precision, Recall, F1
   - 分场景指标: 每个业务场景单独评估
   - 分群体指标: 按用户/数据特征分组

3. 趋势分析
   - 与上一期对比(是否退化)
   - 与基线对比(是否满足要求)
   - 异常检测(某类场景突然变差)

4. 根因分析
   - 退化原因定位(数据漂移/模型退化/环境变化)
   - 修复建议
   - 跟踪修复效果

2.4 模型安全审计

攻击类型 描述 测试方法 防御措施
提示注入 恶意输入篡改模型行为 红队测试 输入过滤 + 输出审核
数据提取 窃取训练数据 成员推理攻击 差分隐私
模型窃取 复制模型能力 大量查询分析 速率限制 + 监控
对抗样本 微扰输入导致错误输出 对抗性测试集 对抗训练
越狱攻击 绕过安全防护 红队 + 自动化 多层防御

三、数据审计

3.1 数据质量维度

维度 定义 度量方法 合格标准
完整性 数据无缺失 缺失值比例 < 5%
准确性 数据正确反映事实 与权威来源对比 > 95%
一致性 不同来源数据一致 交叉验证 冲突率 < 2%
时效性 数据足够新 数据年龄分布 90% 在有效期内
唯一性 无重复记录 去重检测 重复率 < 1%
代表性 样本代表总体 分布对比 KL 散度 < 0.1

3.2 数据溯源审计

数据溯源链:

数据来源
  ├── 公开数据集 -> 许可证验证 -> 使用范围确认
  ├── 用户数据 -> 同意记录验证 -> 用途匹配确认
  ├── 合作方数据 -> 合同条款验证 -> DPA 确认
  └── 爬取数据 -> 合法性评估 -> robots.txt 遵守

审计检查点:
  [ ] 每个数据源都有明确的法律基础
  [ ] 用户数据有对应的同意记录
  [ ] 第三方数据有数据处理协议
  [ ] 公开数据集的许可证允许商用
  [ ] 数据收集遵循最小必要原则
  [ ] 敏感数据有脱敏/匿名化处理记录

3.3 数据漂移检测

class DataDriftDetector:
    """Detect data distribution drift between training and production."""

    def detect_drift(
        self,
        reference_data: pd.DataFrame,   # Training distribution
        current_data: pd.DataFrame,      # Production distribution
        features: list[str],
        threshold: float = 0.1
    ) -> DriftReport:
        """Detect drift using multiple statistical tests."""
        results = {}

        for feature in features:
            ref = reference_data[feature].dropna()
            cur = current_data[feature].dropna()

            if ref.dtype in ['float64', 'int64']:
                # KS test for numerical features
                stat, p_value = stats.ks_2samp(ref, cur)
                drift_detected = p_value < 0.05
            else:
                # Chi-square test for categorical features
                ref_counts = ref.value_counts(normalize=True)
                cur_counts = cur.value_counts(normalize=True)
                stat = self._chi_square(ref_counts, cur_counts)
                drift_detected = stat > threshold

            results[feature] = {
                "statistic": stat,
                "drift_detected": drift_detected,
                "severity": "high" if stat > 2 * threshold else "medium" if drift_detected else "low"
            }

        drifted_features = [f for f, r in results.items() if r["drift_detected"]]
        return DriftReport(
            features=results,
            overall_drift=len(drifted_features) > len(features) * 0.3,
            drifted_count=len(drifted_features),
            total_features=len(features)
        )

四、流程审计

4.1 AI 治理流程框架

┌────────────────────────────────────────────────────┐
│  AI Governance Process Framework                    │
├────────────────────────────────────────────────────┤
│                                                     │
│  开发阶段                                           │
│  ├── 需求审批: 业务需求 + 伦理评估                    │
│  ├── 数据审批: 数据使用授权 + PIA                    │
│  ├── 模型开发: 版本控制 + 实验记录                    │
│  └── 测试验证: 功能测试 + 偏差测试 + 安全测试         │
│                                                     │
│  部署阶段                                           │
│  ├── 上线审批: 技术审核 + 合规审核 + 业务审核          │
│  ├── 灰度发布: 小流量验证 + 监控                     │
│  └── 全量上线: 监控 + 告警                          │
│                                                     │
│  运营阶段                                           │
│  ├── 持续监控: 性能/质量/公平性                      │
│  ├── 定期审计: 月度/季度审计                         │
│  ├── 事件响应: 异常处理 + 复盘                       │
│  └── 模型更新: 变更管理 + 回归测试                   │
│                                                     │
│  退役阶段                                           │
│  ├── 退役评估: 影响分析 + 迁移计划                   │
│  ├── 数据处理: 保留/删除/归档                        │
│  └── 知识沉淀: 经验总结 + 文档归档                   │
│                                                     │
└────────────────────────────────────────────────────┘

4.2 审计证据清单

阶段 证据类型 内容 保存期限
开发 需求文档 业务需求 + 伦理评估 项目期 + 3年
开发 数据授权 数据使用审批记录 项目期 + 3年
开发 实验记录 模型训练过程 + 参数 模型存续期
部署 审批记录 上线审批签字 模型存续期
部署 测试报告 功能/偏差/安全测试 模型存续期
运营 监控日志 性能/质量指标 >= 6个月
运营 审计报告 定期审计结果 >= 3年
运营 事件记录 异常事件 + 处理 >= 3年

五、监管报告

5.1 报告类型

报告类型 受众 频率 核心内容
内部审计报告 管理层 季度 风险发现 + 改进建议
合规报告 监管机构 按要求 合规状态 + 整改进展
公平性报告 公众/监管 年度 偏差评估 + 改进措施
安全评估报告 网信办 上线前/变更 安全评估结果

5.2 审计报告模板

AI 系统审计报告

一、基本信息
  系统名称: [名称]
  审计周期: [起止日期]
  审计范围: [模型/数据/流程]
  审计团队: [成员列表]

二、审计发现摘要
  | 级别   | 数量 | 状态     |
  |--------|------|---------|
  | 严重   | 0    | -       |
  | 高     | 2    | 整改中   |
  | 中     | 5    | 3已修复  |
  | 低     | 8    | 5已修复  |

三、模型审计结果
  3.1 准确性: [达标/不达标]
  3.2 公平性: [达标/不达标]
  3.3 安全性: [达标/不达标]
  3.4 详细发现: [逐条列举]

四、数据审计结果
  4.1 数据质量: [评分]
  4.2 数据溯源: [合规/不合规]
  4.3 详细发现: [逐条列举]

五、流程审计结果
  5.1 治理流程: [完善/待完善]
  5.2 变更管理: [合规/不合规]
  5.3 详细发现: [逐条列举]

六、整改建议
  [按优先级排序的整改事项]

七、跟踪事项
  [上期遗留问题的跟踪状态]

六、证据收集

6.1 自动化证据收集

class AuditEvidenceCollector:
    """Automated evidence collection for AI audit."""

    async def collect_model_evidence(self, model_id: str) -> ModelEvidence:
        """Collect model-level audit evidence."""
        return ModelEvidence(
            model_card=await self.get_model_card(model_id),
            training_config=await self.get_training_config(model_id),
            evaluation_results=await self.get_eval_results(model_id),
            fairness_metrics=await self.get_fairness_metrics(model_id),
            security_scan=await self.get_security_scan(model_id),
            deployment_history=await self.get_deployment_log(model_id),
        )

    async def collect_data_evidence(self, dataset_id: str) -> DataEvidence:
        """Collect data-level audit evidence."""
        return DataEvidence(
            lineage=await self.get_data_lineage(dataset_id),
            quality_report=await self.get_quality_report(dataset_id),
            consent_records=await self.get_consent_records(dataset_id),
            drift_analysis=await self.get_drift_analysis(dataset_id),
            pia_report=await self.get_pia_report(dataset_id),
        )

    async def generate_audit_package(
        self,
        audit_scope: AuditScope,
        output_format: str = "pdf"
    ) -> bytes:
        """Generate complete audit evidence package."""
        model_evidence = await self.collect_model_evidence(audit_scope.model_id)
        data_evidence = await self.collect_data_evidence(audit_scope.dataset_id)
        process_evidence = await self.collect_process_evidence(audit_scope.process_id)

        return self.render_report(
            model_evidence, data_evidence, process_evidence,
            format=output_format
        )

总结

AI 审计的核心原则:

AI 审计 = 模型审计 + 数据审计 + 流程审计

  模型审计: 模型是否准确、公平、安全、可解释
  数据审计: 数据是否高质量、可溯源、合规使用
  流程审计: 治理流程是否完善、执行是否到位

三者缺一不可,共同构成可信 AI 的基座。

AI 审计不是终点线上的终审,而是起跑线上就开始的持续过程。把审计能力内建到 AI 开发流程中,让每一次模型更新、每一次数据变更、每一次上线部署都留下可追溯的证据——这才是真正的 AI 治理。


Maurice | maurice_wen@proton.me