3. 数据采集与业务指标量化

建模工作的质量上限,往往在数据进入模型之前就已经被决定了。业务问题通常以订单、工单、日志、传感器读数、客户表单等形式散落在多个系统中,它们并不是为建模而生的"干净数据"。本节的任务是把这些原始数据源转化为一份可用于建模的结构化数据集:明确采集什么、从哪里采、按什么粒度采,经过清洗与一致性处理,再把业务概念翻译成可计算的量化指标。

一、先定义指标,再设计采集

很多团队的习惯是先"把数据拉下来再说",结果拿到几十张表却不知道哪张能支撑目标变量。更稳妥的顺序是反向推导:从建模目标出发,确定标签(因变量)、候选特征(自变量)和分析单元,再倒推需要哪些数据源、哪些字段、覆盖多长时间。

以"预测电商订单是否会在承诺时效内送达"为例,分析单元是"单个订单",标签是"是否超时(0/1)",候选特征包括下单时刻、仓库、承运商、目的地距离、商品件数、历史该线路时效等。由此可以列出采集清单:订单主表、仓储出库记录、物流轨迹表、承运商基础信息、地址与地理编码表。每张表都要标注主键、时间字段、更新频率和预计数据量。

采集方案中需要写清四件事:数据源与接口(数据库直连、API、文件导出、埋点日志)、采集粒度与频率(按订单、按小时、按日增量)、时间窗口(如取近 18 个月,前 15 个月训练、后 3 个月验证)、口径与责任人(字段含义由谁确认)。时间窗口的划分必须按时间切分而非随机切分,否则会引入未来信息泄漏。

二、数据清洗:把"能算"变成"算得对"

清洗不是简单地删空值,而是逐项处理影响指标正确性的问题。常见问题与处理策略如下:

  • 重复记录:同一订单因多次同步产生多条,按业务主键去重,保留最新更新时间的一条。
  • 缺失值:区分"真缺失"(未采集)与"业务上不存在"(如未发货订单没有签收时间)。前者可填补或加缺失指示变量,后者应保留为空并单独编码。
  • 异常值:如重量为负、金额为 0、配送时长为 3000 小时。先用业务规则设硬边界,再用分位数(如 1% 与 99%)做软截断或标记。
  • 口径不一致:不同系统的时间字段有的用下单时间、有的用支付时间;金额有的含运费有的不含。必须统一到一份字段字典。
  • 时间与时区:跨区域业务要统一到同一时区,并明确"自然日"的切分点。
建议在清洗阶段保留一份"清洗日志":记录每一步处理影响的记录数,例如"去重删除 1,240 条、缺失签收时间标记 3,870 条"。这份日志既是可复现性的保障,也是后续排查指标异常的第一手依据。

三、指标量化:从业务语言到可计算字段

业务描述往往是模糊的,例如"配送慢""客户不满意""库存紧张"。量化就是把这些词转成有明确公式、明确口径的字段。以配送时效为例:

配送时长(小时) = 签收时间 - 出库时间
超时标志 = 1 if 签收时间 > 承诺送达时间 else 0
线路历史时效 = 该承运商+目的城市 近90天 配送时长中位数
件数密度 = 商品件数 / 包裹体积(m³)

量化时要注意三点。第一,比率类指标要给出分子分母,如"准时率 = 准时订单数 / 已签收订单数",避免分母口径漂移。第二,优先使用稳健统计量,中位数比均值更抗极端值。第三,时间相关特征要防止穿越,例如"线路历史时效"只能使用该订单出库之前的数据计算,通常用滚动窗口实现。

下图展示了一个订单从多源采集到形成建模宽表的完整链路,以及各环节的关键处理动作:

① 多源采集 订单主表 数据库直连·日增量 仓储出库记录 文件导出·按日 物流轨迹表 API·近实时 承运商/地址表 全量快照·周更 ② 清洗与对齐 按订单号去重 缺失值分类处理 异常值边界+分位截断 时间字段统一时区 金额口径统一 主键关联多表 记录清洗日志 (每步记录影响条数) ③ 指标量化 配送时长 = 签收−出库 超时标志 0/1 线路历史时效(滚动) 件数密度 = 件数/体积 准时率 = 准时/已签收 距离分箱(地理编码) 防穿越:仅用历史窗口 (公式+口径写入字典) ④ 建模宽表 一行 = 一个订单 标签:超时标志 特征:数值/类别 时间切分:15月/3月 字段字典随表交付 缺失指示列 可复现清洗脚本 质量校验(交付前必查) 主键唯一性 订单号无重复 字段完整率 关键字段≥95% 指标分布合理性 时长/金额无负值 标签比例 超时率约5%~15% 校验不通过 → 回到对应环节修正,而非在建模阶段"打补丁"。

四、结构化数据集与交付物

最终交付的宽表应满足"一行一个分析单元、一列一个明确含义"。以订单超时预测为例,宽表可能包含:订单号(主键)、下单时间、仓库编码、承运商编码、目的城市等级、距离分箱、商品件数、件数密度、线路历史时效中位数、历史准时率、是否超时(标签)。类别字段要统一编码规则,数值字段要注明单位。

建议随表交付一份字段字典,至少包含字段名、中文含义、数据类型、单位、计算公式或来源表、缺失处理方式、取值范围。这份字典是后续建模、复核和交接的基础,也是判断"指标是否被正确理解"的唯一依据。

常见陷阱:用全量数据计算"线路历史时效"再拼回每条订单,会造成标签泄漏——模型在训练时"看到"了未来信息,离线指标虚高、上线后骤降。正确做法是按订单时间做滚动窗口,只用该订单发生之前的数据。

完成上述工作后,可以先用简单统计做一次"体检":标签比例是否合理(如超时率 5%~15%)、关键特征与标签是否呈现符合业务直觉的单调关系、训练期与验证期的特征分布是否漂移。若发现某特征在验证期分布明显偏移,应回到采集或量化环节检查口径变化,而不是直接进入建模。至此,一份口径清晰、可复现、可追溯的结构化数据集才算真正就绪。