# Ml Feature Engineering

> 从原始字段构造模型输入特征的决策手册。当用户面对新数据集不知各列怎么处理——数值要不要 标准化/对数/分箱、类别列选序数/one-hot/目标编码、高基数怎么办、时序怎么造滑动窗口/滞后 特征而不偷看未来、要不要交叉特征——或训完想复盘特征重要性时激活。 trigger: feature engineering 特征工程、encoding、one-hot、target encoding 目标编码、 normalization 标准化、binning 分箱、lag features 滞后特征、high cardinality 高基数。 动作: 按"先切分→体检→数值→类别→时间→交叉→重要性复盘"顺序过处理链。 不适用于: 已有特征池挑选压缩（ml-dimensionality）、泄漏排查（ml-leakage-defense）、 效果归因（ml-diagnosis）。

- Skill: `fieldlu/ml-feature-engineering` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add fieldlu/ml-feature-engineering`
- Raw SKILL.md: https://api.skillmd.com/api/skills/fieldlu/ml-feature-engineering/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: fieldlu (https://skillmd.com/u/fieldlu)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/fieldlu/ml-feature-engineering

---


# 特征工程决策手册 — 先切分再造特征，统计量只认训练折

## R — 原文 (Reading)

> "Keep the first model simple and get the infrastructure right."
> （保持第一个模型简单，先把基础设施做对——基础设施主要指数据管道与特征处理链。）
>
> — Martin Zinkevich, 《Rules of Machine Learning》 Rule #4（Google 工程经验总结，公开文档；通行表述直引）

> 决定机器学习项目成败差异的最大单一因素，是所使用的特征；特征工程是把领域知识注入模型的主要通道。（转述）
>
> — 转述自 Pedro Domingos, "A Few Useful Things to Know About Machine Learning", CACM 2012 第 1 节（来源性质：业界公认综述论文）

> 表格类任务中，换更强算法带来的提升通常小于认真做特征带来的提升；垃圾进垃圾出（garbage in, garbage out）——模型放大的是你喂给它的信号质量。（转述，Kaggle 高排名选手赛后复盘的通行说法）
>
> — 工程实践共识（Kaggle community wisdom）

> **来源说明**: 本 skill 属批C"工程实践共识"系列——《机器学习》(西瓜书)不含工程落地内容
> （BOOK_OVERVIEW 批判: "全书不讲数据质量管理、特征管道版本化、线上-线下一致性"），
> 故 R 段改引业界公开文献并标注来源性质；凡无法保证逐字精确处一律标（转述）。

---

## I — 方法论骨架 (Interpretation)

特征工程 = 把原始字段翻译成模型假设空间听得懂的语言。四类字段各有自己的决策树：

- **数值特征**: 缺失与异常先行；变换三问——强偏态→对数变换；量纲混杂且模型是线性/距离类→标准化；需要分段稳定效应→分箱。树模型对单调变换免疫，不必白费。
- **类别特征**: 有序→序数编码保序；低基数无序→one-hot；高基数→折外目标编码（带平滑）/哈希/embedding。ID 与编号列永远不入模。
- **时间特征**: 只用"预测时刻之前"的信息——滞后项、历史窗口聚合、日历属性；窗口右端不得越过预测时刻。
- **特征交叉**: 线性模型需要手工交互项，树模型天然自带；优先领域知识驱动，拒绝暴力笛卡尔积。

两条元纪律高于一切技巧。其一，**先切分后变换**：均值、分位数、分箱边界、编码映射表等一切统计量只在训练折内学习，再 transform 到验证/测试——否则编码器本身就是泄漏源。其二，**重要性复盘**：训完必看特征重要性排序，异常高的特征先查泄漏再庆祝。

---

## A1 — 业界公开案例 (Past Application)

> 注: 西瓜书无对应案例（工程落地不在书内），本节改用业界公开案例充当类比素材。

### 案例 1: Google Play 推荐的 Wide & Deep 架构 (Cheng et al., 2016)
- **问题**: 推荐模型既要记住"见过就推"的历史共现规律，又要对没见过的组合有泛化能力。
- **方法论的使用**: wide 部分用手工特征交叉（已装应用 × 曝光应用）负责记忆；deep 部分把高基数稀疏类别嵌入低维稠密向量负责泛化；两路联合训练。
- **结论**: 特征交叉与 embedding 不是二选一的流派之争，而是"记忆 vs 泛化"的分工。
- **结果**: 成为工业推荐系统的标准骨架之一，"交叉给记忆、embedding 给泛化"沉淀为通用设计词汇。

### 案例 2: Kaggle 表格赛的高基数类别处理
- **问题**: 商品/广告数据的类别列动辄数十万取值，one-hot 直接维度爆炸。
- **方法论的使用**: 社区沉淀出目标编码（类别值替换为其对应目标均值）的标准安全用法——K 折外拟合（out-of-fold）+ 平滑；CatBoost 的 ordered target statistics 是这一思路的系统化版本。
- **结论**: 高基数不是绝路，但目标编码器本身是泄漏高危点，折外拟合的成本不可省略。
- **结果**: 目标编码进入主流 GBM 生态的默认工具箱，同时"target encoding 泄漏"成为最著名的翻车词条。

### 案例 3: 书内理论回声——编号属性的终点演示 (c14)
- **问题**: 把样本"编号"列喂给按信息增益选属性的决策树会发生什么？
- **方法论的使用**: 原书实际演算：编号列每个取值恰对应一个样本，信息增益高达 0.998，用它划分的树训练误差为 0 却毫无泛化能力。
- **结论**: "ID 类特征不入模"这条工程铁律在书内有最干净的理论演示——工程界将其固化为特征管道的第一道过滤规则。
- **结果**: 本 skill 的数据体检步骤据此把 ID/编号列列为显式隔离项。

---

## A2 — 触发场景 (Future Trigger) ★

### 用户会在什么情境下需要这个 skill?

1. 用户拿到新表格数据集，问"这列日期怎么处理""城市列几百个取值怎么办""要不要标准化/取对数"。
2. 用户做时序预测，要构造滑动窗口/滞后特征，担心用到未来信息。
3. 用户想给线性模型或推荐模型造交叉特征，或 one-hot 后维度爆炸不知如何取舍。
4. 用户跑完模型看特征重要性，发现某个特征重要性高得离谱，分不清是宝藏还是炸弹。
5. 用户听说 target encoding 但不清楚它为什么危险、怎么用才安全。

### 语言信号 (用户的话里出现这些就应激活)

- "**特征工程**怎么做" / "feature engineering" / "这个**特征**该怎么处理"
- "one-hot **维度爆炸**" / "**高基数**类别" / "high cardinality" / "**目标编码**会不会泄漏"
- "**标准化**还是**归一化**" / "要不要取**对数**" / "standardize" / "log transform" / "**分箱**"
- "**滑动窗口**/**滞后特征**会不会用到未来" / "lag features" / "time series features"
- "特征**重要性**第一名是个 ID 列？" / "feature importance looks weird"

### 与相邻 skill 的区分

- 与 `ml-dimensionality` 的区别: 那是从已有特征池里做减法（特征选择、PCA 压缩）；本 skill 是从原始数据造出特征池的加法环节。先后衔接：先构造，后挑选。
- 与 `ml-leakage-defense` 的区别: 那是泄漏的全局审计体系（三大类型+检测信号+上线清单）；本 skill 只在"变换器/编码器怎么写才不漏"这一个点与其交界，全面排查移交对方。
- 与 `ml-diagnosis` 的区别: 效果不好时的偏差/方差归因归它；若诊断揪出 ID 列红旗，构造侧的整改回到本 skill。
- 与 `ml-evaluation-design` 的区别: 切分方案由它事先设计；本 skill 的一切"折内拟合"纪律以那份划分为前提。

---

## E — 可执行步骤 (Execution)

当 skill 被激活后, agent 按以下**新数据集特征处理顺序清单**执行:

1. **第 0 步: 先切分，再动手**
   - 与用户确认训练/验证/测试（或 CV 折）划分已定且与任务匹配（时序必须按时间切）；此后所有统计量只允许在训练部分计算。
   - 完成标准: 划分方式（随机/分层/按时间）被明确写出。
   - 判停条件: 划分未定或可疑 → 移交 ml-evaluation-design，本清单暂停。

2. **数据体检**
   - 逐列登记: 类型（数值/类别有序/类别无序/时间/文本/ID）、缺失率、唯一值数、与目标的粗关系。
   - 完成标准: 产出一列清单表；ID/编号类高基数列被显式标记"不入模"。

3. **数值特征处置**
   - 顺序: 缺失（填充参数折内学）→ 异常（业务判断截断/保留）→ 变换（强偏态→log1p；线性/距离类模型→标准化；树模型跳过后两项）。分箱仅用于需要稳定性/可解释/喂养线性模型时，箱边界来自训练折。
   - 完成标准: 每个数值列留下"缺失/异常/变换"三行处理记录。

4. **类别特征选码**
   - 决策序: 有序→序数编码；低基数无序（≲15 取值）→one-hot；高基数→折外目标编码（带平滑）或哈希/embedding。
   - 完成标准: 编码器 fit 只见过训练折；每列记录所选编码及一句理由。
   - 判停条件: 手头只有"全量拟合"式目标编码实现 → 停，改折外方案或退回 one-hot/频数编码。

5. **时间特征**
   - 只允许三类: 滞后项（lag）、历史窗口聚合（窗口右端 ≤ 预测时刻）、日历属性。
   - 完成标准: 对每个时间特效能回答"该值的计算范围是否完全落在预测时刻之前"。

6. **特征交叉与交互**
   - 线性/推荐场景用领域知识挑 2-3 组交叉；树模型默认不加。
   - 完成标准: 每个交叉项写明业务动机，无全组合暴力相乘。

7. **重要性复盘**
   - 训完看重要性排序: Top 特征逐一过"预测时刻可得性"质询，并对头号特征做一次消融。
   - 完成标准: 头部特征均有可得性确认；异常者移交 ml-leakage-defense 深查后才可作为结论引用。

---

## B — 边界 (Boundary) ★

### 不要在以下情况使用此 skill

- 端到端深度学习场景（图像/语音/原始文本）: 表示学习自动完成特征工作，手工流程基本不适用（只剩输入侧预处理）。
- 数据还没看一眼就开始批量造特征: 先体检后构造；顺序颠倒会围绕脏数据设计出一堆精致废料。
- 目标是因果推断的项目: 本 skill 的全部手段都在制造相关性特征，直接喂因果分析会引入碰撞偏差等新问题。

### 业界警告的失败模式

- **目标编码全量拟合**: 把测试集答案的平均值写进训练特征，线下虚高线上崩——最高频翻车点，深查走 ml-leakage-defense。
- **训练/服务 skew**（Zinkevich 反复强调）: 离线管道里的特征在线上拿不到或口径不一致，模型一上线就失灵。
- **garbage in garbage out**: 特征工程救不了错误标签与错误采集，先查数据质量再谈加工。
- **暴力交叉爆炸**: 笛卡尔积式组合稀释样本，维度上天收益为负。

### 作者盲点 / 时代局限 (为何需要本 skill)

- 西瓜书的工程落地环节不在书内（BOOK_OVERVIEW 批判原文: "全书不讲数据质量管理、特征管道版本化、线上-线下一致性、A/B 上线等落地环节；'评估'止步于离线指标"）——本 skill 即对该盲点的补全。
- 书内有价值的锚点是反向的: c14 编号属性演示（信息增益 0.998、训练误差 0 而泛化为零）正是"ID 列不入模"的理论根据，本 skill 将其工程化为第一道过滤。
- 书中 i.i.d. 前提不给时序特征留位置，滑动窗口的时间边界纪律只能来自时序建模实践。

### 容易混淆的邻近方法论

- **特征选择 ≠ 特征工程的前半段**: 选择是在既有池上做减法（ml-dimensionality），工程是先做乘法造池子。
- **数据清洗 ≠ 特征工程**: 清洗恢复数据本来面目，特征工程改造它适配假设空间；流水线的前后两站。
- **"embedding 终结了手工特征"**: embedding 只是高基数类别的一种编码选项；表格数据上手工特征至今仍是 GBDT 竞赛主力，谈不上取代。

---

## 相关 skills

- depends-on: ml-evaluation-design（先有划分，才有"折内拟合"可言）
- contrasts-with: ml-dimensionality（构造 vs 挑选/压缩）
- composes-with: ml-leakage-defense（编码器泄漏深挖）, ml-diagnosis（ID 列红旗的构造侧整改）, ml-experiment-tracking（特征管道版本化）

---

## 审计信息

- **验证通过**: 批C·工程实践共识单元（无书内对应章节，书内仅 c14 提供理论回声）；V1 ✓ / V2 ✓ / V3 ✓ 待阶段 3 统一复核
- **测试通过率**: 待阶段 3 测试 (详见 test-prompts.json)
- **skill_version**: 0.0.1
- **蒸馏时间**: 2026-08-24

