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 因子在模型评分中的作用

模型评分本质上是将一组因子向量映射为预测分数的函数。因子在评分链路中承担以下关键角色:

  1. 输入层:模型接收的原始信号全部来自因子,因子质量直接决定模型上限。
  2. 特征空间:因子构成模型决策的高维空间,每个因子对应一个维度。
  3. 权重载体:在线性模型或树模型中,因子通过权重或分裂点影响最终分数。
  4. 可解释性锚点:通过分析因子贡献度(如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

下图展示了因子仓库在模型评分架构中的位置与数据流向:

因子仓库架构与评分数据流 业务数据源 订单/用户/设备 实时流处理 Kafka / Flink 批量处理 Spark / Hive 因子仓库 注册中心 计算引擎 存储层 服务API 版本管理 / 血缘追踪 模型评分引擎 加载因子 → 计算分数 决策结果 通过/拒绝/人工 说明: 因子仓库作为统一中间层,屏蔽了数据源异构性,为模型评分引擎提供一致、低延迟的因子查询能力。
工程避坑: 因子仓库不是简单的键值存储。在实际落地中,必须处理因子时效性(T+1 vs 实时)、一致性(批量更新与实时写入冲突)和存储成本(全量因子 vs 高频因子分离)三大难题。建议初期优先接入高频核心因子,逐步扩展。

引入因子仓库后,模型评分接口的调用链路从“业务代码直连数据库”转变为“业务代码 → 因子服务API → 因子仓库 → 模型引擎”,虽然增加了一层网络开销,但换来了因子复用、版本回滚、监控告警和性能缓存等工程红利,在规模化场景下整体延迟反而更低。