4. 数据预处理:缺失值处理、异常值检测与平滑、时间戳对齐与重采样
时间序列数据在采集、传输与存储过程中极易引入质量问题。原始序列通常包含缺失值、异常点以及不规则时间戳,若不经过系统化预处理,后续统计建模与深度学习训练将产生严重偏差。本章围绕三个核心环节展开:缺失值处理策略、异常值检测与平滑方法、时间戳对齐与重采样技术。
4.1 缺失值处理
缺失值在时间序列中表现为时间点上的观测值空缺。处理方式需根据缺失比例、缺失模式(随机/非随机)以及下游模型对数据完整性的敏感度进行选择。
| 方法 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 前向填充(ffill) | 传感器短暂断连、低频采样 | 实现简单,保持最近观测值 | 忽略趋势变化,引入滞后偏差 |
| 后向填充(bfill) | 序列起始段缺失 | 利用后续信息填补 | 不适用于中间段缺失 |
| 线性插值 | 连续型变量,缺失段较短 | 保持局部线性趋势 | 对非线性波动拟合不足 |
| 样条插值 | 非平稳序列,缺失段较长 | 平滑连续,适应曲线变化 | 计算开销大,易过拟合噪声 |
| 季节性分解插值 | 强周期序列(如日用电量) | 保留周期成分,填补合理 | 需要已知周期长度 |
| 模型预测填补 | 缺失比例高(>20%) | 利用全局模式,精度较高 | 计算复杂,存在模型偏差 |
工程建议:在深度学习模型中(如LSTM、Transformer),缺失值不宜直接删除,建议先使用线性插值或季节性分解插值补齐,再通过mask机制标记原始缺失位置,避免模型学到虚假模式。
4.2 异常值检测与平滑
异常值指显著偏离序列整体分布的观测点,可能由传感器故障、传输丢包或外部冲击引起。检测与平滑需联合进行,避免将真实突变(如突发流量)误判为异常。
4.2.1 常用检测方法
- Z-Score 法:适用于近似正态分布序列,设定阈值(通常 |Z| > 3)判定异常。
- IQR 四分位距法:鲁棒性强,不受极端值影响,适用于偏态分布。
- 移动平均残差法:计算实际值与移动平均值的残差,超过 k 倍标准差视为异常。
- STL 分解检测:将序列分解为趋势、季节、残差,对残差部分进行统计阈值判定。
- 孤立森林(Isolation Forest):适用于高维或非线性场景,可集成到预处理管线。
4.2.2 平滑策略
| 平滑方法 | 核心参数 | 适用场景 |
|---|---|---|
| 简单移动平均(SMA) | 窗口大小 w | 去除高频噪声,保留趋势 |
| 指数加权移动平均(EWMA) | 衰减因子 α | 对近期数据更敏感,实时平滑 |
| 中值滤波 | 窗口大小 w | 对脉冲型异常鲁棒,保留边缘 |
| Savitzky-Golay 滤波 | 窗口大小 w,多项式阶数 k | 保留信号形状,适合峰值保持 |
避坑提示:平滑操作会降低序列的方差和峰值信息。在异常检测任务中,平滑后的序列可能掩盖真实异常点;建议先检测异常,再对非异常区域进行平滑,或保留原始序列用于模型训练。
4.3 时间戳对齐与重采样
多源时间序列往往具有不同的采样频率和时间基准。时间戳对齐是将多个序列统一到相同时间索引的过程;重采样则是将序列从原始频率转换为目标频率。
4.3.1 对齐策略
- 精确对齐:所有序列共享同一时间戳列表,适用于同源数据。
- 最近邻对齐:将每个观测值对齐到最近的目标时间戳,适用于低频数据。
- 插值对齐:使用线性或样条插值将序列映射到目标时间点,适用于高频数据。
- 前向填充对齐:将上一个有效观测值填充到当前时间戳,适用于非实时场景。
4.3.2 重采样操作
| 操作 | 说明 | 常用聚合函数 |
|---|---|---|
| 降采样(Downsampling) | 从高频到低频,减少数据量 | mean, sum, max, min, ohlc |
| 升采样(Upsampling) | 从低频到高频,增加数据密度 | ffill, bfill, linear, cubic |
| 等间隔重采样 | 将不规则时间戳转为固定频率 | interpolate, asfreq |
工程案例:某工业物联网项目包含温度传感器(1Hz)、振动传感器(100Hz)和能耗表(每15分钟)。预处理管线先将所有序列通过线性插值对齐到1秒时间戳,再对振动数据降采样到1Hz,最后使用前向填充对齐能耗数据,形成统一的三维时间序列矩阵,输入LSTM模型进行剩余寿命预测。
4.4 预处理管线编排建议
在实际工程中,上述三个环节并非独立执行,而是构成一条完整的预处理管线。推荐按以下顺序编排:
- 时间戳标准化:将所有时间戳转换为统一时区与格式(如 UTC 毫秒时间戳)。
- 时间戳对齐与重采样:先确定目标频率,再对每个序列执行对齐操作。
- 异常值检测与标记:在对齐后的序列上检测异常,避免因重采样引入的插值点被误判。
- 缺失值处理:对标记为异常的点以及原始缺失点进行统一填补。
- 平滑(可选):在填补完成后,对全序列进行轻度平滑以去除残余噪声。
性能提示:对于大规模时间序列(百万级时间步),建议使用向量化操作(如 pandas 的
resample 与 interpolate)或基于 NumPy/Numba 的加速实现,避免逐行循环。在深度学习训练前,可将预处理逻辑封装为 tf.data 或 torch.utils.data 的 transform 函数,实现端到端数据管线。