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.mdsource content
数据分析评审
评估数据分析流水线的正确性、健壮性和可重复性。
适用场景
- 在发表前审查同事的分析笔记本或脚本
- 在生产部署前验证机器学习流水线
- 为监管或业务决策审计分析报告
- 评估分析是否支持其所述结论
- 在受监管环境中进行第二分析师复核
输入
- 必填:分析代码(脚本、笔记本或流水线定义)
- 必填:分析输出(结果、表格、图表、模型指标)
- 可选:原始数据或数据字典
- 可选:分析计划或协议(预先注册或临时的)
- 可选:目标受众和决策背景
步骤
第 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 步:检测数据泄漏
数据泄漏发生在训练集外的信息影响模型时,导致过于乐观的性能:
常见泄漏模式:
- 目标泄漏:直接编码目标变量的特征(如使用"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