2. 金融特征工程基础

在金融机器学习项目中,模型效果的上限往往由特征决定,而特征能否被稳定、可追溯、低延迟地供给,则由特征存储决定。理解“特征—特征工程—特征存储”三者的关系,是构建金融级特征平台的第一块基石。本节将从核心概念出发,结合金融场景的特殊约束,给出可落地的认知框架。

一、核心概念:特征、特征工程与特征存储

特征(Feature)是模型输入的可量化信号,是对原始数据的一次或多次变换结果。例如,原始交易流水是数据,而“用户近7天平均单笔消费金额”才是特征。特征具有三个关键属性:实体(Entity)、时间戳(Timestamp)和值(Value)。在金融场景中,实体通常是客户、账户、商户、产品、设备等;时间戳决定了特征在某一时刻的有效性;值则是数值、类别、向量或嵌入。

特征工程(Feature Engineering)是将原始数据转化为模型可用特征的完整过程,包括数据清洗、聚合、窗口计算、编码、归一化、交叉组合等。它不仅是技术操作,更是业务知识的编码过程。例如,风控中的“近30天夜间交易占比”背后是对欺诈行为模式的理解。

特征存储(Feature Store)是特征工程与模型训练、推理之间的中间层,负责特征的注册、存储、版本管理、在线/离线一致性供给。它解决的核心问题是:训练与推理特征不一致(Training-Serving Skew)、特征重复开发、特征血缘缺失和时间点正确性(Point-in-Time Correctness)。

一句话总结:特征是原料,特征工程是加工工艺,特征存储是仓库与物流系统。三者缺一不可,而金融场景对“物流”的时效性、一致性和可审计性要求远高于一般行业。

二、金融场景的特殊性:为什么通用特征工程不够用

金融业务对特征工程提出了远超互联网推荐场景的约束,主要体现在以下五个方面:

  • 强时间依赖与防穿越:金融特征必须严格遵循“当时可知”原则。计算2024年3月1日的违约风险特征时,只能使用该时点之前产生的数据,否则会造成标签泄漏,模型离线AUC虚高、上线后失效。
  • 在线推理低延迟:支付反欺诈、实时授信等场景要求特征在几十毫秒内返回,特征存储必须支持高并发点查,而非批量扫描。
  • 离线在线一致性:同一特征在训练时用Spark计算、推理时用Flink或Redis计算,若逻辑不一致,模型表现会断崖式下跌。
  • 强监管与可审计:金融模型需满足监管审查,特征的定义、来源、变换逻辑、版本变更必须可追溯、可复现。
  • 高基数与稀疏性:商户ID、设备指纹、银行卡号等实体基数极大,特征维度高且稀疏,对存储和计算提出更高要求。

下表对比了通用推荐场景与金融场景在特征工程关键维度上的差异:

维度通用推荐场景金融场景
时间正确性要求中等,允许近似极高,必须严格Point-in-Time
在线延迟要求百毫秒级可接受十毫秒级,部分场景要求毫秒级
一致性要求尽力而为强一致,训练推理必须对齐
可审计性一般强监管,全链路血缘
实体基数用户、物品,中等客户、账户、商户、设备,极高
特征更新频率天级/小时级实时/秒级/天级混合

三、方法流程:从原始数据到可服务特征

金融特征工程的标准流程可归纳为六个阶段,每个阶段都需要特征存储的参与:

  1. 需求定义:明确模型目标、实体、标签口径和特征候选集,形成特征需求文档。
  2. 数据探查与清洗:处理缺失、异常、重复,统一时间口径和实体主键。
  3. 特征变换:窗口聚合、比率、趋势、交叉、编码等,输出特征定义。
  4. 特征注册:将特征元数据(名称、实体、类型、时间窗口、Owner、版本)写入特征存储。
  5. 离线回填与训练集生成:按Point-in-Time逻辑生成训练样本,保证标签与特征时间对齐。
  6. 在线服务与监控:将特征同步至在线存储,提供低延迟查询,并监控特征漂移与缺失率。

以下是一个特征注册的元数据配置示例,展示了金融特征存储中常见的字段定义:

feature:
  name: user_night_txn_ratio_30d
  entity: customer_id
  dtype: float32
  description: "近30天夜间交易笔数占比"
  owner: risk_team
  source: dwd_transaction_detail
  transformation: |
    SELECT customer_id,
           SUM(CASE WHEN hour(txn_time) BETWEEN 0 AND 5 THEN 1 ELSE 0 END)
           / COUNT(1) AS night_ratio
    FROM dwd_transaction_detail
    WHERE txn_time >= date_sub(current_date, 30)
    GROUP BY customer_id
  online_ttl: 7d
  offline_ttl: 365d
  version: v1.2
  tags: [risk, fraud, realtime]

在金融特征存储中,建议为每个特征强制标注时间窗口、实体主键和Owner。缺少任一字段,后续的Point-in-Time回填和线上排障都会变得极其困难。

四、案例与场景:实时反欺诈中的特征流转

以支付反欺诈为例,一笔交易请求到达时,系统需要在50毫秒内完成特征组装并给出风险评分。此时特征存储需要同时提供三类特征:

  • 实时特征:来自Flink的“近5分钟同设备交易次数”,写入在线存储,延迟秒级。
  • 近线特征:来自Spark Streaming的“近24小时用户交易金额均值”,小时级更新。
  • 离线特征:来自数仓的“用户历史最大单笔金额”,天级更新,但需同步至在线存储。

特征存储在此过程中的核心价值是:统一特征定义、保证离线回填与在线查询使用同一套变换逻辑、并提供特征血缘以便事后审计。若缺少特征存储,团队往往会在训练脚本和线上服务中重复实现特征逻辑,导致“离线AUC 0.92,线上AUC 0.71”的典型事故。

金融特征工程与特征存储数据流转 原始数据源 交易流水 用户画像 设备日志 特征工程 窗口聚合 比率/趋势 编码/归一化 特征存储 注册/版本/血缘 离线存储 在线存储 模型服务 训练 推理 监控 Point-in-Time 对齐 训练样本时间戳 ≤ 特征时间戳,防止标签穿越 金融特殊约束:低延迟 · 强一致 · 可审计 · 防穿越 · 高基数 特征存储是满足上述约束的核心基础设施

五、常见误区与复盘

误区一:把特征存储当成“特征数据库”。特征存储的核心不是存储,而是一致性供给与时间正确性。只存不治,等于没有。

误区二:离线特征直接同步到线上即可。离线特征往往基于全量历史计算,若不做时间截断,线上推理会用到未来信息,造成严重泄漏。

误区三:特征定义散落在代码中。没有统一注册和版本管理,特征变更后无法回溯,模型复现成本极高。

误区四:忽视特征监控。金融场景中数据分布漂移频繁,缺少缺失率、均值、PSI等监控,模型失效往往在事后才发现。

复盘建议:在项目初期就建立特征注册规范,强制要求每个特征具备实体、时间窗口、Owner、版本和血缘信息;在训练集生成环节引入Point-in-Time校验;在上线前进行离线在线一致性比对,确保同一实体同一时间点的特征值完全一致。只有把特征当作一等公民管理,金融机器学习项目才能从“一次性实验”走向“可持续生产”。