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 核心架构
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调用流程
3.3.4 信用评分场景的API优化要点
| 优化方向 | 具体措施 | 预期效果 |
|---|---|---|
| 批量聚合 | 将多个用户的特征请求合并为一次API调用 | 减少网络往返,吞吐量提升3-5倍 |
| 本地缓存 | 在推理服务侧缓存热点特征(如用户基础画像),TTL设为5分钟 | P99延迟从15ms降至3ms |
| 特征预加载 | 在模型加载时预拉取常用特征列表,避免冷启动延迟 | 首次推理延迟降低80% |
| 异步写入 | 特征更新采用异步写入在线存储,避免阻塞推理链路 | 特征新鲜度与推理性能解耦 |
避坑提醒:不要将特征计算逻辑嵌入在线推理代码中。所有特征计算必须由特征平台统一管理,否则离线与在线特征逻辑将迅速分化,导致模型效果不可复现。
3.4 本章小结
- 离线与在线特征一致性是信用评分模型Serving成功的基石,必须通过特征平台统一管理特征定义与计算逻辑。
- Feast 提供开源、灵活的特征管理方案,Tecton 提供企业级全托管能力,选型需结合团队规模与合规要求。
- 特征服务API设计应聚焦低延迟、高可用与可降级,批量获取、本地缓存、熔断降级是核心优化手段。
- 在信用评分场景中,特征平台不仅是技术基础设施,更是模型治理与风险控制的关键环节。