【时间序列比赛】温度预测挑战赛初赛复盘
简单复盘一下这个比赛。
1.赛题概要
1.1 赛事背景
随着计算机技术的发展,我国逐渐实现了从传统农业到现代农业的转变,正逐步迈向智慧农业。温室是现代农业技术应用的典型场景,其内部环境具有可操作性,能人为形成适宜植物生长的小型封闭生态系统,提升农产品的产量和质量,因此被广泛应用于农业生产中。在温室的各项环境因子中,作物对温度最为敏感。温度的高低影响植株细胞的酶活性,从而影响作物的生长速度、产量和质量,因此温度对作物生长发育影响极大。为了保证农产品的产量和质量,应保证作物正常生长,需对温室温度进行精确的调控。
1.2 赛事任务
温室温度调控需要对温室温度进行精准的预测,本次大赛提供了中国农业大学涿州实验站的温室温度数据作为样本,参赛选手需基于提供的样本构建模型,预测温室温度变化情况。
1.3 评审规则
本次比赛为参赛选手提供了温室内外的部分传感器数据,包括温室内的温度、湿度、气压以及温室外的温度、湿度、气压。
本次比赛分为初赛和复赛两个阶段,初赛阶段提供约 30 天的传感器数据,其中前 20 天的数据作为训练数据,后 10 天的数据用于做温度预测;复赛阶段提供约 15 天的传感器数据,其中前 10 天的数据作为训练数据,后 5 天的数据用于做温度预测。
特别说明,温室内的湿度和气压以及温室外的温度、湿度和气压会对温室内的温度产生一定的影响。
采用 MSE 作为评估标准。
数据:
2.赛题分析
主要是把时间序列问题通过构造历史特征转为回归问题,由于数据量不多,所以没有尝试使用深度学习模型。
3.比赛记录
3.1 记录
拿到鱼佬 baseline 并涂涂改改,分数为 0.11701;
特征工程:室内外湿度差,分数为 0.11346;
-
模型策略:将室内外温度取 log 作差作为 label,分数为 0.10254;
「分析」:室内外温度变化方向类似,包括所有的突变异常,所以想到可以直接去预测室内外温度的差,然后利用室外温度来得到室内温度,取 log 是因为温度差的分布为偏态分布,而取完 log 后则为正态分布。
特征工程:对室内外气压差取 log,分数为 0.10224;
-
模型策略:修改 xgboost 的损失函数 mae -> rmse,分数为 0.1007;
「分析」:原先损失函数设置为 mae,主要目的是减少异常值的干扰,而现在的目标为温度差,几乎不存在异常,且线上评价指标为 mse,所以我们将损失函数改为 rmse,保持与线上评估标准保持一致。
特征工程:修改划窗统计特征的 Bug,分数为 0.10022;
模型策略:修改 xgboost 的 tree_method 为 gpu_hist,分数为 0.09907;
-
数据清洗:修正气压异常值并使用插值填补缺失值,分数为 0.09823;
「分析」:尝试的异常值的处理的效果,插值<向后填充<指数平滑;
特征工程:构造更长周期的开窗统计特征,分数为 0.0956;
数据清洗:气压缺失值采用向后填充,分数为 0.09366;
特征工程:(无记录),分数为 0.0935;
-
模型策略:将迭代次数降低到 20k,降低过拟和,分数为 0.09285;
「分析」:线下测试时,使用线下构造的验证集作为早停的标准,但根据线上结果反馈得知过拟合。
数据清洗:修改异常值处理的 Bug,分数为 0.09088;
发现了严重的 bug,决定修复,分数为 0.09471;
数据清洗:取消室内气压异常的处理,并将迭代次数控制为 26 k,分数为 0.09378;
数据清洗:室外气压异常修改为指数平均,分数为 0.09213;
特征工程:添加湿度和温度的分类特征,迭代次数 40k,分数为 0.0916;
-
模型策略:学习 label 误差并调参,分数为 0.08379;
「分析」:由于原本模型学习的室内外温度取 log 后的差,所以可以在模型还原后,可以继续学习残差。
特征工程:对 hour 和 day 构造分桶后,并在桶内构造统计特征,分数为 0.08357;
-
特征工程:修改统计值的 min 和 max 为 0.05 和 0.95 分位数,分数为 0.08207;
「分析」:由于没有对温度进行异常值修复,直接用 max 和 min 对异常值敏感,会把异常值计算进去,所以采用了 0.05 和 0.95 分位数,增强模型泛化能力。
特征工程:去掉 range 特征,分数为 0.08205;
数据清洗:填补训练集部分缺失值,分数为 0.08125;
-
特征工程:为 test 拼接一部分 train 数据,填补完整统计特征,分数为 0.08062;
「分析」:之前的开窗统计特征的是训练集和测试集分开构造的,将其拼接后再进行特征构造,相当于对 test 进行缺失值填补;
特征工程:对 test 拼接数据进行采样并统计中位数,分数为 0.08022;
-
数据清洗;对 test 的断层进行填充,分数为 0.0772;
「分析」:手术刀操作,对 test 中 50 多处断层数据进行缺失值填补,需要非常大的耐心,但收益也非常大。
3.2 汇总
数据清洗 0.01115;
特征工程 0.01042;
模型策略 0.02207;
4.比赛结果
初赛 A 榜第一,B 榜第五;