AI锂电·寿命预测02:避开开源陷阱,找到你的第一个高质量数据集
上回,我们一起找到了用于预测的数据集:2017-05-12_batchdata
我们先用常规的寿命预测方法来看看,为什么常规的预测方法失效了。
首先,我还是利用h5py对mat进行读取:
核心代码如下,完整代码和导出数据已上传星球。
summary_struct = f[ref]cycles = summary_struct[‘cycle’][:].flatten()capacity = summary_struct[‘QDischarge’][:].flatten()df = pd.DataFrame({‘Cycle’: cycles,‘Capacity_Ah’: capacity})output_csv = f’JMP_MIT_Cell_{target_cell_number}_FullLife.csv’df.to_csv(output_csv, index=False)
我们提取的是第10个cell,每一圈循环容量衰减如下:

我们的目标是给出500cyc,来预知后面600cyc的情况。
假如我们用JMP的退化分析行不行?
不熟悉JMP寿命预测功能的,可以和我一起操作一遍:
1.导入数据(小技巧:复制数据后,Ctrl+shift+V粘贴到JMP比较快)
2.把500cyc以上的数据排除,为了不放入计算但又要看得见。(这里不要选隐藏)

3.选择“分析”->“可靠性与生存”->“退化”

4.三列数据按照下图填充相应位置:

观察结果:由于循环跳水的原因,红色预测线和真实的情况差别太大了。

这是 JMP 默认会跑出来的结果。因为它只看到了前 500 圈“稳如老狗”的样子,它天真地以为电池会这样一直活下去。假如寿命下限是0.9。**JMP 预测寿命:**16,000 圈,误差16倍。

有人可能会说:“晓风老师,你选的是简单线性,如果是非线性呢?”
这就谈到本章中最有含金量的部分了。
首先,我先教大家找到非线性模型的入口:

可以拖动参数大小来进行拟合。

我们这份案例只有 Cycle(时间 X)和 Capacity(容量 Y)这两个参数。
在这种情况下:我们能用的就3种模型:
第一种:Exponential 3P (3参数指数模型)
它是工业界做寿命预测最通用的“万金油”公式。

是渐近线, 是衰减幅度, 是衰减速率
**结局:**必死无疑。 因为 LFP 前 500 圈太直了,模型会算出θ3=0,结果预测出来就是一条直线,完全预测不到跳水。
第二种:Logistic 3P / 4P (逻辑斯蒂/S形曲线)
形态: S 型曲线(像滑梯一样)
理论上“跳水”就是 S 形的下半段。 因为前 500 圈还没有开始弯曲,S 形模型找不到拐点,它通常会报错说“不收敛”或者拟合出一条很平的线。这能证明:“没看到跳水前,S 形模型也瞎了”。
**
**
**第三种:**Gompertz 3P (冈珀茨模型)
形态: 也是一种非对称的 S 形曲线,常用于生物生长或设备磨损。
同上,没有拐点数据,它预测不出来。
还有一些模型虽然高级,但我们缺数据,选了也跑不通:
- Arrhenius (阿伦尼乌斯)缺温度。它是用来描述温度对老化加速影响的。
- Eyring (艾林模型)缺应力。比如电压应力或机械应力。
有的同学可能又会说,mat文件里面不是有温度嘛?
没错,是的,但是也没用。
说再多不如做一下,可以跟着我学一下传统寿命预测的方法。
第一步,提取csv文件,此时加入温度因子。
编写代码时要注意:
MIT 数据集的 Summary 里通常直接有 ‘Tavg’ (平均温度), ‘Tmin’, ‘Tmax’,我们优先取 Tavg,如果没有就取 Tmax。
核心代码(全代码和提取出来的csv见星球):
if’Tavg’in summary_struct: temp = summary_struct[‘Tavg’][:].flatten() temp_col_name = ‘Temperature_Avg_C’ elif’Tmax’in summary_struct: temp = summary_struct[‘Tmax’][:].flatten() temp_col_name = ‘Temperature_Max_C’ else: temp = np.zeros_like(cycles) temp_col_name = ‘Temperature_Placeholder’

第二步,导入JMP,然后进行退化
注意:X因子选择温度,这是关键,告诉 JMP 温度是影响因子!

第三步,选择温度作为反应因子进行预测。

你会发现,预测出来的结果和线性区别不大。
其实原因很简单:前 500 圈因为电池很健康,温度几乎是恒定的。
JMP 会觉得:“哦,温度对寿命没啥影响嘛”。
结果它还是预测不出来后面的跳水。这就证明了:在 LFP 电池上,传统的物理模型(即使是阿伦尼乌斯)也因为缺乏“早期预警信号”而失效。
学过传统寿命预测技术的人可能会说:你这不是阿伦尼乌斯的用法,只有一个试验温度当然不行,要加上65℃、45℃的数据才行的。
可惜MIT的数据都是30℃的,CALCE的数据倒是有变温度,但那样做太花时间了。不过结论我可以告诉大家,也不行。
阿伦尼乌斯模型生效的前提是‘失效机理一致性’。但 LFP 电池在低温/常温下主要是 SEI 膜增厚和活性锂损失,而在高温(如 60°C+)下可能会发生电解液分解产气甚至粘结剂失效。机理变了,预测就失效了。、
**
**
另外,传统阿伦尼乌斯寿命预测/加速技术中,大家一定要记住:如果要用模型进行预测,必须失效机理是相同的前提,而我们日常做4M变更,往往改了材料、改了工艺,模型的条件已经变更了,就不适用传统的寿命预测模型了。
**
**
写到这里,我们似乎走进了一条死胡同。
我们尝试了简单的线性外推,被现实狠狠打脸; 我们搬出了复杂的非线性公式,却因为缺乏拐点数据而无法收敛; 我们甚至引入了温度作为物理参数,试图用阿伦尼乌斯来救场,却发现单一的宏观物理量根本无法感知电池内部的微观病变。
为什么传统方法在 LFP 电池上统统失效?
归根结底,是因为我们太依赖“时序数据”了。我们一直盯着“容量随时间的变化”看,这就好比只看一个人的年龄和体重,是根本查不出他体内潜伏的癌症的。
LFP 电池的“跳水”,本质上不是一种简单的物理磨损,而是一场电化学层面的“相变”。这种变化在容量曲线上是看不见的,在温度曲线上是看不见的,甚至在电压曲线上也是肉眼难辨的。
但是,看不见不代表不存在。
在那些看似平平无奇的电压-容量曲线深处,其实隐藏着一种名为 dQ/dV(增量容量分析) 的微观指纹。它就像医生的 X 光片,能在电池“身体”还很健康的时候,就精准捕捉到内部“骨质疏松”的信号。
既然人眼看不出来,简单的数学公式算不出来,那我们就该请出能处理高维特征的“降维打击”武器了。
**下一章节,我们将正式进入“黑盒”内部:**如果不看容量,我们还能看什么?如何利用 Python 进行特征工程,提取出那个能够一眼看穿 LFP 寿命的特征?
