3、特征工程与特征存储:离线特征与在线特征的一致性、特征平台(Feast/Tecton)简介、特征服务API设计

3.1 离线特征与在线特征的一致性

在信用评分模型从离线训练到在线Serving的过程中,特征一致性是决定模型效果能否复现的核心挑战。离线特征(训练时使用)与在线特征(推理时使用)若存在偏差,将直接导致模型预测失真,引发信用评分误判。

3.1.1 不一致的常见原因

原因类别 具体问题 影响
特征计算逻辑差异 离线使用PySpark SQL,在线使用Java/UDF,聚合窗口、空值处理不一致 特征值偏移,模型输出不稳定
时间窗口漂移 离线使用T-1全量历史,在线使用实时滑动窗口,窗口边界计算不同 特征时效性错位,评分偏高或偏低
数据源版本差异 离线读取Hive快照,在线读取Kafka实时流,字段映射或枚举值不同 特征缺失或类型转换错误
特征工程代码复用不足 离线与在线分别维护两套特征计算代码,缺乏统一抽象 维护成本高,一致性难以保障

3.1.2 一致性保障策略

  • 特征定义即代码:使用声明式特征定义(如Feast Feature View),离线与在线共用同一份特征元数据。
  • 离线-在线验证流水线:在模型上线前,对同一批样本分别计算离线特征与在线特征,对比分布差异(PSI、KS)。
  • 特征回溯(Point-in-Time Join):确保离线训练时使用的特征值严格对应样本时间点的历史快照,而非未来数据。
  • 特征服务层统一:在线推理时通过特征服务API获取特征,该API内部复用与离线相同的特征计算逻辑。
实践建议:在信用评分项目中,建议将特征一致性检查纳入CI/CD流水线。每次特征变更后,自动触发离线-在线特征对比测试,PSI超过0.1则阻断上线。

3.2 特征平台简介:Feast 与 Tecton

特征平台(Feature Platform)是解决离线-在线特征一致性、特征共享与特征治理的基础设施。在信用评分场景中,特征平台承担着特征注册、特征计算、特征存储、特征服务四大职责。目前业界主流的开源方案是 Feast,商业化方案以 Tecton 为代表。

3.2.1 Feast 核心架构

Feast 核心架构 离线存储 Hive / BigQuery / Redshift 特征注册表 Feature View / Entity / DataSource 在线存储 Redis / DynamoDB / Firestore 特征服务 gRPC / HTTP API 在线推理 模型Serving / 实时评分 说明: Feast 通过 Feature View 统一离线批处理与在线流式计算的特征定义, 确保训练与推理使用同一份特征逻辑,从根本上解决特征一致性问题。

3.2.2 Feast 与 Tecton 对比

维度 Feast(开源) Tecton(商业)
特征定义 Python SDK + YAML 声明式 Python SDK + 声明式,支持SQL与流处理
离线存储 Hive、BigQuery、Snowflake、Redshift Snowflake、BigQuery、Databricks
在线存储 Redis、DynamoDB、Firestore、SQLite DynamoDB、Redis、MySQL
流式特征 需自行集成Kafka/Spark Streaming 原生支持Kafka、Kinesis流式特征
特征回溯 支持Point-in-Time Join 支持Point-in-Time Join,自动处理时间对齐
监控与治理 基础指标(特征新鲜度、服务延迟) 内置特征漂移检测、血缘追踪、成本分析
适用场景 中小团队、希望自主可控 企业级、需要全托管与SLA保障

3.2.3 信用评分场景下的特征平台选型建议

  • 初创或中型团队:优先选择 Feast,利用其开源生态与灵活存储后端,快速搭建特征服务。
  • 大型金融机构:若对SLA、特征治理、合规审计有严格要求,可考虑 Tecton 或基于 Feast 进行二次开发。
  • 关键考量:特征回溯能力(Point-in-Time Join)是信用评分模型训练的基础,无论选型哪种平台,都必须确保该功能可用。

3.3 特征服务API设计

特征服务API是连接在线推理引擎与特征存储的桥梁。在信用评分Serving中,API设计需要兼顾低延迟(通常要求P99 < 20ms)、高并发(每秒数千至数万次查询)以及特征一致性。

3.3.1 API设计原则

  • 批量获取:支持一次请求获取多个实体(用户)的多个特征,减少网络开销。
  • 特征版本控制:API应支持指定特征版本或时间戳,便于A/B测试与模型回滚。
  • 降级与熔断:当在线存储不可用时,自动降级到离线缓存或默认值,避免评分服务中断。
  • 可观测性:每个API调用记录特征名称、耗时、命中率,用于监控特征健康度。

3.3.2 典型API接口定义

// 特征服务API接口定义(Protobuf)
service FeatureService {
  // 批量获取特征
  rpc GetOnlineFeatures(GetOnlineFeaturesRequest) returns (GetOnlineFeaturesResponse);
}

message GetOnlineFeaturesRequest {
  // 特征视图名称列表
  repeated string feature_view_names = 1;
  // 实体键列表(如用户ID)
  repeated EntityKey entity_keys = 2;
  // 可选:指定特征时间戳
  int64 timestamp = 3;
  // 可选:特征版本
  string feature_version = 4;
}

message EntityKey {
  map<string, string> keys = 1;  // 例如 {"user_id": "12345"}
}

message GetOnlineFeaturesResponse {
  // 特征值列表,顺序与请求中的entity_keys对应
  repeated FeatureValues feature_values = 1;
  // 服务元数据(耗时、命中状态等)
  ServiceMetadata metadata = 2;
}

message FeatureValues {
  map<string, FeatureValue> features = 1;  // 特征名 -> 特征值
}

message FeatureValue {
  oneof value {
    double double_val = 1;
    int64 int64_val = 2;
    string string_val = 3;
    bool bool_val = 4;
  }
  // 特征新鲜度(秒)
  int64 freshness_seconds = 5;
}

3.3.3 特征服务API调用流程

特征服务API调用流程 在线推理服务 特征服务API 在线存储(Redis) 降级:离线缓存 或默认值 返回特征值 关键设计:当在线存储超时或不可用时,特征服务API自动降级到离线预计算缓存或业务默认值, 确保信用评分服务不因特征存储故障而中断,同时记录降级事件用于事后排查。

3.3.4 信用评分场景的API优化要点

优化方向 具体措施 预期效果
批量聚合 将多个用户的特征请求合并为一次API调用 减少网络往返,吞吐量提升3-5倍
本地缓存 在推理服务侧缓存热点特征(如用户基础画像),TTL设为5分钟 P99延迟从15ms降至3ms
特征预加载 在模型加载时预拉取常用特征列表,避免冷启动延迟 首次推理延迟降低80%
异步写入 特征更新采用异步写入在线存储,避免阻塞推理链路 特征新鲜度与推理性能解耦
避坑提醒:不要将特征计算逻辑嵌入在线推理代码中。所有特征计算必须由特征平台统一管理,否则离线与在线特征逻辑将迅速分化,导致模型效果不可复现。

3.4 本章小结

  • 离线与在线特征一致性是信用评分模型Serving成功的基石,必须通过特征平台统一管理特征定义与计算逻辑。
  • Feast 提供开源、灵活的特征管理方案,Tecton 提供企业级全托管能力,选型需结合团队规模与合规要求。
  • 特征服务API设计应聚焦低延迟、高可用与可降级,批量获取、本地缓存、熔断降级是核心优化手段。
  • 在信用评分场景中,特征平台不仅是技术基础设施,更是模型治理与风险控制的关键环节。