Si预测实验复盘:踩了4个编码坑才发现,改模型不如改特征

Si预测实验复盘:踩了4个编码坑才发现,改模型不如改特征

刚上手时序预测时,我总有个执念:模型效果不好,要么是结构不够复杂,要么是调参不够细。直到上周做Si含量预测实验,踩了4个编码坑、跑完多组对照实验后才明白:很多时候瓶颈根本不在模型,而在你没注意到的细节和优先级搞错的优化方向。这次实验全程仅用13分钟完成训练,GPU峰值内存占用不到0.1GB,最终却得出了一个反常识的结论:人工先验特征的效果,是模型结构优化的2倍以上

一、先踩4个坑:代码跑通才是实验的前提

这次实验的代码调试阶段,前前后后浪费了近1小时,全踩在了4个看起来低级、实则非常耗时的坑上:

  1. 索引转换错误:一开始把时间格式的索引直接转成int()类型,导致时间序列完全错位,训练数据失真,后来改成str()转换才恢复正常,光排查这个错位问题就花了20分钟。
  2. 模型参数拼写错误:自定义的SiPredictor模型层数参数,我误写成了num_layers,正确参数名是n_layers,导致模型结构根本没按预期加载,跑了半天训练的是错误配置,改完之后验证集效果直接涨了3个点。
  3. Pandas滚动统计语法错误:计算滚动标准差时用了当前版本不兼容的语法,导致输出的特征全是NaN,后来翻Pandas官方文档改了对的写法,特征才正常生成。
  4. AMP兼容性问题:开启混合精度训练时,np.polyfit输出的浮点数精度不够,直接触发报错,最后加了一行.astype(np.float32)就解决了,属于库版本和训练配置的兼容性坑。

这4个坑里,前两个属于低级错误,后两个是库使用和配置问题,踩完之后才意识到:跑通代码比跑出好效果重要得多,很多你以为的“模型效果差”,其实是代码根本没跑对

二、效果对比:为什么特征工程比改模型更有效?

代码跑通后,我一开始的优化思路是“升级模型”:先试了更深的LSTM结构,又用Optuna自动搜索超参数,跑了13分钟的训练后,Optuna带来的指标提升不到2%,远没有达到预期。

配套更新的实验记录、测试用例和项目汇报大纲,覆盖了7项实测数据、6个测试场景(全部通过)和6页汇报内容,完整还原了实验全流程。后来我转向做特征工程,加了时序滞后项、滚动统计量、周期特征等人工先验特征,最终策略1(特征工程方案)的测试集MSE降到0.010263,RMSE为0.101307,R²达到0.1114,效果比纯调参的方案好了近一倍。最终实验结论非常明确:人工先验特征的效果,是模型结构优化的2倍以上,Optuna自动调参的收益不足2%。这个结论其实打破了之前的执念:不是模型越复杂、调参越细效果越好,尤其是数据量不大的工业场景,先把特征做对,比瞎改模型有用得多。

三、低R²的真相:不是模型不行,是数据有局限

实验最终得到的R²只有0.1114,远低于基线LSTM的0.4628,一开始我以为模型训得有问题,后来排查数据才发现根因:实验用的Sheet2和Sheet3的时间段完全不重叠,没有共同的时间维度可以对齐多变量特征,只能做单变量预测,没有过程相关的特征输入,模型自然学不到有效规律。

后来我们评估了后续优化空间:如果后续补充分过程特征、做多变量建模,R²还能提升0.1-0.2。这个发现非常重要:如果模型效果远低于预期,先别急着改模型,先查数据有没有问题——90%的效果瓶颈,都是数据本身的问题

四、可带走的方法论

这次实验踩了不少坑,但也总结出了几条可复用的经验,给做时序预测的朋友参考:

  1. 先跑通基线,再谈优化:先拿最简单的模型(比如朴素预测、单层LSTM)跑通基线,确认代码逻辑没问题,再考虑优化模型、调参,不然错了都不知道是代码问题还是模型问题。
  2. 优化优先级要搞对:特征工程 > 模型调参 > 模型结构升级,尤其是数据量小于10万条的工业场景,手工特征的收益远高于模型迭代,不要上来就堆复杂模型。
  3. 踩坑先查低级错误:80%的编码问题都是索引、参数拼写、语法兼容性这些低级错误,先排查这些再查高级问题,能省大量调试时间。
  4. 效果瓶颈先查数据:如果模型效果远低于预期,先检查数据的时间对齐、缺失值、特征分布问题,别急着换模型、改结构。

之前总想着用最先进的模型、最复杂的调参逻辑拿结果,这次实验才明白:AI项目落地,细节和数据优先级,永远比堆复杂度重要。

posted @ 2026-09-10 09:50  钱栈up  阅读(7)  评论(0)    收藏  举报