3. 因子系统概述
因子系统是模型看板与低延迟评分架构的核心数据层。在量化风控、实时推荐和智能决策场景中,因子(Feature)是模型进行预测的最小输入单元。本章从因子的定义出发,逐步拆解其在模型评分中的作用,并引入因子仓库这一工程化概念,为后续低延迟接口设计奠定基础。
3.1 因子的定义
因子,又称特征变量,是对原始业务数据进行加工、变换后得到的、可直接用于模型计算的数值或类别型变量。一个因子通常包含三个基本属性:
| 属性 | 说明 | 示例 |
|---|---|---|
| 因子标识 | 全局唯一的因子名称或ID,用于在系统中索引 | user_age、order_amt_30d_sum |
| 因子值 | 经过计算后的具体数值或枚举值 | 35、12800.50、high_risk |
| 时间戳 | 因子值生成或采集的时间点,用于时效性判断 | 2025-03-21 14:30:00.123 |
从数据来源角度,因子可划分为以下三类:
- 基础因子:直接从数据源获取,未经二次加工,如用户注册年龄、订单金额。
- 衍生因子:通过聚合、统计、窗口计算得到,如近30天消费总额、最大借款间隔天数。
- 外部因子:来自第三方数据源,如征信评分、多头借贷次数。
工程提示: 在低延迟评分场景中,因子定义必须包含明确的数据类型(int、float、string、boolean)和缺失值处理策略(默认值、均值填充、拒绝评分),否则在运行时容易引发类型转换异常或评分结果不一致。
3.2 因子在模型评分中的作用
模型评分本质上是将一组因子向量映射为预测分数的函数。因子在评分链路中承担以下关键角色:
- 输入层:模型接收的原始信号全部来自因子,因子质量直接决定模型上限。
- 特征空间:因子构成模型决策的高维空间,每个因子对应一个维度。
- 权重载体:在线性模型或树模型中,因子通过权重或分裂点影响最终分数。
- 可解释性锚点:通过分析因子贡献度(如SHAP值),可定位评分波动的根因。
以下是一个典型的评分计算流程,展示因子如何参与运算:
// 伪代码:因子评分计算示例
double score = intercept;
for (Feature f : featureList) {
score += f.getWeight() * normalize(f.getValue());
}
score = sigmoid(score); // 转换为概率分数
关键认知: 在低延迟评分接口中,因子计算耗时通常占整个请求处理时间的 60%~80%。因此,因子系统的性能优化是降低接口延迟的核心突破口。
3.3 因子仓库的概念
因子仓库(Feature Store)是一个集中管理因子定义、计算逻辑、存储和版本的中心化平台。它解决了传统评分系统中因子散落在各业务代码、难以复用和治理的问题。
因子仓库的核心组件包括:
| 组件 | 职责 | 技术选型示例 |
|---|---|---|
| 因子注册中心 | 管理因子元数据(名称、类型、来源、版本) | MySQL + Redis 缓存 |
| 因子计算引擎 | 执行因子加工逻辑,支持实时/批量计算 | Flink、Spark、自研C++引擎 |
| 因子存储层 | 存储因子值,支持高并发读取 | Redis Cluster、HBase、TiKV |
| 因子服务API | 对外提供因子查询、订阅、推送接口 | gRPC、HTTP/2 |
下图展示了因子仓库在模型评分架构中的位置与数据流向:
工程避坑: 因子仓库不是简单的键值存储。在实际落地中,必须处理因子时效性(T+1 vs 实时)、一致性(批量更新与实时写入冲突)和存储成本(全量因子 vs 高频因子分离)三大难题。建议初期优先接入高频核心因子,逐步扩展。
引入因子仓库后,模型评分接口的调用链路从“业务代码直连数据库”转变为“业务代码 → 因子服务API → 因子仓库 → 模型引擎”,虽然增加了一层网络开销,但换来了因子复用、版本回滚、监控告警和性能缓存等工程红利,在规模化场景下整体延迟反而更低。