当绝大多数因子研究者还在卷市盈率、动量、波动率时,一批前沿量化基金已经把目光投向了供应链关系—一家公司的上游供应商是谁、下游客户是谁、彼此占营收多大比例。这类数据天然带有”关系”和”方向”,是另类数据(Alternative Data)里信息密度最高、最容易被错误定价的金矿之一。
原因很简单:一条供应链就是一张传导网。上游的景气、断供、涨价,会沿箭头流向中下游;而下游的订单收缩,也会逆向传回上游。谁先拿到这张网,谁就比别人早一步看到收益的领先-滞后结构。
一、为什么供应链是”另类数据”富矿?#
传统量价数据只描述一只股票自身的价格序列,是孤立的。但企业是嵌在供应链网络里的,价格运动因此存在跨股票的结构相关性:
- 领先-滞后:上游(如半导体设备)的景气通常领先下游(如消费电子)1-3 个季度,因为订单先发生在上游。
- 冲击传染:关键供应商断供(如芯片短缺),会直接打击依赖它的整机厂,股价同步下挫。
- 中心度风险:处于网络枢纽位置的”卖水人”(如台积电、ASML),其基本面波动会放大传导到全行业。
把公司视为节点、供货关系视为有向边,供应链就是一张有向图。最经典的实证案例是 2021 年的全球芯片短缺:上游晶圆/封测产能受限,沿供货箭头一路传导,整车厂(下游)被迫减产、股价与交付量同步承压,而掌握产能的晶圆代工(枢纽节点)反而量价齐升。谁能先从供应链关系里看到”谁依赖谁”,谁就提前一步定位了赢家与输家。

二、三类可量化信号#
2.1 客户集中度风险(Customer Concentration)#
如果一家公司 40% 的营收来自单一大客户,这就是隐性风险因子:大客户砍单、议价或自身出事,都会剧烈冲击该公司。可构造:
客户集中度 = 最大客户营收占比(或 HHI 指数)
HHI = Σ (第i大客户营收占比)^2plaintext高集中度往往对应更高的特异性波动,可作为风险敞口或做空候选;但当大客户是高景气赛道龙头时,高集中度也可能是”成长杠杆”,需要结合下游景气度辩证看待,而非简单线性做空。
2.2 供应链网络中心度(Centrality)#
用图论指标衡量一家公司在网络中的枢纽程度。度中心度(出入边数量)、介数中心度(是否处于最短路径咽喉)高的公司,系统性重要但也会成为风险放大器。实践中,介数中心度比简单的度中心度更能识别”咽喉”公司—它衡量的是有多少对节点的最短路径必须经过该节点,因而对冲击传导更敏感。
2.3 上下游领先-滞后(Lead-Lag)#
计算下游收益与上游滞后收益的相关性,若存在显著正相关的滞后阶数 k,就可以用上游当期收益预测下游未来收益—这是最直接的跨股票动量信号。
三、Python 实战:构建供应链网络与冲击传导#
下面用 numpy 演示如何把一张供货关系表转成邻接矩阵,并计算关键供应商冲击的逐轮传导强度,以及上下游收益的领先-滞后相关。
import numpy as np
np.random.seed(7)
# ---------- 1. 供货关系(有向边:a 供货给 b) ----------
# 节点编号 0=原材料, 1-3=零部件, 4-5=整机制造, 6=渠道, 7=终端
edges = [(0,1),(0,2),(0,3),(1,4),(2,4),(3,4),
(1,5),(2,5),(4,6),(5,6),(6,7),(5,7)]
n = 8
adj = np.zeros((n, n))
for a, b in edges:
adj[a, b] = 1.0 # 单向供货:a -> b
# ---------- 2. 冲击传导模拟(关键供应商 0 受冲击)----------
impact = np.zeros(n)
impact[0] = 1.0
rounds, decay = 4, 0.7
cum = np.zeros(n)
cur = impact.copy()
for r in range(rounds):
cur = adj.T @ cur * decay # 沿供货方向传导并衰减
cum += cur
print("各节点累积传导敞口:", np.round(cum, 3))
# 越靠近上游枢纽、出边越多的节点,累积敞口越高python传导结果可以用热力图展示,每一行是一轮冲击后各节点的累积暴露:

可以看到,冲击从原材料节点(0)沿有向边逐轮扩散到中下游,枢纽节点(如整机制造 4、5)累积敞口最高—这正是网络中心度作为风险因子的直观体现。
四、从网络到交易:领先-滞后信号#
传导只是”风险”的一面,另一面是”预测”。如果两个相邻层级的收益存在稳定领先-滞后结构,就能用上游当期收益预测下游未来收益。我们用互相关(cross-correlation)量化它:
# ---------- 3. 上下游收益领先-滞后相关 ----------
T = 500
up = np.random.normal(0, 0.01, T)
down = np.zeros(T)
for t in range(3, T):
# 下游_t 由 上游_{t-3},{t-2},{t-1} 滞后驱动 + 噪声
down[t] = 0.55*up[t-3] + 0.25*up[t-2] + 0.15*up[t-1] \
+ np.random.normal(0, 0.008)
def cross_corr(a, b, maxk=5):
cc = []
for k in range(-maxk, maxk+1):
if k < 0:
x, y = b[-k:], a[:T+k]
elif k > 0:
x, y = b[:T-k], a[k:]
else:
x, y = b, a
cc.append(np.corrcoef(x, y)[0, 1])
return np.array(cc)
cc = cross_corr(up, down)
peak_k = np.argmax(cc) - 5
print(f"峰值相关出现在 k={peak_k}(k>0 表示上游领先下游 {peak_k} 期)")
print("相关系数序列:", np.round(cc, 3))python互相关在 k=3 处出现明显峰值,说明上游收益领先下游约 3 期,这正是构造跨股票动量 / 配对预测信号的结构基础:

五、把信号变成组合:实务框架#
一个可落地的供应链 alpha 框架通常长这样:
- 建图:从上市公司年报”前五大客户/供应商”披露、行业数据库抽取有向边与权重(营收占比)。
- 特征:对每个节点计算客户集中度、供应商集中度、度中心度、介数中心度。
- 领先信号:对每条边计算上下游收益的滚动互相关,取显著正滞后阶数构建预测。
- 合成:把关系特征与领先信号并入多因子模型,先做行业中性化再排序。
- 对冲:用同行业、同中心度分位的股票做多空配对,降低系统性暴露。
| 信号 | 数据频率 | 典型用法 | 主要风险 |
|---|---|---|---|
| 客户集中度 | 年/季 | 风险敞口、做空候选 | 披露滞后 |
| 网络中心度 | 年/季 | 枢纽Beta、传染放大 | 关系静态 |
| 上下游 Lead-Lag | 日/周 | 跨股动量预测 | 相关性断裂 |
六、真实陷阱#
供应链数据强大,但坑也多,必须正视:
- 披露滞后与稀疏:A 股”前五大客户”一年才披露一次,且常以”客户 A/B”匿名,关系权重不准。
- 关系动态变化:大客户切换、新签长单不会实时反映,用陈旧关系图会误判传染路径。
- 非线性传导:轻度缺货的传导是渐变的,但断供是突变的,线性邻接矩阵高估了常态、低估了尾部。
- 幸存者偏差:已退市公司的供应链关系不会进数据库,回测天然高估。
- 地缘与 ESG:单点依赖(如某国某厂)在制裁、地震下会瞬间变成致命风险,这是传统因子看不到的维度。
七、小结#
供应链数据把”孤立的股票”重新连成”一张网”,揭示了价格运动背后真实的结构相关性。客户集中度、网络中心度、上下游领先-滞后,是三条逻辑清晰、可解释、且难以被传统量价因子捕捉的 alpha 路径。
但它的门槛不在模型,而在数据:谁能更早、更准地拿到关系图谱,谁才真正拥有这张网的红利。对大多数研究者而言,务实的做法是—先用公开的年报披露搭建粗粒度网络验证信号有效性,再逐步补充分层供应链与另类数据源(如海关、招投标、物流)来提升精度。
即便没有完整的供应链数据库,普通投资者也可以从年报”前五大客户/供应商”披露出发,手动标记几家关键枢纽公司,把它们作为观察整个板块景气的领先指标—这本身就是一种低成本的另类数据实践,也是理解一张网如何运转最好的起点。