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)导出。建议在数据接入阶段建立统一的数据字典,明确每个字段的物理含义与取值范围。
MES 与 EDA 数据源架构 MES 系统 批次级 / 晶圆级 EDA 系统 参数级 / 测试点级 统一数据仓库 数据清洗 / 标准化 / 存储 良率分析报告

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 分析才能得出可靠结论。