Agent-almanac review-data-analysis

install
source · Clone the upstream repo
git clone https://github.com/pjt222/agent-almanac
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/pjt222/agent-almanac "$T" && mkdir -p ~/.claude/skills && cp -r "$T/i18n/zh-CN/skills/review-data-analysis" ~/.claude/skills/pjt222-agent-almanac-review-data-analysis-e9b448 && rm -rf "$T"
manifest: i18n/zh-CN/skills/review-data-analysis/SKILL.md
source content

数据分析评审

评估数据分析流水线的正确性、健壮性和可重复性。

适用场景

  • 在发表前审查同事的分析笔记本或脚本
  • 在生产部署前验证机器学习流水线
  • 为监管或业务决策审计分析报告
  • 评估分析是否支持其所述结论
  • 在受监管环境中进行第二分析师复核

输入

  • 必填:分析代码(脚本、笔记本或流水线定义)
  • 必填:分析输出(结果、表格、图表、模型指标)
  • 可选:原始数据或数据字典
  • 可选:分析计划或协议(预先注册或临时的)
  • 可选:目标受众和决策背景

步骤

第 1 步:评估数据质量

在评估分析之前,先审查输入数据:

## 数据质量评估

### 完整性
- [ ] 缺失数据已量化(按列和按行的缺失百分比)
- [ ] 缺失数据机制已考虑(MCAR、MAR、MNAR)
- [ ] 插补方法适当(如使用)或完整案例分析有理据支持

### 一致性
- [ ] 数据类型符合预期(日期是日期,数字是数字)
- [ ] 值域合理(无负年龄,历史数据中无未来日期)
- [ ] 分类变量具有预期水平(无拼写错误,编码一致)
- [ ] 记录间单位一致

### 唯一性
- [ ] 重复记录已识别并处理
- [ ] 预期位置的主键是唯一的
- [ ] 连接操作产生预期行数(无扇出或丢失)

### 时效性
- [ ] 数据时效性适合分析问题
- [ ] 时间覆盖范围与研究期间相匹配
- [ ] 时间序列数据中无前瞻偏倚

### 溯源
- [ ] 数据来源已记录
- [ ] 提取日期/版本已记录
- [ ] 来源与分析输入之间的任何转换已记录

预期结果: 数据质量问题已记录,并说明其对结果的潜在影响。

失败处理: 若数据不可访问以供审查,则从代码中评估质量(应用了哪些检查和转换)。

第 2 步:检验假设

对所用的每种统计方法或模型:

方法关键假设检验方式
线性回归线性性、独立性、残差正态性、方差齐性残差图、Q-Q 图、Durbin-Watson、Breusch-Pagan
逻辑回归独立性、无多重共线性、线性 logitVIF、Box-Tidwell、残差诊断
t 检验独立性、正态性(或大 n)、方差相等Shapiro-Wilk、Levene 检验、目视检查
方差分析独立性、正态性、方差齐性各组 Shapiro-Wilk、Levene 检验
卡方检验独立性、期望频率 ≥ 5期望频率表
随机森林足够的训练数据、特征相关性OOB 误差、特征重要性、学习曲线
神经网络足够数据、适当架构、无数据泄漏验证曲线、过拟合检查
## 假设检验结果
| 分析步骤 | 方法 | 假设 | 已检验? | 结果 |
|---------|------|------|---------|------|
| 主模型 | 线性回归 | 残差正态性 | 是 | Q-Q 图显示轻微偏差——n>100 时可接受 |
| 主模型 | 线性回归 | 方差齐性 | 否 | 未检验——建议添加 Breusch-Pagan 检验 |

预期结果: 每种统计方法的假设均已明确检验或得到承认。

失败处理: 若假设被违反,检查作者是否已处理(稳健方法、变换、敏感性分析)。

第 3 步:检测数据泄漏

数据泄漏发生在训练集外的信息影响模型时,导致过于乐观的性能:

常见泄漏模式:

  • 目标泄漏:直接编码目标变量的特征(如使用"treatment_outcome"预测"treatment_success")
  • 时间泄漏:使用未来信息预测过去(使用预测时不可用的数据计算的特征)
  • 训练测试污染:在数据分割之前对完整数据集拟合预处理(缩放、插补、特征选择)
  • 群组泄漏:相关观测(同一患者、同一设备)分散在训练集和测试集中
  • 特征工程泄漏:跨整个数据集而非仅在训练折叠内计算的聚合值
## 泄漏评估
| 检查项 | 状态 | 证据 |
|-------|------|------|
| 目标泄漏 | 清除 | 无从目标派生的特征 |
| 时间泄漏 | 关注 | 特征 X 使用 30 天前向平均值 |
| 训练测试污染 | 清除 | StandardScaler 仅在训练集上拟合 |
| 群组泄漏 | 关注 | 患者 ID 未用于分层分割 |

预期结果: 所有常见泄漏模式均已检查,状态为清除/关注。

失败处理: 若发现泄漏,通过重新运行去除泄漏特征来估计影响(如可能),或标记供分析师调查。

第 4 步:验证模型性能

对于预测模型:

  • 问题对应的适当指标(不仅仅是准确率——考虑精确率、召回率、F1、AUC、RMSE、MAE)
  • 交叉验证或留出策略已描述且适当
  • 训练集与测试/验证集性能已比较(过拟合检查)
  • 提供了基准比较(朴素模型、随机机会、先前方法)
  • 性能指标的置信区间或标准误差
  • 在相关子群体上评估了性能(公平性、边缘案例)

对于推断/解释模型:

  • 报告了模型拟合统计量(R²、AIC、BIC、偏差)
  • 系数解释正确(方向、量级、显著性)
  • 多重共线性已评估(VIF < 5–10)
  • 已识别有影响的观测值(Cook 距离、杠杆值)
  • 如测试了多个规格,进行了模型比较

预期结果: 模型验证适合用例(预测 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
    — 代码结构和设计评审