2. 金融特征工程基础:特征分类与存储格式
在金融风控、量化交易与用户画像场景中,特征工程的质量直接决定模型效果的上限。本章聚焦于金融特征的三大分类体系与三种主流存储格式,为后续离线/实时特征回放对比打下坚实的理论基础。
2.1 特征分类体系
金融特征按计算逻辑与时间维度可划分为三类:基础统计特征、时序特征与衍生特征。三者层层递进,共同构成金融特征工程的核心骨架。
核心原则:基础统计特征提供截面快照,时序特征捕捉动态趋势,衍生特征挖掘隐藏关系。三者缺一不可,尤其在信贷评分与反欺诈场景中,时序与衍生特征往往贡献最大的区分度。
2.1.1 基础统计特征
基础统计特征是对原始字段的直接数学汇总,计算窗口通常为固定时间区间(如近30天、近90天)。常见类型包括:
- 集中趋势:均值、中位数、众数(如近30天平均消费金额)。
- 离散程度:标准差、方差、极差、四分位距(如交易金额波动率)。
- 分布形态:偏度、峰度(用于检测异常交易分布)。
- 计数与占比:交易次数、逾期次数、大额交易占比。
2.1.2 时序特征
时序特征强调数据在时间轴上的顺序性与周期性,是金融场景区别于普通表格数据的核心差异。典型时序特征包括:
- 滞后特征:T-1、T-7、T-30 时刻的字段值(如昨日余额)。
- 滑动窗口聚合:近7天移动平均、近30天滚动求和。
- 趋势与季节性:线性斜率、环比增长率、同比变化率。
- 时间间隔特征:上次交易距今天数、相邻交易时间间隔的均值/标准差。
2.1.3 衍生特征
衍生特征通过特征交叉、比率计算或业务规则生成,旨在捕捉单一字段无法表达的复杂模式:
- 比率特征:负债收入比(DTI)、信用卡使用率、收入/交易额比值。
- 交叉组合:年龄×收入分段、地区×行业类别。
- 聚合对比:个人均值 vs 群体均值(如用户消费金额与同城市均值之比)。
- 业务规则编码:是否命中黑名单、多头借贷标记、设备指纹异常标记。
| 特征类别 | 典型计算方式 | 金融场景示例 | 存储敏感度 |
|---|---|---|---|
| 基础统计特征 | 固定窗口聚合(均值/计数) | 近30天平均消费金额 | 低(可预计算) |
| 时序特征 | 滑动窗口 + 滞后 + 趋势 | 近7天交易金额移动平均 | 高(需保留时间顺序) |
| 衍生特征 | 交叉/比率/规则编码 | 负债收入比、多头借贷数 | 中(依赖业务逻辑) |
实战提示:在离线特征回放中,基础统计特征可直接从宽表读取;时序特征需要按时间分区回放,避免未来信息泄露;衍生特征则需确保交叉字段在回放时间点均可用。
2.2 特征存储格式对比
金融特征数据通常以列式或行式格式存储在数据湖或特征存储中。三种主流格式——Parquet、ORC、Avro——在压缩率、读取性能与Schema演进支持上各有优劣。
2.2.1 Parquet
Parquet 是 Apache Hadoop 生态中最流行的列式存储格式,专为分析型查询优化。其核心特性包括:
- 列式布局:按列存储数据,支持谓词下推与列裁剪,大幅减少I/O。
- 高效压缩:支持 Snappy、Gzip、ZSTD 等编码,同一列数据类型一致,压缩比高。
- Schema 嵌套:原生支持复杂嵌套结构(如 JSON 对象、数组)。
- 适用场景:离线批量特征计算、特征存储宽表、Spark/Hive 分析任务。
2.2.2 ORC
ORC(Optimized Row Columnar)由 Hive 社区开发,在 Hive 与 Presto 生态中性能表现突出:
- 列式 + 轻量索引:内置 min/max 索引与布隆过滤器,加速数据跳过。
- ACID 事务支持:支持 Hive 的 ACID 操作,适合需要更新/删除的场景。
- 压缩效率:默认使用 ZLIB 压缩,在相同数据量下通常比 Parquet 压缩率更高。
- 适用场景:Hive 数仓、大规模离线特征存储、需要事务保证的特征表。
2.2.3 Avro
Avro 是行式存储格式,强调序列化效率与 Schema 演进能力:
- 行式布局:按行存储,适合逐条写入与实时流处理。
- Schema 内嵌:数据文件自带 Schema,支持向前/向后兼容。
- 低序列化开销:二进制编码紧凑,适合 Kafka 消息与实时特征管道。
- 适用场景:实时特征计算、Kafka 消息序列化、在线特征服务。
| 对比维度 | Parquet | ORC | Avro |
|---|---|---|---|
| 存储布局 | 列式 | 列式 + 索引 | 行式 |
| 压缩效率 | 高(Snappy/ZSTD) | 更高(ZLIB 默认) | 中(Deflate/Snappy) |
| 读取性能(分析查询) | 优秀(列裁剪) | 优秀(索引跳过) | 一般(需读整行) |
| 写入性能(逐条) | 较差(批量写入) | 较差(批量写入) | 优秀(流式写入) |
| Schema 演进 | 支持(有限) | 支持(有限) | 优秀(完全兼容) |
| 典型金融场景 | 离线特征宽表 | Hive 数仓特征表 | 实时特征管道 |
避坑指南:在离线特征回放中,若使用 Avro 存储历史特征快照,回放时需逐行反序列化,性能远低于 Parquet 的列裁剪。建议:离线回放用 Parquet/ORC,实时回放用 Avro + 内存特征缓存。
2.3 特征分类与存储格式的映射关系
在实际金融特征工程中,不同类别的特征适合不同的存储格式。下表总结了推荐映射关系:
| 特征类别 | 推荐存储格式 | 理由 | 回放场景 |
|---|---|---|---|
| 基础统计特征 | Parquet / ORC | 批量计算、列裁剪读取快 | 离线回放 |
| 时序特征(滑动窗口) | Parquet(分区存储) | 按时间分区裁剪,避免全表扫描 | 离线回放 + 时间点对齐 |
| 时序特征(实时滞后) | Avro + Redis 缓存 | 低延迟读取,Schema 兼容 | 实时回放 |
| 衍生特征(规则编码) | Avro / Parquet | 规则变更频繁,Avro 支持 Schema 演进 | 离线 + 实时混合 |
架构决策要点:在金融特征回放平台中,建议采用分层存储策略——离线层使用 Parquet 存储全量历史特征快照,实时层使用 Avro 存储增量特征事件,中间通过特征回放引擎进行时间点对齐与拼接。这种架构既能保证离线回放的高吞吐,又能满足实时回放的低延迟要求。