2、异常数据定义与分类:缺失值、异常值、死值、限功率运行数据、停机数据识别
各位好,我是老张。在风电行业摸爬滚打了十几年,今天咱们聊聊异常数据。说实话,我刚入行那会儿,最头疼的就是数据清洗。你想想看,一个风场几百台机组,每天产生的数据量惊人,但真正能用的有多少?我见过太多团队花大把时间建模,结果因为数据质量太差,模型根本跑不动。
所以这一节,咱们把异常数据掰开揉碎了讲。我会结合自己踩过的坑,告诉你每种异常长什么样,怎么识别。
核心观点:异常数据不是垃圾,它是风机的「病历本」。读懂它,你才能对症下药。
2.1 缺失值
缺失值是最常见的异常。说白了,就是该有数据的地方,它空了。为什么会这样?传感器故障、通讯中断、采集系统死机,原因多了去了。
我个人习惯把缺失值分成两类:
- 随机缺失:比如某个风速传感器偶尔掉线,过一会儿自己恢复了。这种一般影响不大,插值补上就行。
- 连续缺失:比如某台机组停机检修,连续几天没有数据。这种就要小心了,不能简单插值,得结合运维日志判断。
我记得有一次,一个项目组用某风场的数据做功率曲线建模,结果模型精度一直上不去。我一看,好家伙,连续缺失的数据段被他们用线性插值填上了,直接把停机时段的风速功率关系搞乱了。嗯,这里要注意:连续缺失超过1小时,建议标记为无效时段,不要强行填充。
我的小技巧:用pandas的isnull()统计缺失率。如果某列缺失超过30%,我建议直接弃用这列数据,或者找运维确认原因。
2.2 异常值
异常值,就是那些明显超出正常范围的数据点。比如风速显示200m/s,功率显示-500kW,这种一看就不对劲。
怎么识别?我一般用两种方法:
- 物理限值法:根据风机设计参数设定上下限。比如某机型额定风速12m/s,切出风速25m/s,那超过25m/s的风速数据基本可以判定为异常。
- 统计法:用3σ原则或者箱线图。我更喜欢箱线图,因为它对极端值不敏感,更稳健。
给大家看个例子。这是某风场10分钟平均风速的箱线图,红点就是异常值:
# 用Python快速识别异常值
import pandas as pd
import numpy as np
def detect_outliers_iqr(data):
Q1 = data.quantile(0.25)
Q3 = data.quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
return (data < lower_bound) | (data > upper_bound)
# 假设df是数据框,'ws'是风速列
outliers = detect_outliers_iqr(df['ws'])
print(f"发现 {outliers.sum()} 个异常风速点")
避坑指南:我曾经遇到过一个风场,所有风速数据都在0-5m/s之间,看起来很正常。但后来发现是风速仪结冰了,数据全部偏低。所以,异常值识别不能只看统计分布,还要结合物理机理。
2.3 死值
死值,也叫恒定值。就是数据长时间不变,像死了一样。比如风速一直显示3.5m/s,连续几个小时纹丝不动。这明显不正常,因为自然界风速是不断波动的。
我总结的死值识别标准:
| 参数 | 死值判定条件 | 典型原因 |
|---|---|---|
| 风速 | 连续6个点(1小时)不变 | 风速仪卡涩、结冰 |
| 功率 | 连续12个点(2小时)不变 | 功率传感器故障 |
| 桨距角 | 连续30个点(5小时)不变 | 变桨系统卡死 |
你想想看,如果风速死值混进训练数据,模型会学到什么?它会认为「风速不变是正常的」,这可就麻烦了。所以死值必须剔除。
2.4 限功率运行数据
限功率运行,说白了就是电网让风机「少发点」。比如电网调度要求风场出力不超过50%,这时候风机就会主动降功率。
这种数据有什么特征?风速很高,但功率明显低于理论值。比如风速12m/s,按理说应该满发,但实际功率只有额定的一半。
怎么识别?我一般用功率曲线对比法:
- 计算每个风速bin下的理论功率
- 如果实际功率低于理论功率的80%,且持续超过30分钟,就标记为限功率运行
重要提醒:限功率数据不能直接删除!它反映了风机的实际运行状态。我建议单独标记,用于分析电网调度对发电量的影响。
2.5 停机数据
停机数据,就是风机不转的时候产生的数据。比如检修、故障、电网断电等。这时候风速可能很高,但功率为0或者负值(自耗电)。
识别方法很简单:
- 功率阈值法:功率低于0.5%额定功率,且持续超过10分钟,判定为停机
- 状态码法:如果SCADA系统有停机状态码,直接用它
我曾经犯过一个错误:把停机数据当成正常数据训练模型,结果模型学会了「有风速没功率」这种错误关系。后来我学乖了,训练前一定先剔除停机数据。
我的经验:停机数据不要直接扔掉。把它单独存起来,可以用来分析风机的可靠性、故障频率等。说白了,数据没有好坏,关键看你怎么用。
2.6 知识体系总览
最后,我用一张图总结一下这五种异常数据的关系。这张图是我自己画的,希望能帮你建立整体认知:
好了,这一节的内容就到这里。五种异常数据,每种都有它的脾气。你只要记住:识别异常不是目的,目的是让数据真实反映风机的运行状态。下一节咱们聊聊怎么处理这些异常数据,到时候我会分享更多实战技巧。