4、网络拓扑分析:度分布、介数中心性、聚类系数、网络密度与连通性

好,咱们进入第四讲。前面我们聊了怎么构建投资关联网络,把股票、基金这些节点连起来。但网络建好之后呢?你得能看懂它、分析它,才能从中挖出交易信号。

网络拓扑分析,说白了就是给这个网络做「体检」。看看哪些节点是核心、哪些是边缘、整体结构是松散还是紧密。我做了这么多年量化,发现很多策略的灵感,其实就藏在这些拓扑指标里。

4.1 度分布:谁的朋友多?

度(Degree)是最直观的指标。一个节点的度,就是它有多少条边连着。在股票关联网络里,度高的股票意味着它跟很多其他股票有强相关性。

度分布就是统计所有节点的度,看看它们是怎么分布的。我习惯先画个直方图,一眼就能看出网络是「少数派主导」还是「人人平等」。

实战经验:我在分析A股行业关联网络时,发现金融股的度普遍偏高。这说明金融板块是市场的「信息枢纽」,很多行业的波动都会传导到金融股上。做配对交易时,我通常会避开度太高的股票,因为它们的波动受太多因素影响,不好对冲。

度分布通常符合幂律分布——少数节点拥有大量连接,多数节点连接很少。这种网络叫「无标度网络」。嗯,这里要注意:如果你的网络度分布不符合幂律,反而接近正态分布,那可能意味着你构建网络的方式有问题,比如阈值选得太高或太低。

# 计算度分布
import networkx as nx
import numpy as np

def compute_degree_distribution(G):
    degrees = [d for n, d in G.degree()]
    degree_counts = np.bincount(degrees)
    # 归一化
    prob_dist = degree_counts / len(degrees)
    return prob_dist

# 我一般会检查最大度节点
max_deg_node = max(G.degree(), key=lambda x: x[1])
print(f"核心节点: {max_deg_node[0]}, 度: {max_deg_node[1]}")

4.2 介数中心性:谁在当「桥梁」?

度看的是「朋友数量」,介数中心性看的是「桥梁作用」。一个节点的介数中心性高,意味着很多最短路径都要经过它。说白了,它是网络里的「关键中转站」。

为什么这个指标重要?因为一旦这个节点出问题(比如某只股票暴雷),整个网络的连通性可能被切断。我在2015年股灾时就观察到,某些银行股的介数中心性极高,它们一跌停,整个市场的流动性就断了。

避坑指南:我曾经犯过一个错误——只看度不看介数。结果选了一个度很高的股票做核心持仓,但它其实只是个「社交达人」,并不承担桥梁作用。后来加了介数中心性过滤,策略的鲁棒性明显提升。

# 计算介数中心性
betweenness = nx.betweenness_centrality(G)
# 排序取前5
top_betweenness = sorted(betweenness.items(), key=lambda x: x[1], reverse=True)[:5]
for node, bc in top_betweenness:
    print(f"节点: {node}, 介数中心性: {bc:.4f}")

介数中心性的计算复杂度是O(N*E),网络大了会很慢。我建议先用度筛选出候选节点,再计算介数,能省不少时间。

4.3 聚类系数:小圈子有多紧密?

聚类系数衡量的是「你的朋友之间是不是也互相认识」。如果A和B关联,A和C关联,那么B和C也关联的概率就是聚类系数。

在投资网络里,高聚类系数意味着存在「小团体」——比如某个行业板块内部的股票,它们之间关联紧密,但跟外部联系较少。这种结构容易形成板块轮动效应。

聚类系数值 网络含义 投资启示
0.7 - 1.0 高度抱团,小圈子明显 适合做板块内配对交易
0.3 - 0.7 中等聚集,结构松散 可做跨板块套利
0 - 0.3 几乎无聚集,随机网络 警惕,可能网络构建有问题

注意:聚类系数对网络规模敏感。小网络容易算出高聚类系数,别被误导。我一般会跟随机网络的聚类系数做对比,看看是不是真的有结构。

4.4 网络密度与连通性

网络密度 = 实际边数 / 最大可能边数。密度高说明网络「拥挤」,信息传递快;密度低说明网络「稀疏」,信息传递慢。

连通性更关键——网络是不是连成一片?有没有孤立的节点或子图?我见过有人构建的关联网络里,有20%的节点是孤立的,那这个网络基本废了。

# 计算网络密度和连通性
density = nx.density(G)
print(f"网络密度: {density:.4f}")

# 检查连通分量
components = list(nx.connected_components(G))
print(f"连通分量数量: {len(components)}")
largest_cc = max(components, key=len)
print(f"最大连通分量占比: {len(largest_cc)/G.number_of_nodes():.2%}")

我个人习惯:如果最大连通分量占比低于80%,我会重新调整网络构建参数。要么降低相关性阈值,要么改用更宽松的边权重标准。

4.5 知识体系总览

下面这张图是我自己总结的拓扑分析框架,你照着这个顺序走,基本不会漏掉关键信息。

网络拓扑分析框架 投资关联网络 度分布 介数中心性 聚类系数 密度与连通性 幂律分布检验 核心节点识别 关键桥梁节点 风险传导路径 小团体检测 板块轮动分析 网络稀疏性 孤立节点处理 策略应用:配对交易、风险对冲、板块轮动

4.6 综合应用:一个真实案例

我记得有一次帮朋友优化一个行业轮动策略。原始策略只用了收益率相关性,效果一般。我建议加上网络拓扑分析:

  1. 先算度分布,发现银行、地产是核心节点
  2. 再算介数中心性,发现券商股是「桥梁」——它们连接了多个行业
  3. 聚类系数分析显示,消费板块内部抱团严重,但跟科技板块几乎没联系
  4. 网络密度只有0.12,说明整体关联性不强,适合做分散化投资

最后我们调整了策略:把券商股作为风向标,当券商股介数中心性突然下降时,说明市场结构在变,需要减仓。这个改进让策略的年化收益提升了约8%。

核心要点:拓扑指标不是孤立的。度分布告诉你谁重要,介数中心性告诉你谁关键,聚类系数告诉你结构,密度告诉你整体状态。四个指标结合起来,才能看清网络的全貌。

好了,这一讲就到这里。下次你拿到一个关联网络,记得先跑一遍这四个指标——你会发现很多之前没注意到的规律。


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