基于时间序列特征工程和随机森林算法的入釜矿浆成分预测模型

📅 2026/7/7 2:08:35 👁️ 阅读次数 📝 编程学习
基于时间序列特征工程和随机森林算法的入釜矿浆成分预测模型

一、整体技术路线

原始数据采集 → 数据预处理 → 时间序列特征工程 → 模型训练 → 模型评估 → 预测输出

预测输出: 提供三个维度的数据:

  • 入釜矿浆成分实际值(实时在线检测)

  • 入釜矿浆成分预测值(基于模型计算)

  • 入釜矿浆成分检化验值(实验室分析结果)

二、数据预处理

1. 数据来源与结构

数据类型

来源

频率

说明

实际值

在线仪表实时监测

连续/分钟级

当前时刻真实值

检化验值(LIMS)

实验室取样分析

每4小时一次

滞后但有较高精度

历史趋势

数据库存储

全部历史

用于训练

2. 数据清洗规则

对每个成分列(Ni、Co、Mn、Mg、Fe、固含、粒度)执行:

IF 缺失值 THEN 向前填充(用上一个有效值替代)
IF 异常值(超出3σ范围)THEN 替换为中位数
IF 重复时间戳 THEN 保留最后一条记录

3. 时间对齐处理

由于LIMS检化验数据采样间隔较大(4小时),需要进行时间对齐:

对于每一行数据 t:
如果 t 时刻没有LIMS值:
取 t-Δt 时刻最近的LIMS值作为当前LIMS值(前向填充)

三、时间序列特征工程

这是模型精度的核心环节,共构造三类特征:

1. 滞后特征(Lag Features)

提取过去多个时间点的LIMS检化验值作为当前时刻的特征:

对于每个成分 C(Ni、Co、Mn、Mg、Fe、固含、粒度):
对于滞后阶数 k = 1, 2, 3, 4, 5: 创建特征:C_lims_lag_k = shift(C_lims, k)

则: Ni_lims_lag_1表示1小时前的Ni检化验值,

Ni_lims_lag_2表示4小时前的Ni检化验值,

Ni_lims_lag_3表示8小时前的Ni检化验值,

Ni_lims_lag_4表示N小时前的Ni检化验值,依次类推;

2. 移动平均特征(Moving Average Features)

计算过去一段时间窗口内的均值,平滑噪声:

对于每个成分 C:
对于窗口大小 w = 3, 6, 12(小时):
创建特征:C_lims_ma_w = rolling_mean(C_lims, window=w)

Ni_lims_ma_6表示过去6小时的Ni检化验值移动平均

3. 时间周期特征(Time Cyclical Features)

捕捉生产过程的周期性规律:

hour_feature = sin(2π × hour / 24) # 日周期
week_feature = sin(2π × day_of_week / 7) # 周周期

四、随机森林模型构建

1. 模型结构

输入层(63个特征)→ 随机森林(100棵决策树,最大深度10)→ 输出层(7个成分预测值)

为每个成分分别建立一个独立的随机森林回归模型,共7个模型。

2. 训练数据集划分

总样本:989条(经过特征工程后去除缺失值)
训练集:791条(80%)——用于模型学习
测试集:198条(20%)——用于模型评估

3. 模型超参数配置

参数

说明

n_estimators

100

决策树数量

max_depth

10

限制树深度防过拟合

min_samples_split

5

内部节点最小样本数

min_samples_leaf

2

叶子节点最小样本数

random_state

42

保证结果可复现

4. 训练过程(伪代码)

For each component C in [Ni, Co, Mn, Mg, Fe, 固含, 粒度]:
1. 准备特征矩阵 X(63维)和目标向量 y(C_actual)
2. 将 X 和 y 按 8:2 划分为训练集和测试集
3. 初始化 RandomForestRegressor(超参数如上)
4. 调用 model.fit(X_train, y_train) 训练模型
5. 调用 model.predict(X_test) 得到预测值
6. 计算 MSE 和 R² 评估模型性能

五、模型评估指标

1. 均方误差(Mean Squared Error, MSE)

MSE = (1/n) × Σ(y_i - ŷ_i)²

其中:
y_i = 第i个样本的实际值
ŷ_i = 第i个样本的预测值
n = 测试集样本数

MSE越小,模型预测越精确。

2. 决定系数(R² Score)

R² = 1 - SS_res / SS_tot

SS_res = Σ(y_i - ŷ_i)² (残差平方和)
SS_tot = Σ(y_i - ȳ)² (总平方和)
ȳ = 实际值的均值

R²取值范围(-∞, 1],越接近1表示模型拟合越好。

六、预测输出

1. 三个维度的输出

输出项

含义

更新频率

实际值

在线仪表实时监测值

每分钟

预测值

模型计算的预测值

每小时

检化验值

LIMS实验室分析值

每4小时

2. 趋势可视化

对于每个成分:
横轴:时间序列(最近200个数据点)
纵轴:成分含量
三条曲线:实际值(蓝色实线)、预测值(红色虚线)、检化验值(绿色半透明线)

七、完整计算流程图

┌─────────────────────────────────────────────────────────┐
│ 数据采集层 │
├─────────────────────────────────────────────────────────┤
│ 在线仪表(实际值) LIMS系统(检化验值) 历史数据库 │
└──────────────────────┬──────────────────────────────────┘

┌─────────────────────────────────────────────────────────┐
│ 数据预处理层 │
├─────────────────────────────────────────────────────────┤
│ 缺失值填充(前向填充) 异常值剔除(3σ法则) 时间对齐 │
└──────────────────────┬──────────────────────────────────┘

┌─────────────────────────────────────────────────────────┐
│ 时间序列特征工程层 │
├─────────────────────────────────────────────────────────┤
│ 滞后特征(k=1~5) 移动平均(w=3/6/12) 时间周期特征 │
└──────────────────────┬──────────────────────────────────┘

┌─────────────────────────────────────────────────────────┐
│ 模型训练层 │
├─────────────────────────────────────────────────────────┤
│ 随机森林 × 7个成分 80%训练集 20%测试集 交叉验证 │
└──────────────────────┬──────────────────────────────────┘

┌─────────────────────────────────────────────────────────┐
│ 模型评估层 │
├─────────────────────────────────────────────────────────┤
│ MSE计算 R²计算 残差分析 特征重要性排序 │
└──────────────────────┬──────────────────────────────────┘

┌─────────────────────────────────────────────────────────┐
│ 预测输出层 │
├─────────────────────────────────────────────────────────┤
│ 实际值曲线 预测值曲线 检化验值曲线 趋势图导出 │
└─────────────────────────────────────────────────────────┘

以下是各成分的趋势对比图(展示了最近200个数据点的实际值、预测值和检化验值)

八、后续扩展方向

  1. 机理模型融合:接入业主提供的机理模型,将预测的入釜矿浆成分作为输入,推算酸和蒸汽的最佳加入量

  2. 在线学习:随着新数据不断产生,定期增量更新模型,保持预测精度

  3. 多模型集成:结合LSTM等深度学习模型,进一步提升时间序列预测性能