本篇文章为比赛第一名方案解析,该比赛涉及到时间序列预测-教育
介绍:参赛者将使用历史数据、数学工具和技术工具来创建一个尽可能接近确定性的模型。
网址:www.kaggle.com/competition…
在这个比赛中,我使用了监督式自动编码器 MLP 方法,我的队友使用 XGBoost。我们的最终提交是这两种模型的简单融合。在这里,我想详细解释我的方法。
监督式自动编码器方法最初在瓶颈编码器 + MLP + Keras Tuner 8601c5 中提出,其中在交叉验证(CV)分割之前单独训练一个监督式自动编码器。我意识到这种训练可能会引起标签泄漏,因为自动编码器在每次 CV 分割中都会看到验证集的一部分数据,并可以生成标签泄漏特征以过度拟合。因此,我的方法是在每个 CV 分割中,将监督式自动编码器与 MLP 一起训练在一个模型中。训练过程和解释在笔记本和以下说明中给出。
交叉验证(CV)策略和特征工程:
- 5折31间隔清除分组时间序列分割
- 由于特征方差不同,因此删除前85天的数据进行训练
- 前向填充缺失值
- 将所有响应目标(resp、resp_1、resp_2、resp_3、resp_4)转移到动作进行多标签分类
- 使用所有响应目标的绝对值平均值作为训练样本权重,以便模型可以专注于捕获具有大绝对响应的样本
- 在推理过程中,将所有预测动作的平均值作为最终概率
深度学习模型:
- 使用自动编码器创建新的特征,将新特征与原始特征连接作为下游 MLP 模型的输入
- 在每个交叉验证分割中一起训练自动编码器和 MLP,以防止数据泄露
- 向自动编码器(监督学习)添加目标信息,以强制其生成更相关的特征,并为梯度反向传播创建捷径
- 在编码器之前添加高斯噪声层以进行数据增强并防止过拟合
- 使用 swish 激活函数代替 ReLU 以防止“死神经元”并平滑梯度
- 批量归一化和 Dropout 用于 MLP
- 使用3个不同的随机种子训练模型,并取平均值以减少预测方差
- 仅使用在最后两个 CV 分割中训练的模型(具有不同的种子),因为它们已经看到了更多的数据
- 仅监控 MLP 的 BCE 损失,而不是整体损失以进行早期停止
- 使用 Hyperopt 寻找最佳超参数集