返回列表

Public 10th Place Solution (Private 11th)

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

开始: 2023-11-02 结束: 2024-04-30 新能源发电 数据算法赛
公开第十名方案(私有第十一名)

公开第十名方案(私有第十一名)

作者:Ahmet Erdem

比赛排名:公开第10名(私有第11名)

预计会有一些波动,但该方案在不报错的情况下大概可以进入第5到50名之间。以下是我的做法:

堆叠(Stacking)

训练了2个独立模型:

  • 仅使用天气预报特征模型,目标为 target/installed_capacity
  • 仅使用历史天气特征模型,目标同样为 target/installed_capacity

为最终模型生成每个容量的预估产量特征及其交互。

问题转化(Problem Translation)

  • 把数据分成4份,针对每对 (is_business, is_consumption) 训练模型
  • 创建基线预测为 max(target_lag2, target_lag4, target_lag7)
  • 新目标变为 (target + 1)/(baseline_pred + 1)
  • 对每个数据分区,训练了3个模型,使用不同的随机种子和不同的样本权重(相等、log1p(baseline_pred) 和 sqrt(baseline_pred))

特征(Features)

共76个特征。没有特别之处。

features = ["baseline_pred", "dow", "month", "hour", "capacity_change", "eic_change",
            "est_per_capacity", "est", "prod_rate", "cons_rate", "cons_rate2", "consumption_type",
            "county", "product_type", "no_holiday", "capacity_lag_2days", "eic_lag_2days"] + weather_forecast_cols
for day in [2, 4, 7]:
    features += [f"target_lag_rate{day}", f"target_sum_lag_rate{day}", f"target_lag_{day}days",
                 f"target_sum_lag_{day}days", f"target_lag_{day}days_norm", f"est_per_capacity_lag{day}_rate"]
for day in [2, 7]:
    features += [f"{col}_lag{day}" for col in weather_hist_cols]

后处理(Postprocessing)

对每个 prediction_unit_id,计算 lag 2、3、4 的误差并取其平均值。把 0.2 * avg_error 加到预测中作为校正项。这样可以提升持续低估或高估的情况。

重新训练(Re‑training)

每8天在 GPU 上重新训练 XGBoost 模型。这在出现新的 prediction_unit_id 或 eics 增加时尤为有用。

验证(Validation)

把最近9个月划分为3个验证折,另外把公开 LB 作为第4折。我的3折 CV 为 35.73,公开 LB 为 61.32。

集成(Ensemble)

虽然我的模型分数相对较差,但将我的模型与公开最佳 kernel 进行 80/20 集成后,分数提升到了 59.97。我认为这归功于模型的多样性,这个问题非常受益于多样化的集成。另外,我在 CV 分数上也有提升,尽管提升幅度明显低于公开 LB 的提升。

同比赛其他方案