高炉硅含量预测:放弃插值,R² 从 0.35 干到 0.81

上周帮团队优化高炉硅含量预测模型,开局就撞上一个棘手问题:拿到的数据集里,工艺过程参数和硅化验标签的时间完全对不上,原本规划了半月的多变量时序预测方案直接作废。更麻烦的是,这次调整要同时满足 6 个硬性要求——评估指标、GPU 加速、3 种以上优化策略、项目文档、可复现流程、结果可视化,一个都不能少。好在最终所有目标都落地了,模型 R² 从 0.35 提到 0.81,整个决策过程和踩的坑值得记一下。

时间不重叠的数据集,逼着改方案

原始数据共 3 个 Sheet,Sheet2 是高炉实时采集的工艺参数(风量、风压、料速等分钟级数据),Sheet3 是高炉炉样的硅含量化验标签(每 2 小时采样一次),两者时间戳完全没有重叠。一开始试线性插值对齐时间,结果要么引入大量噪声,要么为了对齐丢弃 70% 以上样本,跑出来 R² 只有 0.35,根本达不到生产要求。

后来重新梳理业务逻辑才想通:硅含量是高炉冶炼的滞后结果,短期预测完全可以用历史硅含量的时序规律来拟合,不需要强依赖分钟级的工艺参数。于是把方案从「多变量时序预测」改成「硅含量单变量时间序列预测」,仅用过去 24 小时的硅含量历史数据预测未来 2 小时,R² 直接拉到 0.72——方向比盲目堆算法重要。

6 项目标逐个落地

所有核心实现都放在对应项目模块里。评估指标封装到 src/models/metrics.py,把 MSE、RMSE、R² 三个指标收进去,这里踩了个数据泄露的坑:一开始直接用 sklearn 随机划分训练测试集,R² 虚高到 0.89,改成时间序列滚动划分才反映出真实效果。

GPU 加速针对的是改装的 22G 显存 2080Ti,一开始把全量数据加载到 GPU 直接显存爆满。在 src/models/si_predictor.py 里做了两个轻量优化:用 DataLoader 的 pin_memory 加速 CPU 到 GPU 的数据传输,再开启 torch.cuda.amp 混合精度训练,显存占用从 21G 降到 11G,训练速度提升 1.7 倍,完全压在硬件限制内。

优化策略在 src/models/si_optimization_strategies.py 里实现了 5 套,远超要求的 3 套,核心有效的有 3 个:时序特征工程给输入加了过去 7 天硅含量的滑动均值、方差、趋势项,以及小时级周期特征,模型对周期性波动的捕捉明显提升;异常值过滤用 3σ 准则剔除化验误差导致的异常硅值,避免模型被离群点带偏,验证集误差降低 12%;多模型集成把 LSTM、Prophet、XGBoost 三个模型的预测结果按验证集误差倒数加权融合,最终 R² 稳定在 0.81,比单模型最高提升 9 个百分点。

可复现和文档方面,把训练、验证、测试全流程封装到 scripts/train_blast_furnace_si.py,固定了随机种子、数据划分比例、超参数,其他同学拿到代码跑一遍误差不超过 2%,同时更新了 项目交接文档.md,专门加了「数据集时间对齐问题说明」避免后续维护者踩同样的坑。结果可视化做了训练损失曲线、预测值与真实值对比图、特征重要性图,统一存在项目结果目录方便回溯。

这次项目踩的坑,几条经验比较通用:工业数据集往往有很强的业务属性,像这次高炉数据,工艺参数和化验标签的时间差是冶炼工艺决定的,强行对齐反而引入噪声,先搞清楚数据为什么"对不上"比直接套算法重要;硬件限制下的优化优先选性价比最高的方案,2080Ti 只有 22G 显存,没盲目加 batch size 或换大模型,先做混合精度和分 batch 加载,几乎零成本就把显存砍了一半;

工业预测的优化优先从数据和特征入手,这次效果提升最明显的是异常值过滤和时序特征工程,比后面试的 10 种复杂模型架构都好,数据质量永远比模型复杂度重要。

AI 编码助手帮我们快速落地了所有模块,但我们没有盲目用 AI 生成的代码,而是先踩了数据对齐的坑、明确了业务逻辑再针对性调整。下次拿到时间不匹配的时序数据集,第一步先画两个变量的时间分布图,搞清楚时间差是数据采集问题还是业务逻辑问题,再决定强行对齐还是调整方案,能少走很多弯路。


做自动化这几年,最耗时间的从来不是写代码,是摸清每个平台的脾气。

这篇里提到的坑,都是真金白银踩出来的。
如果你手上也有重复度很高的活儿——批量发布、数据搬运、有固定规则的机械操作
——可以在评论区说说你的场景,我看看能不能自动化掉。

posted @ 2026-09-23 06:08  钱栈up  阅读(0)  评论(0)    收藏  举报