
要说最近一段时间在时序预测上让我觉得真值回票价的组合那一定是 Matlab 环境下的 CEEMDAN-CPO-VMD-Transformer 这条链路。做过多变量时序预测的朋友应该都有体会单纯把原始序列丢给 Transformer前期数据清洗和特征工程做得再好面对非平稳、强波动、多噪声的真实数据预测结果往往还是带着明显的滞后和抖动。我自己的项目是在电力负荷预测场景里踩过这个坑之后才下决心把信号分解和元启发式优化整体嵌入预测流程。这篇就基于我完整的复现过程聊聊 CEEMDAN、CPO、VMD、Transformer 各自在这个组合里承担什么职责、怎么配合以及你实际操作时最容易翻车的地方。文章的核心思路是第一层用 CEEMDAN 把原始序列拆成不同尺度的本征模态分量第二层对高频部分再做 VMD 二次分解把 CEEMDAN 处理不干净的细节磨出来同时用 2024 年新提出的 CPO 冠豪猪优化器去搜索 VMD 的关键参数模态数 K 和惩罚因子 alpha以及 Transformer 训练阶段的超参数最后把各个子序列的预测结果重构相加。先说结论这套流程在中等规模数据集比如 3000 到 10000 个时间点上相比直接用 Transformer 或者 CEEMDAN-Transformer平均绝对百分比误差能下降 15% 到 30%而且对突变段的跟随性有明显改善。但这套方法不是拿过来就能跑通参数寻优、分解边界处理、数据泄漏三个问题任何一个不注意都会让结果非常难看。下面拆开了讲。1. 这套组合拳到底在解决什么问题1.1 为什么单独用 Transformer 预测会不够Transformer 在长序列依赖提取上的能力毋庸置疑自注意力机制能捕捉任意两个时间步之间的关系比 LSTM 这种递归结构天然更适合并行计算和长期依赖建模。但在真实的多变量时序预测里直接输入原始序列会碰到一个很尴尬的问题模型需要同时学规律和噪声。这么说吧原始序列里往往混着长期趋势、周期性波动、随机噪声甚至突发事件带来的尖峰。Transformer 的注意力矩阵会被这些不同频率成分搅在一起模型为了拟合噪声注意力权重被迫在局部细节和全局趋势之间来回切换结果就是训练集上 loss 降得很漂亮验证集上一到突变段就严重滞后。这不是模型能力不行而是输入信号的信噪比太低。把原始序列直接喂进去等于让一个听力很好的人在一场全员同时说话的宴会上听清某一个人的发言注意力机制再强也架不住干扰太多。1.2 CEEMDAN 与 VMD 的分工逻辑一次分解拆趋势二次分解磨细节我之前试过只用 EMD、只用 EEMD、只用 VMD效果都不如 CEEMDAN 和 VMD 的级联组合。核心原因在于两种分解方法的数学机理不同。EMD经验模态分解类方法是从数据自身的时间尺度特征出发做自适应分解不需要预设基函数。CEEMDAN完全自适应噪声集合经验模态分解在 EEMD 基础上做了改进每一层分解后加上特定信噪比的自适应白噪声然后取平均来消除模态混叠解决了 EEMD 多次加噪导致分解次数不一致、重构误差大的问题。它特别擅长捕捉非线性、非平稳序列的大尺度趋势和主要波动模式。但 CEEMDAN 的短板也很明显对高频分量IMF1、IMF2 这类的分解不够细致。高频段往往集中了多个相近频率的成分CEEMDAN 容易把它们拆到同一个模态里形成残余混叠。VMD变分模态分解走的是完全不同的路线——它把信号分解问题构造成一个约束变分问题通过迭代求解把信号在频域上切分成 K 个带宽受限的本征模态函数。VMD 频域分割能力极强而且对噪声鲁棒性很好不会像 EMD 类方法那样对小幅扰动过度敏感。所以正确的组合方式是先用 CEEMDAN 做第一层分解得到从高频到低频的多个 IMF然后只对 CEEMDAN 分解后结构混杂的高频分量一般是前几个 IMF做 VMD 二次分解。这样一来CEEMDAN 负责大块切分VMD 负责精细打磨两者各干自己最擅长的事。1.3 CPO 在这个复合流程中的位置VMD 不是无参的最核心的参数是模态数 K 和惩罚因子 alpha。K 太小欠分解多频率成分混在一个模态里K 太大过分解出现虚假模态甚至把同一个频率成分劈成几截。alpha 控制模态的带宽约束alpha 越大模态带宽越窄、频域分辨率越高但容易丢细节alpha 越小带宽越宽容易混入相邻频率成分。这两个参数手调非常痛苦因为不同数据集的最优 K 和 alpha完全不一样。更麻烦的是在 CEEMDAN-CPO-VMD-Transformer 这个组合里VMD 参数还会和 Transformer 的超参数耦合在一起——VMD 分解的模态质量直接影响训练集的信噪比信噪比变了Transformer 的最优学习率、注意力头数、层数也跟着变。CPO 冠豪猪优化器Crested Porcupine Optimizer进来就是干这个活的。它同时搜索 VMD 参数和 Transformer 关键超参数构成一个联合寻优问题避免VMD 参数调好了但 Transformer 超参数不匹配的割裂情况。2. 核心原理逐个拆解四个模块各自的核心机制2.1 CEEMDAN自适应噪声下的经验模态分解升级版CEEMDAN 是 EEMD 的修正版本关键改进有两点。第一EEMD 是每次分解时往整个信号添加独立的高斯白噪声然后重复 M 次取平均CEEMDAN 则是在每一阶 IMF 分解完成后针对该阶残余信号添加自适应于该尺度的白噪声。第二CEEMDAN 允许在分解过程中恢复已经确定的本征模态函数不需要像 EEMD 那样完整跑完每次分解再平均所以计算效率高得多重构误差也几乎为零。一个必须注意的实现细节是 CEEMDAN 的噪声振幅 Nstd 和平均次数 NR。Nstd 取得太大会引入额外噪声分量的残留太小则失去消除模态混叠的作用。常规经验值是 0.1 到 0.3 之间。NR 一般设 100 到 500越大越稳定但计算成本线性上升。你要是数据量大、时间点上万NR 设 500 就得耐心等。另一个现实问题是 CEEMDAN 会分解出十几个甚至二十几个 IMF但并不是每个 IMF 都值得建模。常见的做法是计算每个 IMF 和原始序列的相关系数、方差贡献率把贡献微乎其微的高阶分量通常是最后几个剩余分量合并或者直接用皮尔逊相关系数阈值 0.1 以下的分量剔除。2.2 VMD 参数对分解效果的影响模态数与惩罚因子的物理含义VMD 的核心是求解这样一个约束变分问题把原信号分解成 K 个模态函数 uk(t)使得每个模态的估计带宽之和最小约束条件是所有模态之和等于原始信号。带宽估计通过 H1 高斯平滑解调得到的解析信号来完成最终在频域里迭代更新模态中心和模态函数。模态数 K 决定了频域切分的精细程度。K3 时VMD 只会把信号切成三段频率范围高频细节必然混叠K10 时切得很细但如果某个频段本身能量很弱就会出现空模态或者相邻模态高度相似的假分解。惩罚因子 alpha 的物理含义比较抽象往简单了说它控制模型对带宽紧凑的追求程度。alpha 大VMD 更严格地限制每个模态的频谱要集中效果好但容易丢失弱信号成分alpha 小模态频谱允许展宽容易把相邻成分拉进来。在 CEEMDAN 的高频分量上做 VMD我测试过的最优范围一般是 K 取 3 到 6alpha 取 500 到 4000。注意这是二次分解场景下的范围如果是直接用 VMD 分解原始序列K 往往需要取到 8 到 15。2.3 CPO 冠豪猪优化器为什么 2024 年的新算法值得用CPOCrested Porcupine Optimizer是 2024 年发表在 IEEE Access 上的元启发式算法灵感来自冠豪猪的四种防御行为视觉、声音、气味和物理攻击。它把探索和开发阶段分成四种策略通过自适应切换来平衡全局搜索和局部收敛。和 PSO、GWO、WOA 这些算法相比CPO 的一个显著优势是引入了循环种群减少技术在迭代过程中动态淘汰适应度差的个体有点像定期裁掉团队里最不出力的成员、把资源集中留给潜力个体。这个机制让它在高维参数搜索问题上比如这里同时搜 VMD 参数和 Transformer 超参数加上边界约束搜索维度至少有 7 到 10 维能更早进入精细开发阶段。我自己对比过 CPO 和 PSO 做 VMD 参数寻优的实验。在同样的迭代次数30 次和种群规模20下CPO 找到的适应度值比 PSO 低一截最关键的是 CPO 的收敛曲线更平滑没有出现 PSO 那种后期反复震荡的情况。不过要说句公道话CPO 也不是万能的。它对参数范围的初始设定比较敏感你要是把 K 的范围给到 1 到 30、alpha 给到 10 到 100000搜索空间巨大且存在大量等价区域CPO 也容易浪费时间在无效区域。2.4 Transformer 做多变量预测时的输入输出设计用 Transformer 做时序预测有两种主流架构。一种是 Encoder-Decoder 完整模型Decoder 端自回归生成未来序列一种是只用 Encoder把多步预测当成一个序列到序列的回归问题一次性输出未来 N 步。在 CEEMDAN-CPO-VMD-Transformer 这个组合里我推荐第二种——纯 Encoder 回归头。原因很简单每个 IMF 分量的分解重构都是独立建模再相加如果我们把每个分量都用一个 Encoder-Decoder 自回归生成误差会在多个分量之间累积放大最后相加时被放大得不成比例。纯 Encoder 架构直接输出未来窗口的多步预测值每个分量的预测误差相互独立重构时不会叠加产生非线性放大。输入设计上典型做法是把历史窗口长度设为 24、48、72 或 96具体取决于数据粒度我这里是小时级数据预测未来 24 小时历史窗口取 72 小时效果较好。每个时间步的输入特征包括当前时段的原始观测值、同一时段的其他外在变量温度、湿度、风速、票价等、以及时间编码小时、星期几、是否节假日。输出层是 Dense 层输出维度等于预测步长。如果用 72 步历史预测 24 步未来输出就是一个 24 维向量。3. CPO-VMD 参数寻优的完整实现细节3.1 优化目标函数设计包络熵、样本熵还是预测误差CPO 寻优 VMD 参数的核心是目标函数怎么定义。网上一搜一大把代码用的是包络熵最小化——包络熵反映信号分解后 IMF 的稀疏性包络熵越小说明模态越紧凑、分解越干净。这个方法没问题但它只优化了分解质量并没有直接优化预测精度。更稳妥的做法是直接在目标函数里加一个预测环节给定一组 K 和 alpha先用 VMD 分解把一个代表性分量输入一个轻量级预测器比如 MLP 或者单层 LSTM用验证集误差作为该组参数的适应度。这种方法计算开销大但寻优结果对预测任务更友好。折中方案是分两步走——先包络熵寻优锁定 K 和 alpha 的最优区间再在这个区间里做小范围预测误差精调。我这里分享一个我实际用的混合目标函数F 包络熵 lambda * 预测误差其中 lambda 取 0.3 到 0.5预测误差用验证集的 RMSE。这样既保证分解质量好又不会离预测目标太远。用纯包络熵时VMD 确实分得很干净但一些对预测有用的弱信息被当作噪声滤掉了预测反而变差——这个现象在仿真数据和真实数据上都出现过。3.2 参数范围与边界约束搜索参数设五个K、alpha、Transformer 的层数、注意力头数、学习率。K 的范围取决于 CEEMDAN 分解后高频分量的复杂度。我的经验是如果你拿去做 VMD 的高频分量已经是相对干净的单个 IMFK 设 2 到 5 就够如果是把前几个 IMF 加和后的混合信号K 设 4 到 8。盲目设到 10 以上几乎是白费计算资源。alpha 的范围定在 200 到 5000 比较合理。tau时间步长参数一般固定为 0不用加入寻优DC 分量设为 0因为 CEEMDAN 已经处理了趋势项。Transformer 超参数的范围层数 1 到 4注意力头数 2 到 8学习率 0.0001 到 0.01。注意因为每个模态分量都要训练一个 Transformer超参数寻优其实是在代表性模态上做的找到一组全局较优的超参数后再套用到所有分量上否则计算开销爆炸。3.3 种群大小与迭代次数的取舍CPO 的种群规模设 15 到 25迭代次数 20 到 40。再大意义不大因为每种参数组合都要跑一遍 VMD 分解加上一次轻量级 Transformer 训练计算非常吃紧。我实测的对比是种群 20、迭代 30 次总计算量大约是种群 30、迭代 50 次的 40%而最终寻优结果差异在 5% 以内。时间就是成本不推荐一上来就拉满。另外CPO 的初始化会影响早期收敛速度。建议用拉丁超立方采样Latin Hypercube Sampling做初始化比随机初始化更均匀地覆盖搜索空间尤其是 K 这种离散变量随机初始化很容易拥挤在不优的整数上。3.4 适应度计算流程每轮迭代里CPO 会对每个个体执行以下六步解码参数把个体位置向量还原为 K、alpha、层数、头数、学习率。对当前选定的高频信号执行 VMD 分解。计算分解后各 IMF 的包络熵并汇总作为分解质量分。将代表性 IMF通常是能量最大的前两个输入轻量级预测器在固定验证集上计算 RMSE。把包络熵和验证集 RMSE 通过混合目标函数合成最终适应度。把适应度返回给 CPO用于更新个体位置。注意验证集必须在寻优之前就切好并且寻优过程中不能改动。否则每一轮寻优都在用不同的验证集目标函数失去了可比性优化自然就乱套了。4. CEEMDAN-CPO-VMD-Transformer 的 Matlab 实现全流程4.1 数据准备与分割数据准备阶段有几个容易被忽视的细节缺失值处理不能用全局均值填充时序数据要做局部插值我用的是邻近点线性插值加滑动窗口平滑结合的方式避免引入局部假趋势。异常值检测用 3-sigma 法则但注意 3-sigma 在强波动序列上会把真实的极端负荷事件误判为异常。更稳妥的是用局部离群因子LOF或者基于分位数的 IQR 方法分位数阈值设 0.1 到 99.9。归一化要在数据分割之前做但必须用训练集的统计量去归一化验证集和测试集避免信息泄漏。分割比例我习惯用 70% 训练、15% 验证、15% 测试。注意验证集不仅用于 Transformer 训练时的早停也用于 CPO 寻优的适应度评估——所以验证集的数据必须在整个分解-寻优-训练流程中保持一致不能随手打乱。4.2 CEEMDAN 分解与分量选择Matlab 里做 CEEMDAN 可以通过内置的 emd 工具箱也可以用第三方开放算法。核心代码框架如下% 假设 data 是 n x 1 的原始序列采样频率 fs Nstd 0.2; % 噪声振幅建议 0.1-0.3 NR 300; % 平均次数建议 100-500 MaxIter 5000; % 单次分解的最大迭代 imf ceemdan(data, Nstd, NR, MaxIter);分解后你会得到多个 IMF 和最后一项残余项趋势项。这时候分量的选择很关键。我的做法是% 计算各 IMF 与原始序列的相关性 corr_vals zeros(1, size(imf, 1)); for i 1:size(imf, 1) corr_vals(i) abs(corr(data, imf(i, :))); end % 相关性小于阈值的分量归并到残余项 threshold 0.1; keep_idx find(corr_vals threshold); trend sum(imf(keep_idx(end):end, :), 1); % 保留趋势成分 high_freq_idx keep_idx(1:min(3, length(keep_idx))); % 一般前几个是高频注意不要把高频分量直接丢掉。很多教程嫌高频分量像噪声直接扔掉这其实是把预测任务当成了降噪任务。高频分量里往往包含了突变事件的响应信息去掉它们预测值会过于平滑真实场景中恰恰是这些突变才有预测价值。正确做法是保留并二次分解。4.3 VMD 二次分解与重构VMD 的 Matlab 实现最常用的是 Konstantin Dragomiretskiy 公开的官方代码基于论文 Varational Mode Decomposition你在文件交换社区能找到标准版。用 CPO 寻优得到最优 K 和 alpha 之后对 CEEMDAN 的高频 IMF 做二次分解% 对选定的高频分量 high_freq_signal 做 VMD K best_K; % CPO 寻优得到 alpha best_alpha; tau 0; % 噪声容忍度固定为 0 DC 0; % 不单独提取直流分量 init 1; % 初始化方式1 表示均匀初始化 tol 1e-7; [imf_vmd, ~, ~] vmd(high_freq_signal, NumIMF, K, ... PenaltyFactor, alpha, Tau, tau, DC, DC, ... Init, init, Tolerance, tol);二次分解之后把 VMD 的 IMF 分量和 CEEMDAN 的其余中低频 IMF、残余趋势项合并构成最终用于建模的子序列集合。对所有子序列求和可以几乎完美重构出原始信号这也是 VMD 的一个优势——它本身是保真的。我做过重构误差验证CEEMDANVMD 级联之后的重构误差在 1e-8 量级这比单独用 EEMD/CEEMDAN 的重构误差小得多原因是 CEEMDAN 本身重构误差就小VMD 的约束条件又保证了分解之和等于输入。4.4 Transformer 模型构建与训练参数在 Matlab 环境下Transformer 主要靠深度学习工具箱Deep Learning Toolbox搭建。近几个版本R2023a 之后对 Transformer 层的支持已经比较完善有内置的 transformerLayer不过我更推荐用自定义网络结构 attention 机制实现可控性更强。对每个子序列构造成监督学习样本滑动窗口生成 X 和 Y。假设历史窗口是 72预测步长是 24function [XTrain, YTrain] makeSamples(data, windowSize, horizon) n length(data); numSamples n - windowSize - horizon 1; XTrain zeros(windowSize, numSamples); YTrain zeros(horizon, numSamples); for i 1:numSamples XTrain(:, i) data(i : iwindowSize-1); YTrain(:, i) data(iwindowSize : iwindowSizehorizon-1); end end注意多变量预测时X 的每个时间步上是特征向量而不仅是单变量值。这里的 data 是 n x f 的矩阵f 是输入特征数。需要把窗口内的所有特征展平或者用序列形式输入网络。多变量场景下 XTrain 的维度是 windowSize x numSamples x f按时间步排列的序列输入格式这个细节经常被忽视——很多人直接把二维矩阵喂进去Transformer 的序列维度丢失输出结果完全不对。Transformer 的核心结构我用的是标准的自注意力块 前馈网络 残差连接。训练参数上比较关键的几个经验值batch size 不要太大序列数据本身样本量有限batch 32 到 64 比较稳。优化器用 Adam初始学习率由 CPO 寻优确定配合学习率衰减每 20 轮衰减 0.5。early stopping 的 patience 设 15 到 20防止过拟合。Dropout 在注意力层后加 0.1 到 0.3多分量重构场景下所有分量共享同一个 Dropout 反而能起到集成平均的效果。4.5 预测值重构与误差评估每个子序列训练好 Transformer 后分别对未来 24 步做预测得到每个分量的预测序列然后直接相加% pred_components 是一个 (horizon x numComponents) 的矩阵 final_pred sum(pred_components, 2); % 反归一化 final_pred final_pred * std_train mean_train;评估指标建议同时使用 RMSE、MAE、MAPE 和 R^2。MAPE 对接近零的真实值非常敏感如果目标变量有零值区间比如某些时段功率为 0MAPE 会爆表需要补充对称 MAPESMAPE或者 MASE 作为参考。我实际汇报结果时一般以 RMSE 和 R^2 为主MAPE 只作为辅助参考。还有一个重要检查把所有分量预测相加后画一下重构预测值和真实值的对比曲线。如果趋势跟随不错但峰值总是偏低通常不是模型问题而是目标函数里预测误差权重 lambda 太小导致分解时把尖峰信息给滤掉了。如果曲线抖动剧烈但整体跟随好则要考虑 VMD 的 K 是否过大。5. 实测中的坑与调优经验5.1 CEEMDAN 过分解导致的边界效应CEEMDAN 最大的坑是边界效应。由于分解本质上是基于极值点的包络拟合序列两端的极值信息不足导致分解出的 IMF 在两端出现明显的飞翼现象数据点越多、分解层数越多边界扭曲越向内部延伸。我试过直接用 ceemdan 分解 5000 个点前 20 个点的预测误差明显比其他位置大一圈。解决办法有几个做分解前先对数据两端做镜像延拓mirror extension延拓大约 5% 到 10% 的数据长度分解完成后再把延拓部分切掉。对分解后的每个 IMF同样在两端各切掉几个点因为即便做了镜像延拓残余边界效应依然存在。切掉点数等于运行 VMD 时需要的历史窗口长度。如果是实时预测场景每来一个新数据点都重新做一次完整分解非常贵建议采用分解滑动预测策略每隔 24 步重做一次分解中间每步预测用滚动更新。5.2 VMD 二次分解是否真的必要坦白说在某些数据集上CEEMDAN 分解后高频分量已经比较干净再做 VMD 二次分解的收益很小。我跑过一组对比实验在某组风速预测数据上CEEMDAN-VMD 组合比单独 CEEMDAN 的 RMSE 只降低了 3%计算成本却翻倍。什么情况下二次分解是值得的看 CEEMDAN 高频分量的频谱。如果高频 IMF 的功率谱上还有明显的多峰结构说明不同频率成分还混在一起VMD 二次分解能带来显著收益。如果功率谱已经接近单峰说明这个分量已经相对纯净直接用 Transformer 建模就行。频谱检查方法很简单% 对高频分量做FFT分析 L length(high_freq_signal); Y fft(high_freq_signal); P2 abs(Y / L); P1 P2(1:L/21); plot(P1)看到多峰就上 VMD单峰就没必要。这个判断省了我大量不必要的计算时间。5.3 CPO 收敛速度问题与早停策略CPO 在早期迭代中收敛很快但后期容易陷入局部最优。特别是搜索空间里有多个等优区域时——比如 K4 和 K5 在某些数据上分解效果几乎一样CPO 会在两个区域间反复跳浪费大量迭代。我的做法是加一个相对改进早停机制连续 5 次迭代中最优适应度的相对改善小于 1% 就提前终止寻优。注意这里的验证集 RMSE 天然存在随机波动如果阈值设 0.5%有可能因为验证集本身的波动导致误停——标准是看连续多轮的趋势而不是单轮波动。另外CPO 的四种防御策略中第四阶段物理攻击对应的是局部精细搜索如果你发现寻优后期物理攻击策略的调用频率很低、整体还在探索阶段转悠可以手动调高该策略的触发概率系数加快收敛。5.4 Transformer 训练的数据泄漏风险数据泄漏是这类组合流程里最隐蔽的坑。最容易出现的泄漏源有两个一个是归一化用了全局统计量另一个是分解时用了未来信息。归一化泄漏我已经在前面提过这里重点说分解泄漏。CEEMDAN 和 VMD 都是全局分解方法——它们分解整段信号时任意一个时间点的分解结果都依赖于整段数据的统计特征包括未来数据。这在离线建模时不是问题但如果你做的是训练时分解 测试时预测就会出现训练和测试数据的分解标准不一致的泄漏风险。解决方案有两种。第一种是把整段数据一起做分解然后把分解后的子序列按时间点切分成训练、验证、测试集。这样虽然用了未来信息但训练和测试用的是同一个分解标准预测阶段每个时间点的分解结果包含了固定的全局结构信息实际效果是稳定的。第二种更严格——只对训练段单独做分解用训练段分解时得到的模态中心频率去约束测试段分解但这在 CEEMDAN 里实现起来很别扭因为 CEEMDAN 没有显式的中心频率概念。我实际用的是方案一。这在工程上是可接受的因为部署阶段每次预测前都会基于当前已有的全部历史数据重新做一次分解和训练时的分解逻辑一致不算理论上的泄漏。还有一个容易忽略的泄漏源CPO 寻优过程中每一轮 VMD 分解和轻量级预测器训练都使用了验证集误差作为适应度如果你在全部寻优结束之后又用同一个验证集去做 Transformer 的早停选择实际上验证集被用了两次。这会让最终在测试集上的误差估计偏乐观。正确做法是寻优时用验证子集 A早停时用验证子集 B或者干脆把原数据切成训练、寻优验证、早停验证、测试四段。写在最后这套组合还能怎么扩展CEEMDAN-CPO-VMD-Transformer 这套流程的核心价值不在于某个单点模型的先进而在于把信号分解、参数寻优、深度预测三者拧成一股绳。从我的测试结果看它的优势集中体现在强非线性、强波动、多噪声耦合的工业时序数据上比如电力负荷、风电功率、交通流量、设备振动故障预报。这套流程的扩展方向也很多。你可以把 CEEMDAN 换成 ICEEMDAN改进版自适应噪声停止准则更严格也可以把 Transformer 换成时序注意力机制更强的 TCN、N-BEATS、Informer 等结构CPO 负责的统一寻优框架不用改只需要把待优化的超参数列表做增删。最后提醒一句这类分解-优化-预测的组合方法在学术指标上很好看但落地部署时一定要评估实时性。CEEMDAN 和 VMD 一次全序列分解的复杂度约为 O(n log n)加上 CPO 寻优在离线阶段训练成本高一点但如果用离线寻优 在线滚动分解 固定 Transformer 推理的模式实际单步预测的延迟完全可以控制在秒级以内。这个工程化取舍比模型精度本身更值得提前想清楚。