3. Feature Store 核心概念:特征定义、特征视图、特征服务、在线/离线特征存储的差异
在金融图谱场景中,Feature Store(特征仓库)是连接数据工程与模型推理的核心中间层。它并非简单的存储系统,而是一套管理特征全生命周期的工程框架。理解其核心概念,是构建批流一体特征管道的前提。
3.1 特征定义(Feature Definition)
特征定义是 Feature Store 中最基础的元数据单元,它描述了一个特征从哪张表、哪个字段、经过何种计算逻辑产生。在金融风控中,一个特征定义通常包含以下属性:
| 属性 | 说明 | 金融图谱示例 |
|---|---|---|
| 特征名称 | 全局唯一的特征标识符 | user_30d_loan_cnt |
| 特征类型 | 数值型、类别型、文本型、时序型 | 数值型(int64) |
| 数据源 | 原始数据表或流式 topic | ods.loan_records |
| 计算逻辑 | SQL 或 UDF 表达式 | COUNT(loan_id) WHERE status='completed' |
| 时间窗口 | 滑动窗口大小(离线/实时) | 30 天(滑动窗口) |
| 新鲜度要求 | 特征可接受的最大延迟 | 5 分钟(在线推理) |
金融图谱实践要点:特征定义必须绑定实体 ID(如
user_id、device_id),因为图谱中的节点和边关系最终都要映射到可检索的实体键上。建议在特征定义中额外标注 graph_entity_type 字段,便于后续特征视图的自动关联。
3.2 特征视图(Feature View)
特征视图是将一组逻辑相关的特征定义打包成一个可复用的数据集合。它定义了特征的时效性窗口、主键以及在线/离线存储的映射策略。在金融图谱中,特征视图通常对应一个实体类型或一种关系类型。
一个典型的特征视图包含以下组件:
- 实体主键:如
user_id,用于在线服务时的点查。 - 特征列表:从特征定义中选取的若干特征。
- 时间戳字段:标识特征值生成的时间点,用于时间旅行查询。
- 存储策略:指定哪些特征存入在线存储(如 Redis),哪些仅保留离线存储(如 Hive)。
- 批流映射:离线批处理视图与实时流处理视图的关联规则。
设计建议:在金融图谱场景下,建议按“实体-关系”维度组织特征视图。例如:
user_profile_view(用户属性)、user_loan_behavior_view(用户借贷行为)、user_guarantee_network_view(担保网络关系)。每个视图内部保持特征的高内聚性,避免跨实体混用。
3.3 特征服务(Feature Service)
特征服务是面向模型推理的 API 层,它将多个特征视图组合成一个完整的特征向量,供模型在线或批量调用。特征服务屏蔽了底层存储的差异,对外暴露统一的接口。
特征服务的核心能力包括:
- 点查(Point-in-Time Lookup):根据实体 ID 和时间戳,返回该时刻的特征值。
- 批量检索(Batch Retrieval):一次性获取多个实体的特征向量,用于离线评估或批量推理。
- 特征拼接(Feature Join):自动将多个特征视图按实体主键进行横向拼接。
- 新鲜度路由:根据请求的时效性要求,自动选择从在线存储或离线存储读取。
常见陷阱:特征服务层容易忽略“时间一致性”。在金融图谱中,如果在线请求的时间戳与离线训练时的时间戳不一致,会导致特征穿越(data leakage)。务必在特征服务中强制传入
request_timestamp 参数,并基于该时间戳进行特征回溯。
3.4 在线/离线特征存储的差异
在线存储与离线存储的设计目标完全不同,它们在延迟、容量、一致性模型上存在显著差异。下表总结了核心区别:
| 维度 | 离线存储 | 在线存储 |
|---|---|---|
| 典型技术 | Hive / HDFS / Parquet | Redis / HBase / Cassandra |
| 访问模式 | 全表扫描、分区扫描 | 主键点查、批量主键查 |
| 延迟要求 | 分钟级 ~ 小时级 | 毫秒级(< 10ms) |
| 数据容量 | PB 级,全量历史 | GB ~ TB 级,近期活跃数据 |
| 一致性模型 | 最终一致性(批处理完成即一致) | 强一致性或最终一致性(视配置) |
| 更新频率 | 天级 / 小时级 | 秒级 ~ 分钟级(流式写入) |
| 金融图谱适用场景 | 离线训练、回溯分析、特征探索 | 实时风控、在线推荐、图查询 |
在批流一体架构中,离线存储与在线存储之间需要保持数据同步。通常的做法是:
- 离线批处理任务每天生成全量特征快照,写入离线存储。
- 实时流处理任务持续更新在线存储中的近期特征值。
- 定期(如每小时)执行一次“离线到在线”的批量同步,补齐在线存储中缺失的历史窗口。
3.5 金融图谱中的存储选型策略
在金融图谱 Feature Store 中,存储选型需要额外考虑图结构的查询特性。以下是针对不同场景的推荐方案:
| 场景 | 推荐在线存储 | 推荐离线存储 | 关键考量 |
|---|---|---|---|
| 用户画像特征(单实体) | Redis(Hash 结构) | Hive(ORC 格式) | 点查延迟 < 5ms,支持 TTL 过期 |
| 图谱邻居聚合特征 | HBase(宽表设计) | Parquet(按分区存储) | 支持批量扫描,适合 1-N 邻居特征 |
| 时序行为序列特征 | Redis(Sorted Set) | Hive(按时间分区) | 支持滑动窗口截取,在线只保留最近 N 条 |
| 图嵌入向量特征 | FAISS / Milvus | HDFS(向量文件) | 在线需要向量相似度检索,离线用于训练 |
金融图谱实践要点:对于图谱中的“多跳邻居特征”,在线存储建议使用 HBase 或 Cassandra,因为它们天然支持宽行存储,可以将一个实体的所有邻居特征放在同一行中,减少在线查询时的网络开销。离线存储则建议使用 Parquet 列式格式,便于后续的图特征回溯分析。
通过合理划分特征定义、特征视图和特征服务,并针对在线/离线存储的差异进行针对性设计,金融图谱 Feature Store 能够在保证数据一致性的前提下,同时满足离线训练的大吞吐需求和在线推理的低延迟要求。这是批流一体架构在金融风控场景落地的关键基础。