时序数据基础:时间序列定义、采样率、趋势、季节性、噪声、平稳性等核心概念
在Edge AI场景中,传感器持续产生带时间戳的观测值,这些数据构成了时间序列。无论是处理缺失值还是检测异常,都必须先理解时间序列的内在结构——趋势、季节性、噪声以及平稳性特征。如果对这些基础概念缺乏系统认知,后续的插补算法选择和异常检测阈值设定都会失去依据。本节将围绕时间序列的定义与构成要素展开,重点厘清采样率对数据质量的影响、四种成分的分离方法、平稳性的检验与处理,以及这些概念在边缘设备上的特殊含义。
时间序列的定义与采样率
时间序列是按时间顺序排列的观测值集合,记为 \(\{x_t\}_{t=1}^T\),其中 \(t\) 表示离散时间索引。在Edge AI系统中,时间序列通常来自加速度计、温度传感器、电流监测或振动探头等设备。与普通数据集不同,时间序列的相邻观测值之间存在时间依赖性——今天的温度与昨天的温度相关,当前时刻的电机振动与前一毫秒的振动相关。这种自相关性是后续所有分析的基础,也是缺失值插补和异常检测能够利用的核心信息。
采样率(Sampling Rate)决定了时间序列的时间分辨率,单位为Hz(每秒样本数)。采样率的选择直接影响数据质量与系统资源消耗:
- 过采样:采样率远高于信号最高频率,产生大量冗余数据,增加边缘设备的存储压力、传输带宽和功耗。例如,监测室温变化时,1Hz采样已足够,若采用100Hz采样,99%的数据几乎不携带新信息。
- 欠采样:采样率低于奈奎斯特频率(信号最高频率的2倍),导致高频成分混叠为低频假象。例如,以10Hz采样一个50Hz的振动信号,会错误地将其识别为10Hz以下的低频波动。
- 非等间隔采样:由于传感器调度或网络延迟,实际采样间隔可能不均匀。此时需要先进行重采样(如线性插值或样条插值)转换为等间隔序列,才能应用标准的时间序列分析方法。
时间序列的四种成分
经典时间序列分解将序列拆分为四种成分:趋势(Trend)、季节性(Seasonality)、周期性(Cycle)和噪声(Noise)。理解这些成分是缺失值处理的前提——不同成分的缺失应采用不同的插补策略。
| 成分 | 定义 | 典型周期 | Edge AI示例 | 缺失值处理策略 |
|---|---|---|---|---|
| 趋势 | 长期单调变化方向 | 无固定周期 | 电池电压随放电逐渐下降 | 线性插值或多项式拟合 |
| 季节性 | 固定周期重复模式 | 24h、7天、1年 | 环境温度昼夜变化 | 同周期均值填充或STL插补 |
| 周期性 | 非固定周期波动 | 不固定 | 设备负载随生产计划波动 | 需结合外部变量估计 |
| 噪声 | 随机不可预测成分 | 无 | 传感器电子热噪声 | 平滑滤波后插补 |
趋势成分反映了序列的长期演变方向。在边缘设备上,电池放电曲线呈现单调下降趋势,温度传感器可能因季节更替呈现缓慢漂移。识别趋势的常用方法包括移动平均平滑和多项式拟合。季节性成分是固定周期内的重复模式,例如工业设备在每天早中晚三个班次的能耗曲线高度相似。周期性成分与季节性的区别在于周期长度不固定,例如设备维护周期可能因故障率变化而调整。噪声成分是去除趋势和季节后剩余的随机波动,通常假设为均值为零的白噪声。
实际分解操作中,STL(Seasonal-Trend decomposition using Loess)是最常用的方法。STL通过局部加权回归迭代分离趋势和季节成分,适用于大多数Edge AI场景。对于计算资源受限的设备,可简化为:先通过移动平均估计趋势,再从原始序列中减去趋势得到去趋势序列,然后按周期长度分组求均值得到季节成分,剩余部分即为噪声。
平稳性:定义、检验与处理
平稳性(Stationarity)是时间序列分析中最关键的概念之一。严格平稳要求序列的联合概率分布随时间平移不变,这在实践中难以验证。实际应用中通常采用弱平稳(宽平稳)定义,需满足三个条件:
- 均值恒定:\(E[x_t] = \mu\),不随时间变化。
- 方差恒定:\(Var[x_t] = \sigma^2\),波动幅度不随时间变化。
- 自协方差仅依赖滞后:\(Cov(x_t, x_{t+k}) = \gamma_k\),只与时间间隔 \(k\) 有关,与具体时刻 \(t\) 无关。
平稳性之所以重要,是因为大多数统计模型(如ARIMA、指数平滑)都假设序列平稳。若序列非平稳,模型参数估计将失真,异常检测的阈值也会失去统计意义。例如,一个带有上升趋势的温度序列,其均值随时间变化,若用固定阈值检测异常,在低温时段会漏报,在高温时段会误报。
检验平稳性的常用方法包括:
- ADF检验(Augmented Dickey-Fuller):原假设为序列存在单位根(非平稳)。若p值小于0.05,拒绝原假设,认为序列平稳。
- KPSS检验:原假设为序列平稳。与ADF互补,两者结合使用可提高判断可靠性。
- 滚动统计可视化:绘制滑动窗口内的均值和标准差,若随时间明显波动,则序列非平稳。
对于非平稳序列,常用的处理手段包括:一阶差分(\(y_t = x_t - x_{t-1}\))消除线性趋势;对数变换稳定方差;季节差分消除季节性。在Edge AI场景中,由于计算资源有限,优先选择一阶差分和简单移动平均去趋势,避免复杂的Box-Cox变换或高阶差分。
案例拆解:工业电机轴承温度监测中的成分分析与平稳性处理
某工厂在电机轴承上部署了Edge AI振动与温度监测节点,采样率为1Hz,目标是检测轴承早期故障。初始阶段,工程师直接对原始温度序列设定固定阈值(如85°C报警),但实际运行中频繁出现误报和漏报。
背景与约束:电机在白天满载运行,夜间半载运行,环境温度随昼夜变化。设备存储空间有限,仅能保留最近7天的数据。要求实时处理,单次推理延迟不超过50ms。
初始现象:温度序列呈现明显的昼夜季节性(白天高、夜间低)和缓慢上升趋势(轴承磨损导致摩擦增加)。固定阈值85°C在白天满载时频繁触发误报,而在夜间半载时,即使轴承已出现早期磨损,温度也仅为78°C,无法触发报警。
分析过程:
- 对7天温度数据做STL分解,分离出趋势、24小时季节成分和残差。
- 对残差序列进行ADF检验,p值为0.003,确认残差平稳。
- 计算残差的滚动均值和滚动标准差(窗口=1小时),发现残差均值接近0,标准差稳定在±2°C以内。
- 将异常检测阈值设定为残差的 \(\mu \pm 4\sigma\),即超过8°C偏差视为异常。
实际操作步骤:
# 伪代码示例:边缘设备上的在线分解与异常检测
def online_anomaly_detection(new_temp, history_buffer):
# 1. 更新滑动窗口(保留最近7天数据)
history_buffer.append(new_temp)
if len(history_buffer) > 7*86400:
history_buffer.pop(0)
# 2. 每5分钟执行一次STL分解(降低计算频率)
if current_time % 300 == 0:
trend, seasonal, resid = stl_decompose(history_buffer, period=86400)
resid_mean = np.mean(resid[-3600:]) # 最近1小时残差均值
resid_std = np.std(resid[-3600:])
# 3. 实时计算当前残差
current_trend = trend[-1]
current_seasonal = seasonal[-1]
current_resid = new_temp - current_trend - current_seasonal
# 4. 异常判定
if abs(current_resid - resid_mean) > 4 * resid_std:
trigger_alarm()
结果对比:采用成分分解后,误报率从每天12次降至0次,同时成功捕获了轴承早期磨损引起的趋势变化——虽然原始温度未超过85°C,但残差持续偏离均值超过4σ,提前3天发出预警。
风险与代价:STL分解在边缘设备上每5分钟执行一次,CPU占用率约15%,内存占用约2MB,在可接受范围内。但需注意,若设备重启导致历史数据丢失,需重新积累至少48小时数据才能建立可靠的季节基线。
复盘经验:固定阈值法适用于平稳序列,而实际工业数据几乎总是包含趋势和季节性。先分解、后检测的策略,将非平稳问题转化为平稳残差的异常检测,显著提升了检测精度。同时,滑动窗口的时长选择需权衡——窗口过短无法捕捉完整季节周期,窗口过长则占用过多内存。
常见误区与总结复盘
在时间序列基础概念的理解和应用中,以下误区在Edge AI项目中尤为常见:
- 误区一:忽略采样率与信号带宽的匹配。部分开发者直接使用传感器默认采样率,导致数据量过大或信息丢失。正确做法是先分析信号的频谱特征,再确定采样率。
- 误区二:将趋势误认为异常。轴承磨损导致的温度缓慢上升是趋势变化,而非突发异常。若直接对原始序列做阈值检测,会漏掉早期故障信号。应分离趋势后,对残差进行检测。
- 误区三:忽视季节性直接插补缺失值。若夜间温度数据缺失,用全天均值填充会引入显著偏差。正确做法是使用同一时段(如前一晚同时刻)的数据进行填充。
- 误区四:对所有序列强行要求平稳。某些物理信号天然非平稳(如振动冲击),此时不应强行差分,而应使用时变模型或分段平稳假设。
- 误区五:ADF检验的误用。ADF检验对异常值敏感,若序列中存在缺失值或离群点,检验结果可能失真。建议先进行缺失值处理和异常值剔除,再进行平稳性检验。