基于机器学习的卷烟烘丝干头出口水分预测
2021-03-03卢忠岩张伟金军辉
卢忠岩,张伟,金军辉
(上海威士顿信息技术股份有限公司,上海 200092)
卷烟厂制丝车间的烘丝工序需要使用烘丝筒将烟丝的水分烘干到设定的水分。烘丝筒具有PID自动控制系统,可以自动调节烘丝参数使出口水分稳定到设定值,此系统在连续稳定烘丝时效果良好。但每个班次刚刚开始进行烘丝时(即干头阶段),由于入料烟丝水分不稳定、设备受外界环境影响大、烘丝筒内环境变化剧烈,此时若使用烘丝筒的自动控制回路控制烘丝,则需要较长时间才能使出口烟丝水分稳定到目标值,从而影响产品质量和生产效率。目前卷烟厂的烘丝干头阶段先由工人手动控制烘丝筒的筒壁温度等烘丝参数,待出口水分稳定到设定值后再交由烘丝筒自动控制系统进行控制。
由于目前的模式依赖于人工经验,缺少可量化的操作指南,新挡车工学习干头操作的难度较高,干头部分的生产无法标准化、自动化,不利于制丝的质量控制。卷烟厂希望通过机器学习的方法建立预测烘丝参数和烘丝筒出口水分的模型,为操作工调节烘丝参数提供参考,并为实现烘丝干头阶段的自动化控制打下基础。烘丝筒是一个大型的滚筒式烘干机,烘丝时烟丝需要大约5分钟的时间才能通过烘丝筒,这段时间内的烘丝参数都会影响烟丝到达出口时的水分。烘丝筒具有较大的热惯性和湿度惯性,烘丝参数还会通过改变烘丝筒的环境影响之后才进入烘丝筒的烟丝的出口水分。所以对烟丝出口水分进行建模时,不止要考虑当时的烘丝参数,而是要考虑过去一段时间内烘丝参数的所有变化。
1 烘丝干头历史数据收集和清洗
卷烟厂制丝车间有大约35000个数采点,根据数采点的含义人工初步筛选出了可能影响制丝一号线A路烘丝筒出口水分的350个数采点。但卷烟厂的时序数据库中只保留了其中76个数采点历史数据。
这76个烘丝参数中不止包括烘丝机上的数采数据,还包括烘丝前流量称、增温增湿筒上的部分数采数据,烟丝通过这部分数采设备后还需要经过一段的固定时间后才能进入烘丝筒,为了提高训练数据效率,数据处理时将这部分数据按照数采点处的烟丝进入烘丝筒时的时间进行行对齐。
从时序数据库查询出每个烘丝干头烘丝开始前10分钟到烘丝开始后30分钟、以6秒钟为间隔的数据。删除断料、设备故障等异常干头的数据后,最终得到了1729个有效的干头数据。
去除记录设备运行状态的数采数据, 然后计算烘丝参数彼此之间的相关系数,对于相关系数绝对值大于0.95的两个烘丝参数舍弃其中一个(部分控制参数的设置值和实际值)。最终得到包含31个维度的数据。
2 GBDT算法
卷烟厂时序数据库记录的是操作工进行人工调节的情况下烘丝过程的数据,使用这些数据进行建模训练得到的就是预测存在人工调节筒壁温度的情况下未来烘丝筒出口水分的模型。
如图1所示,按照时间烘丝干头可以大致分为3个阶段:“烘丝筒从完全空闲到被烟丝完全充满”“烟丝充满烘丝筒但烘丝筒内环境还未稳定”“烘丝筒内环境基本稳定”3个阶段。
图1 2017年1月1日~2020年7月31日的所有干头出口水分变化
前两个阶段随着时间的变化烘丝参数和出口水分的关系的变化很大,如果使用一个模型为完整的烘丝干头建模,需要的模型比较复杂而且训练时间将非常长。如果将干头按时间切分,对每部分分别建模,则可以大大降低模型的复杂度和训练时间。本文将整个烘丝干头分为“3~6分钟”、“6~7分钟”、“7~8分钟”、“8~12分钟”、“12~15分钟”5个时间区间,并尝试使用不同的算法、输入数据建立预测出口水分的模型。
3 模型输入数据不包括过去的出口水分
烘丝筒当前时刻的出口水分不但受当前时刻的烘丝参数的影响,还受过去一段时间的烘丝参数的影响,但根据用户经验这段时间不会超过10分钟。
(1)将清洗后的数据除出口水分之外的每个维度的过去10分钟每隔6秒钟的数据都作为一个维度构造出一份新的数据。
(2)使用pca对上面的数据进行降维,将3000维的数据降维到600维,得到模型的输入数据。
(3)分别以未来5分钟内每隔6秒的出口水分作为模型的输出数据。
(4)使用sklearn.ensemble.GradientBoostingRegressor类库实现模型。
(5)以卷烟厂2017年1月-2020年7月的数据,以干头为粒度拆分为5份,进行KFold交叉验证。
(6)在54个核心主频2GHz的服务器上训练所有时间段模型平均需要2小时50分钟。
(7) 经 试 验 使 用n_estimators=50,max_depth=4,learning_rate=0.1的参数可以得到较好的预测准确率。
(8)使用模型预测2020年8月的的烘丝起始阶段的出口水分,各时间区间的平均均方误差分别为0.048597164、0.028678239、0.017766282、0.009237、0.0037468。
4 模型输入数据包括过去的出口水分
理论上如果数据充分那么使用其他参数作为输入建模预测出口水分应该可以比较准确的预测出口水分,但实际上使用出口水分之外30个维度的数据作为输入出口水分的预测效果较差,这可能是现有数据中缺失厂房的温湿度、烘丝筒各易损零件的状态等数据。但这部分因素带来的影响应该已经反映在了过去的出口水分之中。通过加入出口水分的过去值作为模型输入数据,引入出口水分的自相关性,也许可以改善出口水分的预测结果的准确性。
本文接下来将口水分过去10分钟每隔6秒钟的数据也作为一个维度加入到模型的训练数据中,保持其他的做法不变,使用得到模型预测2020年8月的的烘丝起始阶段的出口水分,各时间区间的平均均方误差分别为0.038856522、0.014021483、0.009612475、0.003166596、0.001343053。和没有将出口水分作为模型输入相比,各个阶段的误差分别减少20%、51%、46%、66%、64%,预测准确率明显提升。但3-6分钟阶段提升相对较少,这可能是由于这个阶段烘丝筒出丝不稳定,出口水分仪读数受随机因素影响大,无法完全反应设备的状态。
5 lasso回归算法
干头的“烘丝筒从完全空闲到被烟丝完全充满”阶段和“烟丝充满烘丝筒但烘丝筒内环境还未稳定”阶段,烘丝参数和出口水分的关系随着时间的变化而变化,线性模型并不适合。但在“烘丝筒内环境基本稳定”的阶段(既“8-15分钟”的时间段),烘丝参数和出口水分的关系基本固定,而且烘丝参数变化幅度很小,线性模型应该也能比较好的预测未来的出口水分。
(1)将清洗后数据每个维度的过去10分钟每隔6秒的数据均作为一个维度构造出一份新的数据。
(2)分别以未来5分钟内每隔6秒的出口水分作为模型的输出数据。
(3)为得到烘丝工艺参数对各时间点的出口水分影响系数,不对输入数据进行降维。为防止过拟合,使用lasso回归而非线性回归。
(4)使用sklearn.linear_model.Lass类库实现模型。
(5)以起始阶段为粒度,将2017年1月~2020年7月的数据拆分为5份,作KFold交叉验证。
(6)经试验使用alpha=0.0001的参数进行训练可以得到较好的效果。
(7)使用模型预测2020年8月的烘丝起始阶段的出口水分,各时间区间的平均均方误差分别为0.001910523、0.0009311。
在“烘丝筒内环境基本稳定”的阶段,lasso回归可以得到甚至比gbdt稍好的预测准确度。根据训练好的线性模型可以计算出烘丝参数对未来各个时刻的出口水分的影响系数。调节筒壁温度是操作工最常调节的烘丝参数,计算出烘丝参数对出口水分的影响系数,可为操作工调节烘丝参数提供参考。但以下因素可能导致模型的筒壁温度对未来出口水分的影响系数不准确:
(1)由于每个干头用户调节筒壁温度的次数只有一到两次,模型对筒壁温度对未来出口水分的影响的学习可能并不充分。
(2)预测t+n时刻的筒壁温度的模型没有使用t+1~t+n-1时刻的筒壁温度作为输入数据,但t+n时刻的筒壁温度显然会受它们的影响,由于干头阶段的筒壁温度变化次数很少,所以t+1~t+n-1时刻的筒壁温度很大概率上和t时刻的筒壁温度相同,所以模型会把t+1~t+n-1时刻筒壁温度的影响系数叠加到t时刻的影响系数上导致其系数明显偏小,而且n越大偏小的程度越大。
(3)烘丝筒筒壁温度和之后的烟丝出口水分实际上是负相关关系,在干头阶段一个操作工根据自己的经验预测到一分钟后出口水分会偏高时,他会将筒壁温度调高以降低未来的出口水分,那么从数据上看此时的筒壁温度和一分钟后的出料水分会具有正相关关系(筒壁温度偏高出料水分也偏高)。如果此操作工一直进行这样的操作,那么直接使用历史数据训练模型将无法得到筒壁温度和未来出口水分的正确关系。
为了消除因素2的影响,本文舍弃了每个模型中最后一个时间点上的筒壁温度的未来出口水分的影响系数。为了减少因素1、3的影响,本文通过不同模型中筒壁温度对相同时间间隔后的出口水分的影响系数的平均值来减少误差。最终得到如下图所示的筒壁温度对未来各个时刻的出口水分影响系数(如图2)。
图2 筒壁温度对未来各个时刻的出口水分影响系数
筒壁温度的影响系数先逐渐变大而后逐渐变小,对8分钟后基本减少为0,且筒壁温度调高1℃并持续保持不变最终出口水分将会下降0.2%,这和用户的经验基本符合。但由于上面所述的因素1和因素3的影响无法完全消除,上述结论需要在以后的实际生产中做进一步的修正。
6 lstm算法
建立如下的长短期记忆神经网络:
(1)输入的形状为batch_size *time_step* embedding_size。为提高训练速度,本文在GPU显存允许的情况尽量增大训练批次数量,取batch_size=1000。对于预测m至n分钟时间段起始出口水分的模型,需要将m分钟之前10分钟的数据也输入模型,而处理后的数据中每行数据的时间间隔为6秒,所以网络的time_step=(n-m+10)×10。模型使用包括出口水分在内的所有工艺参数作为输入,所以模型输入层的embedding_size=31。
(2)模型需预测未来5分钟内每隔6秒的出口水分,所以其输出形状为batch_size*time_step*50。
(3)模型隐藏层包括:节点数为[128,128]的2个加入了dropout的LSTM层、1个形状为128×50的全连接层、一个形状为time_step*50的截距层。
(4)为了和GBDT算法做对比,预测m~n分钟时间段起始出口水分的模型以m~n分钟时间段预测值和实际值的均方误差为损失函数。
(5)使用tensorflow实现模型,并进行训练。
(6)经试验使用RMSPropOptimizer优化器,取learning_rate=0.001,经40000轮训练可以得到较理想的训练结果。
(7)在p100显卡上训练所有时间段模型平均大约需要196小时。
(8)使用模型预测2020年8月的的烘丝起始阶段的出口水分,各时间区间的平均均方误差分别为0.04288、0.012926、0.009202、0.002683、0.001145。
GBDT和lasso回归的预测精度已经可以满足现阶段卷烟厂的需求,而LSTM的精度虽然更高但训练所需的时间太长而且对训练参数敏感,当烘丝筒设备状态或生产环境发生改变需要重新训练模型时,使用GBDT和lasso算法可以更快速的进行应对。
7 结语
本文使用机器学习的方法,建立了可以准确的预测烘丝干头出口水分的模型,并计算出了烘丝参数对出口水分的影响系数,可为操作工调节烘丝参数提供参考,提高烘丝的质量和生产效率,并为实现烘丝干头阶段的自动化控制打下基础。