步骤二:计算偏差率与偏差分布

本章进入偏差率计算、分布检验与异常值剔除的核心流程,从统计层面确认 Effort 偏差是否符合正态假设,并清理干扰数据。

适用场景

  • 已完成步骤一的数据采集,获得了 Effort 计划值与实绩值对应记录。
  • 数据量 ≥ 15 条(小样本建议使用 Shapiro-Wilk 检验,大样本可用 K-S 检验)。
  • 偏差率中可能混入因任务中断、范围变更或记录错误导致的极端值。

前置条件

  • 原始数据表已清理:无空行、重复记录、非数字字段。
  • 已确认每一条记录均有 planned_hours 且 actual_hours > 0。
  • 团队规模(人数)作为分类标签已写入数据集(用于后续章节分组分析)。

操作步骤

  1. 计算偏差率 — 对每条记录执行:
    deviation_rate = (actual_hours - planned_hours) / planned_hours * 100%
  2. 绘制偏差率直方图与 Q-Q 图 — 目视检查分布形态。若直方图明显偏态或 Q-Q 点严重偏离对角线,提示非正态。
  3. 执行正态性检验 — 推荐 Shapiro-Wilk(样本量 < 5000)或 Anderson-Darling。原假设 H₀ 为数据服从正态分布。
    # Python 示例(scipy)
    from scipy import stats
    stat, p = stats.shapiro(deviation_rate_array)
    print(f"W={stat:.4f}, p-value={p:.4f}")
    if p > 0.05: print("不能拒绝正态性假设")
    else: print("数据不服从正态分布")
  4. 标记异常值 — 若正态假设成立,使用 Z-score 法(|Z| > 3 视为异常);若非正态,使用 IQR 法(超出 Q1 - 1.5·IQR 或 Q3 + 1.5·IQR 视为异常)。
  5. 剔除异常值并记录 — 将标记的记录从主数据集中移除,移入《异常值记录表》。剔除后重新检验一次,确保剔除后分布趋于正态或稳定。
  6. 输出偏差率分布摘要 — 包括样本量、均值、标准差、偏度、峰度、Q1/Q3 及异常值数量。

输入 / 输出物

类别名称格式 / 示例
输入Effort 原始数据集(清洗后)CSV: task_id, team_size, planned_hours, actual_hours
输出偏差率列(新增字段)deviation_rate 浮点数,单位 %
输出正态性检验结果JSON: {"test":"Shapiro","statistic":0.987,"p_value":0.34,"conclusion":"normal"}
输出异常值剔除后数据集CSV: 同输入结构,仅保留有效记录
输出异常值记录表CSV: 含原始索引、偏差率、异常原因

责任边界

  • 数据工程师:实现步骤中的计算与检验脚本,确保可复现;生成输出文件。
  • 项目经理 / 分析员:确认剔除规则是否合理(如团队规模较小时是否放宽 Z-score 阈值);复核异常值记录表。
  • 质量保证:检查正态性检验的 P 值计算是否正确,验证 IQR 区间无编码错误。

记录材料

  • 正态性检验报告:包含检验方法、W 统计量、P 值、结论。
  • 异常值剔除日志:记录剔除的记录数、剔除前后的样本量及关键统计量变化。
  • 偏差率分布图表:直方图 + 正态拟合曲线、Q-Q 图(存档为 PNG/SVG)。

异常处理

常见异常及应对:

  • 全部偏差率均为 0: 检查数据是否误采集合约值,需返回步骤一重新确认记录粒度。
  • Shapiro-Wilk 报错(样本量过大): 自动切换为 Anderson-Darling 检验。
  • 剔除异常值后数据量 < 10: 停止本次分析,标记为“数据不足”,返回数据采集阶段补充样本。
  • 检验结果前后矛盾(剔除后仍非正态): 采用非参数方法(如 Median Absolute Deviation)替代,并在报告中注明。

验收标准

  1. 偏差率列计算正确,无缺失值,无除零错误(planned_hours 为 0 的记录应预先剔除)。
  2. 正态性检验输出可通过单元测试用例验证(如输入标准正态随机数应返回 P > 0.05)。
  3. 异常值剔除后数据集与异常记录表均以标准 CSV 格式输出,字段完整。
  4. 所有剔除过程记录可追溯,剔除原因清晰(Z-score 超限 / IQR 超限)。
  5. 偏差率分布摘要数据与原始数据一一对应,无人工篡改痕迹。

偏差率修正与剔除流程

步骤二:偏差率计算 → 正态性检验 → 异常值剔除 原始 Effort 数据 计算偏差率 正态性检验 正态 非正态 Z-score 法 IQR 法 剔除后数据集 + 记录 注意 • 剔除后样本≥10 • 记录异常原因 • 报告统计量变化 • 非正态 → 非参数法