2. 特征流水线概念:定义、流程与离线/在线区别

特征流水线(Feature Pipeline)是推荐系统中将原始数据转化为模型可直接使用的特征向量的全链路处理系统。它覆盖从数据采集、清洗、变换到特征存储与服务的完整过程,是连接数据层与模型层的核心桥梁。

2.1 特征流水线的定义

特征流水线是一组有序的数据处理步骤,其输入是原始日志、用户画像、物品属性等异构数据,输出是结构化的特征向量(Feature Vector)。每条流水线通常包含以下核心环节:

  • 数据接入:从消息队列(Kafka)、离线数仓(Hive)、在线缓存(Redis)等源头拉取数据。
  • 数据清洗:处理缺失值、异常值、重复数据,统一时间戳与ID格式。
  • 特征变换:执行分桶、归一化、交叉组合、Embedding映射等数学变换。
  • 特征存储:将加工后的特征写入离线表(训练用)或在线存储(推理用)。
  • 特征服务:在线阶段通过RESTful API或gRPC接口对外提供实时特征查询。
核心原则:训练时使用的特征处理逻辑必须与推理时完全一致,否则会导致训练-推理偏差(Training-Serving Skew)。

2.2 端到端特征处理流程

一个完整的特征流水线从原始数据到模型特征向量,通常经历以下五个阶段:

阶段 输入 主要操作 输出
① 数据采集 用户点击日志、曝光日志、物品属性表 实时流接入(Kafka) + 离线批量导入(Hive) 原始事件流 / 离线宽表
② 数据清洗 原始事件流 / 宽表 去重、空值填充、异常值截断、时间对齐 干净的结构化数据
③ 特征计算 干净的结构化数据 统计聚合、交叉组合、Embedding查询、分桶归一化 特征列(Feature Columns)
④ 特征存储 特征列 写入离线TFRecord / 在线Redis / Faiss向量库 训练样本集 / 在线特征快照
⑤ 特征服务 在线特征快照 特征拼接、实时计算、模型推理输入 模型推理请求的特征向量
端到端特征处理流程 数据采集 数据清洗 特征计算 特征存储 特征服务 原始日志/属性 干净结构化数据 特征列 训练样本/特征快照 模型推理特征向量 离线流水线:批量处理,覆盖阶段①→④,产出训练样本 在线流水线:实时处理,覆盖阶段①→②→③→⑤,产出推理特征 关键约束:离线与在线流水线必须使用同一套特征计算逻辑代码 避免训练-推理偏差(Training-Serving Skew)

2.3 离线与在线特征流水线的区别

离线流水线与在线流水线在时效性、计算模式、存储介质、容错策略等方面存在本质差异。理解这些区别是设计健壮特征系统的前提。

对比维度 离线特征流水线 在线特征流水线
处理模式 批量(Batch),通常按天/小时调度 实时(Real-time),毫秒级响应
数据源 Hive 表、HDFS 文件、离线日志 Kafka 流、Redis 缓存、实时事件
计算引擎 Spark / Hive / MapReduce Flink / 自研C++服务 / 轻量Python服务
特征存储 TFRecord / Parquet / Hive 特征宽表 Redis / Faiss / 本地内存 / 特征缓存
容错策略 任务重跑 + 数据回溯 降级 + 默认值 + 熔断
特征时效性 T+1 或小时级延迟 秒级甚至毫秒级延迟
典型产出 训练样本集(用于模型训练) 推理特征向量(用于模型预估)
实践建议:在搭建特征流水线初期,建议先实现离线流水线,快速产出训练样本验证模型效果;待模型稳定后,再基于同一套特征逻辑开发在线流水线,并通过离线-在线一致性校验(Offline-Online Consistency Check)确保无偏差。
离线 vs 在线特征流水线架构对比 离线特征流水线 Hive 原始日志 Spark 批量清洗 特征计算(批量) TFRecord 存储 模型训练(T+1) 在线特征流水线 Kafka 实时事件 Flink 实时清洗 特征计算(实时) Redis 特征缓存 模型推理(毫秒级) 核心要求:离线与在线使用同一套特征计算逻辑,确保训练-推理一致性

2.4 离线与在线流水线的协同策略

在实际生产系统中,离线与在线流水线并非完全独立,而是通过以下机制协同工作:

  1. 特征逻辑复用:将特征计算代码封装为公共库(如 Feature Function Lib),离线 Spark 任务与在线 Flink 任务引用同一份代码。
  2. 离线-在线一致性校验:定期抽取在线特征快照与离线特征进行对比,监控特征值偏差是否在容忍范围内。
  3. 特征回溯:当在线特征出现异常时,使用离线流水线重新计算历史特征,修复训练样本。
  4. 渐进式上线:先离线验证特征有效性,再逐步将特征加入在线流水线,通过 A/B 实验评估效果。
常见陷阱:离线流水线使用当前时间戳计算“历史特征”,而在线流水线使用事件发生时间戳,导致特征值不一致。解决方案是统一使用事件时间(Event Time)作为特征计算基准。

2.5 本章小结

  • 特征流水线是推荐系统中连接原始数据与模型特征的核心链路,包含数据接入、清洗、变换、存储、服务五个阶段。
  • 离线流水线以批量方式处理历史数据,产出训练样本;在线流水线以实时方式处理流式数据,产出推理特征。
  • 离线与在线流水线在计算引擎、存储介质、容错策略、时效性等方面存在显著差异,但必须共享同一套特征计算逻辑。
  • 训练-推理一致性是特征流水线设计的首要原则,需要通过代码复用、一致性校验、特征回溯等机制保障。