返回列表

9th place solution

354. ASHRAE - Great Energy Predictor III | ashrae-energy-prediction

开始: 2019-10-15 结束: 2019-12-19 双碳与可持续发展 数据算法赛
第9名解决方案

第9名解决方案

作者:MPWARE (Grandmaster) | 比赛排名:第9名 (金牌)

终于迎来了一场精彩的比赛!由于数据噪声很大,这并不容易,但我又学到了新的经验。以下是我获得第9名和金牌的解决方案的一些见解。

我的目标之一是在榜单震动中生存下来。一旦发现数据泄露,我决定主要将其用于留出验证。我开始时不使用任何泄露数据进行训练,而是尝试特征工程、不同的模型、不同的时间交叉验证折数,并且仅通过CV + 留出集 + LB(公开榜)结果的相关性来指导我的工作。采用这种策略导致排名很低,这有点令人沮丧,但我知道这最终会有所帮助。在最后两周,我将2017年的泄露数据纳入训练,并保留2018年的泄露数据用于留出验证。

我的解决方案是多个模型的集成(岭回归)

  • LightGBM (x7)
  • CatBoost (x4)
  • 神经网络,包含类别嵌入和特征标准化 (x4)
  • LiteMORT (x1)

特征非常简单,没有模型超过15个特征,平均为12个:

  • building_id, meter, site_id, primary_use, week_day, is_holiday
  • square_feet, cloud coverage, precip_depth_1_h
  • 体感温度,建筑年代,square_feet * floor_count
  • air_temperature 24小时滚动平均值,sea_level_pressure 24小时滚动平均趋势
  • 每日air_temperature 冷度日,每年每建筑每仪表的meter_reading中位数

请注意,我的一些模型没有使用 building_id,以尝试更好地泛化。
有几个模型是按仪表分别训练的,其他的则不是。
对于每个模型的CV,我应用了不同的时间分割,分别为x3、x4和x6。

清洗和填补也很重要。对于天气数据,我试图寻找不同的外部来源来填补空白,但这并没有带来任何提升,主要是因为我们不能100%确定 site_id 的位置,而且一些数据(如云量)与训练数据中的不一致。最后,我训练了一个额外的简单LightGBM模型,基于提供的数据来填补缺失数据(类似于这个内核)。对于仪表读数,清洗并不明显,删除零值模式(夏季的电力、热水......)看起来是个好主意,但人们可以注意到这种模式在2017/2018年的泄露数据中也出现了。有些建筑也可能有一些装修时段,这可以解释零值模式。因此,我的每个模型都有不同的零值模式删除策略(仅删除2016年5月之前 site_id = 0 的数据,全部删除,基于持续时间和/或季节的部分删除)。

后处理:无。当我看到顶级解决方案时,我发现这是一个错误。

对于最终提交,我选择了CV/留出集/LB相关性最好的模型,这是一个不错的选择,因为它们在私有LB中得分最高!

哪些方法无效:

  • 过多的特征导致过拟合,特别是使用目标编码时。
  • 基于树的第二层模型用于集成(再次过拟合)。
  • 天气的外部数据(与提供的数据不一致)。
  • 非时间分割的CV(自相关性问题)。

感谢组织者、Kaggle和竞争对手带来的这次挑战!

同比赛其他方案