动态图数据溯源

动态图数据溯源,简单说就是:

不仅记录“当前图中有哪些节点和边”,还要记录这些节点、边以及属性从哪里来、什么时候出现、经过了什么变化、由谁或什么过程产生。

这里的“动态图”是指会随时间变化的图结构,例如社交网络、交易网络、交通网络、知识图谱等。


1. 什么是数据溯源

数据溯源,英文通常叫 Data Provenance,也可以理解为数据的“履历”或“来龙去脉”。

它通常回答这些问题:

  • 这条数据来自哪里?
  • 是谁产生或修改的?
  • 什么时候产生的?
  • 经过了哪些处理步骤?
  • 它依赖哪些原始数据?
  • 当前结果为什么会变成这样?
  • 如果删除某条原始数据,会影响哪些结果?

例如,一条“用户 A 风险评分为 85”的结果,溯源系统可能记录:

用户 A 的风险评分 85
    ↓ 来源于
3 笔异常交易
    ↓ 来源于
银行交易日志
    ↓ 经过
异常检测模型 v2.1
    ↓ 生成时间
2026-07-27 10:30

2. 什么是动态图

动态图可以表示为:

[Gt=(Vt,Et,Xt)][ G_t=(V_t,E_t,X_t) ]

其中:

  • (Vt)(V_t):时刻 (t)(t) 的节点集合
  • (Et)(E_t):时刻 (t)(t) 的边集合
  • (Xt)(X_t):时刻 (t)(t) 的节点或边属性

随着时间变化,图中可能发生:

  • 新增节点
  • 删除节点
  • 新增边
  • 删除边
  • 节点属性变化
  • 边的权重变化
  • 关系类型变化

例如社交网络:

10:00:小明关注了小红
10:10:小明取消关注小红
10:20:小明又关注了小红

如果只看 10:30 的静态图,你只能看到“小明关注小红”。

但动态图会保留完整的变化过程。


3. 动态图数据溯源记录什么

动态图数据溯源通常包含以下几类信息:

① 来源信息

记录节点、边或属性来自哪个数据源。

例如:

边:用户A → 商品B
关系:购买
来源:订单系统
订单号:20260727001

② 时间信息

记录事件发生的时间,而不只是当前状态。

例如:

2026-07-20:创建关系
2026-07-22:修改权重
2026-07-25:删除关系

有时需要区分两种时间:

  • 事件时间:现实中真正发生的时间
  • 处理时间:系统接收到并处理数据的时间

例如某笔交易在 10:00 发生,但因为网络延迟,10:05 才进入系统。

③ 操作信息

记录图发生了什么变化:

ADD_NODE
DELETE_NODE
ADD_EDGE
DELETE_EDGE
UPDATE_ATTRIBUTE

例如:

ADD_EDGE(A, B, "转账", amount=1000)

④ 操作者或生成过程

记录是谁或哪个程序产生了变化。

例如:

操作者:用户 A
处理程序:fraud_detection.py
模型版本:GNN-v3
规则版本:rule-set-12

⑤ 依赖关系

记录一个结果由哪些数据推导出来。

例如:

风险节点 R
依赖:
- 转账边 e1
- 登录边 e2
- 设备共享边 e3

这样当 e2 被发现是错误数据时,就可以知道风险节点 R 是否需要重新计算。


4. 一个具体例子

假设有一个反诈骗交易图:

  • 节点:用户、银行卡、设备
  • 边:转账、登录、设备使用
  • 属性:金额、时间、IP 地址、风险分数

动态图事件如下:

t1:用户 A 使用设备 D 登录
t2:用户 A 向用户 B 转账 5000 元
t3:用户 B 向用户 C 转账 4800 元
t4:风控模型将用户 B 标记为高风险

普通动态图只记录事件变化。

而动态图数据溯源还会记录:

用户 B 被标记为高风险
├── 由模型 FraudGNN-v2.3 生成
├── 生成时间:t4
├── 使用训练模型版本:model_202607
├── 依赖边:
│   ├── A → B,转账 5000 元
│   └── B → C,转账 4800 元
├── 原始来源:
│   ├── 银行交易日志 001
│   └── 银行交易日志 002
└── 判断依据:
    └── 短时间内资金快速转移

如果后来发现 B → C 这笔交易是重复记录,就可以沿着溯源关系找到:

错误交易记录
→ 影响风险特征
→ 影响模型输入
→ 影响用户 B 的风险评分

5. 它与普通动态图存储的区别

普通动态图动态图数据溯源
关注图发生了什么变化关注变化为什么发生、来自哪里
记录节点和边的增删记录增删对应的数据源和处理过程
可以恢复历史状态可以解释历史状态的形成原因
回答“什么时候变化”回答“谁、何时、因为什么、经过什么过程变化”
更适合时序分析更适合审计、解释、纠错和追责

可以概括为:

动态图保存的是“历史”,溯源保存的是“历史背后的依据”。


6. 常见的溯源粒度

动态图数据溯源可以分为不同粒度。

图级溯源

记录整个图从哪些数据源构建而来。

例如:

交易图 = 银行交易数据 + 登录日志 + 设备信息

节点级溯源

记录某个节点的来源。

例如:

用户节点 U123 来源于用户注册表第 123 行

边级溯源

记录某条关系为什么存在。

例如:

A 与 B 之间存在“共同设备”关系,
因为二者都登录过设备 D001。

属性级溯源

记录某个属性值如何得到。

例如:

用户 A 的风险分数 0.87
由模型 v3 使用特征 f1、f2、f3 计算得到。

模型级溯源

在动态图神经网络中,还可能记录:

  • 使用了哪个模型
  • 使用了哪个训练集
  • 模型参数版本
  • 邻居采样结果
  • 节点嵌入如何生成
  • 哪些历史快照参与预测

7. 常见实现方式

事件日志

把图的每一次变化记录成事件:

(timestamp, operation, object, source, operator)

例如:

(10:00, ADD_EDGE, A→B, order_001, transaction_service)

这种方式类似数据库中的事务日志。

图快照

定期保存图的完整状态:

G_1, G_2, G_3, ..., G_t

优点是查询某个时间点比较方便,缺点是存储开销大。

快照加增量日志

实际系统中经常同时使用:

基础快照 + 后续变化事件

例如:

7 月 1 日完整快照
+ 7 月 2 日至 7 月 27 日增量事件

溯源图

把溯源本身也表示成图。

例如:

原始数据 → 中间结果 → 图节点/边 → 模型预测

溯源图中的节点可能包括:

  • 原始数据
  • 图元素
  • 程序
  • 模型
  • 用户
  • 结果

边表示:

  • derived from:由……推导
  • generated by:由……生成
  • used:使用了……
  • modified by:由……修改

8. 为什么需要动态图数据溯源

它主要用于以下场景。

错误排查

发现一个预测错误时,可以向上追踪:

预测结果
→ 图特征
→ 节点和边
→ 原始数据

数据审计

金融、医疗、政务等领域需要知道:

  • 谁修改了数据
  • 修改了什么
  • 什么时候修改
  • 修改是否合规

模型可解释性

例如动态图神经网络判断某个账号是诈骗账号,可以解释:

主要因为该账号在过去 10 分钟内与多个高风险节点发生了大额转账。

数据删除与影响分析

如果用户要求删除个人数据,需要知道:

这条数据生成了哪些边?
影响了哪些特征?
参与了哪些模型训练?
影响了哪些预测结果?

模型复现

要复现某次实验,需要知道:

  • 当时使用的是哪个图快照
  • 数据预处理方式
  • 模型版本
  • 参数配置
  • 随机种子
  • 时间窗口

9. 在动态图神经网络中的含义

在动态图神经网络中,某个节点在时刻 (t) 的表示可能是:

[hvt=f(hvt−1,Nvt,Evt)][ h_v^t = f(h_v^{t-1}, N_v^t, E_v^t) ]

其中:

  • (hvt−1)(h_v^{t-1}):节点过去的表示
  • (Nvt)(N_v^t):当前邻居
  • (Evt)(E_v^t):当前相关事件
  • (f)(f):模型计算过程

溯源系统需要记录:

hvt聚合了哪些邻居h_v^t聚合了哪些邻居
hvt使用了哪些历史表示h_v^t使用了哪些历史表示
使用了哪些边和时间事件使用了哪些边和时间事件
调用了哪个模型参数版本调用了哪个模型参数版本

因此,一个预测:

[y^vt=g(hvt)][ \hat{y}_v^t = g(h_v^t) ]

不仅有预测结果,还能追踪:

[y^vt→hvt→Nvt→Evt→原始事件][ \hat{y}_v^t \rightarrow h_v^t \rightarrow N_v^t \rightarrow E_v^t \rightarrow 原始事件 ]

这就是动态图机器学习中的预测溯源。


10. 总结

可以把动态图看成一部不断更新的电影:

  • 静态图:一张照片
  • 动态图:整部电影
  • 动态图数据溯源:电影的拍摄记录、剪辑记录、素材来源和修改日志

所以动态图数据溯源并不只是保存“图怎么变了”,而是保存:

图中的每次变化从哪里来、为什么发生、经过什么处理,以及最终影响了哪些数据和结果。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注