比赛简介
比赛链接
任务
:要求参赛者训练模型,预测产品的5项检测参数,包括磷含量%、 氮含量%、总养分%、含水量%和粒度%。
数据:
1.生产参数记录表(feature):即36个测点的传感器数据,时长2个月。每个测点数据为一个文件,文件名为测点名称,格式为CSV文件格式。每个文件内有3列,第1列是记录的id,第2列是传感器采集数据的时间,第3列是此测点采集到的生产参数数值.(2个月的数据都有)
2.产品检测结果(label):即每一批次产品的内含成分的检测结果,有以下字段(仅提供第一个月的数据,用于训练.
3 主办方提供了两份数据集,一份数据集由于采用了旋转门压缩算法,因此数据库中不同传感器的数据的采样时间是不同的,即便是对于同一传感器,每相邻两条数据的时间间隔也是不同的,如下图测点“返料重量”经过压缩算法导出来的数值的时间间隔从3秒到1小时不等。
而另一份数据集主办方为了最大限度保留训练数据中的信息,提供了传感器固定时间间隔的生产参数记录表,但此数据集中噪声太多。
EDA
-
一些具有代表性的传感器测量值的走势图
-
不同批次的所有测量特征走势图
-
局部关联工序的特征走势图
-
笔者发现对于任意两个待预测标签,都存在较强的线性关系,如下图(为了更直观比较,对标签值进行了缩放)
特征工程
本次比赛个人精力主要放在了学习lstm模型,因此没有手动构造太多特征。
- 每一个batch在每一个测量点的基本统计特征
- 计算每一个batch在每一个测量点的相邻时间点的间隔,对间隔做一系列统计特征,对于非固定时间间隔数据集,增加对相邻记录点时间差的统计特征。
- 对于固定时间间隔,计算每一个测量点的中位数,然后统计每个batch所有测量记录中大于中位数的记录个数。
- 计算每个batch的关联工序的spearman相关性作为特征。
特征选择
- 相关性选择
- 模型重要性选择
- 基于单变量统计测试
- 序列选择
模型使用
Lightgbm, LSTM
这里重点总结下LSTM模型, LSTM并没有使用上述手工特征。对于非固定时间间隔数据集和固定时间间隔数据集,本人都尝试使用了LSTM模型,只是处理方式有所不同。
使用LSTM模型遇到的第一个问题就是:时间步太长,至少每2880个测量记录才生成一个统计值,而通常lstm的时间步为50-200,如果时间步太长,不仅会导致梯度传导非常困难,产生梯度爆炸,而且也没有充分利用标签信息。为了解决上述问题,本人固定时间窗口为256,滑动步长为128(可以减少步长来增加样本量,由于官方服务器效果太烂,这里我就增大了步长),以此方式来构造训练和测试集,另外一个注意的地方是线下验证集的构造,主办方提供的训练数据集时间跨度为整个四月(通过观察标签值的走势,可以发现四月上旬的整体值明显大于四月下旬),而测试数据集只有五月上旬,因此线下验证集本人保证了构造样本也都来自四月上旬。这样构造下来训练样本大概8000左右,验证3000,测试3000。由于训练标签的unique个数为80左右,因此模型最后一层采用softmax,输出取每个值的概率。对于非固定时间间隔数据集,由于每个传感器测量数量不同,因此我首先根据相邻时间将所有测量表进行join, nan值用中位数填充。最终对于非固定时间间隔的数据集LSTM表现更好,个人是觉得这是因为经过压缩后非固定时间时间间隔数据集噪声更小,数据质量更高,采用余弦退火快照集成后LSTM单模型在A榜为0.299.