3. 基础统计分析:描述性统计、数据分布分析、相关性分析、时间序列分解

各位工程师朋友,大家好。这一章我们聊聊基础统计分析。说实话,很多刚入行的同事觉得这玩意儿太简单,不就是算个平均值、画个直方图吗?

但我在储能项目里吃过亏——有一次,一个电池簇的SOC估算老是偏大,我查了三天,最后发现是数据分布严重左偏,平均值根本不能代表真实状态。从那以后,我再也不敢小看描述性统计了。

3.1 描述性统计:先摸清数据的“脾气”

拿到一批储能运行数据,第一件事是什么?我个人习惯,先算几个关键指标,心里有个底。

  • 集中趋势:均值、中位数、众数。注意,如果数据有异常值,中位数比均值更靠谱。
  • 离散程度:标准差、方差、极差、四分位距。标准差大,说明电池一致性差,这往往是运维的重点。
  • 分布形态:偏度、峰度。偏度>0,数据右偏;峰度>3,数据尖峰厚尾。

避坑指南:我曾经在分析某储能电站的日充放电量时,发现均值和中位数差了20%。一查,原来是某天有台PCS故障,导致数据出现极端值。所以,描述性统计一定要结合业务场景看,别傻傻地只看平均值。

3.2 数据分布分析:看看数据长什么样

描述性统计只是“数字”,数据分布分析才是“图形”。我建议你养成一个习惯:拿到数据先画分布图。

常用的分布分析方法:

  • 直方图:看数据的大致形状。比如电池电压分布,正常应该是单峰对称,如果出现双峰,说明电池分群有问题。
  • 箱线图:识别异常值的神器。箱线图的上边缘和下边缘之外的点,基本就是异常值。
  • Q-Q图:检验数据是否服从正态分布。如果点大致在一条直线上,说明正态性良好。

我的经验:储能系统的SOC数据,往往不服从正态分布,而是呈现“U型”分布——因为电池经常在低SOC和高SOC区间运行。这时候用正态分布去建模,结果会偏差很大。

3.3 相关性分析:找到变量之间的“暧昧关系”

储能系统里变量很多:温度、电压、电流、SOC、SOH……它们之间到底有没有关系?相关性分析就是干这个的。

常用方法:

  • 皮尔逊相关系数:衡量线性关系。取值范围[-1,1],绝对值越接近1,相关性越强。
  • 斯皮尔曼秩相关系数:不要求线性关系,适合单调关系。比如温度与电池内阻的关系,往往是非线性的。
  • 热力图:可视化多个变量之间的相关性矩阵。一眼就能看出哪些变量高度相关。

注意:相关性不等于因果性。我曾经看到有人把“环境温度升高”和“电池容量衰减”的相关性直接当成因果关系,这是不对的。温度升高可能只是加速了老化,但根本原因可能是电解液分解。

3.4 时间序列分解:拆解数据的“时间密码”

储能数据本质上是时间序列。比如每天的充放电量、每小时的SOC变化。时间序列分解,就是把数据拆成三部分:趋势、季节性和残差。

分解方法:

  • 加法模型:Y = Trend + Seasonal + Residual。适合季节性波动幅度不随时间变化的情况。
  • 乘法模型:Y = Trend × Seasonal × Residual。适合季节性波动幅度随时间变化的情况。

举个例子,某储能电站的日放电量数据,我分解后发现:

  • 趋势项:整体呈上升趋势,说明电站利用率在提高。
  • 季节性项:有明显的周周期,周末放电量比工作日低20%。
  • 残差项:某天突然出现一个大的正向尖峰,一查,原来是那天电网调度要求紧急放电。

实用技巧:我建议用Python的statsmodels库做时间序列分解,代码很简单:

import statsmodels.api as sm
decomposition = sm.tsa.seasonal_decompose(data, model='additive', period=24)
decomposition.plot()

注意period参数要设置正确。如果是小时级数据,周期设为24;如果是日级数据,周期设为7。

知识体系框架图

下面这张图,是我自己总结的本章知识体系,你可以保存下来当参考:

基础统计分析 描述性统计 集中趋势:均值、中位数 离散程度:标准差、极差 分布形态:偏度、峰度 数据分布分析 直方图:数据形状 箱线图:异常值识别 Q-Q图:正态性检验 相关性分析 皮尔逊相关系数 斯皮尔曼秩相关系数 热力图可视化 时间序列分解 趋势项 季节性项 残差项 目的:理解数据特征,为后续建模打基础 典型应用场景 电池一致性评估 | 异常数据检测 | 充放电规律挖掘 | 性能衰减趋势分析

最后说一句:基础统计分析看似简单,但它是所有高级分析的基石。我见过太多人一上来就搞机器学习,结果数据质量一塌糊涂,模型根本跑不动。所以,老老实实把这一步做好,后面会省很多事。


公众号:蓝海资料掘金营,微信deep3321