异常值检测与处理工具
使用经过验证的统计方法识别和管理数据集中的异常值,并生成符合监管要求的文档。
快速检查
python -m py_compile scripts/main.py
python scripts/main.py --help
适用场景
- 统计分析前的数据质量控制
- 生物标志物或临床测量数据集的预分析筛查
- 需要记录异常值处理的监管合规工作流(FDA 数据完整性)
- 为审计追踪生成异常值报告
工作流程
- 确认用户目标、必需输入和不可协商的约束条件
- 验证请求是否符合文档范围,如果任务需要不支持的假设则提前停止
- 使用打包脚本路径或仅使用实际可用的输入进行推理
- 返回结构化结果,分离假设、交付物、风险和未解决项
- 如果执行失败或输入不完整,切换到备用路径并明确说明阻塞原因
命令参数
| 参数 | 类型 | 必需 | 默认值 | 说明 |
|------|------|------|--------|------|
| --data | str | 是 | — | 数据集文件路径(CSV/Excel)|
| --method | str | 否 | zscore | 检测方法:zscore、iqr 或 grubbs |
| --threshold | float | 否 | 3.0 | z-score 或 Grubbs 检验的阈值 |
| --action | str | 否 | flag | 处理动作:flag、remove 或 winsorize |
使用方法
# Z-score 异常值检测并标记
python scripts/main.py --data measurements.csv --method zscore --threshold 3.0
# IQR 方法并移除异常值
python scripts/main.py --data measurements.csv --method iqr --action remove
# Grubbs 检验用于小样本
python scripts/main.py --data measurements.csv --method grubbs --action flag
# Winsorization 处理
python scripts/main.py --data measurements.csv --method zscore --action winsorize --threshold 2.5
检测方法
1. Z-Score 方法
原理:计算每个观测值与均值的标准差距离
公式:
z = (x - μ) / σ
阈值:
|z| > 3.0:标准阈值(99.7% 置信区间外)|z| > 2.5:较严格阈值|z| > 2.0:宽松阈值
适用场景:
- 大样本(n > 30)
- 近似正态分布数据
- 无极端偏态
2. IQR 方法(四分位距)
原理:基于数据的四分位数识别异常值
公式:
IQR = Q3 - Q1
下界 = Q1 - 1.5 × IQR
上界 = Q3 + 1.5 × IQR
优点:
- 对非正态分布数据稳健
- 不受极端值影响
- 无需假设数据分布
适用场景:
- 偏态分布数据
- 小样本
- 不确定数据分布类型
3. Grubbs 检验
原理:基于假设检验的方法,一次识别一个异常值
假设:
- H₀:数据中无异常值
- H₁:数据中存在至少一个异常值
检验统计量:
G = max|x - x̄| / s
适用场景:
- 正态分布数据
- 小样本(n < 30)
- 需要统计显著性的场景
处理动作
1. flag(标记)
操作:标记异常值但保留所有数据
输出:
- 原始数据集 + 异常值标记列
- 异常值列表报告
适用场景:
- 探索性数据分析
- 需要人工审核的场景
- 监管审计要求保留原始数据
2. remove(移除)
操作:从数据集中删除异常值
输出:
- 清洗后的数据集(不含异常值)
- 被移除的异常值记录
- 前后对比统计
适用场景:
- 确认为测量误差或录入错误
- 下游分析对异常值敏感
- 数据量充足
风险:
- 可能丢失重要信息
- 减少样本量
3. winsorize(缩尾处理)
操作:将异常值替换为非异常值的极值
方法:
- 将超过上界的值替换为上界值
- 将低于下界的值替换为下界值
优点:
- 保留样本量
- 减少异常值影响
- 保持数据趋势
适用场景:
- 异常值较多但不想丢失样本量
- 需要保持数据连续性
- 回归分析等统计建模
输出内容
异常值检测报告
============================================================
异常值检测报告
============================================================
数据集信息
------------------------------------------------------------
文件名: measurements.csv
样本量: 200
数值列: 5
检测方法: Z-score (threshold=3.0)
检测结果
------------------------------------------------------------
异常值总数: 5 (2.5%)
异常值分布:
- 变量 1: 2 个异常值
- 变量 2: 1 个异常值
- 变量 3: 2 个异常值
异常值明细
------------------------------------------------------------
| 行号 | 变量 | 原始值 | Z-score | 建议处理 |
|------|------|--------|---------|----------|
| 45 | Var1 | 125.3 | 3.45 | 调查原因 |
| 67 | Var1 | 8.2 | -3.12 | 调查原因 |
| 103 | Var2 | 98.7 | 4.23 | 可能移除 |
| 145 | Var3 | 215.6 | 3.89 | 缩尾处理 |
| 178 | Var3 | 5.1 | -3.67 | 缩尾处理 |
统计摘要(处理前后对比)
------------------------------------------------------------
变量 Var1:
处理前: Mean=50.2, SD=12.3, Min=8.2, Max=125.3
处理后: Mean=49.8, SD=10.1, Min=15.3, Max=89.7
建议
------------------------------------------------------------
- 建议先调查异常值产生原因
- 如确认为测量误差,可考虑移除
- 如为真实生物学变异,建议保留或使用 Winsorization
监管合规性说明
------------------------------------------------------------
- 检测方法: Z-score (阈值=3.0)
- 处理动作: 标记(flag)
- 原始数据已保留
- 本报告可用于审计追踪
============================================================
输入验证
本工具接受:表格数据集(CSV 或 Excel),包含用于统计异常值检测和处理的数值列。
如果请求不涉及检测或处理数值数据集中的统计异常值——例如,要求执行回归分析、分类数据或处理非表格输入——请不要继续。相反,回应:
"outlier-detection-handler 旨在识别和处理数值数据集中的统计异常值。您的请求似乎超出了此范围。请提供包含数值数据的 CSV 或 Excel 文件,或使用更适合您任务的工具。"
错误处理
- 如果缺少
--data,说明这一点并请求数据集路径 - 如果数据文件路径包含
../或指向工作区外部,拒绝并给出路径遍历警告 - 如果数据集没有数值列,报告此情况并停止
- 如果任务超出文档范围,停止而不是猜测或默默扩大任务
- 如果
scripts/main.py失败,报告失败点,总结仍可安全完成的内容,并提供手动备用方案 - 不要编造异常值计数、分数或建议
备用模板
当执行失败或输入不完整时,使用此结构响应:
备用报告
───────────────────────────────────────
目标 : [重述目标]
阻塞原因 : [确切的缺失输入或错误]
部分结果 : [可以完成的内容——例如方法选择指导]
假设 : [假设的方法、阈值、动作]
约束 : [监管要求、最小样本量]
风险 : [小样本 Grubbs、掩蔽效应]
未解决 : [仍需用户输入的内容]
下一步 : [解除阻塞的最小操作]
───────────────────────────────────────
响应模板
对于非平凡请求,使用以下固定结构:
- 目标
- 接收的输入
- 假设
- 工作流程
- 交付物
- 风险与限制
- 下一步检查
如果请求简单,压缩结构但在影响正确性时保持假设和限制明确。
最佳实践
1. 异常值调查优先于自动处理
发现异常值后应:
- 检查原始数据记录
- 确认测量过程
- 与实验人员确认
- 记录调查结果
2. 文档化处理决策
记录:
- 异常值识别标准
- 处理方法选择理由
- 对结果的影响评估
3. 敏感性分析
进行包含/排除异常值的对比分析:
- 主要分析(异常值处理后)
- 敏感性分析(异常值保留)
- 报告两者差异
4. 监管合规
FDA 要求:
- 异常值处理方法预先定义在 SAP(统计分析计划)中
- 处理决策有科学依据
- 原始数据保留
- 审计追踪完整
常见场景
临床试验生物标志物数据
# HbA1c 测量值异常检测
python scripts/main.py \
--data hba1c_measurements.csv \
--method iqr \
--action flag
# 审查后决定移除确认的测量错误
python scripts/main.py \
--data hba1c_measurements.csv \
--method iqr \
--action remove
基因表达数据
# RNA-seq 表达值异常检测
python scripts/main.py \
--data gene_expression.csv \
--method zscore \
--threshold 2.5 \
--action winsorize
小样本实验数据
# n=15 的小样本使用 Grubbs 检验
python scripts/main.py \
--data small_sample.csv \
--method grubbs \
--action flag
风险评估
| 风险指标 | 评估 | 级别 | |---------|------|------| | 代码执行 | Python 脚本本地执行 | 中 | | 网络访问 | 无外部 API 调用 | 低 | | 文件系统访问 | 读取输入文件,写入输出文件 | 中 | | 指令篡改 | 标准提示指南 | 低 | | 数据暴露 | 输出文件保存至工作区 | 低 |
先决条件
pip install -r requirements.txt
依赖包:
- pandas
- numpy
- scipy
生命周期状态
- 当前阶段:Draft
- 下次审查日期:2026-03-06
- 已知问题:无
- 计划改进:
- 多变量异常值检测(Mahalanobis 距离)
- 可视化输出(箱线图、散点图)
- 批量处理多个数据集
- 与统计分析工具集成
微信扫一扫