金融市里住着千千万万的“居民”——我们把它想象成一个巨型社区。社区保安每天挨家挨户盘查可疑人员,抓到一个骗子就沾沾自喜。可怪事发生了:抓了十年,诈骗案却越抓越多。直到来了个老练的网格员小图,他才发现这帮骗子从不单干,他们一周碰三次面、互相代付水电费、连转账都走同一个中间人。单看任何一个人,干净得像张白纸;可把他们画在同一张关系网上,一条条暗线立刻现了形。 这个故事正是图神经网络(GNN)反欺诈的全部直觉。传统反欺诈只盯“单点”,GNN 则把每个账户当“节点”、把转账关系当“边”,沿着关系网一层层“串门打听”——这就是消息传递。今天这篇文章,我们跟着小图的破案笔记,把 GNN 反欺诈从原理、选型、特征、工程到落地完整走一遍,看看这张“关系网”如何让欺诈团伙无所遁形。
学会 GNN 反欺诈,你将掌握 AI+金融最热门的实战技能。这项能力是头部大厂风控团队的核心岗要求,也是让银行每年减少上亿欺诈损失的关键技术。
可视化演示
演示欺诈关系图构建与团伙识别、GNN模型选型,以及图结构特征工程与多模态融合。
本节配有交互动效(进入视口后自动加载,约 3KB)。
欺诈关系图 账户节点+关系边 团伙高亮 节点→边→团伙 识别拓扑关系
为何反欺诈要用图
小图刚上任时,沿用了保安的老办法:挨个盘查有前科的“重点人”。但查了半个月,一个骗子都没揪出来。他翻开案卷发现:每个落网骗子单独看都没有异常——流水正常、消费合理、没有逾期记录。可如果他们真是孤身作案,为什么作案时间总对齐在同一周?小图把问号画在了纸上:人和人,一定有暗线连着。
账户之间的“暗线”就是图。技术上说,图表示为 $G=(V,E)$:$V$ 是所有账户节点,$E$ 是账户间的转账、登录设备、共享手机号等关系边。GNN 要解决的,是把“这个账户是不是欺诈”建模成一个节点分类任务——但判断依据不是孤立的账户属性,而是它在整张关系网中的位置和邻居形态。
欺诈团伙在图结构上有一个共同点:内部边极度密集。正常用户之间的交易随机而稀疏,团伙成员却必须频繁对账、转账、拆账,形成一张“密不透风”的子图。这个性质可用团伙密度量化:
小图盯着画满连线的关系图一拍大腿:这些人不是普通邻居,他们的关系网织得密不透风——GNN 要抓的,正是这种“过密”的关系结构。这也是传统单点模型永远看不见的维度。
- 分子 $2|E_{sub}|$团伙内部真实存在的交易边数乘以 2。无向图中每条边被两端各计一次,乘 2 是为了和分母的配对计数对齐。
- 分母 $|V_{sub}|(|V_{sub}|-1)$团伙内 $|V_{sub}|$ 个节点之间所有可能连边的总数,即完全图的边数。
- 比值 $\rho$实际连边数占可能连边数的比例,取值 0 到 1,越接近 1 说明内部连接越紧密。
GNN 模型选型
摸清方向后,小图开始学技术。他总结出三种走访策略:第一种“挨家挨户问一遍再取平均”,省事但一视同仁;第二种“给关键人更高权重”,重点听团伙头目的话;第三种“社区太大就抽查几个代表”,高效但略粗糙。这三种策略,对应 GNN 的三大主流模型。
GNN 的核心引擎是消息传递:每个节点从邻居那里收集特征,更新自己的表示。叠多层后,感受野就从“邻居”扩大到“朋友的朋友”。最基础的 GCN 把邻居特征按两端度做归一化后求加权平均;GAT 引入注意力机制,为每个邻居学一个权重 $\alpha$,让“更有信息量”的邻居发言权更大;GraphSAGE 则先随机采样固定数量的邻居再做聚合,把每层计算量锁死,为大规模图而生。
以 GCN 为例,第 $l+1$ 层节点的特征更新公式为:
模型怎么选?小图的经验是:图谱规模在百万级以内、关系稠密,用 GCN/GAT 精度高;十亿级节点、实时性要求高,果断上 GraphSAGE 这类采样型模型。没有万能的模型,只有合适的策略。
- $h_u^{(l)}$邻居 $u$ 在第 $l$ 层的特征向量,是它当前掌握的“情报”。
- $W^{(l)}$可学习的权重矩阵,把每个邻居的特征变换到新的表示空间。
- 归一化因子 $\frac{1}{\sqrt{\hat{d}_v \hat{d}_u}}$$\hat{d}$ 是加上自环后的度。度数大的节点邻居多,容易主导平均,乘上这个因子后影响力被拉平。
- $\sigma$非线性激活函数(如 ReLU),让模型能表达复杂模式。
图特征构建
小图的走访笔记分四类:居民档案(这个人住哪、什么职业)、串门记录(和谁来往、多频繁)、社交结构(他的朋友之间居然也互相认识)、时间动向(最近突然活跃)。对应到图特征上,就是节点特征、边特征、结构特征和时序特征。
反欺诈场景里,节点特征包括注册时长、设备指纹、历史交易统计等“个人档案”;边特征刻画每笔交易,如首笔交易距今时间、转账频次、金额离散度;结构特征回答“这个账户在网里处于什么位置”;时序特征则捕捉“最近 24 小时新增交易数、短窗口内集中转出”等突变行为。
结构特征中最有团伙辨识度的是聚集系数。它衡量“我的朋友们之间是否彼此认识”:正常人的朋友往往是星型散开的,彼此不认识;团伙成员为了协同,必须互相认识,三角形关系特别多。
小图在笔记本上画满三角形。他说:正常人交朋友是线性的,骗子交朋友是三角形的——关系越抱团,越有团伙味。把这类结构特征喂给 GNN,模型就多了一双“看结构”的眼睛。
- $T(v)$包含节点 $v$ 的三角形数量,即有多少对邻居之间也互相连着边。
- $d_v(d_v - 1)$$d_v$ 是节点 $v$ 的邻居数,这表示 $v$ 的所有邻居两两之间最多可能形成的边数。
- 比值 $C_v$取值 0 到 1,越接近 1 说明“我的朋友们全是朋友”,这就是团伙的连坐结构。
大规模图计算
社区有两千万户人家,小图一个人跑断腿也查不完。他向上级申请了“片区系统”:每栋楼一个分片,多个网格员并行管理;每户不用全查,按关系线索抽查关键几户。真实金融场景的图动辄数十亿节点,单机内存连存储都放不下,道理完全一样。
大规模图计算的三大件是图存储、分布式计算和邻居采样。图存储要把邻接表切分成多个分片,分散到集群各节点,避免单点内存爆炸;分布式计算让每台机器只算自己分片内的子图,节点间同步边界消息;邻居采样则从源头限制计算量——GNN 每一层不聚合全部邻居,而是随机抽 $K$ 个。
采样后,每层的计算量只取决于 $K$ 而不是真实度数,训练时间与图总规模解耦:
小图尝到了“抓重点”的甜头:与其把一万个邻居挨个问一遍,不如随机挑十几个有代表性的,再配合全社区档案做统计口径。这个思想贯穿了所有大规模 GNN 系统。
- $d_v$节点 $v$ 的真实邻居数量,在大图中可能是几百甚至上万。
- $K$用户设定的采样上限,是控制计算量的“闸门”。
- $\min(d_v, K)$邻居少就全用,邻居多就只抽 $K$ 个,保证每层计算量有上界。
模型训练优化
小图参加反诈培训,教官上来就出题:“这个社区 99.99% 是好人。如果你只会背'所有人都是好人',准确率高达 99.99%,你会被评优吗?”小图摇头——一个骗子都抓不到,要这准确率有何用。欺诈样本在真实业务中占比常低于万分之一,普通交叉熵损失会被海量正常样本彻底淹没。
解决不均衡有两板斧:一是换损失函数,二是做负采样。负采样只让一部分正常样本参与每个 batch 的训练,把“正常人的信息”控制在一定比例;损失函数则用焦点损失(Focal Loss),对“模型还认不准的样本”加大惩罚。
焦点损失的数学形式:
小图在笔记里写道:别在“一眼就是好人”的样本上耗费精力,盯紧那些“看着可疑但拿不准”的家伙,直到把他们看透——这就是焦点损失的智慧。
- $p_i$模型预测第 $i$ 个样本属于真实类别的概率。$p_i$ 越小,说明模型越可能把欺诈样本放跑。
- 调制因子 $(1-p_i)^\gamma$当 $p_i$ 接近 1(模型很自信且正确)时因子趋近 0,损失被压低;当 $p_i$ 接近 0(模型完全认错)时因子接近 1,损失保持高位。
- 类别权重 $\alpha$给欺诈类更高的权重,进一步拉高少数类的地位。
推理部署方案
小图的日常工作分三个节奏:每晚定时汇总全社区台账,做一次全面体检;白天接到警情立刻冲到现场,10 分钟内给出判断;每季度参加新技术培训,更新自己的办案手册。GNN 的部署也是三条线:离线批推理、在线实时推理、模型更新与监控。
离线批推理在夜间用全量图扫描一遍,把所有账户按风险打分,生成黑名单候选;在线实时推理要赶在交易完成前给出拦截决定,但 GNN 多层邻居聚合延迟较高,需要对模型做轻量化。常用手段是知识蒸馏:训练一个复杂的“教师模型”输出软标签,再教给一个小而快的“学生模型”,让学生线上跑得更快、效果贴近老师。
蒸馏损失的形式:
小图的比喻很传神:新来的实习生(学生模型)不能只背答案,还要学会师父(教师模型)那种“七分把握、三分迟疑”的判断分寸,这样才算真出师。上线后还要持续监控模型表现,发现团伙手法变化就重新训练。
- $z_t, z_s$教师模型和学生模型的原始输出 logits。
- 温度 $T$把 logits 除以 $T$ 让概率分布变平滑,暴露类间细微差异。
- KL 散度度量学生概率分布与教师概率分布的差异,作为学生模仿老师的“差距分数”。
效果评估方法
季度考核会上,上级问小图三件事:团伙里的坏人你抓到几个?有没有冤枉好人?从发案到破案用了多久?这三个问题翻译成专业指标,就是召回率、精确率和检测时效。
召回率看“漏网之鱼”:欺诈账户一共 100 个,模型只抓到 80 个,召回率就是 80%。精确率看“风声鹤唳”:模型标记了 100 个欺诈账户,其中只有 60 个真是坏的,那 40 个被冤枉的好人就是误报。两者互相制衡,抓得多往往误伤也多。
小图把考核表贴在办公室墙上:坏人抓十个漏一个,不合格;抓得多但天天冤枉好人,也要被投诉。反欺诈调模型,本质上就是在“漏网”和“误伤”之间走钢丝。
- TP(真阳性)真正欺诈且被模型正确标记的数量。
- FN(假阴性)实际欺诈但未被发现的漏网账户。
- FP(假阳性)实际正常但被误报的账户。
- 两个比值召回率看重查全能力,精确率反映误伤水平,二者共同构成模型的“能力边界”。
落地挑战要点
小图的系统虽好,但运行半年后问题接踵而至:新搬来的住户没有任何历史档案,系统无法判断;骗子也在不断换手机号、换交易对手;抓人要写证据链,可 GNN 多层聚合后说不清“为什么判他有罪”;跨机构共享数据又涉及居民隐私。
这四大挑战,对应 GNN 反欺诈落地的四道坎。冷启动需要借助设备指纹、IP 等弱关系建图,让新账户也能“进网”;动态图要求模型能增量更新,交易每秒都在变,静态图很快过期;可解释性需要引入 GNN 解释器(如 GNNExplainer),找出对判定贡献最大的子图,给监管一个交代;隐私合规则要用联邦学习或隐私计算,让数据不动、模型动。
动态图建模常用时间衰减权重,对边和特征按时间打折,越近的交易越重要:
小图最后总结:技术本身并不难,难的是让技术“懂规矩、会更新、能讲理”。跨过这四道坎,GNN 反欺诈才算真正从论文走到了生产环境。
- $\Delta t = t_{\text{now}} - t$交易发生距现在的时间差,单位通常是天或小时。
- $\lambda$衰减速率参数,控制模型“遗忘”旧信息的速度。
- 指数衰减 $e^{-\lambda \Delta t}$权重随时间从 1 单调递减到 0,$\lambda$ 越大遗忘越快。
AI 应用场景
银行实时交易反欺诈
阶段:模型推理与部署
解决的问题:银行每天处理数十亿笔交易,传统规则引擎只能盯单个账户的限额,团伙把大额资金拆成几百笔小额转出,单账户永不超限,轻松绕过风控。GNN 在交易发生时实时构建局部子图,对每笔交易做多跳邻居风险聚合,一旦发现账户附近出现团伙特征(高聚集系数、频繁互转),毫秒级拦截。
具体案例:某股份制银行在线上支付链路部署 GNN 反欺诈系统后,团伙欺诈召回率从 40% 提升至 82%,误报率下降 30%,当年拦截欺诈资金超 3 亿元。
支付平台团伙盗号检测
阶段:图特征构建与模型训练
解决的问题:盗号团伙用脚本批量登录大量账号,每个账号表面看是独立用户,但它们共享设备指纹、同一批手机号、同一 IP 段、并且互相转账洗白。GNN 用设备号、手机号、IP 构建多关系异质图,模型学到“一群共用设备的账号”就是团伙。
具体案例:某支付平台将 GNN 应用于盗号检测后,批量盗号团伙识别率提升 60%,用户申诉率下降 45%,有效遏制了黑产对正常账户的侵占。
电商平台羊毛党识别
阶段:大数据处理与图计算
解决的问题:羊毛党注册成千上万个小号领取新用户补贴,单个小号的行为和正常用户毫无差别。但它们共用收货地址、支付账号和网络 IP,在图谱上形成一个聚集系数极高的“薅羊毛社区”。GNN 在大规模用户图上做社区发现,批量标记整个团伙。
具体案例:某电商平台大促期间用 GNN 识别出 12 万个羊毛党账号,节省补贴费用 8000 万元,同时避免误伤真实新用户带来的口碑损失。
Python 演示
# -*- coding: utf-8 -*-"""简化版图神经网络(GNN)反欺诈演示只依赖 numpy,用两跳邻居聚合特征训练逻辑回归"""import numpy as np def build_adjacency(edges, n): """根据边列表构建 0/1 邻接矩阵""" A = np.zeros((n, n)) for u, v in edges: A[u, v] = 1 A[v, u] = 1 return A def normalize_adjacency(A): """添加自环并做行归一化,让聚合变成加权平均""" A_hat = A + np.eye(A.shape[0]) degree = A_hat.sum(axis=1, keepdims=True) return A_hat / degree def aggregate_features(X, A_norm): """两跳消息传递:分别聚合一跳、二跳邻居特征""" H1 = A_norm @ X H2 = A_norm @ H1 return np.concatenate([X, H1, H2], axis=1) def sigmoid(z): return 1.0 / (1.0 + np.exp(-z)) def train_logistic(X, y, epochs=500, lr=0.5): """使用梯度下降训练逻辑回归分类器""" n, d = X.shape w = np.zeros(d) for _ in range(epochs): grad = (sigmoid(X @ w) - y) @ X / n w -= lr * grad return w def evaluate(y_true, y_pred): tp = int(((y_pred == 1) & (y_true == 1)).sum()) fp = int(((y_pred == 1) & (y_true == 0)).sum()) fn = int(((y_pred == 0) & (y_true == 1)).sum()) recall = tp / max(tp + fn, 1) precision = tp / max(tp + fp, 1) return recall, precision, tp, fp, fn def main(): rng = np.random.default_rng(42) n = 60 # 生成正常用户之间的随机交易边 edges = [] for i in range(n): for j in range(i + 1, n): if rng.random() < 0.05: edges.append((i, j)) # 构造 10 人的欺诈团伙(节点 50-59),两两紧密互联 fraud_nodes = list(range(50, 60)) for i in range(len(fraud_nodes)): for j in range(i + 1, len(fraud_nodes)): edges.append((fraud_nodes[i], fraud_nodes[j])) # 团伙只和外部极少数账户联系,保持隐蔽 for f in fraud_nodes[:5]: edges.append((f, int(rng.integers(0, 50)))) A = build_adjacency(edges, n) A_norm = normalize_adjacency(A) # 节点特征:交易次数、平均金额、夜间交易占比 X = rng.random((n, 3)) X[fraud_nodes, 2] += 0.7 # 夜间占比异常高 X[fraud_nodes, 1] -= 0.3 # 单笔金额偏小(拆单) y = np.zeros(n, dtype=int) y[fraud_nodes] = 1 # 两跳邻居聚合后训练分类器 Feat = aggregate_features(X, A_norm) w = train_logistic(Feat, y) prob = sigmoid(Feat @ w) pred = (prob > 0.5).astype(int) recall, precision, tp, fp, fn = evaluate(y, pred) print(f"召回率: {recall:.2f} 捕获 {tp}/{tp + fn} 个欺诈节点") print(f"精确率: {precision:.2f} 误报 {fp} 个正常节点") # 对比:只用原始特征训练,不用图聚合 w0 = train_logistic(X, y) pred0 = (sigmoid(X @ w0) > 0.5).astype(int) recall0, precision0, tp0, fp0, fn0 = evaluate(y, pred0) print(f"\n不使用图的对比实验:") print(f"召回率: {recall0:.2f} 捕获 {tp0}/{tp0 + fn0} 个欺诈节点") print(f"精确率: {precision0:.2f} 误报 {fp0} 个正常节点") if __name__ == "__main__": main()
A_hat = A + np.eye(A.shape[0])给每个节点加自环,让节点聚合时也包含自身特征,就像小图走访时也会结合自己的观察记录。return A_hat / degree行归一化,把“数邻居个数”变成“对邻居取加权平均”,避免大度节点主导聚合。H1 = A_norm @ X一跳消息传递:每个账户聚合直接交易过的邻居的特征。H2 = A_norm @ H1二跳消息传递:聚合“朋友的朋友”,把关系网向外再扩一圈。np.concatenate([X, H1, H2], axis=1)把原始特征、一跳、二跳聚合特征拼接成新特征,相当于把“个人档案 + 邻里情报 + 社区的传言”汇总成一份完整报告。edges.append((fraud_nodes[i], fraud_nodes[j]))让团伙内部两两互联,构造出高密度子图,这是 GNN 识别团伙的关键结构。X[fraud_nodes, 2] += 0.7注入欺诈团伙的“夜间交易占比高”的领域知识,让模型有线索可学。prob = sigmoid(Feat @ w)用逻辑回归对聚合后的特征打分,得到每个账户的欺诈概率。recall = tp / max(tp + fn, 1)召回率:10 个欺诈节点抓到几个,衡量漏网情况。
常见误区
误区GNN 会自动从图结构里学知识,节点特征随便填填就行,反正消息传递会“补全”信息。做反欺诈根本不用费劲设计特征。
正解GNN 的消息传递聚合的是“节点身上已有的特征”,如果输入特征全是噪声,那聚合出来的也全是噪声。就像网格员再会串门,如果每户档案都是空白的,串一百家也问不出线索。图结构提供骨架,节点和边特征提供血肉,两者缺一不可。反欺诈中注册时长、设备指纹、交易频次等特征仍然是模型效果的地基。
为何常见:被“端到端学习”的口号误导,以为深度模型可以完全替代特征工程,忽略了 GNN 本质是对输入特征的增强而非无中生有。
误区既然 GNN 靠邻居信息,那就把所有邻居都聚合进来,一个都不能少。采样会丢掉关键线索,肯定影响效果。
正解在大规模图上全量聚合会导致计算量爆炸,而且很多弱相关邻居(比如只转过一次账的路人)会引入噪声,反而稀释了真正有信号的关系。GraphSAGE 等采样模型用实验证明:采样 10~25 个邻居的效果不输全量聚合,训练速度却能快几个数量级。网格员走访也是抓关键人,而不是挨家挨户问十万户。
为何常见:人类直觉认为“信息越多越好”,但忽略了大图场景下计算成本与噪声放大两个副作用。
误区反欺诈模型上线后准确率 99.9%,说明模型非常优秀,可以放心用了。
正解欺诈样本占比常低于万分之一,模型把所有人都判为正常,准确率也有 99.99%,但一个骗子都拦不住。反欺诈必须看召回率和精确率:召回率太低=漏网,精确率太低=大量误伤客户。就像网格员的考核不是“社区治安报告写了多长”,而是“坏人抓到几个、好人冤枉几个”。
为何常见:把通用机器学习里的“准确率”习惯带了进来,没有意识到极端不均衡场景下准确率会严重失真。
误区模型训练完导出文件,调用一个接口就完成部署了,GNN 跟普通神经网络的上线流程没区别。
正解普通模型的推理只依赖样本自身,而 GNN 推理需要实时获取该节点的多层邻居特征,每层都要做图查询和聚合。一个交易账户的 2 跳邻居可能有上万节点,在线场景延迟比普通模型高一个量级。需要借助邻居采样、特征缓存、知识蒸馏等手段优化,才能达到毫秒级风控要求。网格员接到警情也不能真的跑遍全城,必须先看档案系统里的缓存情报。
为何常见:低估了“图依赖”带来的额外计算——模型参数只是冰山一角,图查询和邻居聚合才是真正的成本大头。
面试题
Q1. GNN 与传统机器学习在反欺诈中的核心区别是什么?
- A.GNN 不需要数据训练即可使用
- B.GNN 无法处理大规模关系数据
- C.GNN 能利用账户间的关系拓扑← 正确答案
- D.GNN 只能处理表格形式的特征
答案:C。传统模型把每个账户当作独立样本,GNN 的关键在于把账户间的转账、共用设备等关系建成图,让模型能从“关系网”中识别团伙。A 错在 GNN 需要大量标注数据训练;B 错在大规模图有成熟的分布式方案;D 错在 GNN 处理的核心是图结构而非表格。
Q2. GCN 中节点特征更新的核心操作是什么?
- A.随机丢弃节点的部分特征
- B.对节点自身的特征做全局排序
- C.聚合邻居节点的特征到自身← 正确答案
- D.对特征矩阵做行列转置变换
答案:C。GCN 每一层都在做“消息传递”:把邻居特征加权聚合到目标节点上。A 是 Dropout 的正则化操作;B 的排序和 D 的转置都不是图卷积的语义。网格员走访邻居收集情报汇总到自己的判断里,正是这个聚合过程。
Q3. GAT 与 GCN 的主要区别是什么?
- A.GAT 使用注意力机制加权邻居← 正确答案
- B.GAT 完全不需要节点特征输入
- C.GAT 在聚合时不使用任何邻居
- D.GAT 无法在有向图上工作
答案:A。GCN 对邻居等权平均,GAT 通过注意力机制为每个邻居学习不同的权重,让关键邻居的贡献更大。B 错在 GAT 同样需要节点特征;C 错在 GAT 的核心仍然是邻居聚合;D 错在 GAT 天然支持有向图上的注意力分配。
Q4. 图中节点的“聚集系数”刻画的是什么?
- A.该节点历史交易金额的平均值
- B.该账户注册时间距今的长短
- C.图数据在集群中的存储引擎
- D.该节点朋友之间是否也互相认识← 正确答案
答案:D。聚集系数 = 邻居之间实际连边数 ÷ 最大可能连边数,衡量“我的朋友们彼此是否也是朋友”。欺诈团伙内部高度互联,聚集系数显著偏高。A、B 是节点属性,C 是工程存储问题,都与聚集系数的定义无关。
Q5. 反欺诈场景中“精确率低”意味着什么?
- A.欺诈团伙的成员漏抓太多
- B.被误报的正常客户比较多← 正确答案
- C.模型的训练收敛速度很慢
- D.图计算集群的成本过高
答案:B。精确率 = TP/(TP+FP),FP 是被误报的正常账户。精确率低说明模型标记的“欺诈账户”里混了大量好人,会引发客户投诉。A 对应的是召回率低;C、D 分别对应训练和工程问题,与评估指标无关。
Q6. GraphSAGE 相比 GCN 最突出的优势是什么?
- A.可采样邻居,训练超大规模图← 正确答案
- B.模型参数量显著变得更少
- C.聚合时完全不依赖邻居信息
- D.输入特征的维度自动降低
答案:A。GraphSAGE 对每个节点随机采样固定数量邻居再聚合,把每层计算量锁死,使得训练可以扩展到十亿级节点图。B 不是核心优势;C 与 GraphSAGE 的设计相反;D 特征维度由输入决定,与模型结构无关。
Q7. 为什么 GNN 在线推理延迟往往比普通模型高?
- A.模型参数量远超普通深度模型
- B.输入的特征向量维度特别高
- C.交易数据库缺少有效索引
- D.需要实时聚合多层的邻居特征← 正确答案
答案:D。GNN 推理一个节点时,必须实时从图数据库中取出其 1 跳、2 跳甚至更多层的邻居并逐层聚合。模型本身参数不大,真正昂贵的是“图上取数 + 多层消息传递”的过程。就像网格员判断一个新住户,必须先查遍他的社会关系,这比看一份档案慢得多。
Q8. 欺诈样本占比仅十万分之一,训练 GNN 时哪些做法能有效改善效果?
- A.改用焦点损失加权困难样本← 正确答案
- B.对正常样本做负采样降权← 正确答案
- C.完全忽略所有负样本只留欺诈样本
- D.对欺诈样本做少量过采样← 正确答案
答案:ABD。A 焦点损失让模型集中火力在难以分类的欺诈样本上;B 负采样控制正常样本比例;D 过采样补充欺诈样本缓解不均衡。C 完全去掉负样本会导致模型无法学习“正常”长什么样,上线后把所有人都判为欺诈,绝对不可取。
Q9. 银行部署 GNN 反欺诈模型时,哪些属于真实存在的落地挑战?
- A.新账户没有历史数据导致冷启动← 正确答案
- B.交易图每秒变化需要动态更新← 正确答案
- C.监管要求模型判定可解释← 正确答案
- D.用户隐私合规可以完全忽略
答案:ABC。A 冷启动是图谱反欺诈的经典难题:新账户孤立无邻居,聚合不出有效特征;B 动态图要求模型能增量更新;C 可解释性是金融监管的硬性要求。D 恰恰相反,隐私合规是 GNN 跨机构建模的最大约束之一,必须通过联邦学习等手段处理。
Q10. 某支付平台用户图有 20 亿节点、5000 亿条边,哪些工程方案是可行的?
- A.对图数据做分片存储到多机← 正确答案
- B.用分布式计算并行处理子图← 正确答案
- C.对邻居做采样降低计算规模← 正确答案
- D.在单机上全图遍历做训练
答案:ABC。20 亿节点的邻接表超过单机内存,A 分片存储、B 分布式并行、C 邻居采样都是工业界已验证的可行方案。D 在单机全图遍历在如此规模下内存和算力都不可行,就像让一个网格员一天之内跑完整个金融市,物理上就不可能。