name: review-data-analysis
description: >
审查数据分析的质量、正确性和可重复性。涵盖数据质量评估、假设检验、模型验证、
数据泄漏检测和可重复性验证。适用于在发表前审查同事的分析、在生产部署前验证
机器学习流水线、为监管或业务决策审计报告,或在受监管环境中进行第二分析师复核。
locale: zh-CN
source_locale: en
source_commit: 75ded7a1
fence_basis_commit: 75ded7a1
translator: claude-opus-4-6
translation_date: 2026-03-16
license: MIT
allowed-tools: Read Grep Glob Bash WebFetch
metadata:
author: Philipp Thoss
version: "1.0"
domain: review
complexity: advanced
language: multi
tags: data-quality, model-validation, leakage, reproducibility, statistics, review
数据分析评审
评估数据分析流水线的正确性、健壮性和可重复性。
适用场景
- 在发表前审查同事的分析笔记本或脚本
- 在生产部署前验证机器学习流水线
- 为监管或业务决策审计分析报告
- 评估分析是否支持其所述结论
- 在受监管环境中进行第二分析师复核
输入
- 必填:分析代码(脚本、笔记本或流水线定义)
- 必填:分析输出(结果、表格、图表、模型指标)
- 可选:原始数据或数据字典
- 可选:分析计划或协议(预先注册或临时的)
- 可选:目标受众和决策背景
步骤
第 1 步:评估数据质量
在评估分析之前,先审查输入数据:
## 数据质量评估
### 完整性
- [ ] 缺失数据已量化(按列和按行的缺失百分比)
- [ ] 缺失数据机制已考虑(MCAR、MAR、MNAR)
- [ ] 插补方法适当(如使用)或完整案例分析有理据支持
### 一致性
- [ ] 数据类型符合预期(日期是日期,数字是数字)
- [ ] 值域合理(无负年龄,历史数据中无未来日期)
- [ ] 分类变量具有预期水平(无拼写错误,编码一致)
- [ ] 记录间单位一致
### 唯一性
- [ ] 重复记录已识别并处理
- [ ] 预期位置的主键是唯一的
- [ ] 连接操作产生预期行数(无扇出或丢失)
### 时效性
- [ ] 数据时效性适合分析问题
- [ ] 时间覆盖范围与研究期间相匹配
- [ ] 时间序列数据中无前瞻偏倚
### 溯源
- [ ] 数据来源已记录
- [ ] 提取日期/版本已记录
- [ ] 来源与分析输入之间的任何转换已记录
预期结果: 数据质量问题已记录,并说明其对结果的潜在影响。
失败处理: 若数据不可访问以供审查,则从代码中评估质量(应用了哪些检查和转换)。
第 2 步:检验假设
对所用的每种统计方法或模型:
| 方法 | 关键假设 | 检验方式 |
|---|
| 线性回归 | 线性性、独立性、残差正态性、方差齐性 | 残差图、Q-Q 图、Durbin-Watson、Breusch-Pagan |
| 逻辑回归 | 独立性、无多重共线性、线性 logit | VIF、Box-Tidwell、残差诊断 |
| t 检验 | 独立性、正态性(或大 n)、方差相等 | Shapiro-Wilk、Levene 检验、目视检查 |
| 方差分析 | 独立性、正态性、方差齐性 | 各组 Shapiro-Wilk、Levene 检验 |
| 卡方检验 | 独立性、期望频率 ≥ 5 | 期望频率表 |
| 随机森林 | 足够的训练数据、特征相关性 | OOB 误差、特征重要性、学习曲线 |
| 神经网络 | 足够数据、适当架构、无数据泄漏 | 验证曲线、过拟合检查 |
## 假设检验结果
| 分析步骤 | 方法 | 假设 | 已检验? | 结果 |
|---------|------|------|---------|------|
| 主模型 | 线性回归 | 残差正态性 | 是 | Q-Q 图显示轻微偏差——n>100 时可接受 |
| 主模型 | 线性回归 | 方差齐性 | 否 | 未检验——建议添加 Breusch-Pagan 检验 |
预期结果: 每种统计方法的假设均已明确检验或得到承认。
失败处理: 若假设被违反,检查作者是否已处理(稳健方法、变换、敏感性分析)。
第 3 步:检测数据泄漏
数据泄漏发生在训练集外的信息影响模型时,导致过于乐观的性能:
常见泄漏模式:
## 泄漏评估
| 检查项 | 状态 | 证据 |
|-------|------|------|
| 目标泄漏 | 清除 | 无从目标派生的特征 |
| 时间泄漏 | 关注 | 特征 X 使用 30 天前向平均值 |
| 训练测试污染 | 清除 | StandardScaler 仅在训练集上拟合 |
| 群组泄漏 | 关注 | 患者 ID 未用于分层分割 |
预期结果: 所有常见泄漏模式均已检查,状态为清除/关注。
失败处理: 若发现泄漏,通过重新运行去除泄漏特征来估计影响(如可能),或标记供分析师调查。
第 4 步:验证模型性能
对于预测模型:
对于推断/解释模型:
预期结果: 模型验证适合用例(预测 vs 推断)。
失败处理: 若测试集性能与训练性能可疑地接近,标记潜在泄漏。
第 5 步:评估可重复性
## 可重复性清单
| 项目 | 状态 | 备注 |
|------|------|------|
| 代码无错误运行 | [是/否] | 在 [环境描述] 上测试 |
| 随机种子已设置 | [是/否] | [文件] 第 [N] 行 |
| 依赖项已记录 | [是/否] | requirements.txt / renv.lock 存在 |
| 数据加载可重复 | [是/否] | 路径是 [相对/绝对/URL] |
| 结果与报告值匹配 | [是/否] | 已验证:表 1 ✓,图 2 ✗(轻微差异) |
| 环境已记录 | [是/否] | 已指定 Python 3.11 / R 4.5.0 |
预期结果: 通过重新运行分析验证了可重复性(若数据不可用则从代码评估)。
失败处理: 若结果无法精确重现,确定差异是否在浮点数容差范围内或表明存在问题。
第 6 步:撰写评审报告
## 数据分析评审
### 整体评估
[1-2 句:分析是否可靠?是否支持结论?]
### 数据质量
[数据质量发现摘要,对结果的影响]
### 方法论问题
1. **[标题]**:[描述,在代码/报告中的位置,建议]
2. ...
### 优点
1. [做得好的地方]
2. ...
### 可重复性
[等级评估:金/银/铜/不透明,附理由]
### 建议
- [ ] [分析师的具体行动项目]
预期结果: 评审提供了可操作的反馈,并有对代码位置的具体引用。
失败处理: 若时间有限,优先处理数据质量和泄漏检查,而非风格问题。
验证清单
常见问题
- 只审查代码:分析计划和结论与实现同样重要。
- 忽视数据质量:在劣质数据上运行复杂模型会产生自信但错误的答案。
- 将复杂性等同于正确性:95% 准确率的随机森林可能存在数据泄漏;简单 t 检验可能是正确方法。
- 不运行代码:尽可能执行代码以验证可重复性。阅读代码是不够的。
- 见树不见林:不要因代码风格问题而忽略根本性的分析错误。
相关技能
review-research — 更广泛的研究方法论和论文评审
validate-statistical-output — 双重编程验证方法论
generate-statistical-tables — 出版级统计表格
review-software-architecture — 代码结构和设计评审