4. 测试数据采集与清洗

大家好,我是老张,在ATE量产这行摸爬滚打十几年了。今天咱们聊聊数据采集与清洗。说实话,很多刚入行的朋友觉得跑测试、抓数据就完事了,直接丢进直方图、SPC里看。但我告诉你,数据采集和清洗没做好,后面的良率分析全是扯淡。

我自己就吃过亏。有一款HS400的案子,良率一直波动,我反复查测试程序、查硬件都没问题。最后才发现,是探针台的接触电阻数据没对齐时间戳,导致一批假fail记录混了进来。从那以后,我养成了一个习惯:拿到数据先花半小时做清洗,再谈分析。

数据采集的源头与规范

ATE测试的数据源其实不少,主要有三类:

  • 测试机台日志(比如Teradyne、Advantest):记录每个DUT的测试项、bin位、测试时间、温度等。
  • Handler/Prober数据:包括站点号、接触次数、气压、温度等环境参数。
  • 探针卡/插座状态:比如针痕偏移、针尖污染等级。

你想想看,如果这些数据的时间戳不对齐,或者字段名称混乱,后面怎么归因?所以我建议,采集阶段就要统一规范。下面是我在项目中常用的字段定义表:

字段名 类型 说明 必须性
Lot_ID 字符串 批号 必填
Wafer_ID 字符串 晶圆编号 必填
Test_Time Datetime 测试完成时间戳 必填
Bin_Code 整数 最终测试bin,例如1为pass,2~9为fail 必填
Param_XXX 浮点 具体测试参数值(如Vth、Idsat) 按需
Site_ID 整数 并行测试的站点号 推荐
Probe_Contact_Res 浮点 探针接触电阻(Ω) 可选

嗯,这里要注意:时间戳一定要精确到毫秒级,而且最好是UTC时间,不然跨班次合数据时会疯掉。

数据清洗的常见坑

清洗说白了就是四个字:去伪存真。但实际做起来,坑可不少。

  • 缺失值处理:有些测试项可能因为机台超时或通讯中断而没采到值。我见过有人直接删掉整行,结果把一些正常Die的pass记录也删了。更好的做法是标记后单独分析。
  • 异常值剔除:比如Vth测出负值,明显是探针接触不良导致的。我会用3σ规则或者规格限直接过滤。
  • 重复记录:多站点并行测试时,偶尔会重复上传。需要按Lot_ID + Wafer_ID + Die坐标 + Test_Time去重。
  • 时间戳漂移:不同机台的时间可能差几秒,导致同一Die的不同参数采样时间错位。我习惯先对每个Lot做时间对齐,统一参考时钟。

我曾经踩过的坑: 有一批数据清洗后良率突然降低2%。查了半天,发现是去重时把同一Die的retest记录全部删除了,但retest本身也算一次正常测试。从那以后,我保留了retest标记,先分析retest原因再决定是否剔除。

清洗流程与方法

我的清洗流程一般分为四步,下面这张图能帮你看清全貌:

测试数据采集与清洗流程图 测试数据采集与清洗流程 原始数据采集 字段对齐 & 格式统一 缺失值处理 异常值剔除 重复记录去重 数据质量报告 注意事项 • 缺失值不可直接删除 • 异常值需结合规格判断 • 去重保留retest标记

具体到代码层面,我一般用Python的pandas来处理。举个例子,去重和异常值过滤:

import pandas as pd
import numpy as np

df = pd.read_csv('ate_data.csv')

# 按Lot+Wafer+Die坐标去重,保留最后一次测试记录(retest)
df.drop_duplicates(subset=['Lot_ID','Wafer_ID','Die_Coord'], keep='last', inplace=True)

# 异常值剔除:只保留规格限内的IDD
idd_mean = df['IDD'].mean()
idd_std = df['IDD'].std()
df = df[(df['IDD'] >= idd_mean - 3*idd_std) & (df['IDD'] <= idd_mean + 3*idd_std)]

# 缺失值处理:标记后单独保存
missing = df[df['Vth'].isnull()]
df_clean = df.dropna(subset=['Vth'])

print(f"清洗前记录数: {len(df)+len(missing)},清洗后: {len(df_clean)}")

小技巧: 我习惯在清洗脚本里生成一份清洗日志,记录删除了多少条、标记了多少缺失值。这样后面查问题时,不用再重新跑一遍清洗。

数据质量评估与监控

清洗完后,得有个质量报告。不然别人问你这个数据能不能用,你拿什么回答?我通常关注这几个指标:

质量维度 评估方法 可接受阈值
数据完整率 缺失字段占总字段的比例 > 98%
异常占比 超出3σ或规格限的记录数/总数 < 2%
重复率 去重前后记录数之差/去重前 < 0.5%
时间一致性 同一Lot内最高与最低时间戳之差 < 24小时

如果某个指标不达标,我建议先排查对应步骤,而不是强行分析。比如异常占比过高,先检查测试程序有没有设错上下限,而不是直接过滤掉。

核心原则: 数据清洗不是炫技,而是为了还原真实物理世界。宁可保留可疑数据打上标签,也不要盲目删除。你永远不知道那一条异常记录背后藏着一个良率杀手。

好了,数据采集与清洗这块儿,最重要的就是建立规范、流程化执行,并且每次清洗都留下痕迹。下一期我们聊聊良率统计的metric选择——但那是后话了,咱们先把数据基础打牢。我自己到现在,每次接手新项目,都会花至少一天梳理数据流,这时间花得值。