返回列表

7th place solution - aka the first of the losers 😄

605. Enefit - Predict Energy Behavior of Prosumers | predict-energy-behavior-of-prosumers

开始: 2023-11-02 结束: 2024-04-30 新能源发电 数据算法赛
第七名方案——也称为‘失败者中的第一个’ 😄

第七名方案——也称为‘失败者中的第一个’ 😄

作者:Amedeo Biolatti

排名:第7名

发布日期:2024-05-02

感谢Enefit主办本次比赛!

目标

和许多人一样,我分别针对生产(production)和消费(consumption)建立了两个模型。

首先,我发现把生产除以已装机容量(installed_capacity)以及把消费除以EIC计数(eic_count)可以提升性能。

随后,我像很多人一样尝试预测48小时前的目标差值,并在自回归设置上进行了更深入的探索。

具体而言,我考虑了自回归模型的一般形式:

$$Y(t) = \epsilon + \alpha_1 Y(t-1) + \alpha_2 Y(t-2) + \alpha_3 Y(t-3) + \dots$$

最终模型则在这个第一层自回归模型的残差上进行训练,这是一种比简单的“预测差值”更通用的方法。

经过在5折滑动窗口交叉验证的广泛实验,我得到了下面的设置:

  • 对于生产:
    target_production = normalized_production - normalized_production_lag48h
  • 对于消费:
    target_consumption = normalized_consumption - 0.5 * normalized_consumption_lag48h - 0.1 * normalized_consumption_lag76h - 0.1 * normalized_consumption_lag92h - 0.1 * normalized_consumption_lag120h - 0.1 * normalized_consumption_lag144h - 0.05 * normalized_consumption_lag168h - 0.05 * normalized_consumption_lag336h

特征

使用的特征与许多公开 notebooks 相同:

  • 县(county)、产品类型(product_type)、是否商业(is_business)及它们的组合
  • 小时(hour)、日(day)、星期几(weekday)、月份(month)以及谐波特征
  • EIC计数(eic_count)和装机容量(installed_capacity)
  • 燃气价格和电力价格
  • 预报天气(forecast weather)以及7天滞后
  • 历史天气(historical weather)以及7天滞后
  • 假日(holidays)及前后天数
  • 已披露目标(production 与 consumption)以及滞后(2、3、4、5、6、7、14 天)+ 标准化、平均值、标准差变化

共计使用了192个特征。

没有起作用的尝试:

  • 历史天气与预报天气的差异
  • 更多的滞后
  • 其他特征的方差、协方差、斜度、峰度
  • 辐射特征的各种聚合
  • 基于天气数据的物理公式

模型

我使用Optuna在5折滑动窗口交叉验证框架(并预留了一个测试集)来优化LGBM、XGBoost、CatBoost以及sklearn的HistGradientBoostingRegressor参数。我还实现了一个自定义早停规则,用于淘汰在前几折交叉验证中表现不佳的情况。

流程结束时,我得到了一组候选模型,并研究了不同的集成策略。最好的是简单地取前三名模型的均值。

通过使用不同随机种子重复训练来复制模型也很有效。

最终集成如下:

  • LGBM:最佳参数 × 2 随机种子
  • LGBM:第二佳参数
  • XGBoost:最佳参数 × 2 随机种子

相同的参数被用于生产和消费模型,因为我的实验表明,一组好的参数通常对两者都适用(即Optuna无法进一步改进)。

训练

10个模型(5个生产模型 + 5个消费模型)在二月初仅训练一次。

后处理

我还尝试了一些后处理想法,但没有看到性能提升。

同比赛其他方案