做风速预测这行当我印象最深的不是模型精度曲线有多漂亮而是被客户追问“未来24小时风速曲线怎么走”时的压力。单步预测做得再好一旦把预测步数拉长到几十步误差就开始滚雪球这在多步风速预测里几乎是所有统计模型和深度学习模型的通病。我折腾了大半年试过ARIMA、LSTM、XGBoost也试过各种集成方式最后把思路从“换更强的预测器”转到“给预测器安排不同的分工”上用混合模型才真正把远期预测稳住。这篇文章就想把这个过程完整记录下来重点聊聊怎么用高斯混合模型GMM做风况状态识别再搭配多专家预测器组成一个能打的多步风速预测方案。这套方案适合正在做风速预测、风电功率预测或者对时间序列混合建模感兴趣的人。我会从问题根源讲起把GMM的作用、多专家模型的组合方式、多步预测的策略选择、代码实现和踩坑经验都摊开来说。不需要你有多深厚的数学基础只要懂一点Python和基本机器学习概念跟着思路走就可以了。1. 多步风速预测的两个拦路虎误差累积与分布偏移1.1 多步预测到底难在哪里多步风速预测简单说就是根据当前和过去一段时间的观测值预测未来多个时间点的风速。比如风电场调度需要未来6小时的功率曲线以15分钟为间隔就是24个预测点有些场景要预测到72小时那就是上百个点。和单步预测相比多步预测真正麻烦的地方不只是“多算几步”而是每一步的误差都会传递到下一步越往后越不可控。我把这个现象叫做“预测误差的滚雪球效应”。假设单步预测的平均绝对误差是0.3 m/s如果采用迭代递归策略把预测出的下一个风速当作特征去预测再下一个第24步的误差很可能会放大到1.2 m/s以上足足是单步误差的四倍。这种误差膨胀不是某个模型特有的ARIMA有LSTM也有只是膨胀速度不同而已。另一个容易忽视的问题是风速本身的分布偏移。风速不像室内温度那样稳定地围绕一个均值波动它受气压场、地形、昼夜温差、局地湍流等多重因素影响短时间内可能从平静的微风状态切换到强阵风状态。这导致风速序列呈现明显的非平稳性和多峰分布特征——用数学语言说一个单峰高斯分布根本描述不了风速的整体规律。可绝大多数常规预测模型都假设数据分布相对稳定于是模型在风况突变时表现特别差这也是纯数据驱动模型的通病。1.2 为什么单一模型总是捉襟见肘我最早用的是ARIMA纯统计方法在平稳段表现尚可但一到风况切换期就彻底抓瞎残差里经常能看出明显的模式——说明模型没有抓住非线性关系。后来换LSTM单步预测效果很惊艳RMSE降了不少但多步迭代预测时误差累积得也很快远端曲线经常出现“越预测越平滑”的均值回归现象等于是模型不敢预测突变只能往历史均值靠。XGBoost这类树模型在特征工程做得好的情况下单点预测很强但它本质上是“学习特征到目标的映射”不太擅长处理时间序列中前后依赖的关系。如果把滞后特征堆给它它也能学出一些规律但泛化能力有限遇到训练集中没出现过的风速模式就容易跑偏。我做了一组对比实验同样的数据ARIMA、LSTM、XGBoost都单独训练24步预测的MAE分别在同一条水平线上挣扎谁也没有绝对优势。这让我意识到问题可能不在“模型强弱”而在“建模方式”——我们一直试图用一个模型应对所有风况但风速序列里其实是多种状态的混合体每种子状态背后的物理过程和统计规律都不一样。用一个模型去拟合全部状态结果必然是“平均主义”每个状态都拟合得不彻底。1.3 混合模型的破局思路既然风速是多种状态的混合那顺势而来的思路就是先把状态分出来再为每个状态配置专门的预测器最后把多个预测结果按概率融合。这一步的好处是能有效打破两个拦路虎中的第二只——分布偏移。状态识别可以捕捉“今天目前处于什么风况”预测器则可以针对不同风况做专门优化比如对强风时段侧重捕捉阵风幅度对平稳时段侧重捕捉趋势。而多步预测误差累积的问题则需要从预测策略本身入手比如直接多步预测、混合策略、误差修正等。这些我会在第四部分展开。先说清楚一点混合模型的核心理念不是“多几个模型投票”而是让不同模块各司其职——用聚类模型做状态识别用专家模型做分状态预测用加权融合做决策统一。这才是我理解的“混合”的真正含义。2. 混合模型架构设计GMM做状态识别专家模型做分状态预测2.1 总体架构我最终上线的结构并不复杂一句话就能说清先对历史风况特征做高斯混合模型聚类得到若干个风况状态然后用这些状态的软标签作为额外特征同时也是作为预测结果的融合权重最后让多个专家预测器分别从不同角度给出风速预测按GMM的后验概率加权合成最终输出。这套架构分成四个模块依次是数据预处理与特征构造、GMM状态识别、专家预测器组、概率加权融合。数据预处理部分把测风塔或再分析数据整理成标准格式构造滑窗特征GMM负责在每个时间窗口上估计当前处于哪个风况状态输出后验概率专家预测器组由几个结构不同的模型组成比如LSTM、XGBoost、线性模型它们各自从不同角度预测未来风速最后的融合层把专家预测结果按后验概率加权形成最终的多步风速预测。这个设计里GMM不只是做数据预分析而是实实在在参与每一条预测的推理过程。换句话说每次预测时GMM都会先判断当前风况更像哪种状态然后动态调整各专家模型的发言权。这是“混合”的真正含义也是它能提升多步预测稳健性的关键。2.2 为什么是GMM而不是K-Means或简单分类做状态识别很多人第一反应是用K-Means把历史数据聚成几类然后打上标签。K-Means确实简单但它做的是硬聚类每个样本必须属于且仅属于一个簇这在实际风况里并不合理。风速状态之间的界限往往是模糊的一个时刻可能正处于从平缓风过渡到强风的过程硬生生归为某一类会丢失大量信息。高斯混合模型的优势在于它天然就是软分类器。它假设数据由若干个高斯分布加权混合而成每个高斯成分代表一种潜在状态训练完成后对任意输入都能输出属于每个成分的后验概率。这个后验概率既是聚类结果又是融合权重一举两得。而且GMM对分布形状的刻画能力强能捕捉风速多峰分布的特点比单纯按距离聚类的K-Means更贴合物理直觉。另外GMM训练用的是期望最大化算法EM每一步迭代都有清晰的数学含义E步计算后验概率M步更新均值和协方差。它的计算开销也不大在我的数据集上五千多个样本训练GMM只需要几秒钟完全可以在预测前实时更新。这为后续部署提供了便利。2.3 专家预测器的组合逻辑为什么不是越多越好专家预测器组的设计有几个原则。首先是差异性组合里的模型不能是同一种结构否则它们犯的错误也高度相似融合没有增益。我选了三个互为补充的模型LSTM擅长捕捉时序上的非线性依赖XGBoost擅长利用外部特征做非线性映射线性回归则提供一个稳定、可解释的基线输出。三者结构差异足够大融合才有意义。其次是分工。一开始我尝试过“一个状态配一个专属模型”比如平缓态配ARIMA、强风态配LSTM效果并不好原因是某些状态下的样本量太少专属模型学不充分。后来改成“所有模型用全量数据训练GMM只负责调整融合权重”效果反而更好。这背后的逻辑是与其让每个模型只看到局部数据不如让每个模型在全量数据上各展所长再由状态概率决定谁在什么情况下说了算。最后是复杂度控制。专家模型不是越多越好每增加一个模型训练、调参、维护的成本都在上升而融合增益会边际递减。我试过加第四个模型CNN结果总体误差下降不到1%但训练时间涨了将近一半完全不划算。所以我的建议是两到三个结构差异明显的模型足矣重点放在特征工程和状态识别的质量上。2.4 这套架构的适用边界混合模型听起来很美好但也不是万能的。它适合的场景是数据量足够大、风况状态可区分、且单模型各有优缺点的情形。如果数据量很小比如只有几百条记录GMM的状态估计会很不稳定专家模型也容易过拟合这时不如老老实实用一个简单模型。另外如果风速序列非常平稳、变化幅度很小那混合模型的优势也发挥不出来因为状态本身就没什么区分度。这种情况下单模型加一个漂亮的特征工程就够了。明白了这一点你在做技术选型时就能有的放矢不至于为了“用混合模型”而硬凑一套复杂架构。3. 高斯混合模型入场从风速分布里“切出”天气状态3.1 GMM的数学直觉一堆高斯分布叠起来高斯混合模型的数学表达并不复杂它假设数据是由K个高斯分布混合生成的每个分布有自己的均值向量、协方差矩阵和权重。记第k个成分为N(μ_k, Σ_k)混合权重为π_k则整个模型对样本x的概率密度就是这些高斯分布的加权和p(x) Σπ_k N(x|μ_k, Σ_k)。训练的目标是找到一组参数μ、Σ、π让观测数据的似然概率最大化。由于存在隐变量每个样本属于哪个成分没法直接求导所以用EM算法迭代优化。E步根据当前参数估计每个样本属于各成分的后验概率M步用这些概率重新估计参数。迭代到收敛后GMM就能告诉我们每个样本属于每个状态的概率。这里有一个对应用很关键的细节GMM输出的后验概率向量是归一化的即某时刻各状态概率之和为1。这正好可以充当融合权重——比如某时刻gmm给出“平缓态概率0.6、过渡态概率0.3、强风态概率0.1”那最终的预测就是0.6倍平缓态专属结果加0.3倍过渡态结果加0.1倍强风态结果。3.2 分量数K怎么选别迷信BIC要结合业务可解释性GMM需要预先指定成分数量K。K太小状态划分太粗糙起不到区分作用K太大状态过细每个状态样本量减少模型过拟合风险上升。纯靠BIC或AIC选择K是一种常见做法但我在实际项目中发现BIC给出的最优K往往会偏大选出来的状态在业务上很难解释。我自己的做法是先用BIC在2到8之间扫一遍观察不同K下的BIC变化曲线找到拐点附近的值然后再人工检查各状态的均值向量和典型时序曲线确保每个状态对应的风速特征在气象上说得通。比如最终我用的是4个分量平缓态低风速、低波动、上升态风速持续增大、下降态风速持续减小、强风态高风速、高波动。这四个状态在气象上都有对应场景业务解释起来也非常顺。另外要提的是协方差类型的选择。sklearn里的GaussianMixture支持full、tied、diag、spherical四种协方差类型。full最灵活但参数多适合数据量大、特征间存在复杂相关性的场景diag假设特征独立参数少训练快spherical假设各向同性最简单但通常精度不够。我试下来特征维度在10个左右、样本量上万时full更好特征维度更高、样本量不足时diag更稳。你不妨根据自己数据规模先跑几个快速实验。3.3 特征选择光看风速本身远远不够如果要让GMM真正识别出有意义的风况状态只用风速一个特征是不够的。风速值相同可能正处于上升过程中也可能处于下降过程中光靠当前值区分不了。我最终给GMM准备的特征包括当前风速、过去1小时的均值风速、过去1小时的最大阵风、风速一阶差分反映变化方向、风速二阶差分反映加速度、风向的sin和cos编码、湍流强度以及气温和气压的标准化值。这里特别提一下风向的处理。风向是0到360度的环形变量直接用原始角度喂给模型会带来“0度和360度明明是同一个方向”的问题。常规做法是把它拆成sin与cos两个分量既保留了方向信息又避免了角度环绕带来的距离失真。这个细节看似小实际对聚类效果影响很大。所有特征在送入GMM之前都要做标准化。风速的量纲是m/s气压是百帕温度是摄氏度量级差异太大直接用原始值会让GMM的距离计算被量级大的特征主导。我用StandardScaler做z-score标准化这一步在训练和预测时要保持一致。代码实现上非常简洁from sklearn.preprocessing import StandardScaler from sklearn.mixture import GaussianMixture features [wind_speed, mean_speed_1h, gust_1h, speed_diff, acceleration, wind_dir_sin, wind_dir_cos, turbulence, temperature, pressure] scaler StandardScaler() X_scaled scaler.fit_transform(df[features]) gmm GaussianMixture(n_components4, covariance_typefull, random_state42) gmm.fit(X_scaled) # 预测时直接取后验概率 posterior gmm.predict_proba(X_scaled)3.4 怎么判断聚类效果是好是坏GMM训练完之后我会从三个角度检查聚类效果。第一是各成分的权重分布如果某个成分的权重低于5%说明这个状态几乎没有样本覆盖需要减少K或调整特征。第二是各成分的均值向量逐项看它们在风速、温差、湍流等特征上的差异是否有业务意义。第三是取几条典型时序曲线可视化确认同一状态的曲线形态确实相似不同状态之间有明显区别。我踩过的一个坑是只看计算指标比如轮廓系数觉得聚类效果不错结果可视化发现某个状态把“上升期”和“震荡期”混在一起了。原因是这两个状态在特征空间里存在交集单靠GMM难以完全分开。后来我在特征里加入风速二阶差分振荡期的加速度波动幅度明显更大两类终于分开了。这再次说明状态识别的上限往往由特征决定而不是由聚类算法本身决定。4. 预测器选型与多步预测策略直接多步还是迭代递归4.1 三种多步预测策略的对比多步预测策略直接决定了误差累积问题的严重程度。常见的有三种迭代递归、直接多步、以及两者结合的混合策略。我做个表格对比一下策略实现方式优点缺点迭代递归单步预测器逐个预测输出回填到输入单步模型成熟训练简单可预测任意长度误差逐级累积越远越差直接多步模型一次输出未来N个时刻无累积误差训练推理快输出维度大远端预测易趋均值模型复杂混合策略多步预测器迭代修正兼顾稳定性与精度结构复杂训练成本较高迭代递归的问题是我前面反复强调的滚雪球效应。理论上如果单步预测是完美无偏的迭代误差不会累积但现实里模型总有误差而误差一旦进入特征列就会污染下一步的预测。LSTM在迭代模式下的误差膨胀速度尤其明显因为循环结构会把误差也在时间维度上传递。直接多步输出的问题出在另一个方向。模型一次输出24个点输出空间大模型倾向于学习“平均曲线”预测结果会偏向平滑丢失掉真实风速中的波动特征。这个现象叫做“均值回归”尤其在远端表现明显预测曲线逐渐收敛到历史平均风速附近。用气象学的眼光看这种预测在调度上没有参考价值因为它无法提示未来是否会有大风过程。4.2 我在方案里采用的策略直接多步为主迭代修正为辅对比之后我的选择是直接多步预测为主、迭代修正为辅。具体来说每个专家模型都使用Seq2Seq式的直接多步输出结构一次预测未来24个时间点然后保留预测结果中的前几个点作为修正信号对后续输出做轻量调整。这个设计的好处是主体路径不依赖迭代避免了误差滚雪球修正机制则保留了对近期最新趋势的响应能力。因为直接多步预测模型在训练时看到的是固定窗口输入一旦预测期内发生趋势转折模型很难自动调整而迭代修正可以用新观测到的近几期预测值来校准轨迹。修正的公式也很简单设模型直接输出的预测序列为y_hat[1..24]取前4个预测点y_hat[1..4]作为“临时已知序列”与真实历史序列拼接重新输入一个小型修正网络输出对后续20个点的偏移量delta[5..24]最终预测为y_final[5..24] y_hat[5..24] delta[5..24]。这个修正网络不需要很复杂我用了一个两层MLP训练量很小但对远期步数的MAE有明显改善。4.3 专家预测器选型LSTM、XGBoost、线性模型各司其职先说LSTM。它在处理序列依赖上有天然优势输入是历史风速窗口输出是未来24点向量。我把隐藏层维度设在64两个LSTM层后面接一个全连接输出层损失函数用Huber loss对离群风速不那么敏感。训练时用Adam优化器初始学习率1e-3步数100个epoch加早停。XGBoost在这里不是直接输出未来24点而是分别对每个预测步数训练一个模型也就是为第1步、第2步……第24步各训练一个XGBoost模型。这样每个模型只需要学习一个目标复杂度大大降低。训练时要构造对应步数的标签比如第k步模型的标签就是输入窗口之后第k个真实风速。这个做法实践下来很稳就是训练时间随步数线性增加。线性模型则提供最简单的基线输出我用岭回归训练同样的24个单步模型。它的预测精度当然不如前两者但胜在极稳定而且在线性趋势明显的时候能提供很好的“锚点”。融合时它的权重通常不大但能有效防止神经网络和树模型同时跑偏。4.4 融合权重的平滑技巧GMM输出的后验概率是逐时刻的直接用它给每个时刻的预测结果加权会导致融合权重波动剧烈。比如某个时刻“强风态概率0.51”下一秒变成“上升态概率0.52”预测结果就可能被不同专家模型来回切换输出曲线出现不自然的折断。解决方法是给后验概率做时间平滑。我用了一个简单有效的指数滑动平均p_smooth(t) α p_raw(t) (1 - α) p_smooth(t-1)α取0.5左右。平滑后的概率变化更平稳融合结果也更平滑。这个细节对最终预测曲线的质量影响很大值得你在实现时单独留意。5. 从数据到结果训练细节、代码实现与效果对比5.1 数据准备与训练集划分我用的是一套公开气象再分析数据中的站点时间序列时间分辨率为15分钟覆盖时间跨度为最近两年。字段包括风速、风向、温度、气压、相对湿度偶尔还有少量缺失值。预处理时先做线性插值补齐缺失点再用同一测风塔的湍流计算值生成湍流强度特征最后按滑窗生成样本。样本构造的核心是滑窗。我取过去24个点6小时作为输入窗口未来24个点6小时作为预测目标输入和输出之间错开一步。为了让数据利用率更高我采用步长为1的滚动窗口也就是每过一个时刻就生成一个新的样本。两年数据大约生成六万个样本放在一个中等配置的GPU服务器上训练LSTM大约需要四十分钟完全可以接受。划分数据集时千万注意不能随机切分。时间序列必须保序切分我用前80%做训练、中间10%做验证、后10%做测试。这里有个特别容易踩的坑GMM的拟合必须只使用训练集验证集和测试集只能用于预测否则验证集的信息会泄漏到训练里让估计出的指标虚高。我一开始为了省事用全量数据拟合GMM结果训练集RMSE比测试集低一截明显是数据泄漏导致的。5.2 关键代码GMM融合预测的完整流程为了方便你复现我把从GMM训练到加权融合的代码整理成一段完整伪代码。实际项目里还会拆成几个模块这里按流程展示。import numpy as np import pandas as pd from sklearn.mixture import GaussianMixture from sklearn.preprocessing import StandardScaler # 假设df是特征表target是未来24点风速目标 # 第一步标准化并训练GMM features [wind_speed, mean_speed_1h, gust_1h, speed_diff, acceleration, wind_dir_sin, wind_dir_cos, turbulence, temperature, pressure] scaler StandardScaler() X_scaled scaler.fit_transform(df[features]) gmm GaussianMixture(n_components4, covariance_typefull, random_state42) gmm.fit(X_scaled) posterior gmm.predict_proba(X_scaled) # 第二步专家模型预测以LSTM为例XGBoost/线性模型同理 # pred_expert[k] 是第k个专家模型对全部样本的预测形状为 (n_samples, 24) # 这里以三个专家为例k0 LSTMk1 XGBoostk2 线性模型 # 实际需要把样本划分为输入特征X_input和训练目标y_target进行训练 # 此处假设训练完成得到三个模型对象的预测输出 # 第三步用平滑后的后验概率做加权融合 alpha 0.5 p_smooth posterior.copy() for t in range(1, len(p_smooth)): p_smooth[t] alpha * posterior[t] (1 - alpha) * p_smooth[t-1] n_experts 3 final_pred np.zeros_like(pred_experts[0]) for k in range(n_experts): final_pred p_smooth[:, k].reshape(-1, 1) * pred_experts[k]有一点需要说明上面的代码隐含了一个前提即专家模型的数量与GMM的状态数相同。这是最直观的方案但并不是唯一选择。我也尝试过让三个专家模型各自看全量数据GMM只负责输出3个状态对应的权重但发现效果不如“每状态配一个专家”的结构来得干净。关键区别在于前者每个专家是全能的只是被状态权重动态调节后者每个专家专注特定风况预测结果更有区分度。后者在状态切换期可能会掉链子但配合平滑后的后验概率整体稳定性反而更好。实际项目中建议两种都试一下然后根据验证集表现决定。5.3 评估指标与实验结果对比评估多步风速预测我习惯同时看三个指标MAE平均绝对误差、RMSE均方根误差对大误差更敏感、以及分步MAE曲线。分步MAE是按预测步数拆开计算的能直观看出误差随着预测步数增长的态势。RMSE尤其重要因为风速预测在调度场景里个别大误差点可能比整体偏差更致命。我跑完对比实验后把结果整理成了下表。测试集是历史最后90天数据预测未来24点6小时。模型MAE (m/s)RMSE (m/s)第24步MAE (m/s)ARIMA基线0.931.211.34单一LSTM0.781.021.16单一XGBoost0.750.981.11混合模型GMM专家组合0.610.820.84可以明显看到两个结论第一混合模型在整个测试集上比最好的单一模型低了约18%的MAERMSE低了约16%第二更关键的是第24步的MAE从1.11降到了0.84说明多步预测的误差膨胀问题得到了明显改善。这就是我文章开头说“远期预测终于稳住”的量化证据。5.4 分步MAE曲线揭示了什么把24个步长的MAE单独画出来会发现一个很有意思的现象前4步混合模型与单一模型拉不开差距甚至偶尔略差从第8步开始混合模型的误差曲线明显平缓下来而单一模型的误差曲线还在持续上升。这说明混合模型的增益主要集中在远端预测上也就是它最值得用力的地方。究其原因是GMM状态识别在中远期开始发挥真正作用。近端预测主要依赖近期趋势外推所有模型都能抓住但到了远端趋势信息已不足以支撑精确预测这时谁能更准确地判断“当前处于什么风况、下一步可能往哪个状态切换”就变得至关重要。GMM对状态的追踪能力恰好为远端预测提供了宝贵的先验信息。6. 复盘与实用建议搭建混合模型时最容易踩的五个坑6.1 GMM在分位数空间中拟合而不是原始值空间我一开始直接用原始风速拟合GMM结果四个状态中有两个被强风时段的极端值拉偏聚类中心严重偏向高风速区间。后来把每个特征先做分位数变换QuantileTransformer输出均匀分布再喂给GMM状态划分就稳定多了。原因是分位数变换能把长尾分布压缩到有限的数值区间减少极端值对均值和协方差估计的影响。这个方法我在后续所有风速相关项目里都保留着。6.2 状态数K的动态调整机制固定K4在大部分时段效果不错但换季时风况特征会发生明显变化固定的状态数就不再合适。比如冬季大风天气多四个状态可能不够状态之间重叠严重夏季静稳天气多四个状态又会显得冗余。我的做法是在每天凌晨用过去14天数据重新训练一次GMM同时保存几个候选K3、4、5的BIC值只有当BIC明显改善下降超过2%时才切换K否则沿用当前K。这样既保证状态识别能跟上天气系统的季节变化又避免了频繁调整带来的不稳定性。6.3 数据泄漏这个坑防不胜防除了前面说过的GMM拟合泄漏还有一处泄漏值得注意标准化器的拟合。如果StandardScaler在全量数据上拟合测试集的信息也会被编码进特征的均值和方差里同样是一种泄漏。正确的做法是在训练集上fit scaler再transform验证集和测试集。这类细节很容易被忽略但影响是实实在在的测试集上的指标能相差5%到10%。6.4 专家模型之间的权重分配不能全靠GMMGMM的后验概率是融合权重的主要来源但不是唯一来源。我发现在强风时段LSTM的整体表现明显优于XGBoost而在平稳时段两者差距不大。因此我在融合公式里加了一个经验修正项当平滑后的GMM概率显示“强风态”超过0.6时把LSTM的额外权重系数从1.0调高到1.15其他时段不做修正。这个修正项来自对验证集残差的统计分析属于“数据驱动人工经验”的结合。过度依赖纯数据驱动会让融合权重对噪声敏感适度加入业务经验反而更稳。6.5 极端风速事件的特殊处理多步风速预测最怕的就是极端大风过程GMM在训练样本中这类事件占比很低导致模型对它们反应迟钝。我试过专为极端事件训练一个单独的预测器但样本太少效果不稳。后来换了个思路不新增预测器而是在预测结果外套一个基于风速变化率的报警规则当变化率超过阈值时对预测曲线做“向上/向下修正”。这个修正系数虽然粗糙但在实际使用中确实降低了极端事件漏报带来的损失。如果继续往前扩展我后面准备做两件事。一是把GMM换成带隐状态转移的动态模型比如隐马尔可夫模型让状态在时间轴上的转移规律也能被建模而不是像现在这样每个时刻独立估计概率。二是加入多站点联合建模把同一区域多个测风塔的数据同时喂给模型让状态识别更精准。目前这套思路在同区域其他风电场做迁移验证初步结果显示整体MAE还有约5%的下降空间。混合模型这条路值得继续往下走。