2. 可靠性数据清洗与质量可视化

可靠性分析中最常见的失败,不是模型选错,而是数据本身带着“隐性缺陷”进入建模流程。一个寿命数据集可能同时存在:某台设备未记录失效时间、某次试验因提前终止而只留下“已运行 800 h 未失效”的记录、某个传感器瞬时跳变产生 106 h 的荒谬寿命值。若这些数据未经识别与处理就直接拟合 Weibull 分布,得到的形状参数 β 和特征寿命 η 会严重偏离真实情况。本节围绕三类核心质量问题——缺失值、异常值、截尾数据——建立“识别—可视化—决策”的闭环。

三类质量问题的本质区别

缺失值是“该有的字段为空”,例如某条记录缺少失效时间或工作应力。它影响的是样本量与可用维度。异常值是“数值存在但不可信”,例如寿命为负、远超物理上限、或与同批次样本严重偏离。它影响的是参数估计的稳健性。截尾数据则完全不同:它不是错误,而是真实且必须保留的信息。右截尾表示“到观测结束时仍未失效”,左截尾表示“失效发生在某时刻之前但未精确观测”,区间截尾表示“失效发生在某区间内”。把截尾数据当缺失值删除,会系统性高估可靠性;把截尾数据当精确失效时间处理,会系统性低估寿命。

关键原则:缺失值可填补或删除,异常值需核实或修正,截尾数据必须保留并携带截尾标记进入模型。三者不可混为一谈。

识别方法:从统计规则到可视化

缺失值识别最直接的方式是统计每个字段的缺失率,并观察缺失是否随机。若“失效时间”缺失集中在某条产线或某个时间段,说明缺失并非随机,可能与该批次工艺相关,此时简单删除会引入偏差。

异常值识别常用三种规则:一是物理边界,如寿命不能为负、不能超过设备设计寿命的若干倍;二是统计边界,如基于四分位距的 IQR 规则,超出 Q1−1.5×IQR 或 Q3+1.5×IQR 视为可疑;三是模型残差,如用同批次数据拟合后,标准化残差绝对值大于 3 的记录需复核。以下示例展示 IQR 规则的实现:

import numpy as np
life = np.array([1200, 1350, 980, 1500, 1100, 1e6, 1250, 1400, 1050, 1300])
q1, q3 = np.percentile(life, [25, 75])
iqr = q3 - q1
low, high = q1 - 1.5*iqr, q3 + 1.5*iqr
outliers = life[(life < low) | (life > high)]
print("下界", low, "上界", high, "异常值", outliers)
# 示例输出:下界约 662.5,上界约 1737.5,异常值 [1000000.]

截尾数据识别依赖数据字典中的“状态”字段。常见编码为:1=精确失效,0=右截尾,2=左截尾,3=区间截尾。若数据表中只有“时间”列而没有“状态”列,必须回溯原始工单或试验记录补齐,否则无法区分“运行了 800 h 后失效”与“运行了 800 h 仍未失效”。

质量可视化:热力图、箱线图与缺失矩阵

数据质量热力图适合按“字段×批次”展示缺失率或异常率,颜色越深表示问题越集中,能快速定位是全局性缺失还是局部批次异常。箱线图适合展示寿命分布并直接暴露离群点,箱体为 IQR 范围,须线延伸至非异常极值,须线之外的点即为候选异常值。缺失矩阵则以矩阵形式逐行逐列标记“有值/缺失”,能直观看出缺失是否成块出现——成块缺失往往意味着某个采集环节整体失效,而非随机漏记。

可靠性数据质量诊断三联图 缺失矩阵(行=样本,列=字段) 寿命 应力 温度 状态 蓝=有值 灰=缺失 寿命箱线图(暴露离群点) 1e6 1500 900 异常值 Q1=1050 Q3=1400 IQR=350 批次×字段质量热力图 寿命 应力 状态 B1 B2 B3 B4 绿=良好 黄=关注 红=严重 清洗决策路径 字段是否为空? 缺失值判断 数值是否越界? 异常值判断 状态字段=0? 截尾判断 保留并标记 进入建模 否 否 是 删除或插补 记录缺失原因 复核原始记录 修正或剔除

清洗决策:从识别到可建模数据

识别之后必须形成明确的处理决策,而不是“看着办”。缺失值方面:若缺失率低于 5% 且为随机缺失,可删除对应记录;若缺失率较高但字段重要,可用中位数、同批次均值或回归插补,并新增“是否插补”标记列,便于后续敏感性分析。异常值方面:先复核原始工单或传感器日志,确认是录入错误则修正,确认是真实极端事件则保留并单独标注,不可直接删除——极端失效往往正是可靠性分析最关心的尾部信息。截尾数据方面:必须保留,并在建模时使用带截尾状态的似然函数,例如右截尾样本对似然贡献为可靠度 R(t) 而非概率密度 f(t)。

一个可执行的清洗决策表如下,字段与判断依据均围绕可靠性数据本身:

问题类型识别依据处理动作输出标记
缺失值字段为空,缺失率统计删除或插补imputed=0/1
异常值IQR 越界或残差>3复核后修正或保留outlier_flag=0/1
右截尾状态=0,未失效保留,进入似然censored=right
左截尾状态=2,失效早于观测保留,进入似然censored=left
区间截尾状态=3,失效在区间内保留,进入似然censored=interval
清洗完成后,建议重新绘制一次质量热力图与箱线图,对比清洗前后异常点数量、缺失率与截尾比例的变化。若异常点数量未下降而截尾比例明显上升,说明部分“异常值”其实是截尾记录被误判,需要回退检查状态字段。

最后需要强调:数据清洗不是一次性动作,而是与建模目标绑定的决策过程。若目标是估计早期失效概率,则左截尾和短寿命样本权重更高;若目标是评估长期可靠性,则右截尾样本不可丢弃。每一次删除、插补或标记,都应在数据版本中留痕,使清洗后的数据集可追溯、可复现,避免“清洗”变成不可解释的数据篡改。