用途
特征工程通过领域知识和数学变换来创建与转换特征,以提升模型的性能、可解释性和泛化能力。当仅使用原始特征难以进一步提升模型表现时,可通过特征工程构造更有信息量的输入。
主要能力
该技能涵盖以下工程化技术:
- 编码(Encoding):将类别变量转换为数值,包括 One-Hot 编码、Ordinal 编码和 Label 编码。
- 缩放(Scaling):归一化特征取值范围,包括 StandardScaler(均值 0、标准差 1)、MinMaxScaler([0, 1])和 RobustScaler(对异常值稳健)。
- 多项式特征(Polynomial Features):生成高阶项,用于捕捉非线性关系。
- 交互特征(Interactions):组合多个特征,如年龄与收入的乘积、年龄与经验的比值。
- 领域特定变换(Domain-specific):基于业务知识构造特征,如年龄分组、收入等级、对数变换、平方根变换。
- 时间特征(Temporal):从日期中提取年份、月份、星期几、季度、是否周末等。
- 分箱/离散化(Binning):等宽分箱与等频分箱。
- 缺失值处理:均值填充、中位数填充、前向填充等。
使用方式
该技能提供基于 Python 的完整实现示例,主要依赖 pandas、numpy、scikit-learn、matplotlib 和 seaborn。示例流程包括:
- 创建示例数据集;
- 对类别特征进行 One-Hot、Ordinal、Label 编码;
- 对数值特征进行三种缩放并可视化对比;
- 生成多项式特征;
- 构造交互特征与领域特定特征;
- 提取时间特征;
- 使用 ColumnTransformer 构建预处理流水线,将数值特征缩放与类别特征 One-Hot 编码组合;
- 计算特征统计量(均值、标准差、最小值、最大值、偏度、峰度);
- 绘制特征相关性热力图与工程化特征分布图;
- 进行等宽与等频分箱;
- 处理缺失值。
适用场景
- 需要使用原始特征之外的变换来提升模型性能;
- 处理需要编码的类别变量;
- 特征尺度不同、需要归一化;
- 基于业务知识创建领域特定特征;
- 处理偏态分布或非线性关系;
- 为不同类型、有特定要求的机器学习算法准备数据。
关键原则与最佳实践
- 基于领域知识创建特征;
- 移除冗余特征;
- 对特征进行适当缩放;
- 正确处理类别变量;
- 创建有意义的交互项;
- 在特征工程前理解业务领域;
- 创建可解释的特征;
- 避免数据泄漏(使用未来信息);
- 工程化后测试特征重要性;
- 记录所有变换;
- 针对不同算法使用合适的缩放方式。
常见变换
- 对数变换:用于偏态分布;
- 多项式特征:用于非线性关系;
- 交互项:用于组合效应;
- 分箱:用于类别近似;
- 归一化:用于跨尺度比较。
交付物
- 工程化后的特征数据集;
- 特征变换文档;
- 新特征的相关性分析;
- 变换前后的分布对比;
- 特征重要性排名;
- 预处理流水线代码;
- 包含特征描述的数据字典。
限制
资料中未提供关于收费、价格、平台支持范围或具体效果指标的信息。