2. 实验数据的结构化采集与预处理

在机器学习辅助实验优化中,模型的上限往往不由算法决定,而由数据决定。实验记录、传感器数据、仿真输出这三类数据来源不同、采样频率不同、量纲不同、甚至时间基准也不同,如果直接拼接成一张表就送进模型,得到的往往是“垃圾进、垃圾出”。本章要解决的核心问题是:如何把多源异构的原始数据,加工成一张字段明确、时间对齐、量纲统一、异常可控、可供模型直接使用的实验数据集。

一、先明确三类数据源的结构差异

实验记录通常由人工填写,是“事件级”数据:一次实验一行,包含实验编号、日期、操作人、配方或工艺参数、环境条件、观测结论等。它的特点是字段语义清晰但采样稀疏、易缺失、格式不统一,例如温度可能写成“85℃”“85度”“85”。

传感器数据是“时序级”数据:以固定或近似固定的周期采集,如热电偶每 1 s 记录一次温度、压力变送器每 500 ms 记录一次压力。它的特点是密度高、连续性强,但存在漂移、毛刺、丢包和时钟偏移。

仿真输出是“网格/场级”或“工况级”数据:一次仿真可能输出成千上万个网格节点的应力、温度场,也可能只输出若干标量响应(如最大应力、总变形量)。它的特点是维度高、与实验的物理量名称可能不一致,需要做物理量映射。

三类数据的对齐关系可以用下面的结构图表示:实验记录提供“批次主键”,传感器数据提供“过程轨迹”,仿真输出提供“响应标签”,三者通过实验编号与时间戳关联。

多源异构实验数据的结构化对齐 实验记录(事件级) 实验编号 EXP-0231 工艺参数:温度/压力/时间 环境:湿度、室温 观测结论(文本) 特点:稀疏、易缺失、格式杂 传感器数据(时序级) 时间戳 t,采样 1 s 温度 T(t)、压力 P(t) 振动幅值 A(t) 通道号、单位、量程 特点:密集、漂移、丢包 仿真输出(场/工况级) 网格节点:应力、温度场 标量响应:最大应力 σmax 总变形量、安全系数 工况编号、求解器版本 特点:高维、命名不一致 关联键:实验编号 + 时间戳 预处理流水线(顺序执行) 数据清洗 去重/纠错/单位 缺失值处理 删除/插补/标记 异常检测 3σ/IQR/物理阈值 特征对齐 时间窗/重采样 标准化 Z-score/Min-Max

二、数据清洗:从“能读”到“可信”

清洗的第一步是统一标识与单位。建议为每条实验记录分配全局唯一主键,例如 EXP-0231,并建立“字段字典”,把不同来源的物理量映射到统一名称:temp_c(摄氏温度)、pressure_kpa(千帕)、time_s(秒)。单位换算必须显式记录换算系数,例如把“85度”统一为 85.0 ℃,把“0.6 MPa”换算为 600 kPa。

第二步是去重与纠错。传感器数据中常见同一时间戳重复上报,可按“时间戳 + 通道号”去重,保留首次或均值。文本型实验记录可用规则或正则提取数值,例如从“温度85℃,保温2h”中抽取 temp_c=85、hold_h=2。对于明显越界的值,如温度出现 -300 ℃,应结合量程判断为无效并标记,而不是直接删除。

三、缺失值处理:先判断缺失机制

缺失不是一律填补。应先区分三类机制:完全随机缺失(MCAR)、随机缺失(MAR)、非随机缺失(MNAR)。传感器短时丢包通常接近 MCAR,可用线性插值;实验记录中“未填写”的字段可能是 MAR,可用同批次均值或回归插补;而“异常停机导致未记录”属于 MNAR,插补会引入偏差,更稳妥的做法是增加“是否缺失”指示列,让模型自行学习。

以温度通道为例,若在 t=120~124 s 连续缺失 5 个点,且前后值分别为 84.8 ℃ 和 85.2 ℃,线性插值得到 84.88、84.96、85.04、85.12 ℃。若缺失跨度超过设定阈值(例如超过 30 s),则不应插补,而应将该时间窗整体标记为无效,避免用长段外推污染训练集。

四、异常检测:统计规则与物理规则并用

纯统计方法(3σ、IQR)能发现数值离群,但可能把真实的工艺突变误判为异常;纯物理阈值能守住安全边界,却可能漏掉缓慢漂移。工程上建议两者并用:先用物理量程做硬约束,再用统计方法做软筛查。

例如压力通道量程为 0~1000 kPa,物理硬约束直接剔除负值和超过 1000 的记录。对剩余数据计算均值 μ=520 kPa、标准差 σ=18 kPa,则 3σ 区间为 [466, 574] kPa。若某点压力为 610 kPa,超出上界,标记为疑似异常;再检查该点前后 10 s 内是否伴随温度同步上升,若是,则可能是真实工况变化,应保留并标注,而不是删除。

异常处理的原则是“先标记、后决策”。建议在数据集中保留 is_outlier 与 outlier_reason 两列,便于后续追溯和消融实验。

五、特征对齐:把三条时间线拧成一条

实验记录是事件时刻,传感器是连续序列,仿真输出是工况结果,三者必须对齐到同一时间基准。常用做法是:以实验开始时刻为 t=0,把传感器数据按固定时间窗(如 10 s)聚合,提取均值、最大值、标准差、斜率等统计特征;再把仿真响应按实验编号挂到对应批次上。

若传感器采样率为 1 Hz,而模型需要 0.1 Hz 的特征,可做降采样:每 10 个点取均值,同时保留窗口内最大值以捕捉峰值。若不同通道采样率不同(温度 1 Hz、振动 10 kHz),应先统一到较粗的时间网格,再对高频通道做窗口统计,避免直接拼接造成维度错位。

六、标准化:让不同量纲的字段可比

标准化必须在划分训练集与测试集之后、仅用训练集统计量进行,否则会造成信息泄漏。对近似正态的温度、压力,可用 Z-score:x' = (x - μ_train) / σ_train。对有明显边界的参数(如归一化时间 0~1),可用 Min-Max。对存在长尾的响应(如最大应力),可先做对数变换再标准化。

下面给出一个可直接参考的字段级预处理配置示例,用于记录每个字段的处理方式与参数来源:

字段名          类型      缺失处理        异常规则              标准化        备注
EXP_ID          string    不允许缺失      —                     —             主键
temp_c          float     线性插值(≤30s)  物理[0,300] + 3σ      Z-score       训练集μ=85.2,σ=3.1
pressure_kpa    float     前向填充        物理[0,1000] + IQR    Z-score       训练集μ=520,σ=18
vibration_g     float     窗口均值        3σ + 峰值阈值         Min-Max       高频降采样后
hold_h          float     同批次均值      物理[0,24]            Z-score       实验记录字段
sigma_max_mpa   float     不插补          物理[0,2000]          对数+Z-score  仿真响应标签
is_outlier      int       默认0           —                     —             异常标记列

七、构建可用的实验数据集

完成上述步骤后,应输出一张“宽表 + 元数据”的实验数据集:每一行是一次实验(或一个时间窗),列包括实验编号、对齐后的工艺参数、传感器统计特征、仿真响应标签,以及缺失与异常标记。同时保留一份字段字典和预处理日志,记录每一步的输入行数、删除行数、插补行数、异常标记数,使数据加工过程可复现、可审计。

常见误区:在合并数据前就做标准化,或对全量数据统一插补后再划分训练/测试集。这两种做法都会把测试集信息带入训练过程,导致模型评估虚高。正确顺序是:先按实验编号或时间划分,再在训练集上拟合插补与标准化参数,最后变换测试集。

当数据集中每一列都有明确语义、每一个缺失和异常都有处理记录、每一条时间线都对到同一基准时,后续的特征工程与模型训练才有可靠基础。这一步做得越扎实,模型在实验优化中给出的推荐就越值得信任。