3. 图数据表示与特征工程
在金融图模型 Serving 与在线推理的链路中,图数据表示与特征工程决定了模型“能看到什么”。与推荐、社交场景不同,金融图天然带有强时序、强异构、强合规三重约束:交易有发生时间,账户有生命周期,资金流向必须可追溯。因此,本节不从抽象图论出发,而是围绕“一张可上线服务的金融图”如何被构建、标注与预处理展开。
一、核心原理:金融图是“带时间戳的异构属性图”
金融图可形式化为 G = (V, E, T, X, X_e):节点集合 V 包含账户、企业、设备、IP、商户、产品等;边集合 E 表示转账、担保、控股、登录、共用联系人等关系;T 为每条边与每个节点特征的时间戳;X 与 X_e 分别是节点和边的属性矩阵。其核心特殊性在于:
- 异构性:节点类型与边类型多样,不能简单同质化聚合,否则会丢失“担保关系”与“转账关系”的语义差异。
- 时序性:同一对账户在不同时间的交易强度不同,边权必须按时间窗口切片,避免未来信息泄漏。
- 稀疏与长尾:高活跃账户连接度高,大量账户仅有个位数交互,特征工程需处理冷启动。
- 可解释与合规:每条特征应能回溯到原始业务事件,便于风控审计与监管问询。
关键原则:先定预测任务与标签时间点,再倒推图快照与特征窗口。若先建图再想任务,极易引入标签泄漏。
二、方法流程:从原始事件到可服务图样本
一条可上线的金融图特征流水线通常包含六个阶段:
- 事件接入:从交易流水、开户信息、设备日志中抽取实体与关系,统一为
(src, dst, edge_type, timestamp, amount, channel)事件。 - 实体对齐:将手机号、设备指纹、企业统一社会信用代码映射为稳定 ID,避免同一实体多节点。
- 图快照切分:按预测时间点 T0 切分,T0 之前为历史图,T0 之后仅用于标签,严禁进入特征。
- 特征计算:节点特征、边特征、时序特征分别计算并落库。
- 预处理:缺失值填充、归一化、分箱、截断与哈希,保证在线离线一致。
- 样本组装:以目标节点为中心抽取 k 跳子图,输出邻接表与特征向量,供 Serving 层加载。
下面是一个按时间窗口聚合边特征的简化示例:
# 以 7 天为窗口,计算账户对 (src, dst) 的边特征
window = "7d"
edge_feat = events \
.filter(col("ts") < T0) \
.groupBy("src", "dst") \
.agg(
count("*").alias("txn_cnt_7d"),
sum("amount").alias("amt_sum_7d"),
avg("amount").alias("amt_avg_7d"),
countDistinct("channel").alias("channel_div_7d"),
max("ts").alias("last_txn_ts")
)
edge_feat = edge_feat.withColumn(
"recency_hours",
(T0 - col("last_txn_ts")) / 3600
)
三、节点、边与时序特征的设计要点
三类特征各有分工,实践中建议按下表组织特征清单,避免遗漏与重复:
| 特征类别 | 典型字段 | 作用 | 注意事项 |
|---|---|---|---|
| 节点特征 | 账户年龄、KYC等级、历史逾期次数、设备数 | 刻画实体自身风险画像 | 需按 T0 截断,避免使用未来状态 |
| 边特征 | 交易笔数、金额均值、渠道多样性、对手方集中度 | 刻画关系强度与异常模式 | 边权需归一化,防止大额主导 |
| 时序特征 | 近1/7/30天滑动统计、趋势斜率、突变比 | 捕捉行为变化与突发风险 | 窗口边界对齐,防止穿越 |
| 结构特征 | 度中心性、PageRank、社区标签、二跳邻居数 | 刻画拓扑位置与团伙聚集 | 计算成本高,建议离线预计算 |
时序特征尤其容易出错。推荐使用“多窗口 + 差分”组合:既保留绝对量,也保留变化率。例如 amt_sum_1d / (amt_sum_7d/7 + eps) 可反映当日交易相对近期均值的突增程度,对欺诈与洗钱识别非常有效。
四、案例场景:反欺诈子图特征构建
假设任务是在 T0 判断某账户是否将在未来 3 天内发生欺诈。构建流程为:以该账户为中心,抽取 T0 前 30 天的二跳子图;对中心节点计算 KYC 与历史逾期特征;对一跳边计算 7 天交易聚合;对二跳邻居计算“共用设备数”“共同对手方数”等结构特征。最终每个样本输出邻接表与特征矩阵,供图神经网络在线推理使用。
在线 Serving 时,子图抽取必须与离线训练使用同一套 ID 映射与窗口定义,否则会出现“离线 AUC 高、线上效果差”的典型问题。
五、常见误区与复盘
- 标签泄漏:用 T0 之后的事件计算特征,模型离线表现虚高,上线即失效。
- 时间戳缺失:边无时间信息,无法做时序切分,只能退化为静态图,损失关键信号。
- 归一化不一致:离线用全局均值方差,在线用实时统计,导致特征分布漂移。
- 过度聚合:把异构边简单求和,担保与转账语义混淆,模型难以区分风险类型。
- 忽略冷启动:新账户无历史边,需设计默认特征与回退策略,如使用设备或企业维度代理。
复盘建议:每次上线前做一次“时间穿越审计”,随机抽取样本,检查所有特征的时间戳是否严格早于标签时间点,并记录审计日志。
综上,金融图数据表示的关键不在于图有多大,而在于时间边界是否干净、特征语义是否清晰、离线在线是否一致。把这三件事做扎实,后续的图模型 Serving 与在线推理才有稳定的输入基础。