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 保留信号形状,适合峰值保持
避坑提示:平滑操作会降低序列的方差和峰值信息。在异常检测任务中,平滑后的序列可能掩盖真实异常点;建议先检测异常,再对非异常区域进行平滑,或保留原始序列用于模型训练。
异常值检测与平滑联合流程 原始时间序列 异常检测方法 Z-Score IQR 移动平均残差 STL分解 孤立森林 是否异常? 标记/替换/剔除 保留原始值 平滑后干净序列

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模型进行剩余寿命预测。
多源时间戳对齐与重采样管线 温度传感器 1 Hz 振动传感器 100 Hz 能耗表 15 min 时间戳对齐与重采样 线性插值 → 1秒 降采样 (mean) → 1秒 前向填充 → 1秒 统一时间索引三维矩阵 [时间步, 3特征] @ 1Hz LSTM / Transformer 输入

4.4 预处理管线编排建议

在实际工程中,上述三个环节并非独立执行,而是构成一条完整的预处理管线。推荐按以下顺序编排:

  1. 时间戳标准化:将所有时间戳转换为统一时区与格式(如 UTC 毫秒时间戳)。
  2. 时间戳对齐与重采样:先确定目标频率,再对每个序列执行对齐操作。
  3. 异常值检测与标记:在对齐后的序列上检测异常,避免因重采样引入的插值点被误判。
  4. 缺失值处理:对标记为异常的点以及原始缺失点进行统一填补。
  5. 平滑(可选):在填补完成后,对全序列进行轻度平滑以去除残余噪声。
性能提示:对于大规模时间序列(百万级时间步),建议使用向量化操作(如 pandas 的 resample 与 interpolate)或基于 NumPy/Numba 的加速实现,避免逐行循环。在深度学习训练前,可将预处理逻辑封装为 tf.data 或 torch.utils.data 的 transform 函数,实现端到端数据管线。