4. 股票关系图构建:行业关联、供应链关系、资金流向图的构建方法
好,咱们进入正题。
图注意力网络要发挥作用,前提是你得有一张好图。说白了,股票之间的关系图就是模型的「燃料」。图建得不好,模型再牛也白搭。我个人习惯把股票关系图分成三类:行业关联、供应链关系、资金流向。今天咱们一个一个拆开讲。
4.1 行业关联图:最基础的关系网
行业关联,这是最直观的关系。同行业的股票,往往受同样的宏观因素影响。比如茅台和五粮液,都是白酒,涨跌经常同步。
构建方法其实很简单:
- 用申万行业分类或者GICS分类
- 同一行业内的股票两两连边
- 边的权重可以设为1,或者用相关系数加权
我在项目中遇到过一个问题:如果只用一级行业分类,图太稀疏了。比如「食品饮料」下面有白酒、乳制品、调味品,它们之间的相关性其实差异很大。所以我建议用二级甚至三级行业分类,图会更精细。
核心思路:行业关联图是静态的,一旦建好就不变了。它捕捉的是长期稳定的业务相似性。
4.2 供应链关系图:上下游的传导效应
这个就更有意思了。你想想看,如果苹果公司砍单,立讯精密肯定受影响。这就是供应链的传导效应。
数据来源:
- 上市公司年报中的前五大客户/供应商
- 行业研究报告
- 专业金融数据库(如Wind、Bloomberg)
构建规则:
- 如果A公司是B公司的前五大客户,则A→B有一条有向边
- 如果A公司是B公司的前五大供应商,则B→A有一条有向边
- 边的权重可以用交易金额占比来量化
注意:供应链数据更新频率低,通常一年一次。而且很多公司不披露具体比例,数据稀疏性是个大问题。我曾经因为数据太稀疏,不得不把有向图改成无向图,效果反而更好。
4.3 资金流向图:捕捉市场情绪
资金流向图,说白了就是看钱在股票之间怎么流动的。这是动态的,每天都会变。
构建方法:
- 用龙虎榜数据:机构席位买入A、卖出B,说明资金从B流向A
- 用大单资金流:统计主力资金的净流入/流出
- 用ETF申赎数据:资金通过ETF进出某个板块
嗯,这里要注意。资金流向图噪声很大。一天的资金流动可能只是随机波动。我个人的做法是:用5日滚动窗口,累计资金流向,再建图。这样能过滤掉一些短期噪音。
小技巧:资金流向图可以叠加行业信息。比如,如果资金从白酒板块流向新能源板块,那白酒股之间可能形成资金流出子图,新能源股之间形成资金流入子图。这种结构对模型预测很有帮助。
4.4 三种图的融合策略
单独用一种图,效果有限。真正的价值在于融合。我常用的融合方式有两种:
| 融合方式 | 做法 | 适用场景 |
|---|---|---|
| 拼接法 | 把三种图的邻接矩阵拼接成一个大矩阵 | 简单粗暴,适合快速实验 |
| 注意力加权 | 让GAT自己学习每种关系的重要性 | 效果更好,但训练更慢 |
我个人更推荐注意力加权。为什么?因为不同市场环境下,关系的重要性会变。牛市里资金流向更重要,熊市里行业关联更稳定。让模型自己学,比我们手动调权重靠谱多了。
4.5 代码示例:构建行业关联图
来,看一段实际代码。这是用Python构建行业关联图的核心逻辑:
import pandas as pd
import numpy as np
def build_industry_graph(stock_list, industry_map):
"""
构建行业关联图
:param stock_list: 股票代码列表
:param industry_map: dict, {股票代码: 行业代码}
:return: 邻接矩阵
"""
n = len(stock_list)
adj = np.zeros((n, n))
for i in range(n):
for j in range(i+1, n):
if industry_map[stock_list[i]] == industry_map[stock_list[j]]:
adj[i][j] = 1
adj[j][i] = 1
return adj
# 使用示例
stocks = ['000001', '000002', '600519']
industries = {'000001': '银行', '000002': '房地产', '600519': '食品饮料'}
graph = build_industry_graph(stocks, industries)
print(graph)
这段代码很简单,但实际项目中要处理的事情多得多。比如:股票退市、行业分类变更、同一公司多个股票代码...嗯,这些边界情况都得考虑。
4.6 本章知识体系总览
最后,我用一张SVG图把三种关系图的构建逻辑串起来。你看完应该能有个整体印象:
你看,从三种原始数据源出发,经过不同的构建逻辑,最终在融合层汇合。这就是图注意力网络选股模型的「数据底座」。底子打好了,后面模型训练才能事半功倍。
一句话总结:行业关联图管长期相似性,供应链关系图管上下游传导,资金流向图管短期情绪。三张图合在一起,才能全面刻画股票之间的复杂关系。
好,这一章就到这儿。图建好了,下一章咱们聊聊怎么把这些图喂给GAT模型。