605. Enefit - Predict Energy Behavior of Prosumers | predict-energy-behavior-of-prosumers
感谢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 相同:
共计使用了192个特征。
没有起作用的尝试:
我使用Optuna在5折滑动窗口交叉验证框架(并预留了一个测试集)来优化LGBM、XGBoost、CatBoost以及sklearn的HistGradientBoostingRegressor参数。我还实现了一个自定义早停规则,用于淘汰在前几折交叉验证中表现不佳的情况。
流程结束时,我得到了一组候选模型,并研究了不同的集成策略。最好的是简单地取前三名模型的均值。
通过使用不同随机种子重复训练来复制模型也很有效。
最终集成如下:
相同的参数被用于生产和消费模型,因为我的实验表明,一组好的参数通常对两者都适用(即Optuna无法进一步改进)。
10个模型(5个生产模型 + 5个消费模型)在二月初仅训练一次。
我还尝试了一些后处理想法,但没有看到性能提升。