测试数据基础:数据类型与采集规范

做可靠性测试这么多年,我最大的体会就是——数据质量决定分析上限。你算法再牛,模型再花哨,喂进去的数据是垃圾,出来的结果只能是垃圾。今天咱们就聊聊测试数据的那些门道。

一、三种数据类型:你遇到的测试数据长啥样?

测试数据其实就三种:完整数据、截尾数据、无失效数据。我一个个说。

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:数据记录不完整

这个最要命。我接手过一个项目,数据表里只有失效时间,没有失效模式。结果分析时发现,有些样品是早期失效,有些是耗损失效,混在一起根本没法建模。最后只能重新做实验,浪费了三个月。

血的教训:数据采集时多花10分钟记录细节,分析时能省10天。别偷懒。

四、知识体系:一张图看懂

下面这张图是我自己整理的,把测试数据的核心逻辑串起来了。你仔细看看,应该能有个整体把握。

测试数据知识体系 数据类型 完整数据 截尾数据 无失效数据 右截尾 左截尾 区间截尾 数据采集规范 样品编号 失效时间 失效模式 测试条件 常见陷阱:截尾误用 | 区间忽略 | 无失效误算 | 记录不全

五、总结一下

测试数据这事,说白了就三点:

  • 认清数据类型:完整、截尾、无失效,处理方法完全不同。
  • 规范采集:记录要全、格式要统一、备注要写清楚。
  • 避开陷阱:别把截尾当完整,别忽略区间宽度,别乱算无失效数据。

我做了十几年可靠性,最深的体会就是:数据质量决定了你能走多远。数据采集阶段多花点心思,后面分析建模会顺畅得多。嗯,今天就聊到这儿,下次咱们聊聊如何用Python处理这些数据。

专注资料整理