2. 历史项目数据特征分析

历史项目数据是智能成本估算模型的“燃料”。数据质量直接决定估算精度。本节系统梳理历史项目数据的常见类型、质量评估维度与清洗策略,为后续特征工程奠定基础。

2.1 历史项目数据的常见类型

根据成本估算的驱动因素,历史项目数据可归纳为三大核心类型:工期数据、资源数据与风险数据。下表列出每类的典型字段与数据特征。

数据类别 典型字段 数据特征 常见来源
工期数据 计划开始/结束日期、实际开始/结束日期、关键路径时长、里程碑偏差 连续型数值,存在缺失值、异常值(如负工期) 项目管理工具(Jira、MS Project)
资源数据 人力投入(人天)、设备成本、外包费用、材料用量 连续型数值,单位不统一,存在离群点 财务系统、工时记录表
风险数据 风险等级、风险发生概率、影响程度、风险应对成本 分类+连续混合,主观评分偏差大 风险登记册、复盘报告
实践提示: 工期与资源数据通常来自结构化系统,质量相对可控;风险数据多为人工录入,主观偏差与缺失率最高,是清洗的重点对象。

2.2 数据质量评估维度

数据质量评估是清洗的前置步骤。我们采用六维评估框架,每个维度对应具体的检查指标。

  1. 完整性:字段缺失率、记录缺失率。阈值:关键字段缺失率 > 20% 需标记。
  2. 准确性:值与真实情况的偏差。例如工期为负值、资源成本为0。
  3. 一致性:同一实体在不同系统中的值是否矛盾。如工期在A系统为30天,B系统为45天。
  4. 时效性:数据是否反映项目执行时的真实状态。过时数据需标注版本。
  5. 唯一性:是否存在重复记录。同一项目ID出现多次需合并。
  6. 规范性:数据格式、单位、编码是否统一。如“人天”与“人时”混用。
评估输出: 每个字段生成一张质量评分卡,格式为 {字段名: {完整性: 0.95, 准确性: 0.88, 一致性: 0.92, 时效性: 0.90, 唯一性: 1.0, 规范性: 0.85}}。综合评分低于 0.8 的字段进入清洗流程。

2.3 数据清洗策略

基于质量评估结果,针对不同数据问题采用差异化清洗策略。以下为清洗策略矩阵。

质量问题 清洗策略 适用场景 注意事项
缺失值 均值/中位数填充、前向填充、模型预测填充 工期、资源连续字段 缺失率 > 50% 的字段建议删除
异常值 IQR 法、Z-Score 法、业务规则截断 成本、工时等数值字段 需结合业务判断,避免误删合理极值
不一致 主数据映射、规则引擎统一 跨系统字段冲突 建立字段映射字典,保留原始值
重复记录 基于项目ID+时间戳去重 同一项目多次录入 保留最新版本,标记历史版本
格式不规范 正则表达式标准化、单位转换 日期、货币、单位字段 统一为 ISO 标准格式
关键约束: 清洗过程必须记录转换日志,保留原始数据副本。任何清洗操作都应是可逆的,避免因清洗引入系统性偏差。

2.4 数据特征分析流程

下图展示从原始历史项目数据到可用特征集的完整分析流程,包含质量评估与清洗的串联关系。

历史项目数据特征分析流程 原始历史数据 数据分类 六维质量评估 清洗策略 特征提取 可用特征集 流程说明 1. 原始数据先按工期/资源/风险分类,识别字段类型与来源。 2. 六维质量评估输出字段级评分卡,标记低质量字段。 3. 清洗策略按问题类型执行,保留转换日志。 4. 清洗后的数据进入特征提取,最终生成可用特征集。

2.5 清洗策略代码示例

以下 Python 代码展示基于 IQR 法的异常值清洗与中位数填充缺失值的实现片段。

import pandas as pd
import numpy as np

def clean_project_data(df, col):
    """
    清洗历史项目数据中的指定列
    :param df: DataFrame
    :param col: 待清洗列名
    :return: 清洗后的 DataFrame
    """
    # 1. 缺失值处理:中位数填充
    median_val = df[col].median()
    df[col].fillna(median_val, inplace=True)

    # 2. 异常值处理:IQR 法
    Q1 = df[col].quantile(0.25)
    Q3 = df[col].quantile(0.75)
    IQR = Q3 - Q1
    lower_bound = Q1 - 1.5 * IQR
    upper_bound = Q3 + 1.5 * IQR

    # 将异常值截断到边界
    df[col] = df[col].clip(lower=lower_bound, upper=upper_bound)

    return df

# 示例调用
# df_clean = clean_project_data(df, 'actual_duration')
工程建议: 生产环境中建议将清洗逻辑封装为 Pipeline 组件,支持参数化配置(如 IQR 倍数、填充策略),便于复用与版本管理。

2.6 数据质量报告模板

清洗完成后,输出标准化的数据质量报告,作为特征工程输入。报告包含以下核心部分。

  • 字段概览:字段名、数据类型、非空率、唯一值比例。
  • 质量评分:六维评分雷达图数据(数值化输出)。
  • 清洗记录:每类问题处理的记录数、处理方式。
  • 分布统计:清洗前后均值、标准差、分位数对比。

通过上述分析流程,历史项目数据从原始状态转化为高质量、标准化的特征数据,为后续成本估算模型提供可靠输入。