特征工程是让已有数据更适配模型的关键步骤,核心包括缺失值处理(按数据类型选择填充策略)、类别编码(依基数与业务选择One-Hot/Target/Count等)、衍生特征构造(注入领域知识)、标准化(依模型需求选择Robust/MinMax/log1p)。

特征工程不是“加数据”,而是让已有数据更懂模型。它直接决定模型能学到什么,有时比换算法更有效。
识别并处理缺失值
缺失值不处理,树模型可能分裂失效,线性模型会报错或引入偏差。不能一概用均值填充——类别型字段用众数,时间序列考虑前向填充,高缺失率字段先评估是否保留。
- 数值型:看分布,偏态明显时用中位数;有业务含义的空值(如“未购买”)可单独编码为-1或新增二值特征“is_missing”
- 类别型:统一归为"Unknown",避免LabelEncoder报错;若缺失比例>30%,建议先分析缺失机制(是随机还是系统性缺失)
- 用sklearn.impute中的SimpleImputer统一管理策略,别在训练集和测试集分别fit
合理编码类别变量
类别数少(≤5)且无序,用One-Hot;类别数多(如城市、商品ID),优先用Target Encoding或Count Encoding,避免维度爆炸;有序类别(如“低/中/高”)可用Ordinal Encoding,但要确认顺序真有数值意义。
- Target Encoding记得做平滑(如加伪计数)+ 交叉验证分组,防止目标泄露
- 用category_encoders库比手写更稳,支持LeaveOneOut、WOE等进阶方式
- 对高基数字段,先统计频次,把低频合并为“Others”,再编码
构造有意义的组合与衍生特征
模型不会自动理解“周末订单转化率更高”,但你告诉它“is_weekend × order_count”,它就能学。关键不是堆数量,而是注入领域知识。
立即学习“Python免费学习笔记(深入)”;
- 时间类:从datetime提取dayofweek、is_holiday、hour_sin/hour_cos(周期性编码)
- 数值交互:比值(price/size)、差值(current_price - original_price)、分箱后交叉(age_group × region)
- 文本类:不要只用TF-IDF,试试关键词匹配得分、句子长度、是否含促销词(“限时”“赠”)等布尔特征
标准化/归一化要分场景选
树模型(如RandomForest、XGBoost)不需要缩放;但涉及距离(KNN、SVM)或梯度下降(LR、神经网络)时必须做,否则大数值特征主导更新。
- RobustScaler适合含异常值的数据(用中位数和四分位距)
- MinMaxScaler注意测试集缩放必须用训练集的min/max,别重新fit
- 对幂律分布(如用户点击次数),先log1p再标准化效果通常更好
基本上就这些。特征工程没有银弹,但每一步都该有理由——这个变换为什么能让模型更容易区分样本?想清楚这点,效果提升自然来得稳。









