4. 数据清洗与预处理实战
SCADA 原始数据在进入故障诊断模型之前,必须先经过一轮系统化的清洗与预处理。原因很直接:风电场 SCADA 系统通常以 1 秒到 10 分钟不等的采样周期长期运行,数据在采集、传输、存储、时钟同步等环节都可能引入缺陷。如果直接把这些数据喂给诊断算法,模型学到的可能是“传感器坏了”而不是“机组坏了”。本节围绕四类最常见的数据质量问题展开:缺失值、重复记录、异常值,以及停机与限功率状态标记。
一、先建立数据质量画像
动手清洗之前,建议先对原始数据做一次质量画像,明确“脏在哪里、脏了多少”。以一台 2 MW 机组、10 分钟采样、一年约 52560 条记录为例,可先统计以下指标:
- 各测点缺失率:如风速、有功功率、发电机转速、齿轮箱油温、机舱振动等;
- 时间戳重复条数与重复率;
- 越限值比例:如功率为负、风速超过切出值、温度超出物理量程;
- 状态字分布:并网、停机、限功率、维护、故障等状态占比。
这一步的价值在于决定后续策略。若某测点缺失率超过 30%,填补意义有限,更合理的做法是标记为不可用并排除该测点参与建模;若缺失率在 5% 以内,则适合用插值或模型填补。
二、缺失值填补:按缺失机制选方法
缺失不是一种情况,要区分三类机制。完全随机缺失(MCAR)指缺失与任何变量无关,例如通信偶发丢包;随机缺失(MAR)指缺失与其他可观测变量有关,例如低风速时某些温度测点不刷新;非随机缺失(MNAR)指缺失与缺失值本身有关,例如故障时传感器被强制置空。方法选择要与机制匹配:
- 短时连续缺失(≤3 个采样点):优先线性插值或三次样条插值,保持时间序列的连续性;
- 中等长度缺失(4~12 个点):可用同工况回归填补,例如用“风速—功率”曲线或同机组相邻测点做估计;
- 长时缺失或整段停机:不做数值填补,直接标记为无效区间,避免制造虚假数据;
- MNAR 场景:保留缺失标记位,让模型知道“这里本来就没有值”,而不是填一个看似合理的数。
实操中建议为每个关键测点增加一列 xxx_is_missing 标志位,填补值只写入数值列,标志位保留原始缺失信息。这样既保证模型输入完整,又不丢失“曾经缺失”这一事实。
三、重复记录处理:先判重,再判留
重复记录通常来自两种情形:一是采集端重传导致时间戳完全相同的重复行;二是时钟回拨或时区处理错误导致同一时刻出现多条记录。处理顺序应为:
- 按
timestamp排序,识别完全重复行; - 对同一时间戳的多条记录,比较各测点数值,若完全一致则保留一条;
- 若数值不一致,说明存在采集冲突,应优先保留状态字更完整、质量码更高的记录,或按“后到覆盖先到”的规则处理,并在日志中记录冲突次数;
- 对时间戳重复但间隔异常的记录,检查是否存在时区偏移,统一转换为 UTC 后再判重。
需要强调的是,重复记录不能简单用 drop_duplicates() 一删了之。若重复行中有一条是故障状态、另一条是正常运行状态,直接删除可能丢掉关键故障样本。建议保留冲突记录到单独的审计表中,便于回溯。
四、异常值识别:物理规则 + 统计规则双轨
异常值识别建议采用“物理规则优先、统计规则补充”的双轨策略。物理规则基于机组设计参数,例如:
- 有功功率应在
[-额定功率×5%, 额定功率×110%]之间,明显负值且持续存在可能是变流器或计量问题; - 风速应在
[0, 40] m/s之间,超过切出风速后仍持续发电需核查; - 齿轮箱油温通常低于 90 ℃,发电机绕组温度低于 150 ℃,超出量程多为传感器故障;
- 转速、桨距角等应满足机组控制逻辑的物理约束。
统计规则可用四分位距(IQR)或 3σ 方法,但要注意风速、功率本身分布偏斜,直接套用 3σ 会误杀大量正常高风速样本。更稳妥的做法是分工况统计:先按风速分箱(如 1 m/s 一档),再在每一档内计算功率的 IQR 上下界,超出者标记为疑似异常。识别出的异常值不建议直接删除,而应标记为 outlier_flag,并区分“传感器异常”和“机组真实异常”——前者应剔除,后者恰恰是故障诊断要保留的样本。
五、停机与限功率数据标记
停机与限功率是风电机组最常见的两类非故障状态,但它们的功率表现与故障降容非常相似,若不标记,诊断模型极易混淆。标记依据主要来自状态字、功率曲线和调度指令:
- 停机:状态字为停机/待机,且有功功率接近 0、转速接近 0、桨距角处于顺桨位置;
- 限功率:状态字为并网,但实际功率持续低于同风速下参考功率曲线的某一比例(如 80%),且持续时间超过设定阈值(如 30 分钟),同时可结合调度限功率指令或场级 AGC 信号确认;
- 故障降容:功率偏低但状态字含故障码,或关键温度、振动测点越限,这类样本应保留并单独标注。
标记结果建议写入独立的状态列,取值如 normal / stop / curtail / fault_derate / invalid。后续建模时,stop 与 curtail 样本通常不参与故障诊断训练,但可用于功率预测或可用率统计;fault_derate 则是诊断模型的重点学习对象。
六、一个可复用的处理顺序
综合以上四类问题,推荐的处理顺序是:时间对齐 → 重复记录处理 → 缺失值标记与填补 → 异常值标记 → 停机/限功率状态标记 → 输出清洗后数据集与审计日志。顺序不能随意调换:如果先填补再判重,重复行会被填补成不同值,判重失效;如果先标记停机再填补,停机期间的零功率会被插值成非零值,状态标记失真。
完成本节处理后,得到的数据应满足:时间戳唯一且单调递增、关键测点无长段空洞、异常值有明确标记、每一条记录都有明确的状态归属。这是后续特征工程与故障诊断建模能够成立的前提。