数据预处理
问题
数据预处理包含哪些步骤?缺失值、异常值如何处理?数据增强有哪些常用技术?
答案
数据预处理是 ML Pipeline 的第一步,也是直接决定模型上限的关键环节——垃圾进,垃圾出(Garbage In, Garbage Out)。
一、数据预处理全流程
二、数据探索(EDA)
在动手处理之前,先了解数据的基本情况:
| 步骤 | 内容 |
|---|---|
| 数据形状 | 多少行、多少列 |
| 数据类型 | 数值/类别/文本/时间 |
| 缺失值统计 | 每列缺失比例 |
| 分布分析 | 直方图、箱线图 |
| 相关性分析 | 特征间的相关矩阵 |
| 类别分布 | 标签是否均衡 |
三、缺失值处理
| 策略 | 方法 | 适用场景 |
|---|---|---|
| 删除行 | 丢弃含缺失值的样本 | 缺失比例 < 5% 且随机缺失 |
| 删除列 | 丢弃缺失率极高的特征 | 缺失比例 > 50% |
| 均值/中位数 | 用该列的统计量填充 | 数值特征,分布近似正态 |
| 众数 | 用出现最多的值填充 | 类别特征 |
| 前向/后向填充 | 用前一个/后一个有效值 | 时序数据 |
| 插值 | 线性、多项式、样条插值 | 连续型时序数据 |
| KNN 插值 | 用 K 个最近邻的值 | 特征间有相关性 |
| 标记缺失 | 新增 is_null 布尔列 | 缺失本身有信息量 |
| 模型预测 | 用其他特征训练模型预测 | 缺失有规律 |
注意
填充统计量必须只用训练集计算,然后应用到验证集和测试集。否则就是数据泄露。
四、异常值处理
检测方法
| 方法 | 原理 | 适用场景 |
|---|---|---|
| Z-Score | 视为异常 | 近正态分布 |
| IQR 法 | 或 | 通用 |
| 箱线图 | 可视化检测 | 视觉探索 |
| 孤立森林 | 基于树模型的异常检测 | 高维数据 |
处理方式
| 方式 | 说明 |
|---|---|
| 删除 | 确认是数据录入错误 |
| 截断(Winsorization) | 将极端值压缩到 [P1, P99] |
| 对数变换 | ,压缩右偏分布 |
| 分桶 | 将连续值离散化,极端值归入边界桶 |
| 保留 | 如果异常值是真实的(如高收入用户),不应删除 |
五、数据增强
当训练数据不足时,通过变换生成更多样本:
图像数据增强:
| 方法 | 说明 |
|---|---|
| 水平/垂直翻转 | 镜像变换 |
| 旋转 | 随机角度旋转 |
| 裁剪 | 随机区域裁剪 |
| 颜色抖动 | 随机调整亮度、对比度、饱和度 |
| Mixup | 两张图片线性混合 |
| CutMix | 剪切一块区域替换 |
文本数据增强:
| 方法 | 说明 |
|---|---|
| 同义词替换 | 随机替换同义词 |
| 回译(Back Translation) | 翻译到其他语言再翻回来 |
| 随机插入/删除/交换 | 随机操作词语 |
| LLM 生成 | 用 LLM 改写或生成变体 |
表格数据增强:
| 方法 | 说明 |
|---|---|
| SMOTE | 在少数类样本间插值(过采样) |
| 噪声注入 | 给数值特征加小幅高斯噪声 |
| 特征变换 | 随机组合特征 |
六、数据集划分
| 划分方式 | 适用场景 | 注意事项 |
|---|---|---|
| 随机划分(70/15/15) | 通用,i.i.d 数据 | 使用分层抽样保持类别比例 |
| 时间划分 | 时序数据 | 未来数据不能出现在训练集中 |
| 组划分 | 同一用户/同一设备的数据 | 同组数据必须在同一个 split 中 |
| 交叉验证 | 数据量较小 | K-Fold,更可靠的评估 |
常见面试问题
Q1: 数据清洗中最常见的问题是什么?
答案:
- 重复数据:同一条记录被多次录入
- 缺失值:某些字段为空
- 格式不一致:日期格式混乱、大小写不统一
- 异常值:数据录入错误或极端值
- 类型错误:数值存为字符串
- 标签噪音:标注错误
Q2: SMOTE 的原理是什么?有什么局限?
答案: SMOTE(Synthetic Minority Over-sampling Technique) 通过在少数类样本之间插值来生成新样本:
- 对每个少数类样本,找到其 K 个最近邻(同为少数类)
- 随机选一个近邻,在两点连线上随机取一点作为新样本
局限:
- 可能在两个不同类别的重叠区域生成有噪声的样本
- 高维数据中"最近邻"可能不准确(维度灾难)
- 不考虑特征间的相关性
Q3: 为什么要做特征缩放?什么时候不需要?
答案: 需要缩放:基于距离(KNN、SVM)或梯度(线性回归、神经网络)的模型——不同量级的特征会导致梯度更新不均匀或距离计算被大数值特征主导。
不需要缩放:基于树的模型(决策树、随机森林、XGBoost)——它们基于特征值的排序做分裂,不依赖绝对值。