3. 数据准备与清洗:数据源识别(MES/EDA)、缺失值处理、异常值过滤、数据格式标准化
在良率分析流程中,数据准备与清洗占据整个分析工作量的 60%~80%。原始数据直接来自制造执行系统(MES)与工程数据分析系统(EDA),包含大量噪声、缺失字段与格式不一致问题。本章将系统讲解数据源的识别方法、缺失值与异常值的处理策略,以及数据格式标准化的实施步骤。
3.1 数据源识别:MES 与 EDA 系统
半导体制造过程中的数据主要来源于两大系统:MES(制造执行系统) 与 EDA(工程数据分析系统)。两者的数据特征与用途存在显著差异,分析前必须明确数据来源。
| 数据源 | 数据类型 | 采集频率 | 典型字段 | 主要用途 |
|---|---|---|---|---|
| MES | 批次级、晶圆级 | 每批次/每晶圆 | Lot ID、Recipe、设备 ID、操作时间、良率结果 | 批次追踪、良率统计、设备效率 |
| EDA | 参数级、测试点级 | 每测试点/每芯片 | 测试项名称、测试值、上下限、Bin 码、失效模式 | 参数分析、失效定位、Pareto 分析 |
实践提示:MES 数据通常以关系型数据库表形式存储,EDA 数据则常以 CSV 或专用二进制格式(如 STDF)导出。建议在数据接入阶段建立统一的数据字典,明确每个字段的物理含义与取值范围。
3.2 缺失值处理
缺失值是良率数据中最常见的问题,产生原因包括传感器故障、测试跳过、数据未上传等。处理缺失值需遵循“先诊断、后处理”的原则。
3.2.1 缺失值诊断
- 缺失比例评估:计算每个字段的缺失率,缺失率 > 50% 的字段建议直接剔除。
- 缺失模式分析:判断缺失是随机缺失(MAR)、完全随机缺失(MCAR)还是非随机缺失(MNAR)。
- 业务影响判断:关键字段(如 Bin 码、测试值)缺失必须优先处理。
3.2.2 缺失值处理方法
| 方法 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 删除法 | 缺失比例 < 5%,且随机缺失 | 简单快速 | 可能丢失有效信息 |
| 均值/中位数填充 | 连续型参数,分布较对称 | 计算量小 | 降低数据方差 |
| 前向/后向填充 | 时间序列数据(如设备参数) | 保留时序趋势 | 不适用于突变场景 |
| 模型预测填充 | 缺失比例 10%~30%,有相关字段 | 精度较高 | 计算复杂度高 |
关键原则:在良率分析中,对于 Bin 码、良率结果等分类字段,建议使用“缺失即标记”策略,将缺失值单独编码为一个新类别(如“Unknown”),避免填充引入偏差。
3.3 异常值过滤
异常值会严重扭曲良率趋势与 Pareto 分析结果。异常值过滤分为统计方法与业务规则方法两类。
3.3.1 统计方法
- Z-Score 法:计算每个数据点的 Z 分数,|Z| > 3 视为异常值。适用于正态分布数据。
- IQR 法:计算四分位距,低于 Q1 - 1.5×IQR 或高于 Q3 + 1.5×IQR 视为异常值。适用于偏态分布。
- MAD 法:基于中位数偏差,对异常值更稳健。
3.3.2 业务规则方法
- 规格限过滤:超出测试规格上限(USL)或下限(LSL)的数据直接标记为异常。
- 设备异常标记:结合 MES 中的设备报警记录,过滤设备异常期间产生的数据。
- 工艺阶段过滤:剔除工艺切换、设备维护等特殊时段的数据。
3.4 数据格式标准化
不同系统导出的数据在字段命名、日期格式、单位、编码方式上存在差异,标准化是后续自动化分析的基础。
3.4.1 字段命名标准化
建立统一的字段命名规范,例如:
- Lot ID:统一为
lot_id(小写+下划线) - 设备 ID:统一为
equipment_id - 测试值:统一为
test_value - 测试时间:统一为
test_timestamp
3.4.2 日期时间标准化
将所有日期时间字段转换为 ISO 8601 格式:YYYY-MM-DD HH:MM:SS。示例:
原始格式 1: 2024/01/15 14:30:00
原始格式 2: 15-JAN-2024 02:30:00 PM
标准化后: 2024-01-15 14:30:00
3.4.3 单位与编码标准化
| 字段类型 | 常见原始格式 | 标准化格式 | 说明 |
|---|---|---|---|
| 电压 | 1.2V / 1200mV | 1.200 | 统一为伏特(V),保留三位小数 |
| 电流 | 0.5mA / 500uA | 0.0005 | 统一为安培(A),科学计数法 |
| Bin 码 | Bin1 / BIN_1 / 1 | BIN_001 | 统一为 3 位数字前缀 |
| 设备状态 | Running / RUN / 1 | RUNNING | 统一为大写英文 |
3.5 数据清洗脚本示例
以下 Python 代码展示了数据清洗的核心步骤,包括缺失值处理、异常值过滤与格式标准化:
import pandas as pd
import numpy as np
# 1. 加载原始数据
df = pd.read_csv('raw_data.csv')
# 2. 缺失值处理:删除缺失率 > 50% 的列
threshold = len(df) * 0.5
df = df.dropna(thresh=threshold, axis=1)
# 3. 缺失值填充:连续型字段用中位数填充
numeric_cols = df.select_dtypes(include=[np.number]).columns
df[numeric_cols] = df[numeric_cols].fillna(df[numeric_cols].median())
# 4. 异常值过滤:IQR 法
Q1 = df['test_value'].quantile(0.25)
Q3 = df['test_value'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
df = df[(df['test_value'] >= lower_bound) & (df['test_value'] <= upper_bound)]
# 5. 日期标准化
df['test_timestamp'] = pd.to_datetime(df['test_timestamp'], format='%Y/%m/%d %H:%M:%S')
# 6. 字段重命名
df = df.rename(columns={
'Lot ID': 'lot_id',
'Equipment ID': 'equipment_id',
'Test Value': 'test_value'
})
# 7. 输出清洗后数据
df.to_csv('cleaned_data.csv', index=False)
注意:上述代码为通用示例,实际生产中需根据数据源的具体特征调整阈值与填充策略。建议在清洗前先进行数据概要分析(如
df.describe() 与 df.info()),确保清洗逻辑与业务场景一致。
3.6 数据清洗质量检查清单
完成清洗后,建议逐项检查以下内容,确保数据质量满足分析要求:
- 完整性:所有关键字段无缺失值。
- 一致性:字段命名、日期格式、单位统一。
- 准确性:异常值已被识别并处理。
- 唯一性:无重复记录(Lot ID + 测试时间组合唯一)。
- 时效性:数据时间范围覆盖分析周期。
数据准备与清洗是良率分析中最基础也最关键的环节。只有确保数据源的准确性与一致性,后续的良率趋势图与 Pareto 分析才能得出可靠结论。