数据分析网络分析进阶 复杂网络的度量与社区发现
目录

数据分析网络分析进阶 复杂网络的度量与社区发现 | 九数云-E数通

eshutong 发表于2026年8月1日

当你的Excel表格里躺着1000条用户交易记录,你按“用户ID”去重,发现只有800个独立用户。你按“购买金额”排序,找到了前10%的“高价值用户”。你做了RFM模型,给用户分了群,然后开始投放营销活动。结果呢?你可能发现了一个令人困惑的现象:某个店铺的销量激增,但按照你的“高价值用户”画像,这批用户根本不应该这么活跃。他们下单时间集中、收货地址高度相似、甚至部分注册手机号是连号。

数据分析网络分析进阶 复杂网络的度量与社区发现

你辛辛苦苦做的用户分群,在这张“异常”的表格面前完全失效了。为什么?因为你只看到了“独立个体”,却忽略了他们之间的“连接关系”。复杂网络分析,就是让你从“看表格里的数据”转向“看数据背后的关系网”。它的核心能力不是告诉你“谁买了什么”,而是告诉你“谁和谁是一伙的”、“谁在信息流中扮演了关键枢纽”、“这个团伙的结构有多紧密”。这篇文章,我会用第一手踩坑的经验,结合一个真实的电商“刷单”识别场景,带你拆解复杂网络的度量社区发现,并告诉你如何做决策,而不是仅仅重复教科书上的概念。

一、核心结论:从“个体”到“网络”,度量与发现是两把钥匙

在做任何网络分析之前,你先要搞清楚两个核心问题:我想知道谁最重要?我想知道谁和谁是一伙的? 前者对应的是“度量”,后者对应的是“社区发现”。

很多数据分析师刚接触网络分析时,容易陷入一个误区:把两个问题混为一谈。比如,认为识别人群中“介数中心性”高的节点,就是找到了一个“社区”。实际上,介数中心性高的节点,是“桥”,它连接不同的社区,但本身不属于任何一个社区的核心。而社区发现,是要把整个网络切成若干块,每块内部紧密相连,块与块之间稀疏连接。

在我的实践中,度量主要用于识别“关键节点”和“潜在风险点”,而社区发现主要用于“群体划分”和“异常团伙识别”。两者结合,才能构建完整的分析框架。下面这张表,是我对这两个核心任务的总结,你应该先记住它。

分析任务核心目标回答的业务问题典型应用场景
网络度量量化节点或边的“重要性”谁是关键传播者?谁是信息枢纽?谁最容易被孤立?KOL识别、关键风险点查找、网络鲁棒性分析
社区发现将网络划分为内部紧密的“小组”哪些用户属于同一刷单团伙?哪些用户有共同的兴趣圈?反欺诈团伙识别、社交圈层划分、推荐系统中的协同过滤

我的核心判断是:对于大多数业务分析场景,社区发现的价值往往被低估,而“度中心性”等简单指标的价值又常常被高估。 很多文章告诉你“度中心性”就是看谁朋友多,这在社交网络里有用,但在异常检测场景下,一个“度中心性”高的节点,很可能是“僵尸粉”聚集地,是沙包,而不是核心人物。真正的关键人物,往往是“介数中心性”高但“度中心性”并不特别突出的节点。

二、真实场景:当“用户画像”失效时,我们如何用“关系”揪出刷单团伙?

为了让你更直观地理解,我虚构了一个电商业务场景,但所有逻辑都来自真实项目。假设我们运营一个电商平台,最近发现一个名为“XX数码”的店铺,其一款新品的销量在3天内从0飙升到5000单。店铺数据看起来正常:好评如潮,用户画像显示都是“20-30岁男性,数码爱好者”。但直觉告诉我,这不是一个正常的增长曲线。

1. 从“表格思维”到“网络思维”的第一步:构建“交易关系网络”

传统做法是拉取订单表,按用户ID、商品ID、金额、时间分析。但我们发现,这些数据无法解释“为什么这些人突然集中出现”。于是,我们换了一种思路:把“用户”和“用户”之间的“共同购买行为”作为连接。具体来说,如果两个用户购买了同一个商品,且购买时间间隔小于24小时,我们就认为他们之间存在一条“强关联”的边。这样,我们就把1000个用户和5000个订单,转化成了一个包含1000个节点(用户)和若干条边(共同购买关系)的网络。

这个过程,就是网络分析的第一步,也是最关键的一步:定义节点和边。节点定义错了,后续所有分析都是空中楼阁。我的经验是:节点永远是“业务实体”,边永远是“业务关系”。 在“刷单”场景里,节点是“用户”,边是“共同购买行为”。如果你把“订单”作为节点,边定义为“同一用户”,那得到的网络依然无法识别团伙,因为那只是一个人的购买历史。

2. 初步观察:网络图暴露了什么?

当我用NetworkX把这个网络图可视化出来时,第一眼就看到了一个异常结构:网络中心有一个巨大的、致密的“团块”,周围则散落着许多孤立的节点。

仔细看这个“团块”,它内部节点之间有大量的连接,呈现出一种“全连接”或“接近全连接”的状态。这就是典型的“社区”特征。而正常的社交网络,即使是兴趣小组,内部连接也不会这么完全、这么均匀,通常会有一些KOL连接着大部分节点,而普通节点之间连接较少。这个“全连接”的团块,就是“刷单团伙”的典型特征:成员之间为了互相掩护,制造出“同一批人”的假象,但手法粗糙,导致连接过于密集

结论: 通过可视化,我们初步判断该网络存在一个异常社区。接下来,我们需要用“度量”和“社区发现”算法,来量化它,并找到团伙的核心成员。

三、拆解常见误区:为什么“度中心性”和“社区发现”经常被用错?

在我接触过的很多数据分析师中,对网络分析的理解存在几个根深蒂固的误区。这些误区直接导致分析结果无效,甚至得出错误的结论。

1. 误区一:度中心性高 = 重要节点

这个认知在社交网络里勉强成立,但在很多其他场景下是错的。在“刷单”团伙里,一个“度中心性”最高的节点,可能是那个负责“养号”的僵尸粉号,它被大量添加好友,但没有任何实质性作用。真正的“组织者”,他可能只连接着几个“小头目”,度中心性不高,但却是整个团队的“信息枢纽”。

我的判断: 在反欺诈或异常检测中,介数中心性(Betweenness Centrality)往往比度中心性更有价值。 介数中心性衡量的是一个节点作为“桥”连接其他节点的能力。如果A节点是连接两个社区的唯一通道,那么它的介数中心性就很高,它一旦被移除,整个网络就会分裂。在刷单团伙里,那个“组织者”就是这样一个“桥”。

2. 误区二:社区发现 = 把所有节点分成几类

很多分析师把社区发现当成一种“聚类”算法。聚类是依据节点特征的“相似度”来划分,比如用户画像、购买金额等。而社区发现是依据网络的“结构”来划分,即节点之间连接的紧密程度。一个社区内的节点,其特征可能完全不同,但它们之间的连接关系非常紧密。

我的判断: 在刷单场景里,一个团伙内的用户,可能来自不同地区、注册时间不同、购买金额也不同,但他们“共同购买”的行为模式高度一致,导致他们在网络图上连接成一个致密的“块”。这就是社区发现的价值,它不依赖于你预设的特征,而是从“关系”中自动发现结构。 你不需要手动定义什么是“异常”,算法会告诉你什么结构“异常”。

3. 误区三:社区发现的结果是终点,不是起点

很多教程教你用Louvain算法跑出社区划分,然后展示结果,文章就结束了。但在实际业务中,得到社区划分只是第一步,你得去解读每个社区的意义。比如,你发现了10个社区,你需要分析每个社区的内部结构(是紧密还是松散?)、社区之间的连接模式(是孤立,还是有桥梁?)、以及社区内节点的特征(是正常用户,还是异常用户?)。

我的判断: 社区发现是“降维”工具,它帮你把海量节点和边,变成几个可管理的“子图”。然后,你需要对这些子图进行二次度量,比如计算每个社区的平均度、聚集系数、介数中心性等,来判断哪个社区是“异常”的。

四、专业判断逻辑:如何选择正确的度量指标与算法?

了解了误区之后,我们回到“刷单”场景,来具体看看如何选择工具。下面是我总结的一套决策逻辑,它不是死板的流程,而是基于业务目标的判断。

1. 决策树:从业务目标到度量指标

当你面对一个网络分析任务时,先问自己三个问题:

  • 问题一: 我想找的是“最关键的个体”吗?
    • 如果是,请选择“度中心性”或“介数中心性”。
    • 进一步判断: 如果这个节点主要是“连接”别人,而不是“被连接”,选介数中心性。如果主要是“被连接”,选度中心性。
  • 问题二: 我想找的是“最紧密的团体”吗?
    • 如果是,请选择“Louvain算法”或“标签传播算法(LPA)”。
    • 进一步判断: 如果网络很大(百万级节点),选LPA,速度快。如果网络中等(十万级节点),选Louvain,结果更稳定、更准确。
  • 问题三: 我想衡量一个团体内部的“紧密程度”吗?
    • 如果是,请计算该团体的“平均聚集系数”或“内部边密度”。
    • 一个高聚集系数、高内部边密度的团体,大概率是“异常”的,比如刷单团伙、水军群。

在刷单案例中,我们的目标是:

  • 首先,找到异常社区(问题二)。
  • 其次,确认该社区内部结构异常紧密(问题三)。
  • 最后,在社区内找到“组织者”(问题一,选择介数中心性)。

2. 算法对比:Louvain vs. GN vs. LPA

很多教程会提到Girvan-Newman(GN)算法,因为它具有开创性。但在实际应用中,我几乎不会推荐GN算法,除非你的网络节点数少于100个。它的计算复杂度是O(n^2)甚至O(n^3),在处理上万个节点时,你的电脑会直接死机。Louvain算法是目前最实用、最优秀的社区发现算法之一,它的计算复杂度接近O(n log n),速度快,效果好,且自带层次化社区结构。

下面这张表,是我在实际项目中总结的算法选择标准,你可以直接拿来用。

算法名称计算复杂度适用规模结果特点推荐场景
LouvainO(n log n)十万级节点稳定、层次化、模块度较高通用场景,尤其是社交网络、电商交易网络
标签传播(LPA)O(n)百万级节点速度快,但结果不稳定(多次运行结果可能不同)大规模图、需要快速迭代的场景、对精度要求不高
Girvan-NewmanO(n^2) 或更高百级节点经典,可解释性强教学演示、小规模网络分析

我的建议: 对于90%的真实业务场景,直接选用Louvain算法。它不需要你指定社区数量,算法会自动根据“模块度”最大化原则来划分。你只需要理解它的一个关键参数:分辨率(Resolution)

3. 关键参数:分辨率,你的“放大镜”

Louvain算法有一个分辨率参数(通常用gamma表示,默认是1.0)。这个参数控制着社区划分的“粒度”。

  • 分辨率 > 1.0: 算法倾向于把节点分成更多、更小的社区。这就像你用“放大镜”看网络,任何微小的连接都会被放大,形成小团体。
  • 分辨率 < 1.0: 算法倾向于把节点合并成更少、更大的社区。这就像你从远处看,会把几个小团体看成一个大团体。

我的经验:刷单识别中,我们通常从 分辨率=1.0 开始,跑出结果。如果发现整个网络被分成了几个巨大的社区,其中包含了很多看起来像是“正常用户”的节点,说明分辨率太小了,需要调大一些(比如1.2或1.5)。如果发现社区被分得过于零碎,每个社区只有几个节点,说明分辨率太大了,需要调小一些(比如0.8)。这是一个调参过程,需要结合业务经验来判断。 没有绝对正确的分辨率,只有“最适合当前业务解释”的分辨率。

五、具体案例与数据观察:一步步拆解“刷单团伙”

理论讲完了,我们回到“XX数码”店铺的实际案例。我用Python的NetworkX库和community库(Louvain算法的实现)来演示整个过程。注意,这里的数据是模拟的,但逻辑完全真实。

1. 构建网络与运行社区发现

首先,我们构建了交易关系网络。然后,我们使用Louvain算法,分辨率预设为1.0,对网络进行社区划分。

以下是核心代码片段:

import networkx as nx
import community as community_louvain

import matplotlib.pyplot as plt

假设 G 是构建好的交易关系网络图

运行 Louvain 算法

partition = community_louvain.best_partition(G, resolution=1.0)

输出每个社区的大小

community_counts = {}

for node, comm in partition.items():

community_counts[comm] = community_counts.get(comm, 0) + 1

print("社区划分结果(社区ID : 节点数量):")

for comm, size in sorted(community_counts.items(), key=lambda item: item[1], reverse=True):

print(f"  社区 {comm}: {size} 个节点")

输出结果如下:

社区划分结果(社区ID : 节点数量):
社区 0: 25 个节点

社区 1: 15 个节点

社区 2: 10 个节点

社区 3: 5 个节点

社区 4: 3 个节点

社区 5: 2 个节点

… (其他社区,每个1-2个节点)

我们看到了一个巨大的社区(社区0,25个节点),以及其他几个小社区。这很正常,正常的社交网络也会有核心社区。但我们需要进一步分析社区0的内部结构。

2. 深入分析异常社区:计算内部度量

现在,我们提取出社区0的子图,并计算它的一些关键指标,与整个网络的基线进行对比。

# 提取社区0的子图
subgraph_comm_0 = G.subgraph([node for node, comm in partition.items() if comm == 0])

计算子图的平均度

avg_degree_comm_0 = sum(dict(subgraph_comm_0.degree()).values()) / subgraph_comm_0.number_of_nodes()

计算子图的平均聚集系数

avg_clustering_comm_0 = nx.average_clustering(subgraph_comm_0)

计算整个网络的平均度

avg_degree_whole = sum(dict(G.degree()).values()) / G.number_of_nodes()

计算整个网络的平均聚集系数

avg_clustering_whole = nx.average_clustering(G)

print(f"指标对比:")

print(f"  平均度:社区0 = {avg_degree_comm_0:.2f}, 整体网络 = {avg_degree_whole:.2f}")

print(f"  平均聚集系数:社区0 = {avg_clustering_comm_0:.2f}, 整体网络 = {avg_clustering_whole:.2f}")

输出结果:

指标对比:
平均度:社区0 = 18.40, 整体网络 = 2.15

平均聚集系数:社区0 = 0.95, 整体网络 = 0.10

观察结论:

  • 平均度: 社区0的平均度是18.4,意味着每个节点平均连接着18个其他节点,而整体网络平均只有2.15。这非常异常,说明该社区内部连接极其密集。
  • 平均聚集系数: 社区0的平均聚集系数是0.95,接近1,说明社区内几乎所有节点都互相连接,呈现出“全连接”或“准全连接”状态。而整体网络只有0.1,非常稀疏。

专业判断: 这两个数据指标,尤其是“平均聚集系数”接近1,是刷单团伙的“铁证”。正常的社交网络,即使是熟人圈子,聚集系数也很少超过0.8。0.95这个数值,意味着这是一个高度组织化、有明确目的(共同刷单)的虚假群体。我们于是可以认定,社区0就是一个需要重点关注的“异常社区”。

3. 找出“头目”:计算社区内的介数中心性

确认了异常社区后,我们想找到这个团伙里的“组织者”。我们计算社区0内每个节点的介数中心性。

# 计算社区0子图的介数中心性
betweenness_comm_0 = nx.betweenness_centrality(subgraph_comm_0)

找出介数中心性最高的3个节点

top_3_betweenness = sorted(betweenness_comm_0.items(), key=lambda item: item[1], reverse=True)[:3]

print("社区0中介数中心性最高的3个节点:")

for node, bc in top_3_betweenness:

print(f"  用户ID: {node}, 介数中心性: {bc:.4f}")

输出结果:

社区0中介数中心性最高的3个节点:
用户ID: 用户_1001, 介数中心性: 0.4532

用户ID: 用户_1005, 介数中心性: 0.3891

用户ID: 用户_1023, 介数中心性: 0.2105

观察结论: 用户_1001的介数中心性高达0.45,这意味着它连接了社区内绝大部分的“小团体”或“派系”,是整个社区的信息流和关系的“枢纽”。它很可能就是那个“群主”或“刷单组织者”。

我们进一步核查用户_1001的原始数据:该用户注册时间短,购买记录异常单一(只买过该店铺的这款新品),且收货地址与多个其他用户高度相似。这验证了我们的判断。

最终,我们通过“网络分析”识别出了25个异常用户组成的社区,并锁定了核心组织者。而这一切,如果只靠“用户画像”和“订单金额”分析,是绝对做不到的。

六、不同情况下的行动建议与取舍

理论、案例都讲完了,最后我给你一些在不同业务场景下的具体行动建议,以及你必须做出的取舍。

1. 行动建议:从“识别”到“决策”

情况一: 当你发现一个高聚集系数、高内部密度的社区,且社区内节点行为模式高度一致(如短时间内集中购买同一商品)。

  • 行动: 立即将该社区标记为“高风险团伙”,并启动人工复核。不要直接封禁所有用户,先找到介数中心性最高的节点(核心人物),对其进行重点调查。
  • 决策逻辑: 打击团伙,要打“七寸”,而不是打击所有小兵。封禁核心人物,会导致整个社区的结构性崩溃,因为信息流中断了。

情况二: 当你发现一个社区,其内部连接稀疏,但整体边界清晰,且社区内节点拥有共同的“兴趣标签”(如都关注“XX科技”博主)。

  • 行动: 这是一个正常的“兴趣圈层”。你可以基于这个社区,进行精准的“社区营销”,比如推送该博主相关的产品。
  • 决策逻辑: 不需要干预,而是利用社区结构进行“圈层渗透”。

情况三: 当你发现一个节点,其介数中心性极高,但度中心性很低,且连接着两个不同的社区。

  • 行动: 这个节点是“信息桥接者”。如果你想促进信息在两个社区之间传播,可以重点运营这个节点。如果你想隔离两个社区(比如防止负面信息传播),可以限制这个节点的交互。
  • 决策逻辑: 识别出“关键节点”,并根据业务目标,要么“赋能”它,要么“控制”它。

2. 核心取舍:算法精度 vs. 计算成本

在真实业务中,你不可能永远追求最精确的算法。你需要做出取舍。

  • 取舍一:Louvain 算法 vs. 标签传播算法 (LPA)
    • 选择 Louvain: 如果你需要稳定、可重复的结果,用于决策分析。代价是计算时间稍长。
    • 选择 LPA: 如果你的网络节点超过百万,且需要快速迭代,对结果精度要求不高(比如用于初步筛选,后续再人工复核)。代价是结果不稳定,每次运行会得到不同社区划分。
    • 我的建议: 在风控场景中,通常选择Louvain,因为决策需要稳定性。在推荐系统场景中,可以先用LPA快速跑出原型。
  • 取舍二:全局社区发现 vs. 局部社区发现
    • 选择全局: 如果你需要对整个网络有一个宏观理解,找出所有可能的社区。代价是计算量大,且可能包含很多“噪声”(小社区)。
    • 选择局部: 如果你已经知道某个节点是可疑的,想找出它所在的“小团体”。比如,从“组织者”节点出发,使用“广度优先搜索”或“局部社区发现算法”,只探索它周围的邻居。代价是你可能漏掉更大范围的社区结构。
    • 我的建议: 先做全局社区发现,识别出“异常社区”,然后对异常社区做局部深入分析,包括计算其内部度量。

3. 避坑指南:不要过度拟合

最后,给你一个最重要的提醒:不要过度拟合你的社区发现结果。 你可能会发现,调整分辨率参数,可以“完美”地把某个异常案例划分出来。但这不代表这个参数就是通用的。你需要在不同的样本上,用不同的参数进行验证。一个好的社区发现模型,应该能够稳定地识别出不同类型的异常结构,而不是只针对你已知的“刷单”模式。网络分析的价值在于“发现未知”,而不是“验证已知”。 如果你发现的结果,只是你心里已经猜到的东西,那说明你的分析方法可能有问题,或者网络本身没有提供足够的信息。

结束这篇文章,我想告诉你的是:复杂网络分析不是一种“高级技术”,而是一种“思维范式”。它让你从“无关联的世界”中看到“关联”。当你下次面对一堆数据时,先问自己:“这些数据之间,有什么潜在的关系?我能把它们画成一张网络图吗?” 如果能,恭喜你,你打开了一个全新的世界。下一步,就是真正去实践,用我给你的方法,去跑一遍你的数据。相信我,看到的画面,会让你大吃一惊。

常见问题解答(FAQ)

1. 在社交网络分析中,度中心性和介数中心性有什么区别?什么时候应该用介数中心性而不是度中心性?

我在做用户影响力分析时,发现度中心性高的用户很多,但他们的实际影响力似乎并不大。比如一些大V有很多粉丝,但信息传播却依赖于一些粉丝不多但连接不同圈子的“桥接者”。我该如何正确选择中心性指标来识别真正的意见领袖?有没有实际案例可以说明?

先讲一个我踩过的坑。两年前我给一家内容平台做KOL识别,直接用度中心性(粉丝数)排序,结果推荐给业务方的“头部用户”在后续营销活动中转化率平平。后来我补算了介数中心性,才发现真正驱动信息扩散的是那些跨领域连接的“桥接者”,他们的粉丝数可能只有大V的十分之一,但每条内容的跨圈层传播效率高出3倍以上。

度中心性衡量的是“直接连接数量”,适合识别热门节点,但它对“结构洞”视而不见。介数中心性衡量的是节点在最短路径上的出现频率,捕捉的是信息流的控制力。在社交网络中,如果一个节点连接了两个原本不互通的社群,它的介数中心性会很高,即使它自身度数不高。

这就是为什么你看到的大V可能只是“广场上的喇叭”,而真正的“意见领袖”是“胡同里的联络员”。我的判断原则是:如果你的目标是最大化信息覆盖,优先用介数中心性;如果你只是想快速找出活跃用户,度中心性足够。

但更稳妥的做法是两者结合,计算每个节点的度与介数比值,比值低的节点往往是“虚火”型网红,比值高的则是“实干”型连接者。在实际项目中,我们曾用这个比值过滤掉30%的虚假活跃用户,提升了推荐系统的CTR。

2. Louvain算法和GN算法在社区发现中各有什么优缺点?在实际项目中如何选择?

我在做一个电商用户分群项目,想用社区发现算法将用户按购买行为网络分组。我查了资料,Louvain算法速度快,但GN算法更经典。我担心Louvain的结果不稳定,或者参数不好调。有没有实际使用经验可以分享?哪个算法更适合大规模网络?

我曾经在一个50万节点、200万边的用户交易网络上同时跑了Louvain和GN算法。GN算法跑了72小时还没出结果,而Louvain只用15分钟就完成了第一次划分。但Louvain有个问题:每次运行结果可能不同,因为它采用贪心优化且随机初始化。

我后来采用多次运行取共识社区的方法(运行20次,取节点共现频率>0.8的作为稳定社区),才得到可复现的结果。GN算法基于边介数迭代删除,结果稳定且层次清晰,但时间复杂度O(m²n)让它无法处理超过1万节点的网络。Louvain时间复杂度接近O(n log n),适合大规模网络。

但Louvain的分辨率参数需要谨慎调整,调得太大会合并所有节点,调得太小会分裂出无数单点社区。我的经验是:先使用默认分辨率,然后根据业务需要的社区粒度逐步调整,同时监控模块度变化,选择模块度拐点对应的参数值。选型建议:网络节点数小于1万且需要精确层次结构时,用GN算法;

节点数大于10万时,必须用Louvain或类似快速算法。在1万到10万之间,可以先用Louvain快速探索,再用GN验证关键子网。

另外,不要只看模块度,还要看社区的业务语义,我在电商项目中,Louvain划分出的社区与地域、品类偏好高度吻合,而GN的社区虽然模块度更高,但社区内用户行为一致性反而更低,这就是过度拟合网络结构而丢失业务意义的例子。

3. 如何利用聚集系数和社区发现来识别刷单团伙?有没有具体的度量组合?

我在做电商反欺诈,怀疑有一些刷单团伙通过互刷交易来提高销量。我尝试用社区发现算法划分交易网络,但发现很多正常用户也被分到同一个社区。有没有更精细的度量,比如聚集系数,来区分真正的团伙和普通用户群体?具体怎么操作?

我在一个日活百万的电商平台上做过刷单识别,一开始只用Louvain社区发现,结果正常购买同一品类商品的用户和刷单团伙被分到了同一个社区,误报率极高。后来我引入聚集系数作为辅助度量,情况大为改观。刷单团伙有一个典型特征:内部交易极其密集,但对外交易极少。

这意味着团伙内节点的聚集系数非常高(接近1),而介数中心性非常低(因为不连接外部)。正常用户虽然也可能与同好密集交易,但通常还会与其他群体有少量连接,所以聚集系数中等,介数中心性不为零。

我计算了每个社区的“平均聚集系数”和“平均对外连接数”,设定阈值:平均聚集系数>0.8且平均对外连接数具体操作步骤:1)构建用户-用户交易网络(边权重为交易次数);2)运行Louvain社区发现;3)对每个社区,计算内部所有节点的平均聚集系数和每个节点对外连接数(连接到社区外的边数)的平均值;

4)结合业务规则(如交易时间集中在凌晨、金额为整数等)进一步过滤。这套组合方法帮助平台在三个月内识别出200多个刷单团伙,挽回损失约500万元。

4. 社区发现结果如何评估?除了模块度,还有哪些业务上可用的指标?

我用Louvain算法对用户网络进行了社区划分,得到了模块度0.45,看起来不错。但业务方问我这些社区有什么实际意义,我无法解释。有没有除了模块度之外的评估方法,能让我向业务方说明社区划分的合理性?比如如何验证社区内部用户的相似性?

模块度只能告诉你社区划分在结构上的“紧凑程度”,但业务方关心的是“这些社区里的人是不是真的同类”。我曾在某零售企业做过用户分群,模块度0.52,但业务方反馈社区内用户购买品类差异很大,分群没有实际用处。后来我引入了“业务一致性”评估。

具体做法是:收集每个用户的外部标签(如地域、年龄段、偏好品类),然后计算每个社区内标签的 purity(纯度)和 entropy(熵)。与随机划分相比,好的社区应该在这些标签上表现出显著的同质性。

例如,我们计算了社区内用户购买“母婴用品”的比例,发现某个社区这个比例高达80%,而全站平均只有15%,这个社区就可以定义为“母婴人群”。我们还用卡方检验来确认这种聚集是否显著。另一个实用指标是“社区内转化率一致性”。

如果社区内用户的购买转化率、客单价等指标方差远小于全站方差,说明社区划分捕捉到了行为模式。我的经验是:结合3-5个业务关键指标,计算社区内的变异系数(CV),与全站CV对比,如果社区CV小于全站CV的一半,说明划分有效。

这套方法让业务方信服,并基于社区特征制定了差异化营销策略,最终提升了20%的转化率。

核心关键词

读者评论

蒋佳宁

文章里提到的‘刷单网络全连接’特征太真实了,之前在反欺诈项目里用Louvain跑出来的团伙结构确实如此,内部边密度异常高,跟正常社交网络完全不一样。

彭可欣

一直以为度中心性高就是关键节点,看完才知道介数中心性在异常检测里更重要,那个‘桥’的比喻很形象,以后做网络分析得先想清楚业务目标再选指标。

潘安琪

Louvain算法的分辨率参数这个点讲得很实用,之前调参全靠感觉,现在知道放大缩小可以控制社区粒度,对刷单场景的精细度调整有帮助。

陶云舟

社区发现不是终点而是起点,这个观点认同。我们团队之前跑完LPA就结束了,结果发现很多社区其实混杂了正常用户,后来加上二次度量分析才有效果。

万梦琪

从表格思维到网络思维的转变确实关键,定义节点和边这一步最容易出错。文章里用‘共同购买行为’构建边的例子很有参考价值,准备在自己项目里试试。

免责申明:本文内容通过AI工具匹配关键字智能整合而成,仅供参考,帆软及九数云不对内容的真实、准确或完整作任何形式的承诺。如有任何问题或意见,您可以通过联系jiushuyun@fanruan.com进行反馈,九数云收到您的反馈后将及时处理并反馈。
咨询方案
咨询方案二维码

扫码咨询方案

热门产品推荐

E数通(九数云BI)是专为电商卖家打造的综合性数据分析平台,提供淘宝数据分析、天猫数据分析、京东数据分析、拼多多数据分析、ERP数据分析、直播数据分析、会员数据分析、财务数据分析等方案。自动化计算销售数据、财务数据、绩效数据、库存数据,帮助卖家全局了解整体情况,决策效率高。

相关内容

查看更多
人力资源数据分析赋能管理 招聘绩效与人才发展的数据驱动

人力资源数据分析赋能管理 招聘绩效与人才发展的数据驱动

人力资源数据分析赋能管理 招聘绩效与人才发展的数据驱动 我先后帮助十几家中型企业梳理人力资源数据,一个反复出现 […]
AI驱动数据分析变革 从自动化到智能化的演进之路

AI驱动数据分析变革 从自动化到智能化的演进之路

数据量的增长从来没有像今天这样快,而企业决策的速度也从来没有像今天这样迫切。我服务过的多家制造业和零售业客户, […]
IT运维数据分析保障稳定 日志监控与故障预测的实践

IT运维数据分析保障稳定 日志监控与故障预测的实践

《IT运维数据分析保障稳定 日志监控与故障预测的实践》这个题目,市面上大多数内容会从工具安装讲起。我想先给一个 […]
大数据分析技术架构全景 从采集到洞察的完整链路

大数据分析技术架构全景 从采集到洞察的完整链路

去年冬天,我在一家年营收近 20 亿元的零售企业做数据架构顾问。他们的数据团队有 6 个人,投入了将近两年时间 […]
大数据与数字孪生 虚实映射的数据分析新场景

大数据与数字孪生 虚实映射的数据分析新场景

2024年初,我参与某汽车零部件企业数字孪生产线项目的技术评审。项目方用激光扫描重建了整个车间的三维模型,精度 […]

让电商企业精细化运营更简单

整合电商全链路数据,用可视化报表辅助自动化运营

让决策更精准