1. 课程导论与因子计算概述
1.1 什么是实时因子计算
实时因子计算是指对持续流入的数据流,在毫秒/秒级延迟内完成特征提取、指标聚合与模型打分,并输出可用于决策的结构化数值或标签的过程。与离线批处理不同,实时因子计算要求数据“来一条算一条”或“来一个窗口算一次”,结果立即生效。
核心特征: 低延迟(端到端 < 1s)、高吞吐(万级 TPS 以上)、状态持续(跨事件关联)、结果可回溯(支持历史因子回放)。
实时因子计算在技术栈上通常依赖流计算引擎(如 Flink)、消息队列(Kafka/Pulsar)、在线特征存储(Redis/HBase)以及规则引擎或模型推理服务。因子本身是业务可解释的数值化指标,例如“用户过去 5 分钟登录失败次数”、“当前持仓相对于 20 日均线的偏离度”、“商品详情页最近 10 秒的点击率”。
| 维度 | 离线因子计算 | 实时因子计算 |
|---|---|---|
| 触发方式 | T+1 定时调度 | 事件驱动 / 窗口触发 |
| 延迟要求 | 小时级 ~ 天级 | 毫秒级 ~ 秒级 |
| 数据源 | 离线数仓 / Hive | Kafka / Pulsar 实时流 |
| 状态管理 | 无状态(全量扫描) | 有状态(Keyed State) |
| 典型框架 | Spark / Hive / MapReduce | Flink / Kafka Streams |
1.2 因子计算在风控 / 推荐 / 量化交易中的应用场景
1.2.1 风控场景
- 实时反欺诈: 计算“同一设备 1 分钟内关联的账号数”、“IP 地址在 5 秒内的注册请求频次”,触发规则拦截。
- 信用评分: 基于用户实时交易流水,计算“近 30 天逾期次数”、“近 1 小时大额交易占比”等因子,动态调整授信额度。
- 交易监控: 对每笔支付请求,实时计算“商户历史拒付率”、“用户当前地理位置与常用地距离”,输出风险等级。
1.2.2 推荐场景
- 实时兴趣画像: 统计“用户最近 10 分钟点击的商品类目分布”、“当前 Session 内加购但未支付的商品 ID 列表”,用于召回排序。
- 热门榜单: 基于滑动窗口计算“商品最近 5 分钟的曝光点击率”、“直播间实时在线人数”,动态更新推荐列表。
- 冷启动: 对新用户,利用“当前设备型号”、“首次打开时间”、“初始浏览行为”等因子,快速生成试探性推荐。
1.2.3 量化交易场景
- 技术指标: 实时计算“5 分钟 K 线的移动平均线(MA)”、“相对强弱指数(RSI)”、“布林带上下轨”,辅助策略决策。
- 订单簿因子: 基于逐笔成交和挂单数据,计算“买卖盘口深度差”、“最近 1 秒的成交量加权价格(VWAP)”。
- 风险监控: 计算“投资组合的实时波动率”、“单一标的持仓占比”、“杠杆倍数”,触发风控强平或减仓。
| 应用领域 | 典型因子示例 | 计算窗口 | 延迟要求 |
|---|---|---|---|
| 风控 | 登录失败次数、设备关联账号数 | 1min / 5min 滑动窗口 | < 500ms |
| 推荐 | 点击率、类目偏好、Session 时长 | 10min / Session 窗口 | < 1s |
| 量化交易 | MA、RSI、买卖盘口深度 | 1min / 5min / Tick 级 | < 100ms |
场景选择建议: 风控场景对准确率和延迟最敏感,推荐优先使用 Flink 的 KeyedProcessFunction 结合定时器实现精确一次语义;推荐场景更关注吞吐和窗口灵活性,可结合 Table API 简化开发;量化交易场景对毫秒级延迟和状态一致性要求极高,建议使用 Flink 的异步 I/O 和 RocksDB 状态后端。
1.3 课程目标与前置知识要求
课程目标
- 掌握实时因子计算的核心概念、架构模式与设计原则。
- 熟练使用 Flink DataStream API 和 Table API 实现常见因子(计数、聚合、比率、排序、Session 识别)。
- 理解 Flink 状态管理、时间语义、容错机制在因子计算中的最佳实践。
- 能够独立搭建一套生产级的实时因子计算服务,包含数据接入、因子编排、结果输出与监控告警。
- 具备将离线因子迁移为实时因子的工程能力,并处理乱序、迟到数据等真实挑战。
前置知识要求
| 知识领域 | 具体要求 | 推荐学习资源 |
|---|---|---|
| Java / Scala 基础 | 熟悉面向对象、Lambda 表达式、泛型、集合操作 | 《Java 核心技术》第 1-6 章 |
| Flink 入门 | 了解 DataStream 基本概念、WordCount 示例 | Flink 官方文档 Quickstart |
| 消息队列 | 理解 Kafka 主题、分区、消费者组概念 | Kafka 官方文档 Introduction |
| SQL 基础 | 掌握 SELECT、JOIN、GROUP BY、窗口函数 | LeetCode SQL 入门题 |
| Linux 基础 | 能使用命令行、编辑配置文件、查看日志 | 《鸟哥的 Linux 私房菜》基础篇 |
注意: 本课程不从头讲解 Flink 基础 API,建议学员在开课前至少完成 Flink 官方 Quickstart 中的 DataStream 和 Table 示例。如果对状态后端、检查点、Watermark 等概念不熟悉,建议先阅读 Flink 官方文档“Concepts”章节。