3. 实时特征基础:实时特征的计算流程与典型举例
实时特征与离线特征最本质的区别在于计算触发方式与响应时效。离线特征依赖批量调度(T+1 或小时级),而实时特征必须在事件发生的毫秒级窗口内完成采集、计算与输出。本节将拆解实时特征的标准计算流程,并给出金融风控中最常见的两类实时特征实例。
3.1 实时特征的计算流程
一个完整的实时特征计算流程通常包含四个阶段:事件捕获 → 流式计算 → 特征加工 → 结果下发。下图展示了这一标准流水线架构。
关键认知:实时特征不是“算得快”,而是“事件一到就触发计算”。离线特征是“定时扫表”,实时特征是“来一条算一条”。架构上必须支持事件驱动与有状态流处理。
3.2 典型实时特征举例
在金融风控场景中,有两类实时特征几乎覆盖了 80% 的线上决策需求:当前设备指纹与实时交易频次。下面分别拆解它们的计算逻辑与数据流。
3.2.1 当前设备指纹
设备指纹不是简单的设备 ID,而是由多个硬件与软件因子组合而成的实时拼接特征。其计算流程如下表所示:
| 步骤 | 输入 | 计算逻辑 | 输出 | 延迟要求 |
|---|---|---|---|---|
| 1. 因子采集 | SDK 上报的原始参数 | 提取 IMEI、OAID、MAC、SSID、蓝牙列表、传感器列表 | 原始因子 JSON | < 20ms |
| 2. 因子清洗 | 原始因子 JSON | 去重、排序、空值填充、格式标准化 | 标准化因子列表 | < 10ms |
| 3. 指纹拼接 | 标准化因子列表 | 按固定顺序拼接 + SHA256 哈希 | 设备指纹字符串(64 位 hex) | < 5ms |
| 4. 指纹比对 | 设备指纹字符串 | 查询 Redis 黑名单库 / 历史指纹库 | 是否命中黑名单 / 是否首次出现 | < 15ms |
实战注意:设备指纹的稳定性与唯一性存在矛盾。iOS 限制 IDFA 获取后,行业普遍转向“主动探测 + 被动指纹”混合方案。实时特征中应保留指纹置信度字段(0~1),供决策模型动态降权。
3.2.2 实时交易频次
实时交易频次是风控引擎中最常用的滑动窗口聚合特征。其核心在于窗口定义与计数策略。下图展示了基于 Flink 的实时频次计算逻辑。
实时交易频次在代码层面的核心逻辑通常使用 Flink 的 keyBy + window(SlidingEventTimeWindows) 实现。以下是一个简化示例:
// Flink SQL 风格:实时交易频次计算
CREATE TABLE trade_events (
user_id STRING,
device_id STRING,
amount DOUBLE,
event_time TIMESTAMP(3),
WATERMARK FOR event_time AS event_time - INTERVAL '5' SECOND
) WITH (...);
-- 滑动窗口聚合:过去 1 小时,每笔事件触发一次
SELECT
user_id,
COUNT(*) AS trade_count_1h,
SUM(amount) AS trade_amount_1h,
HOP_START(event_time, INTERVAL '1' MINUTE, INTERVAL '1' HOUR) AS window_start
FROM trade_events
GROUP BY
user_id,
HOP(event_time, INTERVAL '1' MINUTE, INTERVAL '1' HOUR);
⚠️ 常见陷阱:实时频次特征必须处理乱序事件与迟到数据。如果 watermark 设置过短,会导致窗口关闭过早,特征值偏低;设置过长则增加状态存储压力。建议金融场景中 watermark 延迟设为窗口长度的 10%~20%,并配合 allowedLateness 兜底。
3.3 实时特征 vs 离线特征:计算流程对比
为了更直观地理解实时特征在计算流程上的特殊性,下表将其与离线特征进行逐项对比:
| 对比维度 | 离线特征 | 实时特征 |
|---|---|---|
| 触发方式 | 定时调度(Cron / 依赖上游产出) | 事件驱动(消息到达即触发) |
| 计算引擎 | Spark / Hive / 批处理 SQL | Flink / Kafka Streams / 流处理引擎 |
| 数据源 | HDFS / 离线数仓表 | Kafka / Pulsar / 实时消息队列 |
| 状态管理 | 无状态(每次全量扫描) | 有状态(维护滑动窗口 / 计数器) |
| 延迟要求 | 小时级 ~ 天级 | 毫秒级 ~ 秒级(通常 < 100ms) |
| 存储后端 | Hive / ClickHouse / 离线数仓 | Redis / 内存 KV 存储 / 实时特征服务 |
| 容错策略 | 任务重跑 + 分区回溯 | Checkpoint + Exactly-Once 语义 |
架构决策要点:实时特征不是离线特征的“加速版”,而是完全不同的计算范式。在金融风控系统中,建议将实时特征层与离线特征层独立部署,通过统一的特征注册中心(Feature Store)管理元数据与版本,避免两种计算模式互相干扰。