Leiden社区检测应用案例与建边范式简介
– title: Leiden社区检测应用案例与建边范式简介 date: 2026-08-10 11:15:00 categories: [AI, ML] tags: [AI, ML, 聚类, Leiden] image: path: /assets/img/posts/common/ml.jpg —
Leiden 社区检测应用案例与建边范式简介
Leiden 在公开竞赛与工业落地中,往往是解题手段而非赛题本身:先按业务规则建边构图,再用社区检测圈出「团伙 / 模块」,最后把社区号、中心性等喂给下游模型或业务系统。本文从 IEEE-CIS 欺诈团伙、单细胞 Leiden 特征工程等公开案例出发,归纳可复用的建图范式、数据例子与工程技巧,并说明弱共现边(如同批次事件、同场次)相对「同卡同设备」这类强身份关联,必须加码去噪与边权。
最重要的设计决定是:绝大多数人应该没有社群结论。系统要敢于输出「此人无可判定关系」,而不是硬塞进某个群。这一点反直觉,但它决定了整套东西是可信还是虚假繁荣。
参考与延伸阅读:
- Leiden 论文:https://www.nature.com/articles/s41598-019-41695-z
leidenalg:https://github.com/vtraag/leidenalg- IEEE-CIS Fraud Detection:https://www.kaggle.com/c/ieee-fraud-detection
- Neo4j IEEE-CIS 图方案:https://neo4j.com/developer/industry-use-cases/finserv/retail-banking/ieee-cis-fraud-graphs/
目录
- 1. 第一原则:建边规则大于算法选型
- 2. 核心范式:共享实体建图 → 社区 → 特征
- 3. 案例一:IEEE-CIS 欺诈团伙检测
- 4. 从欺诈图映射到弱共现团伙
- 5. 案例二:单细胞基因组学中的 Leiden 特征
- 6. 工程技巧清单
- 7. 公开资源与选型建议
- 8. 小结
- 9. 参考与来源
1. 第一原则:建边规则大于算法选型
决定社区检测成败的,往往不是换 Louvain 还是 Leiden,而是:
你怎么定义两个人(或两笔交易)之间的边。
| 建边质量 | 典型后果 |
|---|---|
| 强关联、可区分(同设备、同卡、同订单批次…) | Leiden 能切出有业务意义的紧密小团 |
| 过宽泛(粗粒度地理属性两两连边、全网共用邮箱域名…) | 图爆炸或糊成巨型无意义社区,算法再好也救不回 |
落地流水线应固定为:
1
2
3
4
5
① 业务规则定义建边(强边可独立;宽泛属性只作权重加成)
↓
② 基于边规则构图(节点 + 边权;必要时剪超级节点)
↓
③ Leiden / Louvain 切社群 → 社区标签、中心性、风险分 / 下游特征
2. 核心范式:共享实体建图 → 社区 → 特征
公开案例与工业方案高度同构,可概括为:
1
2
3
4
5
6
7
实体 / 事件表
↓ 共享实体 = 连边(异构图或投影到同构图)
人—人 或 交易—交易 关系图
↓ Leiden / Louvain 社区检测
Fraud Island / 共现团伙 / 功能模块
↓ 社区大小、密度、中心性、已知标签率…
复合风险分 或 喂给 XGBoost / 业务看板
| 步骤 | 含义 |
|---|---|
| 共享实体建边 | 不靠「全员两两算相似度」,而靠「共同指向同一卡/设备/事件批次」间接相连 |
| 社区 = 团伙雏形 | 共享中枢实体的稠密小团,往往是异常团伙或功能模块 |
| 图指标当特征 | 社区号、度、PageRank、社区内已知坏样本率 → 提升下游识别或关联扩展 |
3. 案例一:IEEE-CIS 欺诈团伙检测
IEEE-CIS Fraud Detection 是与「关系型团伙发现」最同构的公开赛之一。Kaggle 上几乎没有以 Leiden 为题目的比赛;Leiden / Louvain 出现在选手与厂商的图方案中,用来圈 Fraud Rings / Fraud Islands。
3.1 有哪些数据(与建图相关)
本质是「交易表 + 身份/设备相关字段」。能把不同交易串起来的,是共享实体:
| 字段 | 含义 | 图里的角色 |
|---|---|---|
TransactionID | 交易 ID | 交易节点 |
isFraud | 是否欺诈(有标签) | 监督目标 / 标签传导 |
card1~card6 | 卡信息 | 卡实体 |
addr1 / addr2 | 账单地址 | 地址实体 |
P_emaildomain | 付款邮箱域名 | 邮箱实体 |
DeviceInfo / DeviceType | 设备 | 设备实体 |
TransactionDT | 交易时间 | 时间窗 / 边权 |
3.2 怎么建边:共享实体 = 连边
不是「交易两两算相似度」,而是建异构图(或再投影成交易—交易同构图):
1
2
3
(交易 T1) ──USED_CARD──> (卡 C_1001)
(交易 T1) ──USED_DEVICE─> (设备 D_安卓X)
(交易 T1) ──USED_EMAIL──> (邮箱 proton.com)
若 T2 也指向同一设备 / 邮箱 / 地址,则 T1 与 T2 间接相连。
3.3 具体数据例子
| 交易 | card1 | 设备 | 邮箱 | addr1 | isFraud |
|---|---|---|---|---|---|
| T1 | C_1001 | D_安卓X | proton.com | 999 | ? |
| T2 | C_1002 | D_安卓X | proton.com | 999 | ? |
| T3 | C_1003 | D_安卓X | proton.com | 999 | 1(已知欺诈) |
| T4 | C_1004 | D_安卓X | proton.com | 999 | ? |
| T5 | C_5555 | D_iPhone私人 | grace@gmail | 204 | 0 |
建边后的结构示意:
1
2
3
4
5
6
7
C_1001 C_1002 C_1003(欺诈) C_1004
\ | | /
▶──── 设备 D_安卓X ────◀ (多张卡共用一台设备)
▶──── 邮箱 proton.com ──◀
▶──── 地址 999 ────────◀
C_5555 ── D_iPhone私人 ── grace@gmail (一人一卡一设备)
3.4 切出怎样的社群
| 社区 | 成员(示意) | 业务解读 |
|---|---|---|
| 社区 A(Fraud Island) | 多张卡 + 同一设备 + 同一邮箱 + 同一地址 | 小而极密;内含已知欺诈 → 风险可传导给同社区未知交易 |
| 社区 B(正常) | 一卡一设备一邮箱 | 孤立小社区,符合「正常人一张卡配自己的设备」 |
抓团伙的本质:正常人是「一张卡配一台自己的设备」;欺诈团伙常是「一台设备 / 一个邮箱后面挂了一堆卡」——共享中枢实体的稠密小团 = Fraud Ring。
Neo4j 等方案还会用 PageRank、中心性等找中枢设备,再把社区特征喂给树模型;开源复现可见 finance-ieee-cis-fraud。
4. 从欺诈图映射到弱共现团伙
把 IEEE-CIS 的「交易—卡—设备」换成「主体—共享事件 / 共享群组」等共现关系,整套 pipeline 可几乎平移。以下为通用映射(非特定行业配置)。
4.1 对应表(可直接当建模蓝图)
| IEEE-CIS 做法 | 弱共现 / 事件共现场景对应 |
|---|---|
| 交易节点 + 共享实体(卡 / 设备 / 邮箱) | 主体节点 + 共享事件(订单批次、场次 ID、群组号、会话…) |
| 两笔交易共用一张卡 → 连边 | 两主体共享同一事件 / 群组 → 连边 |
| Louvain / Leiden 切 Fraud Island | Leiden 切共现团伙 / 关系模块 |
| 设备节点的度 = 一台设备挂多少卡 | 共享枢纽节点的度 = 挂接了多少主体 |
| PageRank 找中枢设备 | PageRank / 介数找枢纽节点、关键联络点 |
| 社区大小 / 密度 / 内部欺诈率 → 特征 | 社区大小 / 密度 / 已知坏样本率 → 复合风险分 |
4.2 建边强度分级(务必区分强弱)
| 边类型(示意) | 建议 | 说明 |
|---|---|---|
| 强身份 / 强组织共现(同设备、同明确群组号) | 强边,可直接建 | 关联可解释、区分度高 |
| 同批次事件(同日同场次等) | 可建边,建议加权 | 常见共现,但可能含大量偶然同场 |
| 同地点粗粒度 + 同时间窗 | 弱边 | 宜要求跨窗口复现再加权 |
| 粗粒度人口 / 地理属性一致 | 仅对已有边加成 | 不单独建边 |
| 过宽泛属性(如省级地理分区) | 禁止单独建边 | 易图爆炸、切出无意义巨型社区 |
原则:强边可独立成立;弱边需组合或复现;宽泛属性只作加成。
4.3 必须改造的关键差异(不能照搬)
| 维度 | IEEE-CIS | 弱共现场景 | 影响 |
|---|---|---|---|
| 标签 | 有 isFraud,可有监督 | 多数场景弱标签 / 无标签 | 更依赖无监督社区 + 结构异常;标签多用于传导与验证 |
| 边的可靠性 | 同卡 ≈ 强身份关联 | 同场次 / 同批次 = 弱关联(无关主体也可同场) | 去噪、边权、复现次数比欺诈图更关键 |
| 正交信号 | 主要靠图 | 常可叠行为规则、密度聚类等 | 图 + 行为交叉,信号更丰富 |
一句话:IEEE-CIS 的边「天然偏强」,弱共现边「天然偏弱」——所以更吃建边定义与去噪,再次回到第一原则。
4.4 可复用技术栈
| 层级 | 建议 |
|---|---|
| 算法 | Louvain 作基线 → Leiden 作升级(API 接近) |
| 实现 | python-igraph + leidenalg |
| 存储 | 小图内存跑;需多跳查询(「与已知坏样本 2 跳内共现」)可上 Neo4j GDS 等 |
5. 案例二:单细胞基因组学中的 Leiden 特征
在 Open Problems – Multimodal Single-Cell 等赛题中,Leiden 是该领域标准聚类手段之一。对团伙检测更有启发的是:社区结果如何变成模型特征,而不是细胞生物学细节本身。
1
2
3
4
5
邻居图 / 相似度图
↓ Leiden 聚类(如聚成数十个社区)
社区标签
↓ 社区内均值聚合、再 SVD 等降维
进入下游预测模型的特征
| 单细胞做法 | 欺诈 / 共现团伙侧类比 |
|---|---|
| Leiden 社区 ID | community_id |
| 社区均值向量 | 社区级统计:规模、密度、平均中心性、已知坏样本率 |
| 降维后喂模型 | 拼进分类模型或排序打分 |
看点:社区不是终点;社区 → 特征 / 风险分 才对应完整闭环。调参上可参考 scanpy 聚类教程 对 resolution 与社区粒度的对比。
6. 工程技巧清单
6.1 超级节点剪枝(最重要)
| 领域 | 典型超级节点 | 若不处理 |
|---|---|---|
| 欺诈图 | gmail.com 等超高邮箱域名 | 全图糊成一团 |
| 弱共现图 | 超大场次、高频热点场所、巨型群组 | 数百人同场两两连边 ≈ 数万噪声边 |
对策(可组合):
- 高频共享实体剪除或大幅降权
- 「共现次数 ≥ N」才建边
- 大群组改为星型(成员连枢纽)或按子结构拆分
- 宽泛属性(如粗粒度地理分区)绝不单独建边,仅作已有边加成
6.2 标签传导(Label Propagation)
社区内若有 1 个已知坏样本(如已标注欺诈交易),可抬升整社区风险分,将其余成员排入优先复核队列。适合「标签稀疏、需要关联扩展」的场景。
注意:无标签时不能虚构传导;有标签时也要防超级节点把风险误传到大规模正常样本。
6.3 图指标进下游
| 指标 | 用途 |
|---|---|
| 社区大小 / 密度 | 区分「松散大团」与「紧密小团伙」 |
| 节点度 / PageRank / 介数 | 找中枢设备、枢纽节点 |
| 社区内已知坏样本率 | 有监督或半监督风险分 |
community_id 本身 | 类别特征或分组统计 |
6.4 与行为规则正交时的高价值信号
若流水线中同时有「单实体行为规则」(如个体行为模式检测)与「主体—主体社区」:
行为上像噪声(未命中规则)+ 结构上社区很紧密,往往是高价值可疑信号——可能在规避规则,但仍与固定一批主体反复共现。
「是否命中行为规则」与「是否有共现边」是两个正交维度,交叉分析通常比单路算法更稳。
7. 公开资源与选型建议
7.1 图 / 欺诈团伙(与弱共现场景最同构)
| 资源 | 链接 | 对应步骤 |
|---|---|---|
| IEEE-CIS 比赛 | https://www.kaggle.com/c/ieee-fraud-detection | 建图 → 社区圈团伙范式 |
| IEEE-CIS 数据说明 | https://www.kaggle.com/c/ieee-fraud-detection/data | 关系字段如何组织 |
| Neo4j 官方图方案 | https://neo4j.com/developer/industry-use-cases/finserv/retail-banking/ieee-cis-fraud-graphs/ | 社区 + 中心性找 Fraud Ring |
| GitHub 复现 | https://github.com/pedroleitao-neo4j/finance-ieee-cis-fraud | 工程落地参考 |
7.2 单细胞(学「社区 → 特征」)
| 资源 | 链接 | 看点 |
|---|---|---|
| Open Problems Multimodal | https://www.kaggle.com/competitions/open-problems-multimodal | Leiden 为领域标配 |
| 第 3 名方案 | https://www.kaggle.com/competitions/open-problems-multimodal/writeups/makotu-3rd-place-solution | 社区结果造特征 |
| 第 3 名代码 | https://github.com/makotu1208/open-problems-multimodal-3rd-solution | 特征工程实现 |
7.3 算法与调参
| 资源 | 链接 | 看点 |
|---|---|---|
| Leiden 论文 | https://www.nature.com/articles/s41598-019-41695-z | 三阶段原理 |
leidenalg | https://github.com/vtraag/leidenalg | Python 主力实现 |
| 文档 | https://leidenalg.readthedocs.io/en/latest/intro.html | Modularity / CPM / 分辨率 |
| scanpy 聚类教程 | https://scanpy.readthedocs.io/en/stable/tutorials/basics/clustering.html | resolution 控粒度 |
7.4 继续挖掘
- Notebook 搜索 Leiden:https://www.kaggle.com/search?q=leiden+in%3Anotebooks
- 社区检测:https://www.kaggle.com/search?q=community+detection
- Louvain(案例更多、思路互通):https://www.kaggle.com/search?q=louvain
7.5 想看什么 → 读哪条线
| 目标 | 优先阅读 |
|---|---|
| 社区检测怎么抓团伙 | §3 IEEE-CIS + Neo4j 图方案 |
| 社区结果如何变特征 / 风险分 | §5 Open Problems 第 3 名 |
| 弱共现场景如何建边去噪 | §4、§6 超级节点与强弱边 |
| resolution 怎么调 | scanpy 教程 + leidenalg 文档 |
8. 小结
| 要点 | 结论 |
|---|---|
| Leiden 在公开赛中的角色 | 多为手段;欺诈团伙图方案与弱共现场景最同构 |
| 核心范式 | 共享实体建图 → 社区切团伙 → 图指标当特征 / 风险分 → 可选标签传导 |
| IEEE-CIS 可照搬的骨架 | 把「交易—卡—设备」换成「主体—共享事件 / 群组」 |
| 必须额外加码处 | 弱共现边天然偏弱 → 建边规则、去噪、超级节点剪枝 |
| 第一原则 | 建边规则 > 算法选型;宽泛属性只加成、不单独建边 |
9. 参考与来源
| 资源 | 链接 |
|---|---|
| Leiden 论文 | https://www.nature.com/articles/s41598-019-41695-z |
leidenalg | https://github.com/vtraag/leidenalg |
| IEEE-CIS Fraud Detection | https://www.kaggle.com/c/ieee-fraud-detection |
| Neo4j IEEE-CIS 图方案 | https://neo4j.com/developer/industry-use-cases/finserv/retail-banking/ieee-cis-fraud-graphs/ |
| Open Problems Multimodal 第 3 名 | https://www.kaggle.com/competitions/open-problems-multimodal/writeups/makotu-3rd-place-solution |
| scanpy 聚类教程 | https://scanpy.readthedocs.io/en/stable/tutorials/basics/clustering.html |