3. DAG基础概念

DAG基础概念 学习卡片

在风控系统中,规则之间往往存在复杂的依赖关系:一条规则可能依赖另一条规则的输出,也可能被多条下游规则共同引用。要准确描述这种关系,并进一步检测循环依赖,必须先掌握图论中最基础的一组概念。本节将围绕有向图、无向图、顶点、边、入度、出度、路径与可达性展开,为后续的DAG构建与循环检测打下坚实基础。

一、核心原理:从无向图到有向图

图(Graph)是由顶点和边组成的数据结构,用于描述对象之间的关联关系。根据边是否具有方向,图可分为无向图和有向图。

  • 无向图(Undirected Graph):边没有方向,表示两个顶点之间存在对称关系。例如“规则A与规则B共享同一份名单”,这种关系是双向的,A关联B,B也关联A。
  • 有向图(Directed Graph):边具有方向,表示从一个顶点指向另一个顶点的单向关系。例如“规则A的输出作为规则B的输入”,此时只能从A指向B,不能反向理解。

在风控规则依赖场景中,依赖关系天然具有方向性:上游规则先执行,下游规则后执行。因此,描述规则依赖必须使用有向图,而不是无向图。若误用无向图,就会把“A依赖B”和“B依赖A”混为一谈,导致循环检测失效。

关键结论:风控规则依赖图必须是有向图。方向代表执行顺序与数据流向,是后续拓扑排序和循环检测的前提。

二、顶点、边、入度与出度

有向图由两个基本元素构成:顶点和边。

  • 顶点(Vertex):图中的节点,在风控场景中通常代表一条规则、一个规则集或一个决策节点。
  • 边(Edge):连接两个顶点的有向线段,表示依赖关系。若存在从顶点A指向顶点B的边,记作 A → B,表示A是B的上游依赖。
  • 入度(In-degree):指向某个顶点的边的数量。入度表示该顶点依赖多少个上游节点。入度为0的顶点没有上游依赖,可以作为执行起点。
  • 出度(Out-degree):从某个顶点出发指向其他顶点的边的数量。出度表示该顶点被多少个下游节点依赖。出度为0的顶点没有下游节点,通常是最终输出节点。

入度和出度是判断图结构健康程度的重要指标。例如,在规则依赖图中,如果所有顶点入度都大于0,说明不存在独立起点,系统可能整体陷入循环依赖;如果某个顶点入度异常高,说明它是关键枢纽,一旦变更影响面极大。

概念 定义 风控规则场景示例 典型用途
顶点 图中的节点 规则“高风险设备识别” 标识独立规则单元
边 连接两顶点的有向关系 规则A → 规则B 表达依赖方向
入度 指向该顶点的边数 规则B有2个上游依赖 判断执行起点、检测循环
出度 从该顶点出发的边数 规则A被3条规则依赖 评估影响范围
路径 顶点与边的交替序列 A → B → C 描述依赖链路
可达性 是否存在路径从起点到终点 A能否间接影响D 影响分析、循环判断

三、路径与可达性:依赖链路的表达

路径(Path)是图中从一个顶点到另一个顶点经过的顶点和边的序列。在有向图中,路径必须沿边的方向前进。例如 A → B → C → D 构成一条从A到D的路径,表示A的决策结果会逐级传递到D。

可达性(Reachability)描述的是:从顶点A出发,是否存在一条路径能够到达顶点B。如果存在,则称B从A可达。可达性是风控规则影响分析的核心:当修改规则A时,所有从A可达的规则都可能受到影响,需要一并回归验证。

路径与可达性也是循环检测的基础。如果从顶点A出发,经过若干条边后又能回到A,即A从自身可达,则说明图中存在环。DAG(有向无环图)的定义正是:不存在任何从某顶点出发回到自身的路径的有向图。

理解技巧:把有向图想象成单行道网络。路径就是沿着单行道能走通的路线;可达性就是“从当前位置能否开到目标位置”;如果沿着单行道绕一圈又回到出发点,就说明路网中存在环,不再是DAG。

四、案例与场景:规则依赖图建模

假设某风控系统中有5条规则,依赖关系如下:

规则A:设备指纹采集(无上游依赖)
规则B:黑名单命中(无上游依赖)
规则C:高风险设备识别(依赖A)
规则D:交易欺诈评分(依赖B、C)
规则E:人工审核触发(依赖D)

将其建模为有向图,顶点集合为 {A, B, C, D, E},边集合为:

A → C
B → D
C → D
D → E

各顶点的入度与出度如下:

A:入度0,出度1
B:入度0,出度1
C:入度1,出度1
D:入度2,出度1
E:入度1,出度0

从该图可以读出以下信息:A和B是执行起点,入度为0;E是最终输出节点,出度为0;D是关键汇聚点,入度为2,说明它同时依赖黑名单和高风险设备识别两条链路。从A到E存在路径 A → C → D → E,说明A的变更会间接影响E。整个图中不存在环,因此是一个合法的DAG。

风控规则依赖DAG示例 A B C D E 入度0 出度1 入度0 出度1 入度1 出度1 入度2 出度1 入度1 出度0

五、误区与复盘

在学习DAG基础概念时,初学者容易陷入以下误区:

  1. 把无向图当作有向图使用。认为“A和B有关系”就够了,忽略方向。结果无法判断谁先执行,也无法检测循环。
  2. 混淆入度和出度的含义。误以为入度是“被依赖数”,出度是“依赖数”。实际上恰好相反:入度是“依赖多少上游”,出度是“被多少下游依赖”。
  3. 把路径等同于直接边。认为只有直接相连才算依赖。实际上A → B → C → D中,A对D也存在可达性,影响会沿路径传递。
  4. 认为没有直接环就没有循环。循环可能由多条边间接构成,例如A → B → C → A,必须通过可达性判断,而不能只看相邻顶点。
  5. 忽略孤立顶点。入度和出度都为0的顶点虽然不参与依赖,但在规则集中可能代表独立规则,建模时不应遗漏。

复盘提醒:在风控规则DAG中,顶点代表规则,边代表依赖方向,入度决定执行起点,出度决定影响终点,路径和可达性决定影响传播范围。只有这些基础概念全部准确,后续的拓扑排序与循环检测才不会建立在错误认知之上。

掌握本节概念后,可以用一个简单清单快速检查任意规则依赖图是否描述正确:

  • 每个顶点是否对应一条明确的规则或规则集?
  • 每条边是否都有明确方向,且方向与执行顺序一致?
  • 是否计算了每个顶点的入度和出度?
  • 是否能够列出从起点到终点的完整路径?
  • 是否检查过任意顶点能否通过路径回到自身?

这些检查项将直接服务于下一阶段的DAG构建与循环检测实战。只有把图的基本语言说清楚,风控规则依赖关系才能被准确表达、验证和治理。