4. 时间序列分析基础:平稳性、自相关、滑动窗口、特征工程入门
各位好,我是老张。在风电行业摸爬滚打了十几年,今天咱们来聊聊时间序列分析。说实话,SCADA数据本质上就是一堆时间戳加传感器读数。你想想看,风速、功率、桨距角,哪个不是随时间变化的?所以,搞懂时间序列分析,是咱们做后续所有分析的基础。
我个人习惯把时间序列分析比作「听心跳」。正常人的心跳是有规律的,风机的运行数据也一样。如果心跳乱了,那肯定出问题了。咱们要做的,就是通过分析这些「心跳」数据,提前发现隐患。
4.1 平稳性:数据的基本盘
平稳性,说白了就是数据的统计特性不随时间变化。均值、方差、自协方差,这些指标在时间轴上保持稳定。为什么这么重要?因为很多时间序列模型都假设数据是平稳的。如果数据不平稳,模型预测就会像「无头苍蝇」一样乱撞。
我在项目中遇到过这样的情况:某风场SCADA数据里的风速序列,看起来忽高忽低,但均值基本稳定在6m/s左右。这就是典型的平稳序列。但功率数据就不一样了,随着风速变化,功率的均值也在变,这就是非平稳的。
- 肉眼观察法:看时序图,数据是否围绕一个常数上下波动,波动幅度是否大致相同。
- 单位根检验(ADF检验):这是最常用的统计检验方法。p值小于0.05,通常认为数据是平稳的。
- 自相关图(ACF):平稳序列的自相关函数会快速衰减到0附近。
4.2 自相关:数据自己跟自己「攀亲戚」
自相关,听起来高大上,其实就是当前时刻的数据跟过去某个时刻的数据之间的相关性。比如,现在的风速跟5分钟前的风速有没有关系?肯定有啊,风不会突然从0飙到20m/s。
自相关函数(ACF)和偏自相关函数(PACF)是咱们分析自相关的两大法宝。ACF看的是所有滞后项的总相关性,PACF则剔除了中间项的影响。
我记得有一次分析某台风机的主轴温度数据,ACF图显示滞后1阶和2阶的自相关特别高,但3阶以后就掉下来了。这说明温度变化主要受前两个时刻的影响,跟更早的数据关系不大。这个信息对后面建模型很有用。
4.3 滑动窗口:让数据「动」起来
滑动窗口,也叫滚动窗口,是时间序列特征工程里最常用的手法。它的核心思想是:用一个固定大小的窗口在时间轴上滑动,对窗口内的数据计算统计量(均值、标准差、最大值、最小值等)。
你想想看,原始SCADA数据是每秒一条,但风机控制系统的响应时间通常是秒级甚至分钟级。直接用原始数据做分析,噪声太大。滑动窗口能帮我们平滑数据,提取出更有意义的特征。
举个例子,计算风速的10分钟滑动平均。这能消除湍流的影响,反映真实的平均风速。我习惯用窗口大小为600个数据点(假设采样频率是1Hz),步长可以设为1或10,看具体需求。
import pandas as pd
import numpy as np
# 假设df是包含风速数据的DataFrame,时间索引为'timestamp'
# 计算10分钟滑动平均(600个数据点)
df['wind_speed_avg_10min'] = df['wind_speed'].rolling(window=600, min_periods=1).mean()
# 计算滑动标准差,反映风速波动
df['wind_speed_std_10min'] = df['wind_speed'].rolling(window=600, min_periods=1).std()
# 计算滑动最大值和最小值
df['wind_speed_max_10min'] = df['wind_speed'].rolling(window=600, min_periods=1).max()
df['wind_speed_min_10min'] = df['wind_speed'].rolling(window=600, min_periods=1).min()
min_periods参数要设置好,避免窗口开头出现大量NaN值。
4.4 特征工程入门:从原始数据到「金矿」
特征工程,说白了就是把原始数据变成模型能听懂的语言。对于时间序列,特征工程的核心就是提取时间维度和统计维度的信息。
我总结了几个常用的时间序列特征,你可以直接拿去用:
| 特征类别 | 具体特征 | 说明 |
|---|---|---|
| 统计特征 | 均值、标准差、偏度、峰度 | 描述数据分布的基本形态 |
| 时序特征 | 滞后值(lag)、差分值 | 捕捉时间依赖关系 |
| 滑动窗口特征 | 滑动均值、滑动标准差、滑动极值 | 反映局部变化趋势 |
| 频域特征 | FFT幅值、功率谱密度 | 分析周期性成分 |
| 时间编码特征 | 小时、星期、月份、季节 | 捕捉时间周期性规律 |
嗯,这里要注意,特征不是越多越好。我见过有人一口气提取了上百个特征,结果模型过拟合得一塌糊涂。我的原则是:先理解业务,再提取特征。比如,对于风机齿轮箱故障预测,振动信号的频域特征就比均值特征重要得多。
- 数据清洗:处理缺失值、异常值、重复值。
- 特征提取:从原始数据中生成新的特征。
- 特征选择:用相关性分析、特征重要性等方法筛选有效特征。
- 特征缩放:标准化或归一化,让不同量纲的特征可比。
最后,我画了一张图,帮你理清本章的知识脉络。这张图展示了从原始SCADA数据到特征工程的完整流程,以及平稳性、自相关、滑动窗口在其中扮演的角色。
这张图很直观地展示了咱们今天讲的内容。从原始数据出发,先做平稳性检验,确保数据「靠谱」;然后做自相关分析,看看数据内部的时间依赖关系;接着用滑动窗口提取局部特征;最后汇总到特征工程,为后续的模型训练做准备。
好了,今天就聊到这儿。记住,时间序列分析不是一蹴而就的,需要多动手、多尝试。下次咱们会深入讲讲如何用这些特征来训练预测模型。