测试数据基础:数据类型与采集规范
做可靠性测试这么多年,我最大的体会就是——数据质量决定分析上限。你算法再牛,模型再花哨,喂进去的数据是垃圾,出来的结果只能是垃圾。今天咱们就聊聊测试数据的那些门道。
一、三种数据类型:你遇到的测试数据长啥样?
测试数据其实就三种:完整数据、截尾数据、无失效数据。我一个个说。
1. 完整数据
说白了就是每个样品都测到失效,记录下精确的失效时间。比如你测10个灯泡,每个都一直点亮直到烧坏,记录下每个灯泡的寿命。这种数据最理想,分析起来也最简单。
但现实哪有这么完美?我做过一个LED驱动电源的项目,按计划要测2000小时,结果第3天就有一半样品坏了——这算完整数据吗?算,但你要记录清楚失效时间点。
2. 截尾数据
这才是工程中的常态。截尾分三种:
- 右截尾(最常见):测试结束了,样品还没坏。比如你计划测1000小时,到时间了还有3个样品在正常工作。你只知道它们寿命大于1000小时,具体多少不知道。
- 左截尾:样品在开始测试前就已经失效了。嗯,这种情况在加速老化试验里偶尔出现——样品在加载应力之前就坏了。
- 区间截尾:你知道失效发生在某个时间段内,但不知道精确时间。比如巡检发现样品坏了,但上次巡检时它还好好的。
我记得有个客户做汽车继电器测试,每24小时巡检一次。结果发现一个样品在第72小时巡检时坏了,但第48小时还好好的。这就是典型的区间截尾——失效时间在48到72小时之间。
3. 无失效数据
这个有意思。测试结束了,所有样品都没坏。你得到的数据全是「大于某个时间」。比如你测5个样品,跑了2000小时,一个都没坏。那你能说它们寿命是2000小时吗?不能。你只能说它们寿命都大于2000小时。
无失效数据在高端产品里特别常见。我之前做航天继电器,测试了12个样品,跑了5000小时,一个都没坏。老板问「寿命多少?」我说「大于5000小时」。他说「这不废话吗?」我说「这就是事实。」
二、数据采集规范:别让数据毁在第一步
数据采集看着简单,其实坑最多。我见过太多项目,测试做完了,数据没法用——因为采集不规范。
1. 记录什么?
- 样品编号:唯一标识,别用1、2、3这种,容易搞混。我习惯用「项目号-批次-序号」,比如LED-01-005。
- 失效时间:精确到秒。别只写「第3天」,要写「2024-03-15 14:32:17」。
- 失效模式:怎么坏的?开路?短路?参数漂移?这个信息对后续分析至关重要。
- 测试条件:温度、湿度、电压、电流……所有应力条件都要记录。
- 截尾类型:标记清楚是右截尾、左截尾还是区间截尾。
2. 数据格式规范
我推荐用CSV格式,结构清晰,各种工具都能读。下面是我常用的格式:
sample_id, failure_time, censored, failure_mode, temperature, voltage
LED-001, 1250.5, 0, 开路, 85, 24
LED-002, 2000.0, 1, NA, 85, 24
LED-003, 980.3, 0, 光衰超20%, 85, 24
censored列:0表示失效(完整数据),1表示右截尾,2表示左截尾,3表示区间截尾。这样一目了然。
三、常见陷阱:我踩过的坑,你别再踩
这部分我多说几句,都是真金白银换来的教训。
陷阱1:把截尾数据当完整数据用
我曾经有个同事,做电容寿命测试。100个样品,测到500小时,有80个坏了,20个没坏。他直接把20个没坏的当成「500小时失效」算进了平均寿命。结果算出来寿命只有420小时。实际上,那20个样品寿命可能远大于500小时,真实平均寿命应该在600小时以上。
正确做法:用Kaplan-Meier估计或者极大似然估计处理截尾数据。
陷阱2:忽略区间截尾的宽度
巡检间隔越大,区间截尾的不确定性越大。比如你每100小时巡检一次,那失效时间可能落在0-100、100-200、200-300……这种数据用中点法处理,误差会很大。我建议用区间删失模型,或者至少用「平均失效时间」加「区间宽度」两个参数来描述。
陷阱3:无失效数据直接算MTBF
这个坑我见过太多次了。测试结束了,所有样品都没坏,有人直接用「测试时间/样品数」算MTBF。比如10个样品测了1000小时,MTBF=10000小时?错!这完全忽略了置信区间。正确的做法是用卡方分布计算下限:
# 无失效数据,MTBF下限计算(指数分布假设)
# 测试时间 T = 1000小时,样品数 n = 10
# 置信水平 90%
import scipy.stats as stats
T = 1000 * 10 # 总测试时间
chi2 = stats.chi2.ppf(0.9, 2) # 自由度2
MTBF_lower = 2 * T / chi2
print(f"MTBF下限(90%置信): {MTBF_lower:.0f} 小时")
陷阱4:数据记录不完整
这个最要命。我接手过一个项目,数据表里只有失效时间,没有失效模式。结果分析时发现,有些样品是早期失效,有些是耗损失效,混在一起根本没法建模。最后只能重新做实验,浪费了三个月。
四、知识体系:一张图看懂
下面这张图是我自己整理的,把测试数据的核心逻辑串起来了。你仔细看看,应该能有个整体把握。
五、总结一下
测试数据这事,说白了就三点:
- 认清数据类型:完整、截尾、无失效,处理方法完全不同。
- 规范采集:记录要全、格式要统一、备注要写清楚。
- 避开陷阱:别把截尾当完整,别忽略区间宽度,别乱算无失效数据。
我做了十几年可靠性,最深的体会就是:数据质量决定了你能走多远。数据采集阶段多花点心思,后面分析建模会顺畅得多。嗯,今天就聊到这儿,下次咱们聊聊如何用Python处理这些数据。