数据基础
风机功率预测任务,给定245天历史数据,预测未来2天288步的功率。134个风机空间分布如下
功率具有按天周期性
有效功率的分布,右边高点是风机受额定功率限制
风机功率与风速的关系,存在一些异常
134个风机数据的相关性
方案
特征
NN
风速、温度、天气等
turbine ID embedding
通过图模型concat了邻近node的特征作为自己特征
LGB
计算每个风机的风速序列相似性(皮尔逊系数),k-means对风机聚类
lag特征
模型
GRU Seq2Seq, LightGBM
基于空间与基于语义的多关系图。1构建基于欧几里得距离的邻接图。但距离邻接图的不足是存在距离近但差距大的点,例如一个位于山的这边,一个位于山顶那边,风向相反但距离很近。因此2构建了基于风速差分相似性的语意邻接图。
集成
不同模型在多步预测的不同时期,有不同的性能,树模型在短期预测效果更好,NN中长期更好。提出了一套复杂的集成方法。
前三十步,先计算最后5个历史的平均值,如果该平均值小于350或大于700,预测采用树模型,否则前三十步用树模型与NN的平均
三十步之后采用的是NN模型的预测加常数15
点评
个人猜测集成才是高分关键。报告的话,AutoFormer和GraphWavenet被黑的最惨一次。
样本
前225天用作训练数据,同时选出功率最高的5个风机作为样本,然后5个预测的平均值作为所有134个风机的预测
前处理
异常检测,主要是官方评价指标里对异常的判断。填充方法采用空间填充,风机分为10个group。每个group的异常采用group均值填充。
同时,对各个参数都设置了最大和最小的范围,超过范围用自定义最大值替换
特征
时间特征,小时和分钟采用sin/cos的方式编码
lag特征
diff特征
roll特征
模型
GRU,LightGBM
Local ensemble: 线性回归,多项式回归,和GRU
修正,对每一步骤的预测进行多步修正。比如第100步的预测,计算前52步预测均值,42-104步的均值,计算二者的差值乘系数0.4。然后预测到的100到104步减去上面得到的数。
集成
集成方法lgb1和gru1先计算均值,线性模型和多项式模型,与gru2模型再计算均值,最后上述两层进行集成
点评
我英语太差,其实没懂很多细节。总体来说有两个lgb,两个gru,一个lr,一个多项式,然后集成。个人感觉,选最高的5个风机作为代表,以及修正感觉是比较重要
不广为人知的pytorch单人队伍,最后一天从遥远位置冲到第3,后弃赛。事了拂衣去,深藏功与名,什么是战略纵深啊,什么是大家风范啊,赢得比赛只是小赢,赢得人心才是大赢。在我心里,这支队伍堪称本届最强!
样本
1-181天训练,231-245验证
前处理
NA采用前值填充,标准化采用min-max
特征
采用风速与风向两个特征
模型
单层BERT模型
后处理
模型预测没有把握住按天周期性,通过后处理把一天的波动周期添加到预测值
前处理
根据风速与功率的关系进行异常检测
聚类到39类用于树模型
特征
相关性进行特征选择
模型
WPFormer,结合1DCNN、GNN、AutoFormer的模型,损失函数:MSE与L1的和
数据降尺度后训练的树模型
针对每个风机训练一个14天和未来2天的关系,得到未来预测基准
集成
混合集成,模型输出小于某个参数的用均值,大于的用中位数
加权集成,采用Ridge计算权重
点评
WPFormer模型兼具比赛的性能与论文的新意
前处理
聚类,分group
NAN,聚类结果进行填充
异常
特征
raw
diff/roll
空间/时间embedding
模型
H-STWPF,其实是包含两个MLP和一个deep factor。
多尺度模型,12步,24步,288步的模型
点评
不知为何也没有代码,看起来硬性要求也是灵活要求。据说结合了菜鸟内部的时空预测框架
didadida_hualahuala
前处理
NAN、异常采用前后插值填充
特征
去掉风向和主机角度两个特征,以及两个温度特征,三个角度特征选取最大值作为一个特征,所以最终特征为 , , _ , ,
按空间列聚类分组
模型
DLinear, 传说中那篇文章提出的方法,作者做了一些改进并取得了不错结果。排行榜上还有一位选手用了DLinear
XTGN,看上去和GraphWavenet比较像,KNN建图
集成
两个模型每个step的均值
点评
这个方案很不错,简洁有效
前处理
聚类,NA和invalid采用插值填充或聚类均值填充
特征
rolling feature其窗口大小为6-144
模型
树模型
GRU
后处理
作者认为验证集和训练集间隔较远,导致分布偏移。因为可以对每个值乘以一个常数。如果所有的真实值比预测值大,那么乘一个大于1的数;反之乘一个小于1的数
点评
做的很细致,同时论文写作水平很高 (大概有三四层楼那么高),读起来非常流畅。
datazhi
模型
带attention的seq2seq(GRU与TCN)
训练了多尺度模型,例如48步的小时模型
集成
多尺度的多模型集成
特征
TurbID/时间
风速、功率、温度
时序特征,diff/lag/rolling
模型
短期和长期分开建模
树模型LGB
后处理
短期放大1.08,长期放大1.18
集成
除了不同模型外,考虑了空间邻居作为集成
前处理
填补NA
特征
风速、温度、功率
lag特征
模型
树模型LGB
144步的GRU,采用的是encoder加单步decoder
288步的GRU
集成
不同step模型采用不同权重
总体来讲,模型用的较多的还是LGB与GRU,一些图模型与xFormer模型表现也不错,专用来打时序transformer脸的DLinear也不错。特征除了raw和时间外,常见的还是lag,roll,diff等。模型都不错的原因是功夫在诗外,验证了那句老话模型都好等于模型都不好。具体来讲,是排行榜的差距更多是在模型外,例如多次出现的聚类,例如集成的处理上,尤其是多步预测不同步细致的处理,一些对短期和长期、或不同尺度分开建模的思路也同理,都是对不同步的优化。方案也许看起来平平无奇,但自己真动手做的时候却毫无进展,还是要理论多结合实践。最大的收获是,多步预测时,集成可以做的更细一些。
可能有我看的不仔细的地方,错误难免。为了节目效果,有些加了点评,而且我也跑过一些实验还算有资格。这也是为了增加自己的答辩能力,多从评委的角度看待全部方案,我觉得有答辩的话,zhangshijin和didadida两队更容易升名次。
[1]https://github.com/TimberJ99/wpf22
[2]https://github.com/David1X/Data_Competitions
[3]https://github.com/shaido987/KDD_wind_power_forecast
[4]https://github.com/BUAABIGSCity/KDDCUP2022
[5]https://github.com/injadlu/KDDCUP2022
[6]https://github.com/LongxingTan/KDDCup2022-Baidu
[7]https://aistudio.baidu.com/aistudio/competition/detail/152/0/introduction