← 返回题目列表

什么是特征交叉(特征组合)?有什么作用?

高频 中等 第 8 / 25 题 更新于 2026/08/02
特征工程特征交叉特征组合CTR

简化版

特征交叉(Feature Crossing / 组合) 是把两个或多个特征组合成新特征,用来表达单个特征无法体现的交互关系。典型作用:给线性模型注入非线性/条件依赖(如「城市×时段」比单独的城市、时段更能预测打车需求)。常见形式:类别×类别(笛卡尔组合,如「性别_男 & 品类_美妆」)、数值×数值(乘积、比值、多项式)、数值×类别(分组统计)。缺点是组合爆炸、维度飙升、稀疏、易过拟合。工业界的演进路线:人工交叉 → GBDT 自动交叉 → FM/FFM → Wide&Deep/DeepFM 用神经网络自动学高阶交叉

详细版

常见交叉形式:

形式例子作用
类别 × 类别城市_北京 & 时段_晚高峰表达组合条件下的模式
数值 × 数值身高/体重(BMI)、面积=长×宽构造有业务含义的比值/乘积
数值 × 类别各城市的平均消费分组统计特征
多项式x₁², x₁x₂线性模型拟合非线性

为什么有用: 很多目标依赖特征的组合而非单个特征。线性模型 w₁x₁ + w₂x₂ 无法表达「只有 x₁ 和 x₂ 同时满足时才怎样」这种交互,显式交叉把交互变成一个新特征,模型就能学它的权重。

代价: 组合数量呈乘积增长,高基数类别交叉后维度爆炸、极稀疏、易过拟合,需要特征选择或自动化方法控制。

完整版教学

一、为什么需要特征交叉——线性模型的「加法」表达不了「交互」

线性模型的预测是各特征的加权求和

y = w₁·x₁ + w₂·x₂ + b

这意味着每个特征独立地、可加地影响结果——x₁ 的贡献和 x₂ 是多少无关。但现实里大量关系是交互(interaction)的:某个特征的效果取决于另一个特征的取值

举例(打车需求预测):

  • 单看「城市 = 北京」:需求中等。
  • 单看「时段 = 晚高峰」:需求中等。
  • 但「北京 晚高峰」:需求爆表。

这种「1+1 远大于 2」的效应,纯加法模型 w_城市 + w_时段 表达不了——它只会把两个中等相加得到「中等偏上」,抓不到爆发。把「城市×时段」显式组合成一个新特征,模型就能给「北京_晚高峰」这个组合单独学一个大权重,从而捕捉交互。这就是特征交叉的根本价值:把特征间的交互,变成模型能直接学习的显式特征。

二、类别 × 类别:笛卡尔组合

最常见的交叉,把两个类别特征的取值两两组合成新类别:

性别 ∈ {男, 女}
品类 ∈ {美妆, 数码, 母婴}
交叉后 → {男_美妆, 男_数码, 男_母婴, 女_美妆, 女_数码, 女_母婴}

在 CTR / 推荐里极其常用(如「用户性别 × 商品品类」「用户ID × 广告ID」)。它让模型能学到「特定人群对特定品类」的精细偏好,而不只是「男性整体」「美妆整体」。代价:组合数 = 两特征基数之积,高基数一交叉就维度爆炸、极其稀疏。

三、数值 × 数值:乘积、比值、多项式

  • 有业务含义的组合最有价值:BMI = 体重 / 身高²面积 = 长 × 宽客单价 = 金额 / 件数点击率 = 点击 / 曝光。这些比原始特征更贴近目标。
  • 多项式特征:自动生成 x₁²、x₂²、x₁x₂ 等,让线性模型能拟合二次曲面/交互项。sklearn 的 PolynomialFeatures 一键生成,但阶数一高维度就暴涨。

四、数值 × 类别:分组统计特征

用类别对数值做分组聚合,构造统计特征:

  • 「每个城市的平均消费」「每个品类的历史转化率」「每个用户过去 7 天的下单次数」。
  • 本质是「类别 → 该类别下某数值的统计量(均值/计数/方差/最值)」,信息量大,是特征工程涨点利器。
  • 注意防泄露:分组统计若用到当前样本或未来数据,会泄露目标信息,需交叉折/时间切分(和 Target Encoding 同理)。

五、工业界的自动化演进——从手工到神经网络

人工交叉靠经验、覆盖不全、还组合爆炸,于是有了自动学习交叉的一整条演进线(CTR 领域的经典脉络):

  1. 人工交叉 + LR:早期靠专家手工设计交叉特征喂逻辑回归,费人力、难穷尽。
  2. GBDT 自动交叉:树的一条「根到叶」路径本身就是多个特征的组合(城市=北京 且 时段=晚高峰 且 ...),GBDT 能自动发现有用的高阶交叉。经典方案 GBDT + LR(Facebook)用 GBDT 叶子编号当交叉特征喂 LR。
  3. FM(因子分解机):给每个特征学一个隐向量,用隐向量内积表达任意两特征的二阶交叉,解决了高维稀疏下交叉特征学不动的问题(没共现过的组合也能靠隐向量泛化)。FFM 再引入 field 概念更精细。
  4. Wide & Deep / DeepFM / DCN:用深度网络自动学习高阶非线性交叉,Wide 侧记忆人工/显式交叉,Deep 侧泛化高阶交叉,成为现代推荐/广告的主流架构。

理解这条线,就理解了「特征交叉」从手工特征工程一路走向模型自动化的历史。

六、代价与常见坑

  • 组合爆炸 + 稀疏:类别交叉维度 = 基数之积,高基数交叉后维度巨大、样本在每个组合上极稀疏,很多组合只有个位数样本,学出来的权重不可信。
  • 过拟合:稀疏的高阶交叉极易过拟合,需要正则化、特征选择、只保留高频组合、或用 FM/embedding 泛化
  • 数据泄露:分组统计、Target 类交叉必须防用到未来/自身信息。
  • 树模型要不要手工交叉? 树能自动做特征组合,手工交叉收益小;线性模型最需要手工/自动交叉,因为它自己不会组合。

七、用数字和工程流程校验理解

线性模型 w1×城市 + w2×设备 只能叠加两个主效应;加入 城市=上海 × 设备=iOS 交叉项后,才可单独学习该组合。若城市 100 类、设备 20 类,完整笛卡尔交叉最多产生 2000 个类别,稀疏与过拟合风险随之上升。

对象/方案核心机制选择或风险
类别×类别笛卡尔组合/哈希捕捉特定组合效应
数值×数值乘积、比值、多项式表达非线性与相互作用
数值×类别分组统计或分段斜率严格执行 OOF 防泄露

把面试题落到可执行流程:

domain hypothesis
 -> construct candidate crosses
 -> fit in train folds only
 -> validate gain, stability and serving cost

交叉项不是越多越好;没有业务或验证依据的全组合会造成维度爆炸,并把偶然共现当规律。

八、常见误区与追问

  • 误区:树模型完全不需要考虑特征交互。 树能自动形成部分交互,但深度、样本量和模型约束决定能否稳定学到。
  • 误区:分组均值特征只要来自训练集就不会泄露。 训练样本本身标签若参与自己的分组统计仍会泄露,应采用 OOF 计算。
  • 追问:为什么线性模型需要显式交叉? 原始线性项只能表达加法关系,乘积或组合项扩展了特征空间。
  • 追问:哈希交叉有什么好处? 固定维度并支持未知组合,代价是哈希冲突和解释性下降。
  • 追问:如何筛选交叉项? 从业务假设出发,用正则化、消融实验和跨时间验证确认增益。

九、加强记忆

记忆时抓住这条主线:特征交叉 = 把多个特征组合成新特征,核心是表达「交互」——某特征的效果取决于另一特征取值(「北京×晚高峰」需求爆发),而线性模型只会加权求和 w₁x₁+w₂x₂,天生表达不了交互,所以要把交互显式造成特征让模型学。形式有类别×类别(笛卡尔,CTR 常用)、数值×数值(BMI、面积、比值、多项式)、数值×类别(分组统计)。代价是组合爆炸、稀疏、易过拟合、可能泄露。工业演进主线要记牢:人工交叉+LR → GBDT自动交叉(GBDT+LR)→ FM/FFM 用隐向量内积解决高维稀疏 → Wide&Deep/DeepFM 神经网络学高阶交叉。补一句:树模型自动组合、收益小;线性模型最需要交叉