当 AI 模型的输出成为申报证据的一部分时,它就需要接受与其它分析方法同等程度的审视。这篇讲清需要准备什么。
先确定使用目的(intended use)
# 一切验证要求都从「使用目的」出发
#
# 必须明确回答:
# 1) 这个模型预测什么?(具体的终点)
# 2) 用于什么决策?
# 3) 如果预测错误,后果是什么?
# 4) 是唯一证据还是支持性证据?
# 5) 适用于什么范围?(化学空间、人群、条件)
#
# 例(好的定义):
# 「本模型预测化合物的 Ames 试验结果,
# 用于 ICH M7 框架下的基因毒性杂质评估,
# 作为两种互补方法之一。
# 适用于分子量 100~600、含常见有机官能团的小分子。
# 预测为阳性或超出适用域时,进行实验测定。」
#
# 例(不好的定义):
# 「用 AI 预测化合物的安全性」
# ← 太模糊,无法据此设计验证方案
使用目的定义得越具体,验证的要求越清晰、越可达成。模糊的定义会导致无止境的验证要求。
验证的层次
| 层次 | 内容 |
|---|---|
| 数据验证 | 训练数据的来源、质量、代表性、清洗过程 |
| 内部验证 | 交叉验证、留出测试集 |
| 外部验证 | 独立数据集(未参与任何训练与调参) |
| 适用域定义 | 明确模型在什么范围内可信 |
| 敏感性分析 | 输入扰动对输出的影响 |
| 可解释性 | 能否说明预测依据 |
| 与现有方法对比 | 相对传统方法的表现 |
外部验证是关键:交叉验证的指标会系统性高估真实性能(因为超参选择等过程见过数据)。必须有一个完全独立、从未用于任何决策的测试集。
文档要素
# 模型文档应包含的内容
MODEL_DOCUMENTATION = {
"intended_use": "具体的使用目的与决策场景",
"model_description": {
"algorithm": "算法类型与架构",
"features": "输入特征及其计算方法",
"hyperparameters": "超参数及选择依据",
"version": "模型版本号",
"training_date": "训练日期",
},
"training_data": {
"source": "数据来源与获取方式",
"size": "样本量",
"chemical_space": "化学空间描述与可视化",
"quality_control": "清洗与质控流程",
"known_limitations": "已知的数据局限",
},
"validation": {
"internal": "交叉验证方案与结果",
"external": "独立测试集来源与结果",
"metrics": "性能指标与可接受标准",
"applicability_domain": "适用域定义方法与判据",
},
"uncertainty": "不确定性估计方法与校准验证",
"human_oversight": "专家复核的流程与触发条件",
"monitoring": "部署后的性能监测计划",
"change_control": "模型更新的管理流程",
}
可重复性的技术保障
# 「同样的输入给出同样的输出」是基本要求
# 1) 环境固化
# 容器镜像 + 依赖锁定文件
# 记录所有库的精确版本
FROM python:3.11-slim
COPY requirements.lock /tmp/
RUN pip install --no-deps -r /tmp/requirements.lock
# 2) 随机种子固定
# 训练与推理的所有随机过程都要固定种子
# 3) 模型文件哈希
import hashlib
def model_fingerprint(model_path):
with open(model_path, "rb") as f:
return hashlib.sha256(f.read()).hexdigest()
# 4) 完整的预测记录
PREDICTION_RECORD = {
"timestamp": "...",
"model_version": "v2.3.1",
"model_hash": "sha256:...",
"input_smiles": "...",
"input_hash": "...",
"prediction": 5.2,
"uncertainty": 0.4,
"applicability_domain": "in_domain",
"reviewed_by": "...",
"review_decision": "accepted / overridden",
}
# 关键:这些记录必须在预测时生成并归档,
# 事后无法补齐
ICH M7 的范式:值得借鉴
ICH M7 对 (Q)SAR 的接受方式提供了一个可复制的模板:
- 两种互补方法:一种基于专家规则(可解释)、一种基于统计模型(数据驱动)——互补性降低了单一方法失效的风险;
- 结果一致才采纳:两者都预测阴性才可免除实验;不一致或有阳性时做实验;
- 专家复核:计算结果需由有资质的专家评估,可基于机制知识推翻计算结论;
- 明确的后备方案:超出适用域或结果存疑时,回到实验测定。
这个「多方法交叉 + 一致性判据 + 专家复核 + 实验后备」的模式,可以推广到其它计算方法的使用场景。
常见的验证不足
- 只有交叉验证没有外部验证:最常见的问题;
- 测试集不独立:测试集参与了特征选择或超参调优,指标虚高;
- 划分方式不当:用随机划分而非骨架/时间划分,高估泛化能力(见 332《用 Scaffold Split 评估模型真实外推能力》);
- 没有定义适用域:无法判断新化合物的预测是否可信;
- 不确定性未验证:给出了不确定性但没验证它与实际误差的相关性;
- 无版本管理:无法追溯某个历史预测是用哪个版本做的。
提示
具体的验证与文档要求随监管指导原则更新,本文为方向性介绍。用于申报的模型,其验证方案应与法规事务人员共同制定,并考虑提前与监管机构沟通。
延伸资源
- 监管框架:418《FDA 对 AI 的监管框架》;可信 AI:420《可信 AI Trustworthy AI》;
- MLOps:422《MLOps for 药物发现》;评测纪律:169《Benchmark 陷阱》、332《用 Scaffold Split 评估模型真实外推能力》。