一、时序图谱入门:什么是时序知识图谱、为什么风控需要时序、时序图谱 vs 静态图谱

1.1 从一个真实的风控场景说起

先讲个我亲身经历的事。

几年前,我参与过一个电商平台的反欺诈项目。当时我们用的是一套静态知识图谱——就是那种把用户、设备、IP、收货地址连成一张大网,然后跑社区发现算法找团伙。效果嘛,一开始还行。

但后来我们发现一个问题:有些账户,今天看起来完全正常,明天突然就变成了欺诈节点。静态图谱根本抓不住这种变化。你想想看,一个用户昨天还在正常买东西,今天就帮黑产洗钱,中间发生了什么?静态图谱不会告诉你。

这就是为什么我开始关注时序知识图谱。

1.2 什么是时序知识图谱

说白了,时序知识图谱就是在传统知识图谱的基础上,给每条关系加上时间戳。

举个例子:

  • 静态图谱:用户A → 设备B(关系:使用)
  • 时序图谱:用户A → 设备B(关系:使用,时间:2024-01-01 10:00:00)

看起来只是加了个时间,但意义完全不同。

静态图谱告诉你「谁和谁有关系」,时序图谱告诉你「谁在什么时候和谁有关系」。后者能回答的问题,比前者多了一个维度。

核心定义:时序知识图谱 = 知识图谱 + 时间维度。每条事实(三元组)都带有一个时间标签,表示该事实在某个时间区间内有效。

1.3 为什么风控需要时序

我直接说结论:风控的本质,是发现异常的变化

静态图谱只能告诉你「当前状态」,但欺诈行为往往藏在「状态变化」里。举个例子:

  • 一个用户突然换了设备,这本身不异常
  • 但如果他在5分钟内换了3台设备,而且每台设备都关联过黑名单账户——这就是典型的设备农场行为

静态图谱能发现「换设备」这个事实,但抓不住「短时间内频繁换设备」这个模式。时序图谱可以。

我在项目中遇到过这样一个案例:某个账户每天登录时间很规律,都是晚上8点到10点。突然有一天,它在凌晨3点登录,而且登录IP从国内跳到了国外。静态图谱里,这个账户的关联关系没变,但时序图谱一眼就能看出异常——时间模式变了。

我的经验:在风控场景中,80%的有效特征都跟时间有关。比如:行为频率、时间间隔、时序模式、变化速率。这些特征,静态图谱一个都提取不出来。

1.4 时序图谱 vs 静态图谱:一张表说清楚

对比维度 静态图谱 时序图谱
数据模型 三元组 (实体, 关系, 实体) 四元组 (实体, 关系, 实体, 时间)
查询能力 当前关系查询 历史关系查询、趋势分析、模式匹配
异常检测 基于静态结构 基于时序变化 + 结构变化
存储开销 较低 较高(需要存储时间索引)
适用场景 静态关系分析、社区发现 行为序列分析、动态团伙识别、实时风控
实时性 支持实时查询 支持实时写入 + 实时查询

嗯,这里要注意:时序图谱不是静态图谱的替代品,而是升级版。静态图谱能做的,时序图谱都能做;但反过来不行。

1.5 时序图谱的核心知识体系

下面这张图是我自己整理的,基本覆盖了时序图谱在风控中要用到的核心概念:

时序知识图谱在风控中的核心知识体系 时序知识图谱基础 数据模型与存储 时序推理与查询 风控应用场景 四元组模型 时间索引 时序模式匹配 趋势分析 实时反欺诈 团伙识别 时间区间表示 时间点表示 时序规则引擎 时序图神经网络 设备指纹时序 行为序列分析 图:时序知识图谱在风控中的核心知识体系

1.6 一个简单的代码示例

为了让你更直观地理解时序图谱的数据结构,我写个简单的Python示例:

# 静态图谱的三元组
static_triple = ("user_001", "use_device", "device_abc")

# 时序图谱的四元组
time_aware_triple = {
    "subject": "user_001",
    "predicate": "use_device",
    "object": "device_abc",
    "timestamp": "2024-01-15T10:30:00Z",
    "valid_from": "2024-01-15T10:30:00Z",
    "valid_to": "2024-01-15T11:45:00Z"
}

# 查询示例:找出某个用户在特定时间段内使用过的所有设备
def query_user_devices_in_time_range(user_id, start_time, end_time):
    # 伪代码,实际实现取决于存储引擎
    return graph.query("""
        MATCH (u:User)-[r:USE_DEVICE]->(d:Device)
        WHERE u.id = $user_id
        AND r.valid_from >= $start_time
        AND r.valid_to <= $end_time
        RETURN d, r.timestamp
    """, params={"user_id": user_id, "start_time": start_time, "end_time": end_time})

我曾经踩过的坑:刚开始做时序图谱时,我直接把所有历史数据都存进去了,结果存储膨胀了10倍。后来才意识到,不是所有关系都需要保留完整时间线。比如「用户登录」这种高频事件,可以用滑动窗口+聚合的方式存储,没必要每条都记。

1.7 什么时候该用时序图谱

我个人的判断标准很简单:

  • 如果你的风控规则里包含「频率」「间隔」「变化」「趋势」这些词——那就需要时序图谱
  • 如果你只关心「谁和谁有关系」——静态图谱就够了

举个例子:

  • 「同一设备登录超过5个账户」→ 静态图谱能搞定
  • 「同一设备在10分钟内登录超过5个账户」→ 必须上时序图谱

你看,就差了一个时间条件,技术方案完全不同。

1.8 小结

这一章我们聊了:

  • 时序知识图谱就是在静态图谱上加了个时间维度
  • 风控需要时序,因为欺诈行为往往藏在变化里
  • 时序图谱能做的,静态图谱不一定能做
  • 选型时,看你的规则里有没有「时间」相关的条件

下一章,我会带你看看时序图谱在风控中的具体数据模型设计——包括怎么存、怎么查、怎么保证实时性。这些都是在实际项目中踩过坑才总结出来的经验。


公众号:蓝海资料掘金营,微信deep3321