动态图数据溯源,简单说就是:
不仅记录“当前图中有哪些节点和边”,还要记录这些节点、边以及属性从哪里来、什么时候出现、经过了什么变化、由谁或什么过程产生。
这里的“动态图”是指会随时间变化的图结构,例如社交网络、交易网络、交通网络、知识图谱等。
1. 什么是数据溯源
数据溯源,英文通常叫 Data Provenance,也可以理解为数据的“履历”或“来龙去脉”。
它通常回答这些问题:
- 这条数据来自哪里?
- 是谁产生或修改的?
- 什么时候产生的?
- 经过了哪些处理步骤?
- 它依赖哪些原始数据?
- 当前结果为什么会变成这样?
- 如果删除某条原始数据,会影响哪些结果?
例如,一条“用户 A 风险评分为 85”的结果,溯源系统可能记录:
用户 A 的风险评分 85
↓ 来源于
3 笔异常交易
↓ 来源于
银行交易日志
↓ 经过
异常检测模型 v2.1
↓ 生成时间
2026-07-27 10:30
2. 什么是动态图
动态图可以表示为:
其中:
- :时刻 的节点集合
- :时刻 的边集合
- :时刻 的节点或边属性
随着时间变化,图中可能发生:
- 新增节点
- 删除节点
- 新增边
- 删除边
- 节点属性变化
- 边的权重变化
- 关系类型变化
例如社交网络:
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) 的表示可能是:
其中:
- :节点过去的表示
- :当前邻居
- :当前相关事件
- :模型计算过程
溯源系统需要记录:
因此,一个预测:
不仅有预测结果,还能追踪:
这就是动态图机器学习中的预测溯源。
10. 总结
可以把动态图看成一部不断更新的电影:
- 静态图:一张照片
- 动态图:整部电影
- 动态图数据溯源:电影的拍摄记录、剪辑记录、素材来源和修改日志
所以动态图数据溯源并不只是保存“图怎么变了”,而是保存:
图中的每次变化从哪里来、为什么发生、经过什么处理,以及最终影响了哪些数据和结果。