第三章:图论基础与股票关系建模
说实话,刚接触量化选股那会儿,我总觉得图论这东西离金融太远了。直到有一次,我尝试用传统因子模型去捕捉产业链传导效应,结果发现——嗯,完全抓不住。后来我才意识到,股票市场本质上就是个巨大的关系网络,而图论,恰恰是描述这种网络的最佳语言。
这一章,我们就来聊聊怎么用图论给股票市场建模。我会从最基础的概念讲起,然后一步步带你构建股票之间的关系网络。
3.1 图的基本概念
图是什么?说白了,就是一堆节点和连接它们的边。节点可以代表股票,边可以代表它们之间的关系。就这么简单。
我个人习惯把图分为三类:
- 无向图:边没有方向。比如两只股票同属一个行业,这种关系是对称的。
- 有向图:边有方向。比如产业链中,上游到下游的传导关系。
- 加权图:边上有权重。比如相关性系数的大小。
我在项目中遇到过一个问题:刚开始建模时,我一股脑把所有股票都连起来,结果图变得又大又稀疏,模型根本学不到东西。后来我学乖了——先想清楚你要表达什么关系,再决定用哪种图。
核心要点:图的结构决定了你能捕捉到的信息类型。无向图适合表达「同类」关系,有向图适合表达「因果」关系,加权图则能表达「强弱」关系。
3.2 股票关联关系构建
股票之间的关系,其实比你想的要多。我总结了三种最常用的构建方式:
3.2.1 行业关联
同行业的股票,往往有相似的走势。为什么?因为它们面对同样的政策、同样的原材料价格、同样的市场需求。
构建方法很简单:
- 按申万一级行业分类,同行业股票之间连边
- 边权可以设为1(简单连接)或基于行业集中度加权
你想想看,如果两只股票都是半导体行业的,它们之间没有关系才奇怪吧?
3.2.2 产业链关联
这个就更有意思了。上游涨价,下游成本上升,利润被压缩——这种传导关系,用有向图来表达再合适不过。
我记得有一次做光伏产业链建模,从硅料、硅片到电池片、组件,每个环节的利润变化都会沿着产业链传导。用有向图建模后,模型预测准确率提升了将近15%。
小技巧:产业链关系可以从公司年报、行业研报中提取。我一般会用自然语言处理技术,从文本中自动抽取上下游关系。
3.2.3 相关性关联
这是最「数据驱动」的方式。直接计算股票收益率之间的相关系数,超过某个阈值就建立连接。
但这里有个坑——我曾经直接用皮尔逊相关系数,结果发现很多股票因为市场整体波动而「伪相关」。后来我改用偏相关系数,剔除了市场因子的影响,效果才好起来。
3.3 邻接矩阵与边权设计
图建好了,怎么喂给模型?答案就是邻接矩阵。
邻接矩阵是一个 N×N 的矩阵,N 是股票数量。如果股票 i 和股票 j 之间有边,那么 A[i][j] 就是边的权重;如果没有边,就是 0。
边权设计,我个人觉得是图神经网络选股中最关键的一步。权重设得不好,模型学到的全是噪声。
几种常见的边权设计方式:
| 关系类型 | 边权设计 | 适用场景 |
|---|---|---|
| 行业关联 | 1(等权)或行业市值占比 | 行业轮动策略 |
| 产业链关联 | 上下游交易金额占比 | 产业链传导策略 |
| 相关性关联 | 相关系数(经偏相关处理) | 统计套利策略 |
| 混合关联 | 加权求和(需调参) | 综合选股策略 |
避坑指南:我曾经把相关性阈值设得太低(比如0.3),结果图变得非常稠密,模型训练慢不说,还引入了大量噪声。建议从0.6开始尝试,逐步调低。
下面是我常用的邻接矩阵构建代码片段:
import numpy as np
def build_adjacency_matrix(stock_returns, threshold=0.6):
"""
基于相关性构建邻接矩阵
stock_returns: DataFrame, 股票收益率数据
threshold: 相关性阈值
"""
n = stock_returns.shape[1]
adj_matrix = np.zeros((n, n))
# 计算偏相关系数(剔除市场因子)
market_returns = stock_returns.mean(axis=1)
for i in range(n):
for j in range(i+1, n):
# 计算偏相关
corr = partial_corr(stock_returns.iloc[:, i],
stock_returns.iloc[:, j],
market_returns)
if abs(corr) > threshold:
adj_matrix[i][j] = corr
adj_matrix[j][i] = corr
return adj_matrix
嗯,这里要注意:邻接矩阵是对称的(无向图),但如果你用有向图,矩阵就不对称了。
3.4 本章知识体系总览
为了让你更直观地理解这一章的内容,我画了一张图:
这张图清晰地展示了从图论基础到最终输入图神经网络的完整流程。你可以看到,关系构建和边权设计是中间最关键的两个环节——它们直接决定了模型能学到什么。
总结一下:图论给了我们描述股票关系的「语法」,关系构建决定了「词汇」,而边权设计则是「修辞」。三者缺一不可。
好了,这一章的内容就到这里。下一章我们会深入图神经网络的核心——消息传递机制,看看信息是如何在股票网络中流动的。