一、整体技术路线
原始数据采集 → 数据预处理 → 时间序列特征工程 → 模型训练 → 模型评估 → 预测输出
预测输出: 提供三个维度的数据:
入釜矿浆成分实际值(实时在线检测)
入釜矿浆成分预测值(基于模型计算)
入釜矿浆成分检化验值(实验室分析结果)
二、数据预处理
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个数据点的实际值、预测值和检化验值)
八、后续扩展方向
机理模型融合:接入业主提供的机理模型,将预测的入釜矿浆成分作为输入,推算酸和蒸汽的最佳加入量
在线学习:随着新数据不断产生,定期增量更新模型,保持预测精度
多模型集成:结合LSTM等深度学习模型,进一步提升时间序列预测性能