3. 数据采集与清洗:E-Test 数据源、Map 图数据格式、异常值剔除与标准化
在半导体制造中,E-Test(电性测试)数据是定位异常 Wafer 和修正工艺窗口的核心依据。然而,原始数据往往包含噪声、缺失值以及测试异常点。本章节将系统讲解 E-Test 数据源结构、Map 图数据格式规范,以及异常值剔除与标准化的工程方法。
核心原则:数据清洗的目标是保留真实工艺波动,剔除测试系统误差与随机噪声,确保后续统计分析(如 SPICE 建模、良率预测)的可靠性。
3.1 E-Test 数据源与关键参数
E-Test 数据通常来源于晶圆允收测试(WAT)或在线参数测试(In-line PCM)。每颗 Die 或每个测试结构会生成一组多维电性参数。
| 参数类别 | 典型参数 | 单位 | 工艺相关性 |
|---|---|---|---|
| MOS 器件 | Vt(阈值电压)、Idsat(饱和电流)、Ioff(关态漏电) | V, μA/μm, pA/μm | 栅氧化层厚度、沟道掺杂、Lpoly |
| 互连/电阻 | Rs(方块电阻)、Rc(接触电阻) | Ω/sq, Ω | 金属膜厚、刻蚀轮廓、退火条件 |
| 电容/隔离 | Cox(栅氧电容)、BV(击穿电压) | fF/μm², V | 介质厚度、掺杂浓度、隔离结构 |
数据源注意:不同测试机台(如 Keithley、Keysight)输出的原始文件格式可能为 CSV、STDF 或自定义二进制。建议在采集阶段统一转换为标准 DataFrame 格式(如 Parquet),并保留原始时间戳与测试坐标。
3.2 Map 图数据格式与空间映射
Wafer Map 是异常定位的可视化基础。每个测试点对应晶圆上的物理坐标 (X, Y),通常以晶圆中心为原点,单位 mm 或 μm。Map 图数据需包含以下核心字段:
- Die_X, Die_Y:芯片在晶圆上的行列索引(整数坐标)。
- X_Coord, Y_Coord:物理坐标(浮点数),用于精确空间分析。
- Param_Value:测试参数值(如 Vt、Idsat)。
- Test_Flag:测试状态(Pass/Fail/Not Tested)。
标准 Map 图数据格式示例(CSV 结构):
Die_X, Die_Y, X_Coord, Y_Coord, Vt_V, Idsat_uA, Ioff_pA, Test_Flag
-10, -10, -100.0, -100.0, 0.452, 320.5, 0.12, PASS
-10, -9, -100.0, -90.0, 0.448, 325.1, 0.15, PASS
...
0, 0, 0.0, 0.0, 0.435, 340.2, 0.08, PASS
...
10, 10, 100.0, 100.0, 0.461, 310.8, 0.22, FAIL
常见陷阱:部分测试文件将坐标原点定义在晶圆边缘而非中心,或使用极坐标(R, θ)。清洗时必须统一为笛卡尔坐标系,并校验晶圆半径范围(通常为 150mm / 200mm / 300mm)。
3.3 异常值剔除方法
异常值主要分为三类:全局异常(超出工艺规格)、局部异常(空间离群点)、系统异常(测试机台噪声)。针对不同场景,采用以下剔除策略:
| 异常类型 | 检测方法 | 适用场景 | 注意事项 |
|---|---|---|---|
| 全局异常 | IQR(四分位距)法 / 3σ 准则 | 参数整体分布偏离规格 | 需结合工艺规格上下限(Spec Limit) |
| 局部异常 | 局部离群因子(LOF) / 空间 Z-score | 晶圆边缘或局部区域异常 | 需考虑晶圆半径与芯片密度 |
| 系统异常 | 中值偏差(MAD) / 移动窗口滤波 | 测试机台跳变或探针接触不良 | 需保留时间序列顺序 |
工程建议:对于 300mm 晶圆,建议先使用 3σ 剔除全局异常,再使用基于空间邻域的 LOF 算法(k=20~50)剔除局部异常。避免过度剔除导致有效工艺窗口信息丢失。
3.4 数据标准化方法
标准化是为了消除不同参数量纲和量级的影响,使后续建模与监控在同一尺度下进行。常用方法包括:
- Z-score 标准化: \( z = (x - \mu) / \sigma \),适用于数据近似正态分布。
- Min-Max 归一化: \( x' = (x - x_{min}) / (x_{max} - x_{min}) \),适用于有明确边界(如规格限)的参数。
- 稳健标准化: \( x' = (x - median) / MAD \),适用于存在离群点的数据。
标准化后的数据应满足:均值为 0(或中位数为 0),标准差为 1(或 MAD 为 1)。
# Python 示例:Z-score 标准化与异常值剔除
import numpy as np
import pandas as pd
def clean_and_standardize(df, param_col, z_thresh=3.0):
"""
对指定参数列进行 Z-score 异常值剔除与标准化
"""
# 计算 Z-score
mean = df[param_col].mean()
std = df[param_col].std()
df['z_score'] = (df[param_col] - mean) / std
# 剔除异常值
df_clean = df[np.abs(df['z_score']) < z_thresh].copy()
# 重新标准化(基于清洗后数据)
mean_clean = df_clean[param_col].mean()
std_clean = df_clean[param_col].std()
df_clean['param_std'] = (df_clean[param_col] - mean_clean) / std_clean
return df_clean
# 使用示例
# df_clean = clean_and_standardize(df_raw, 'Vt_V', z_thresh=3.5)
标准化顺序:务必先剔除异常值,再进行标准化。若先标准化,异常值会拉偏均值和标准差,导致正常数据也被压缩或偏移。
3.5 数据清洗后的质量检查
清洗完成后,需进行以下验证,确保数据质量满足后续分析要求:
- 缺失率检查:清洗后有效数据占比应 > 95%(对于 300mm 晶圆,通常 > 98%)。
- 分布形态检查:标准化后参数直方图应近似标准正态分布(均值≈0,标准差≈1)。
- 空间连续性检查:Map 图上不应出现孤立异常点或大面积数据空洞。
- 参数相关性检查:清洗不应破坏参数间的物理相关性(如 Vt 与 Idsat 的负相关关系)。
质量门禁:若清洗后数据缺失率超过 5%,或标准化后分布严重偏态(偏度 > 2),需返回检查测试机台状态或重新定义异常值阈值。切勿强行进入后续建模步骤。