4. 数据采集与预处理:传感器数据采集策略、数据清洗与时间戳对齐
各位好,我是老张。做了十几年设备可靠性,我最大的体会就是:模型再牛,也怕烂数据。今天这章,咱们就聊聊数据采集与预处理那些事儿。说白了,这是整个风险评分模型的「地基」。
我记得刚入行那会儿,接过一个项目,数据量巨大,但模型死活不准。后来一查,发现传感器采集策略就有问题——有的设备采样频率太高,有的又太低,时间戳还对不齐。那叫一个头疼。所以,咱们今天就把这些坑一个个填上。
4.1 传感器数据采集策略
采集策略,不是拍脑袋定的。你得想清楚几个问题:
- 采什么? 振动、温度、压力、电流……每个信号对故障的敏感度不一样。
- 怎么采? 连续采还是触发采?固定频率还是自适应?
- 采多少? 采样率、分辨率、数据量,这些直接影响存储和计算成本。
我个人习惯,先做一轮「信号摸底」。拿振动信号举例,我会先看看设备正常运行时的频谱,确定主要频率成分。然后,根据奈奎斯特定理,采样率至少设成最高频率的2.5倍。别卡着2倍,留点余量。
还有一种策略叫「事件驱动采集」。平时低频率采样,一旦检测到某个阈值被触发(比如温度突然升高),就立刻切换到高频率。这招能大幅降低数据存储量。我在一个风电项目里用过,效果不错。
| 采集策略 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 连续采集 | 关键设备、高速旋转机械 | 数据完整,不丢失瞬态信息 | 数据量大,存储成本高 |
| 周期采集 | 非关键设备、缓慢变化过程 | 数据量可控,简单易行 | 可能错过突发故障 |
| 事件驱动采集 | 间歇性故障、异常监测 | 存储效率高,聚焦异常 | 需要合理设置触发阈值 |
4.2 数据清洗:缺失值与异常值处理
数据采回来,别急着建模。先看看有没有「脏数据」。我见过最离谱的一次,传感器掉线了三天,数据全是0,模型直接把它当成「完美运行状态」来学。你说这能准吗?
4.2.1 缺失值处理
缺失值,说白了就是数据里的「窟窿」。怎么补?看情况:
- 删除法: 如果缺失比例很小(比如<5%),直接删掉那几行。简单粗暴,但有效。
- 均值/中位数填充: 适用于平稳信号。比如温度,用前后几小时的平均值补上。
- 前向/后向填充: 适用于缓慢变化的过程。比如液位,用上一个有效值填充。
- 插值法: 线性插值、样条插值。适用于有一定趋势的数据。
- 模型预测: 用其他相关变量预测缺失值。这招最复杂,但精度也最高。
4.2.2 异常值处理
异常值,就是那些「离谱」的数据点。可能是传感器故障,也可能是真正的设备异常。怎么区分?
我常用的方法有几种:
- 3σ原则: 数据服从正态分布时,超过均值±3倍标准差的值,视为异常。
- 箱线图法: 超过四分位距(IQR)1.5倍的值,视为异常。这个方法对非正态分布更鲁棒。
- 移动窗口法: 计算滑动窗口内的均值和标准差,局部判断异常。适合处理趋势变化的数据。
举个例子,处理振动信号的尖峰脉冲:
import pandas as pd
import numpy as np
# 假设 vibration_data 是振动信号序列
window_size = 100
threshold = 3
# 计算移动均值和标准差
rolling_mean = vibration_data.rolling(window=window_size).mean()
rolling_std = vibration_data.rolling(window=window_size).std()
# 标记异常
anomaly_mask = np.abs(vibration_data - rolling_mean) > threshold * rolling_std
# 用移动中位数替换异常值
vibration_data_clean = vibration_data.copy()
vibration_data_clean[anomaly_mask] = vibration_data.rolling(window=window_size).median()
关键原则: 处理异常值时,先问自己一个问题:「这个异常是设备故障的征兆,还是传感器的噪声?」如果是前者,保留它;如果是后者,才处理它。我见过太多人一上来就把所有异常值全删了,结果把故障特征也删掉了。
4.3 时间戳对齐与重采样
不同传感器,采样频率不一样。有的每秒采1000次,有的每分钟采1次。时间戳还可能因为网络延迟、时钟漂移而对不齐。这时候,就需要对齐和重采样。
你想想看,如果振动信号和温度信号的时间戳差了几秒钟,你拿它们一起建模,那相关性分析就全乱了。
4.3.1 时间戳对齐
对齐的核心,是找到一个「基准时间轴」。我通常的做法是:
- 确定一个统一的起始时间和结束时间。
- 以最高频率的传感器为基准,生成一个等间隔的时间序列。
- 把其他传感器的数据,通过插值或最近邻匹配,映射到这个基准时间轴上。
4.3.2 重采样
重采样,就是把数据从一个频率转换到另一个频率。有两种情况:
- 降采样: 从高频率降到低频率。比如把1000Hz的振动信号降到100Hz。常用方法:均值、最大值、RMS值。
- 升采样: 从低频率升到高频率。比如把1Hz的温度信号升到10Hz。常用方法:线性插值、样条插值。
我个人建议,对于振动信号,降采样时用RMS值。因为RMS值能保留信号的能量信息,比均值更有物理意义。
下面这张图,展示了整个数据采集与预处理的核心流程:
嗯,到这里,数据采集与预处理的核心内容就讲完了。记住一句话:数据质量,决定了模型的天花板。别急着调算法,先把数据搞干净。