欢迎来到芜湖小舒的学习博客

  • 动态图数据溯源

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

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

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


    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(hvt1,Nvt,Evt)][ h_v^t = f(h_v^{t-1}, N_v^t, E_v^t) ]

    其中:

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

    溯源系统需要记录:

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

    因此,一个预测:

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

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

    [y^vthvtNvtEvt][ \hat{y}_v^t \rightarrow h_v^t \rightarrow N_v^t \rightarrow E_v^t \rightarrow 原始事件 ]

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


    10. 总结

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

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

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

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