第四章:数据治理与清洗——时序数据质量评估、异常值检测、缺失值插补、数据标准化与特征工程
各位好,我是老张。今天咱们聊聊储能系统数字孪生里最磨人、也最关键的一环——数据治理与清洗。
说实话,我见过太多项目,算法模型建得漂漂亮亮,结果一跑数据就崩。为什么?因为数据本身是脏的。你想想看,储能系统一天24小时不停运转,传感器采集的时序数据,什么情况都可能发生:通信中断、传感器漂移、噪声干扰……这些脏数据如果不处理,数字孪生就是空中楼阁。
我个人习惯,拿到数据的第一件事不是建模,而是先做数据质量评估。这就像盖房子前先看地基,地基不稳,后面全是白费。
4.1 时序数据质量评估
数据质量评估,说白了就是给数据打分。我一般从四个维度看:
- 完整性:数据有没有缺失?缺失比例多少?
- 准确性:数值是否在合理范围内?比如电池电压不可能为负。
- 一致性:不同传感器之间的数据是否矛盾?比如SOC和电压变化趋势是否匹配。
- 时效性:数据时间戳是否连续?有没有跳变?
我在项目中遇到过,某储能电站的BMS上报的SOC数据,连续三天都显示98%。这明显不合理——电站每天都在充放电,SOC怎么可能纹丝不动?后来一查,是通信协议解析出了问题。
核心指标:数据质量评分 = 完整性 × 准确性 × 一致性 × 时效性。低于0.8的数据集,我建议直接打回重采。
4.2 异常值检测
异常值检测,是数据清洗的重头戏。储能系统的时序数据,异常通常分两类:
- 点异常:单个数据点明显偏离正常范围。比如电压突然跳到1000V。
- 模式异常:数据整体趋势异常。比如充电曲线本该平滑上升,却出现锯齿状波动。
常用的检测方法,我列个表:
| 方法 | 适用场景 | 我的经验 |
|---|---|---|
| 3σ原则 | 正态分布数据 | 简单粗暴,但储能数据往往不是正态分布 |
| 箱线图(IQR) | 非正态分布 | 我常用这个,鲁棒性更好 |
| 孤立森林 | 高维数据 | 适合多传感器联合检测 |
| 移动平均偏差 | 时序趋势数据 | 能捕捉渐变异常,比如传感器漂移 |
举个例子,用箱线图检测电压异常:
import numpy as np
def detect_outliers_iqr(data):
Q1 = np.percentile(data, 25)
Q3 = np.percentile(data, 75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
outliers = (data < lower_bound) | (data > upper_bound)
return outliers
注意:我曾经犯过一个错——把电池充电初期的电压快速上升段误判为异常。后来我加了滑动窗口,只检测窗口内的局部异常,效果好了很多。
4.3 缺失值插补
储能系统的数据缺失,原因五花八门:通信丢包、传感器故障、维护停机……处理缺失值,我的原则是:能不删就不删。时序数据的连续性太重要了,删掉一个点,可能破坏整个时间序列的完整性。
常用的插补方法:
- 前向填充:用上一个有效值填充。适合短时间缺失,比如几秒钟的通信中断。
- 线性插值:用前后两个点的平均值。适合缓慢变化的数据,比如温度。
- 多项式插值:用多个点拟合曲线。适合非线性变化,比如充放电曲线。
- 模型预测插补:用机器学习模型预测缺失值。适合长段缺失,但计算量大。
我个人习惯,先看缺失比例:
- 缺失 < 5%:前向填充或线性插值,简单高效。
- 5% ~ 20%:用多项式插值或KNN插补。
- > 20%:建议重新采集数据,插补结果不可靠。
小技巧:插补后一定要做残差分析。我见过有人插补完数据,模型精度反而下降了——因为插补值引入了偏差。检查方法:把插补值和相邻点的差值画出来,看是否在合理范围内。
4.4 数据标准化
标准化,说白了就是把不同量纲的数据拉到同一个尺度。储能系统的数据,电压是几百伏,电流是几百安,温度是几十度,SOC是0~100%。如果不标准化,模型会天然偏向数值大的特征。
常用的标准化方法:
- Z-score标准化:减去均值,除以标准差。适合数据近似正态分布。
- Min-Max归一化:缩放到[0,1]区间。适合有明确上下限的数据,比如SOC。
- Robust标准化:用中位数和四分位距。对异常值不敏感,我比较喜欢用这个。
举个例子,用Robust标准化处理电压和电流:
from sklearn.preprocessing import RobustScaler
scaler = RobustScaler()
data_scaled = scaler.fit_transform(data[['voltage', 'current']])
我的建议:标准化参数(均值、标准差等)一定要用训练集计算,然后应用到验证集和测试集。千万别用全量数据计算——那叫数据泄露,模型会过拟合。
4.5 特征工程
特征工程,是数据治理的升华。原始数据往往不够用,需要我们从时序数据中提取更有价值的特征。
储能系统常用的特征:
- 统计特征:均值、方差、最大值、最小值、峰度、偏度。
- 时序特征:变化率、加速度、自相关系数、傅里叶变换系数。
- 领域特征:SOC变化率、内阻变化、充放电效率、循环次数。
- 组合特征:电压×电流=功率,电压/SOC=开路电压估算。
我记得有一次做电池寿命预测,原始数据只有电压、电流、温度。模型精度一直上不去。后来我加了一个特征——累计充放电量,精度直接提升了15%。为什么?因为电池老化跟累计吞吐量强相关,原始数据里没有这个信息。
特征工程的几个原则:
- 相关性:特征和目标变量要有逻辑关联。
- 稳定性:特征在不同工况下表现一致。
- 可解释性:每个特征都能讲出物理意义。
避坑指南:我曾经一口气造了200多个特征,模型训练了三天三夜,结果精度还不如用10个核心特征。特征不是越多越好,冗余特征会引入噪声。建议用特征重要性排序或PCA降维。
知识体系总览
下面这张图,是我梳理的本章知识体系。你可以把它当作数据治理的路线图:
数据治理这件事,说难不难,说简单也不简单。核心就一句话:理解你的数据,比理解你的模型更重要。我见过太多人花90%的时间调模型参数,却只花10%的时间处理数据。结果呢?模型在实验室跑得飞起,一到现场就翻车。
嗯,今天就聊到这儿。数据治理是数字孪生的地基,地基打牢了,后面的路才好走。
公众号:蓝海资料掘金营,微信deep3321