任务介绍
任务输入
电炉对应17个温区的实际生产数据,分别是电炉上部17组加热棒设定温度T1-1T1-17,电炉下部17组加热棒设定温度T2-1T2-17,底部17组进气口的设定进气流量V1-V17
任务输出
电炉对应17个温区上部空间和下部空间17个测温点的测量温度值
任务解析
本次问题是回归预测,常规思路为使用机器学习,如LightGBM、XGBoost,或者使用深度学习进行实践,在模型的搭建上就比较复杂,需要自己构建模型结构,对于数值数据需要进行标准化处理;
最简单的方式可使用机器学习模型解决本次问题,该方法模型使用简单,数据不需要过多预处理;
主要步骤为数据预处理、切分训练集与验证集、训练模型、预测结果。
进阶技巧
-
**交叉特征:**主要提取流量、上部温度设定、下部温度设定之间的关系
-
**历史平移特征:**通过历史平移获取上个阶段的信息;
-
**差分特征:**可以帮助获取相邻阶段的增长差异,描述数据的涨减变化情况。在此基础上还可以构建相邻数据比值变化、二阶差分等;
-
**窗口统计特征:**窗口统计可以构建不同的窗口大小,然后基于窗口范围进统计均值、最大值、最小值、中位数、方差的信息,可以反映最近阶段数据的变化情况。
# 交叉特征 for i in range(1,18): train[f'流量{i}/上部温度设定{i}'] = train[f'流量{i}'] / train[f'上部温度设定{i}'] test[f'流量{i}/上部温度设定{i}'] = test[f'流量{i}'] / test[f'上部温度设定{i}'] train[f'流量{i}/下部温度设定{i}'] = train[f'流量{i}'] / train[f'下部温度设定{i}'] test[f'流量{i}/下部温度设定{i}'] = test[f'流量{i}'] / test[f'下部温度设定{i}'] train[f'上部温度设定{i}/下部温度设定{i}'] = train[f'上部温度设定{i}'] / train[f'下部温度设定{i}'] test[f'上部温度设定{i}/下部温度设定{i}'] = test[f'上部温度设定{i}'] / test[f'下部温度设定{i}'] # 历史平移 for i in range(1,18): train[f'last1_流量{i}'] = train[f'流量{i}'].shift(1) train[f'last1_上部温度设定{i}'] = train[f'上部温度设定{i}'].shift(1) train[f'last1_下部温度设定{i}'] = train[f'下部温度设定{i}'].shift(1) test[f'last1_流量{i}'] = test[f'流量{i}'].shift(1) test[f'last1_上部温度设定{i}'] = test[f'上部温度设定{i}'].shift(1) test[f'last1_下部温度设定{i}'] = test[f'下部温度设定{i}'].shift(1) # 差分特征 for i in range(1,18): train[f'last1_diff_流量{i}'] = train[f'流量{i}'].diff(1) train[f'last1_diff_上部温度设定{i}'] = train[f'上部温度设定{i}'].diff(1) train[f'last1_diff_下部温度设定{i}'] = train[f'下部温度设定{i}'].diff(1) test[f'last1_diff_流量{i}'] = test[f'流量{i}'].diff(1) test[f'last1_diff_上部温度设定{i}'] = test[f'上部温度设定{i}'].diff(1) test[f'last1_diff_下部温度设定{i}'] = test[f'下部温度设定{i}'].diff(1) # 窗口统计 for i in range(1,18): train[f'win3_mean_流量{i}'] = (train[f'流量{i}'].shift(1) + train[f'流量{i}'].shift(2) + train[f'流量{i}'].shift(3)) / 3 train[f'win3_mean_上部温度设定{i}'] = (train[f'上部温度设定{i}'].shift(1) + train[f'上部温度设定{i}'].shift(2) + train[f'上部温度设定{i}'].shift(3)) / 3 train[f'win3_mean_下部温度设定{i}'] = (train[f'下部温度设定{i}'].shift(1) + train[f'下部温度设定{i}'].shift(2) + train[f'下部温度设定{i}'].shift(3)) / 3 test[f'win3_mean_流量{i}'] = (test[f'流量{i}'].shift(1) + test[f'流量{i}'].shift(2) + test[f'流量{i}'].shift(3)) / 3 test[f'win3_mean_上部温度设定{i}'] = (test[f'上部温度设定{i}'].shift(1) + test[f'上部温度设定{i}'].shift(2) + test[f'上部温度设定{i}'].shift(3)) / 3 test[f'win3_mean_下部温度设定{i}'] = (test[f'下部温度设定{i}'].shift(1) + test[f'下部温度设定{i}'].shift(2) + test[f'下部温度设定{i}'].shift(3)) / 3