Skip to content
Charles Shao
Go back

特征工程系统化框架:能用哪些料、料从哪进、料坏了怎么报警

views

上一篇总览说清了「特征决定上限」,也说了同一套特征在离线和在线要同口径。这一篇把镜头拉远,看一套能长期跑的特征体系长什么样。

备料师要接手一个新后厨,得先想明白三件事:这道菜能用哪些料?料从哪进货?料坏了谁来报警? 对应到机器学习,就是特征工程的三张清单——特征使用方案、特征获取方案、特征监控方案。全程用一个真实任务串起来:美团「点击下单率」预估

Table of contents

Open Table of contents

一句话理解

一个上线跑几年的模型,80% 的效果由特征带来。所以特征体系不是「训练前搭一次」的一次性工程,而是像后厨供应链一样,要选品、要进货、要天天质检

  • 使用方案 = 菜单设计:这道菜该放哪些料,哪些料现在拿得到。
  • 获取方案 = 供应链:料从哪进、怎么存、要多快能上桌。
  • 监控方案 = 质检:料新不新鲜、够不够、坏没坏,坏了怎么应急。

0. 先定位:特征工程在整个框架的哪一段

一个经典的机器学习任务链路是:

数据清洗  ⇒  特征 & 标注数据生成  ⇒  模型学习  ⇒  模型应用
└────────── 特征工程 ──────────┘

特征工程就是前两步:从原始数据(文本、图像、行为日志)里清洗出特征和标注。这里又分离线、在线两条道(上一篇讲过):

实例:美团点击下单率预估

维度内容
业务目标提高团购体验,帮用户更快找到想买的单子
技术目标预测用户「点击 / 购买」团购单的概率(点击下单率)
度量离线看 AUC;在线用 ABTest 看下单率 / 转化率

下面三张清单,都围绕这个任务展开。


1. 第一张清单:特征使用方案(选哪些料)

确定技术目标后,第一步是梳理哪些数据可能和用户行为相关,并评估它们到底能不能用

特征使用方案:先按业务经验圈出候选特征(上下文/用户/物品三类),再用「获取难度、覆盖率、准确率」三把尺子做可用性评估,筛掉拿不到、覆盖低、不可靠的料

1.1 先按业务经验圈候选

和「用户点击 / 下单」可能相关的特征,大致三类:

类别例子
上下文特征用户与商家的距离、当前时段
用户特征历史行为(点击/购买记录)、实时兴趣、人口属性(年龄、性别)
物品(团购单)特征单子质量、热度(购买人数、评价数)

1.2 再用三把尺子做「可用性评估」

圈出来不等于能用。每个候选特征过三关:

尺子问什么反例
获取难度这数据容易拿到吗?用户年龄常常非必填 → 得靠模型预测,引入额外复杂度
覆盖率能覆盖多少样本?PC 用户没地理位置;新用户没历史行为
准确率数据可靠吗?用户自填的性别、第三方给的「单子质量」都可能有误差

一个特征哪怕「理论上很强」,只要覆盖率太低或准确率太差,也可能弊大于利。可用性评估的本质,是在「预测力」和「可得性 / 可靠性」之间权衡


2. 第二张清单:特征获取方案(料从哪进)

选好了料,接下来是用什么技术栈把它算出来、存起来、供上线读取。离线和在线的约束完全不同:

环境技术要求存储 / 工具场景
离线可用海量数据,容忍一定延时HDFS、MapReduce、Spark批量分析处理
在线极度注重延时查找性能索引、KV 存储实时快速取数

分层获取:粗排用「基础料」,精排用「高级料」

在线服务为了兼顾延时和效果,普遍采用分层特征方案

特征分层获取:粗排阶段只用基础特征、直接建入索引,保证极低延时先粗筛;精排阶段再取个性化的深度特征(实时兴趣、深度画像)做复杂计算,用在少量候选上

这套「贵料只用在少数候选上」的思路,和推荐系统召回 → 排序的漏斗完全同构:越往后,候选越少、单条越贵、特征越精细。


3. 第三张清单:特征监控方案(料坏了报警)

这是最容易被忽略、却最要命的一张清单。同一事物在不同时间的性质可能天差地别(比如「热门」是随时变的),一个上线的特征体系必须天天质检

特征监控闭环:对每个特征持续监控时效性/覆盖率/异常值三大指标,一旦发现异常就对服务降级并通知特征提供方,最终推动源头修复,形成监控→降级→修复的闭环

3.1 三个关键监控指标

指标监控什么出问题的信号
时效性特征是不是最新的同一事物不同时段性质差异大,过期就失真
覆盖率有该特征的样本占比占比骤降 → 上游数据可能断了,需预警
异常值特征取值是否异常异常值干扰决策,需及时发现

3.2 特征有效性分析:这料到底有没有用

要知道每个特征对模型的贡献,看它的权重

类型描述方法
与模型相关的权重用全部特征训模型后,看各特征在模型里的权重线性模型系数等
与模型无关的权重直接分析特征与标签(Label)的相关性,和用什么模型无关交叉熵、Information Gain、Odds ratio、互信息、KL 散度

「与模型无关」的分析很有用:它能在训练模型之前就告诉你哪些特征值得留,是特征选择里过滤法的基础。

3.3 异常处理:监控 → 降级 → 修复的闭环

监控不是为了看报表,是为了出事能兜住

  1. 发现异常:监控界面报出覆盖率、数值异常。
  2. 及时处理:对服务做降级(比如临时用默认值 / 兜底策略),并联系特征数据提供方。
  3. 源头解决:督促特征生成过程本身做好监控,从源头修复。

关键特征一旦悄悄出问题又没人管,后果是灾难性的——模型还在跑,但喂进去的是垃圾,线上指标慢慢烂掉却查不出原因。


TL;DR — 三句话

  1. 一个长期跑的模型,80% 效果由特征带来,所以特征是要「选品 + 进货 + 质检」的持续工程,不是训练前搭一次。
  2. 三张清单:使用方案(圈候选 + 三把尺子做可用性评估)、获取方案(离线海量 / 在线低延时,分层获取)、监控方案(时效/覆盖/异常 + 有效性分析 + 降级闭环)。
  3. 贵料只用在少数候选上(粗排基础特征、精排深度特征),和推荐漏斗同构。

下一篇卷起袖子洗菜——数据预处理:数据观察怎么系统地找问题、异常值有哪些检测法(箱线图 / 切比雪夫 / 孤立森林)、缺失值的四种补法。


views
Share this post on:

Previous Post
MySQL 内核 · 执行计划与慢查询优化
Next Post
MySQL 内核 · redo log、undo log 与 binlog