3、数据准备:数据采集、清洗、缺失值处理、异常值检测与修正
在趋势预测分析流程中,数据准备是决定预测模型上限的关键环节。业界常说“垃圾进,垃圾出”(Garbage In, Garbage Out),无论后续采用多么先进的算法,如果输入数据存在系统性偏差、大量缺失或异常干扰,预测结果都将失真。本章将系统拆解数据准备的四大核心模块:数据采集、数据清洗、缺失值处理、异常值检测与修正,帮助学员建立一套可落地、可复用的数据预处理标准流程。
3.1 数据采集:源头决定预测上限
核心原理
数据采集是预测分析的地基工程。其核心目标不是“尽可能多地收集数据”,而是在限定成本与时间约束下,获取能够真实反映预测目标变化规律的代表性样本。对于趋势预测而言,时间序列的连续性、频率一致性、口径稳定性比单纯的数据量更为重要。采集阶段需要明确三个关键问题:预测目标是什么?需要哪些维度的数据?数据的时间粒度和历史跨度应如何设定?
操作流程
- 数据源盘点:梳理内部业务数据库(如ERP、CRM)、外部公开数据(如宏观经济指标、天气数据)、第三方API(如社交媒体热度指数)等可用来源。
- 采样策略设计:确定时间频率(日/周/月)、历史回溯长度(通常建议至少覆盖3-5个完整周期,如季节性业务需覆盖3年以上)、抽样方法(随机抽样或分层抽样)。
- 数据字典与口径统一:明确每个字段的业务含义、单位、取值范围、枚举值定义,避免后续分析中出现“同义不同值”或“同值不同义”的混乱。
- 采集执行与监控:编写自动化采集脚本或配置ETL任务,记录采集日志,监控数据量波动和接口稳定性。
| 数据源类型 | 典型示例 | 采集方式 | 注意事项 |
|---|---|---|---|
| 内部业务库 | 销售订单、库存流水 | SQL直连 / ETL定时抽取 | 注意时区、分库分表合并 |
| 外部API | 天气、汇率、舆情指数 | RESTful API调用 | 限流控制、密钥管理、数据缓存 |
| 半结构化数据 | 日志文件、爬虫抓取 | Logstash / 自定义解析 | 编码问题、字段嵌套解析 |
| 手工填报 | 线下渠道反馈表 | 表单工具 / Excel导入 | 格式校验、必填项控制 |
3.2 数据清洗:消除“脏数据”干扰
核心原理
数据清洗的目标是提升数据质量,使其满足“准确性、完整性、一致性、时效性”四个维度要求。在趋势预测场景中,最常见的脏数据包括:重复记录、格式不统一(如日期格式混用)、单位不一致(如销售额有的用元、有的用万元)、逻辑矛盾(如订单时间晚于发货时间)、以及超出合理业务范围的噪声值。
清洗操作清单
- 去重:基于主键或业务唯一键(如订单号+商品ID)识别重复记录,保留最新或最完整的一条。
- 格式标准化:统一日期格式(YYYY-MM-DD)、数值精度、字符串编码(UTF-8)、分类变量的命名规范。
- 单位统一:建立单位换算映射表,将不同来源的数据统一到同一计量体系。
- 逻辑校验:编写规则引擎检查字段间逻辑关系,例如“销售额=单价×数量”的误差范围校验。
- 噪声过滤:对明显超出业务合理范围的值(如负库存、超过100%的增长率)进行标记或剔除。
3.3 缺失值处理:选择比方法更重要
核心原理
缺失值处理没有“万能药”,选择何种策略取决于三个因素:缺失机制(完全随机缺失MCAR、随机缺失MAR、非随机缺失MNAR)、缺失比例、以及变量在预测模型中的重要性。盲目删除或盲目填充都可能导致预测偏差。
处理方法对比
| 方法 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 删除记录 | 缺失比例<5%,且MCAR | 简单、不引入人为偏差 | 损失样本量,可能丢失信息 |
| 均值/中位数填充 | 数值型变量,低缺失率 | 计算快、稳定 | 降低方差,扭曲分布 |
| 前向/后向填充 | 时间序列数据 | 保留时序连续性 | 在趋势突变点表现差 |
| 线性插值 | 时间序列,缺失段较短 | 利用前后趋势 | 对非线性变化拟合不足 |
| 回归/机器学习预测 | 变量间相关性较强 | 精度较高,利用多变量信息 | 计算成本高,可能过拟合 |
| 多重填补(MICE) | 缺失率较高,科研级要求 | 考虑不确定性,多次填补取平均 | 实现复杂,解释困难 |
案例拆解:某物流公司月货运量缺失处理
背景与约束:某物流公司需要预测未来6个月的货运总量以规划运力。历史数据为2019-2023年的月度数据,共60个样本。其中2022年2月(春节假期)和2023年7月(系统升级)数据缺失。
初始现象:直接删除两个月度记录后,时间序列出现断裂,且2022年2月恰逢春节,货运量本身就有周期性下降特征。
分析判断:由于只有2个缺失点,且均为单点缺失,采用“前向填充+季节性调整”策略:先用2022年1月和3月的均值作为基础值,再乘以春节月份的历史平均折扣系数(0.72),得到2022年2月的估计值。2023年7月则参考2021年7月和2022年7月的同比增速进行估算。
操作步骤:① 计算历史春节月份(2月)与非春节月份的比值;② 对2022年2月执行前向填充后乘以折扣系数;③ 对2023年7月使用线性回归(以月份序号为自变量)预测;④ 对比两种方法的结果差异,取合理区间。
结果对比:使用该策略后,模型在验证集上的MAPE(平均绝对百分比误差)为8.3%,而直接删除缺失记录的模型MAPE为11.7%,精度提升约29%。
复盘经验:缺失值处理必须结合业务背景知识,不能机械套用统计方法。对于周期性明显的数据,季节性调整比纯数学插值更可靠。
3.4 异常值检测与修正:识别“真噪声”与“真信号”
核心原理
异常值(Outlier)是偏离数据整体分布模式的观测点。在趋势预测中,异常值可能来自三类原因:数据录入错误(应修正)、真实突发事件(如促销活动、自然灾害,应保留并标记)、系统结构性变化(如新政策实施,应单独建模)。检测的核心挑战在于区分“噪声”与“新信号”。
检测方法体系
- 统计方法:3σ原则(正态分布假设)、Z-Score(标准化后阈值判断)、IQR(四分位距法,适用于偏态分布)。
- 可视化方法:箱线图、散点图、时间序列趋势图,人工识别离群点。
- 机器学习方法:孤立森林(Isolation Forest)、DBSCAN聚类、One-Class SVM,适用于高维数据。
- 时序专用方法:STL分解(趋势+季节+残差),对残差项做阈值检测。
修正策略
| 异常类型 | 判定依据 | 处理策略 |
|---|---|---|
| 录入错误 | 超出业务合理范围(如负库存) | 直接修正为NULL或按缺失值处理 |
| 真实事件 | 有对应业务活动记录(如促销) | 保留,并添加虚拟变量标记 |
| 结构性突变 | 连续多个点偏离,且无回归趋势 | 分段建模,或使用变点检测算法 |
| 随机噪声 | 单点偏离,无业务解释 | Winsorize截尾(如1%/99%分位数替换) |
常见误区与总结复盘
- 误区一:先清洗再理解。正确做法是先做探索性数据分析(EDA),理解数据分布和业务背景后再决定清洗策略。
- 误区二:过度清洗。将真实业务波动当作噪声剔除,导致预测模型过于“平滑”,失去对市场变化的敏感度。
- 误区三:忽视时序相关性。在时间序列中,异常值检测不能只看单点分布,还要考虑前后点的变化率(如差分后的Z-Score)。
- 误区四:一次性处理。数据准备不是一次性任务,随着新数据流入,需要建立持续监控和定期重评估机制。