第二章:失效数据收集与预处理
各位工程师朋友,咱们今天聊聊可靠性工程里最基础、也最容易被忽视的一环——数据收集与预处理。
我做了十几年可靠性,见过太多人一上来就建模型、算指标,结果数据本身就有问题。说白了,垃圾进垃圾出,模型再漂亮也没用。今天我就把这块的经验掰开了揉碎了讲给你听。
2.1 数据来源:现场数据 vs 实验室数据
数据从哪来?无非两个地方:现场和实验室。但这两类数据,脾气秉性完全不同。
2.1.1 现场数据
现场数据是产品在实际使用环境中跑出来的。比如汽车跑了多少公里坏了、手机用了多久屏幕不亮了。这类数据最真实,但也是最乱的。
我在项目中遇到过,某款通信设备在北方冬天故障率飙升,现场反馈的数据里却只记录了「设备故障」,没写环境温度。后来我们补了三个月的历史气象数据,才把根因揪出来。
现场数据的特点:
- 真实性强——反映实际使用条件
- 噪声大——用户操作习惯、环境差异、记录错误混杂在一起
- 删失数据多——很多产品还没坏就被换掉了,或者用户懒得报修
- 样本量大——动辄几千几万台,但有效信息密度低
2.1.2 实验室数据
实验室数据是在受控条件下测出来的。比如高温老化试验、振动试验、加速寿命试验。这类数据干净、完整,但有个致命问题——它不一定代表真实世界。
你想想看,实验室里恒温恒湿,电压稳定,操作规范。但实际用户可能把设备扔在车里暴晒,或者边充电边打游戏。实验室数据再漂亮,也不能完全替代现场数据。
实验室数据的特点:
- 可控性强——应力水平、测试时间、样本量都能精确控制
- 数据完整——很少出现缺失值,失效时间记录准确
- 样本量有限——受成本和时间限制,通常几十到几百个样本
- 外推风险——从加速条件推正常条件,需要模型假设
我的建议:现场数据和实验室数据要结合使用。实验室数据用来建立基础模型,现场数据用来验证和修正。两条腿走路,才稳当。
2.2 数据清洗:缺失值与异常值处理
数据拿到手,第一件事不是分析,而是洗数据。我见过太多人跳过这步直接算MTBF,结果算出来自己都不信。
2.2.1 缺失值处理
缺失值在可靠性数据里太常见了。比如现场维修记录里「故障时间」一栏空着,或者「失效模式」没填。怎么处理?
常见做法:
- 删除法——如果缺失比例很小(<5%),直接删掉整条记录。简单粗暴,但有效。
- 均值/中位数填充——适用于连续变量,比如缺失的故障时间用同类产品的平均时间补上。
- 模型预测填充——用其他字段建立回归模型来预测缺失值。精度高,但工作量也大。
- 标记法——把缺失值单独作为一个类别处理。比如「未知失效模式」。
避坑指南:我曾经处理一批航空电子设备的数据,发现「维修日期」缺失了30%。一开始想用均值填充,后来仔细一查,缺失的全是紧急抢修记录——这些设备的故障时间本来就短。用均值填充会严重低估故障率。最后我们通过维修工单编号反查了原始记录,才补全了数据。
2.2.2 异常值处理
异常值就是那些明显不合理的数据点。比如某台设备用了0.1小时就坏了,或者用了10万小时还没坏。前者可能是测试错误,后者可能是记录错误。
怎么识别异常值?
- 物理约束法——比如电池寿命不可能超过设计寿命的10倍,超出就是异常
- 统计方法——比如3σ原则、箱线图、Z-score
- 领域知识——比如某类轴承的典型寿命是5000-8000小时,出现100小时或50000小时就要警惕
处理方式:
- 确认后删除——如果确认是记录错误,直接删
- 修正——比如时间单位写错了(小时写成天),修正后保留
- 保留并标记——如果无法确认,保留数据但标记为可疑点,在后续分析中单独处理
注意:不要机械地删除所有异常值。有时候异常值恰恰是重要信息的载体。比如某批次产品早期失效特别多,可能意味着生产工艺出了问题。删掉异常值,就等于删掉了问题信号。
2.3 数据分类:完全数据、删失数据、截尾数据
可靠性数据有个独特的地方——不是所有数据都能看到「完整寿命」。这就引出了三种数据类型。
2.3.1 完全数据
完全数据就是你知道产品从开始使用到失效的完整时间。比如你测试10个灯泡,每个都一直亮到烧坏,记录下每个灯泡的寿命。这就是完全数据。
完全数据最理想,分析起来也最简单。但现实中,完全数据很少见。为什么?因为等所有产品都失效再分析,黄花菜都凉了。
2.3.2 删失数据
删失数据是可靠性分析中最常见的数据类型。说白了,就是你知道产品「至少用了多久还没坏」,或者「在某个时间点之后坏了」,但不知道确切寿命。
删失数据分三种:
- 右删失——最常见。比如测试到1000小时停止,还有5个产品没坏。你知道它们寿命>1000小时,但不知道具体多少。
- 左删失——你知道产品在某个时间点之前已经坏了,但不知道具体什么时候坏的。比如巡检发现设备坏了,但上次巡检是3个月前。
- 区间删失——你知道产品在某个时间区间内坏了,但不知道确切时间。比如两次巡检之间坏了。
关键点:删失数据不是无效数据!很多新手以为「没坏」的数据没用,直接扔掉。这是大错特错。右删失数据包含了「产品存活了这么久」的信息,对估计可靠性指标至关重要。
2.3.3 截尾数据
截尾数据和删失数据容易搞混,我简单说下区别。
截尾数据是指:你只观察了某个范围内的数据,范围之外的数据你根本看不到。比如你只统计了保修期内的故障数据,保修期外的故障你压根没记录。这就是截尾。
截尾 vs 删失:
| 特征 | 删失数据 | 截尾数据 |
|---|---|---|
| 数据存在性 | 数据存在,但值不完整 | 数据根本不存在 |
| 信息量 | 部分信息(如寿命>1000h) | 无信息 |
| 处理方式 | 可用极大似然估计等方法处理 | 需要修正抽样偏差 |
| 常见场景 | 定时截尾试验、用户失访 | 保修期数据、筛选试验 |
2.4 知识体系总览
下面这张图把本章的核心逻辑串起来了。我建议你保存下来,做项目时对照着看。
2.5 实战要点总结
最后,我把自己这些年踩过的坑总结成几条实战要点,你直接拿去用:
- 数据收集阶段就要设计好字段——至少包括:产品ID、开始使用时间、失效时间(或最后观察时间)、失效模式、使用环境。缺一个字段,后面分析就多一分困难。
- 现场数据一定要做溯源——不要直接拿原始数据用。我习惯先抽10%的数据做人工核查,看看记录是否合理。
- 删失数据要标记清楚——在数据表中单独加一列「数据状态」,标注是「完全」「右删失」「左删失」还是「区间删失」。后面分析时直接筛选。
- 异常值先问业务,再动数据——不要凭感觉删数据。我曾经觉得一个「寿命0.5小时」的数据是异常值,差点删掉。后来一问,那是生产线上的早期失效,恰恰反映了某个批次的质量问题。
- 保留原始数据——所有清洗操作都要在副本上进行,原始数据永远不动。这是数据工作的基本素养。
一个小工具推荐:如果你用Python做可靠性数据分析,推荐lifelines库。它对删失数据的处理非常友好,内置了Kaplan-Meier估计、Cox比例风险模型等常用方法。数据清洗阶段配合pandas,基本够用了。
好了,数据收集和预处理这块就聊到这儿。记住一句话:数据质量决定了分析的天花板。花80%的时间把数据搞干净,后面20%的分析工作才能出真东西。