特征工程的常用方法
-
为什么要做特征构造?
原始特征无法直接表达业务规律,构造特征可以显式化非线性、交互、时间周期等信息,显著提升模型的表达能力 与泛化性能
-
特征构造的常用坑有哪些?
- 信息泄露(使用未来标签统计)
- 维度灾难(交叉特征未做hash或者降维)
- 业务不合理(特征解释性差、难以落地)
-
模型效果不提示,怎么办?
- 检查特征质量(是否与目标强相关)
- 特征选择(L1正则化、树模型重要性)
- 模型升级(采用更加复杂的模型)
特征工程是机器学习中数据预处理的核心环节,直接影响模型效果。面试中常被问及以下方法:
数值型特征处理
- 标准化(Z-Score):将数据转换为均值为0、方差为1的分布,公式为 x ′ = x − μ σ x' = \frac{x - \mu}{\sigma} x′=σx−μ
- 归一化(Min-Max):将数据线性映射到[0,1]区间,公式为 x ′ = x − x m i n x m a x − x m i n x' = \frac{x - x_{min}}{x_{max} - x_{min}} x′=xmax−xminx−xmin
- 鲁棒缩放(Robust Scaling):使用中位数和四分位数,适用于存在异常值的数据
类别型特征编码
One-Hot 编码: 类别数量较少(<15个);模型对数值敏感(如线性回归、SVM)。
- 优点:避免引入数值大小关系,适用于无序类别特征;兼容大多数机器学习模型。
- 缺点:维度爆炸(高基数特征时内存消耗大);可能引入稀疏性问题。
标签编码(Label Encoding):类别存在内在顺序(如学历等级)。
- 优点:节省内存,仅用一列数值表示类别;适合树模型(如决策树、随机森林)。
- 缺点:可能引入虚假顺序关系,影响线性模型或距离类模型(如KNN、回归)。
频率编码(Frequency Encoding):高基数特征(如邮政编码);需保留统计信息的场景。
- 优点:保留类别分布信息,适用于高基数特征;减少维度。
- 缺点:相同频率的类别无法区分;可能引入过拟合风险。
目标编码(Target Encoding):分类任务且类别分布不均衡;需增强特征与目标关联性。
- 优点:结合目标变量信息,提升模型表现;适用于高基数分类问题。
- 缺点:需防范数据泄漏(需严格划分训练/测试集);可能过拟合小类别。
哈希编码(Hashing Encoding):实时处理或内存受限场景;类别基数极高(>1000)。
- 优点:有效降维,适用于极高基数特征;内存效率高。
- 缺点:可能发生哈希冲突;可解释性差。
注意事项
- 树模型(如XGBoost)通常对编码方式不敏感,但线性模型需谨慎选择。
- 高基数特征优先测试频率/目标编码,避免One-Hot的维度灾难。
特征构造
- 多项式特征:通过特征相乘或平方构造非线性特征
- 离散化/分箱(Binning):将连续变量离散化,如年龄分段
- 时间特征:从时间戳提取小时、星期等周期性特征
- 统计聚合特征:group by->count、均值、最大值、最小值、方差
- 交叉/组合特征:两特征相乘、拼接字符串
特征选择
- 方差阈值:移除方差低于阈值的低方差特征
- 卡方检验:筛选与目标变量相关性高的分类特征
- 基于模型:使用树模型的特征重要性或L1正则化进行筛选
文本特征处理
- 词袋模型(Bag of Words):统计词频生成向量
- TF-IDF:衡量词语在文档中的重要程度
- Word2Vec/GloVe:将词语映射为稠密向量
缺失值处理
- 删除:直接移除缺失值过多的特征或样本
- 填充:用均值、中位数或预测值进行填补
- 标志位:新增二进制列标记是否存在缺失