4. 数据收集与准备:需求预测所需的数据源与数据治理

需求预测的起点并非算法,而是数据。任何预测模型的精度上限,都受限于输入数据的质量与完整性。在实际项目中,我们常看到企业花费大量精力调优模型参数,却忽视了数据源头存在的系统性偏差——例如销售历史中混入退货记录、促销期间数据未做标记、或外部因素数据粒度与内部数据不一致。本章将系统梳理需求预测所需的数据源分类、数据清洗的核心流程、缺失值处理策略以及异常值检测方法,帮助学员建立一套可落地的数据准备框架。

需求预测数据准备全景图 数据源层 ① 销售历史(POS/订单/发货) ② 市场数据(促销/价格/渠道) ③ 外部因素(天气/经济/竞品) 数据治理层 数据清洗(去重/格式统一) 缺失值处理(插补/删除) 异常值检测(统计/业务规则) 特征工程层 时间特征(趋势/季节/节假日) 业务特征(促销/新品/库存) 外部特征(天气/经济指数) 数据质量评估维度 完整性 | 准确性 | 一致性 | 及时性 | 唯一性 输出:训练数据集 时间序列矩阵 特征-目标映射表 验证集/测试集划分 输出:数据字典 字段定义与单位 业务口径说明 数据血缘关系 输出:质量报告 缺失率统计 异常值占比 数据分布对比 数据准备是预测项目中最耗时但最关键的环节,通常占整个项目周期的60%以上

4.1 需求预测的数据源体系

需求预测的数据源可划分为三大类:内部业务数据、市场运营数据和外部环境数据。每一类数据在预测模型中扮演不同角色,且需要不同的采集频率与治理策略。

4.1.1 销售历史数据(核心输入)

销售历史是需求预测的基石,但“销售”在不同企业中有不同口径。常见的数据来源包括:

  • POS(销售点)数据:最接近真实消费者需求的记录,但可能受缺货、退货影响。
  • 订单数据:包含客户下单时间、数量、金额,但可能包含未发货或取消订单。
  • 发货/出库数据:反映实际物流出库量,适合供应链端预测,但滞后于真实需求。
  • 发票数据:财务口径,通常按月度汇总,粒度较粗。

在数据准备阶段,必须明确“预测目标的口径”——是预测终端消费者购买量,还是预测经销商订货量?不同口径对应的数据源不同,模型结果的含义也不同。

4.1.2 市场运营数据(解释变量)

市场运营数据用于解释销售波动的原因,主要包括:

数据类别 典型字段 预测中的作用 常见粒度
促销活动 促销类型、折扣率、持续时间 识别促销带来的需求增量 SKU×门店×日
价格信息 零售价、成交价、竞品价 价格弹性分析 SKU×渠道×周
渠道数据 渠道类型、门店等级、陈列位置 渠道差异建模 渠道×区域
新品信息 上市日期、生命周期阶段 新品预测曲线调整 SKU×月

4.1.3 外部环境数据(辅助变量)

外部数据能显著提升中长期预测的准确性,但需注意数据获取成本与时效性:

  • 宏观经济指标:GDP增速、CPI、消费者信心指数(月度/季度)。
  • 天气数据:温度、降水量、湿度(日粒度),对快消品、服装、能源行业影响显著。
  • 节假日与事件:春节、双11、世界杯等,需提前构建事件日历。
  • 竞品动态:竞品促销、新品发布(较难获取,可借助爬虫或第三方报告)。
经验提醒:外部数据并非越多越好。每增加一个外部变量,就需要额外的数据清洗和特征工程成本。建议从“业务上明确相关”的变量开始,逐步加入,避免“垃圾进、垃圾出”。

4.2 数据清洗:从原始数据到可用数据

数据清洗的目标是解决脏数据问题,包括重复记录、格式不一致、逻辑冲突等。清洗过程应遵循“先结构、后内容、再业务校验”的顺序。

4.2.1 数据清洗的核心操作

  1. 去重:同一订单在多个系统中重复记录,需按订单号+SKU+时间戳去重。
  2. 格式统一:日期格式(YYYY-MM-DD)、数值单位(件/箱/吨)、货币单位(元/美元)统一。
  3. 逻辑校验:例如“发货日期早于订单日期”“销售数量为负数”等逻辑错误。
  4. 粒度对齐:将不同来源的数据统一到同一时间粒度(日/周/月)和产品粒度(SKU/品类/品牌)。

4.2.2 数据清洗的实操流程

# 伪代码示例:数据清洗流程
1. 加载原始数据(销售表、促销表、日历表)
2. 检查重复:group by 订单号+SKU+日期,count>1 则标记
3. 格式转换:日期字段统一为 datetime 类型
4. 逻辑校验:过滤 quantity <= 0 的记录(或单独标记)
5. 粒度聚合:按 SKU×日 汇总销售数量
6. 输出清洗后数据集 + 清洗日志(记录删除/修改的条数)
风险提示:清洗过程中删除的数据要保留原始备份,并记录清洗规则。否则当模型效果不佳时,无法回溯是数据问题还是模型问题。

4.3 缺失值处理策略

缺失值是时间序列预测中最常见的问题。处理方式取决于缺失的模式(随机缺失/非随机缺失)和比例。

4.3.1 缺失值分类与影响

缺失类型 定义 示例 处理难度
完全随机缺失 缺失与任何变量无关 系统故障导致某天数据丢失 低
随机缺失 缺失与其他变量相关 高销量SKU更易缺货导致无销售记录 中
非随机缺失 缺失与缺失值本身相关 低价值产品被业务人员忽略录入 高

4.3.2 常用缺失值处理方法

  • 删除法:当缺失比例<5%且为完全随机缺失时,可直接删除。
  • 均值/中位数填充:适用于平稳序列,但会降低数据方差。
  • 前向/后向填充:适用于时间序列,用前一个值填充,但会忽略趋势。
  • 插值法:线性插值、样条插值,能保留趋势信息。
  • 模型预测填充:用其他变量建立回归模型预测缺失值,适合缺失比例较高时。
关键判断:对于需求预测,“零销售”与“缺失”必须区分。零销售表示当天确实没有卖出,缺失表示没有记录。如果将缺失误填为0,会严重低估需求波动;如果将0误判为缺失,则会高估需求。建议在数据字典中明确标记“0”和“NULL”的业务含义。

4.4 异常值检测与处理

异常值(Outlier)是指显著偏离正常分布的数据点。在需求预测中,异常值可能来自真实的业务事件(如爆款、断货、退货潮),也可能是数据录入错误。处理异常值前,必须先判断其业务含义。

4.4.1 异常值检测方法

方法 原理 适用场景 局限性
Z-Score法 |x-μ|/σ > 3 视为异常 近似正态分布的数据 对非正态分布不适用
IQR法 Q1-1.5×IQR 或 Q3+1.5×IQR 之外 偏态分布、含极端值 对样本量敏感
业务规则法 超过历史最大值/低于最小值 有明确业务上限的场景 需要业务经验
时间序列分解 残差超过阈值 有趋势和季节性的数据 计算复杂度高

4.4.2 异常值的处理策略

  1. 保留:如果异常值对应真实的促销活动或突发事件,应保留并标记为“事件日”。
  2. 修正:如果是录入错误(如数量多了一个0),修正为合理值。
  3. 剔除:如果异常值无法解释且对模型影响过大,可剔除,但需记录剔除原因。
  4. Winsorize(缩尾):将极端值替换为分位数(如99%分位),保留信息但降低影响。

4.5 案例拆解:某快消品企业的数据准备实战

以下案例展示了一个完整的数据准备流程,涵盖从原始数据到建模数据集的全部步骤。

4.5.1 背景与初始数据

某饮料企业计划为华东区域500家门店做未来12周的SKU级需求预测。初始数据包括:

  • 2023-2024年每日POS销售记录(约180万条)
  • 促销日历(含促销类型、折扣率)
  • 门店信息表(门店等级、所在城市)
  • 天气数据(每日温度、降雨量)

4.5.2 数据问题诊断

初步探查发现以下问题:

问题类型 具体表现 影响程度
重复记录 约2.3%的订单在POS和ERP中重复 高
缺失值 天气数据缺失12%(传感器故障) 中
异常值 某SKU单日销量达平时50倍(疑似团购) 中
口径不一致 部分门店按“箱”上报,部分按“瓶” 高

4.5.3 处理过程与决策

  1. 去重:以“订单号+SKU+门店+日期”为唯一键,保留POS系统记录,删除ERP重复记录。
  2. 单位统一:将“箱”转换为“瓶”(1箱=24瓶),并增加“单位换算”标记字段。
  3. 缺失值处理:天气数据采用“最近7天同城市均值”填充,并生成“是否缺失”标志列供模型参考。
  4. 异常值处理:将单日销量超过历史均值10倍且无促销标记的记录标记为“团购事件”,单独建模,不进入常规预测训练集。
  5. 促销数据对齐:将促销日历与销售数据按门店+SKU+日期关联,生成“促销强度”特征(折扣率×时长)。

4.5.4 结果与复盘

清洗后的数据集从180万条降至172万条(去除重复和无效记录),缺失率从12%降至0%,异常值占比从0.8%降至0.1%。后续模型预测准确率(MAPE)比未清洗数据提升约18%。

复盘经验:数据清洗不是一次性工作,而是需要建立持续监控机制。建议每次数据更新后自动运行质量检查脚本,输出数据质量报告,确保模型输入始终处于可控状态。

常见误区:不要为了追求“干净数据”而过度清洗。例如,将促销日的销量高峰当作异常值剔除,会直接导致模型低估促销效果。正确的做法是:先标记,再决定是否剔除。

4.6 本章总结与行动清单

数据准备是需求预测项目中最耗时但最关键的环节。本章的核心要点可归纳为:

  • 数据源分类:销售历史(核心)、市场运营(解释)、外部环境(辅助),三者缺一不可。
  • 清洗优先级:先解决口径不一致和重复问题,再处理缺失和异常。
  • 缺失值处理:区分“零值”与“缺失”,根据缺失模式和比例选择方法。
  • 异常值处理:先判断业务含义,再决定保留、修正还是剔除。
  • 文档化:所有清洗规则、缺失填充逻辑、异常值处理决策都应记录在数据字典中,确保可追溯。
阶段 关键输出 质量检查项
数据收集 原始数据清单 覆盖度、时效性、粒度
数据清洗 清洗后数据集 重复率<0.5%、格式统一
缺失处理 填充后数据集 缺失率<2%、填充方法记录
异常处理 标记后数据集 异常值占比<1%、处理原因记录
特征工程 建模数据集 特征相关性、数据分布

在下一阶段,我们将基于准备好的数据,探讨如何构建时间序列特征和外部变量特征,为预测模型提供高质量的输入。