3. 图数据表示与特征工程

在金融图模型 Serving 与在线推理的链路中,图数据表示与特征工程决定了模型“能看到什么”。与推荐、社交场景不同,金融图天然带有强时序、强异构、强合规三重约束:交易有发生时间,账户有生命周期,资金流向必须可追溯。因此,本节不从抽象图论出发,而是围绕“一张可上线服务的金融图”如何被构建、标注与预处理展开。

一、核心原理:金融图是“带时间戳的异构属性图”

金融图可形式化为 G = (V, E, T, X, X_e):节点集合 V 包含账户、企业、设备、IP、商户、产品等;边集合 E 表示转账、担保、控股、登录、共用联系人等关系;T 为每条边与每个节点特征的时间戳;X 与 X_e 分别是节点和边的属性矩阵。其核心特殊性在于:

  • 异构性:节点类型与边类型多样,不能简单同质化聚合,否则会丢失“担保关系”与“转账关系”的语义差异。
  • 时序性:同一对账户在不同时间的交易强度不同,边权必须按时间窗口切片,避免未来信息泄漏。
  • 稀疏与长尾:高活跃账户连接度高,大量账户仅有个位数交互,特征工程需处理冷启动。
  • 可解释与合规:每条特征应能回溯到原始业务事件,便于风控审计与监管问询。
关键原则:先定预测任务与标签时间点,再倒推图快照与特征窗口。若先建图再想任务,极易引入标签泄漏。

二、方法流程:从原始事件到可服务图样本

一条可上线的金融图特征流水线通常包含六个阶段:

  1. 事件接入:从交易流水、开户信息、设备日志中抽取实体与关系,统一为 (src, dst, edge_type, timestamp, amount, channel) 事件。
  2. 实体对齐:将手机号、设备指纹、企业统一社会信用代码映射为稳定 ID,避免同一实体多节点。
  3. 图快照切分:按预测时间点 T0 切分,T0 之前为历史图,T0 之后仅用于标签,严禁进入特征。
  4. 特征计算:节点特征、边特征、时序特征分别计算并落库。
  5. 预处理:缺失值填充、归一化、分箱、截断与哈希,保证在线离线一致。
  6. 样本组装:以目标节点为中心抽取 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 之后的事件计算特征,模型离线表现虚高,上线即失效。
  • 时间戳缺失:边无时间信息,无法做时序切分,只能退化为静态图,损失关键信号。
  • 归一化不一致:离线用全局均值方差,在线用实时统计,导致特征分布漂移。
  • 过度聚合:把异构边简单求和,担保与转账语义混淆,模型难以区分风险类型。
  • 忽略冷启动:新账户无历史边,需设计默认特征与回退策略,如使用设备或企业维度代理。
复盘建议:每次上线前做一次“时间穿越审计”,随机抽取样本,检查所有特征的时间戳是否严格早于标签时间点,并记录审计日志。
金融图数据构建与特征工程流水线 原始事件 交易/开户/设备 实体对齐 统一ID映射 图快照切分 T0 前历史图 特征计算 节点/边/时序/结构 以目标账户为中心的二跳子图 目标 账户 账户A 账户B 设备D 商户M C E F G 转账 转账 共用设备 消费 输出:邻接表 + 节点特征 + 边特征 + 时序特征 → 在线推理 Serving

综上,金融图数据表示的关键不在于图有多大,而在于时间边界是否干净、特征语义是否清晰、离线在线是否一致。把这三件事做扎实,后续的图模型 Serving 与在线推理才有稳定的输入基础。