按资产如何一起波动来分组
距离表示两个事物相隔多远。对资产来说,近应当表示它们一起波动,所以我们把相关系数 ρ 变成距离:d=21(1−ρ)。完全相关 ρ=1 的距离为 0,不相关为 0.71,完全反向 ρ=−1 为 1。与 1−ρ 不同,这个公式表现得像真正的距离,因此可以交给聚类工具。scipy.spatial.distance.pdist 一次算出所有两两距离,squareform 在完整表格与聚类函数所需的紧凑列表之间转换。要在很多点中找某点的最近邻,scipy.spatial.cKDTree 比逐点比较快得多。
层次聚类从每个资产各成一组开始,反复合并最近的两组。如何度量两组之间的距离,就是连接规则。single 取两组之间最近的一对,complete 取最远的一对,average 取所有跨组距离的平均。hierarchy.linkage(distances, method) 返回完整的合并历史及每次合并的高度。然后 hierarchy.fcluster(Z, t, 'distance') 在高度 t 处切树,给出分组标签;用 'maxclust' 则切成指定个数的组。在金融中,这些分组就是分散化的地图:同一组的资产承担的大多是同一种风险,持有其中五只并不是五个独立的赌注。
dij=21(1−ρij),daverage(A,B)=∣A∣∣B∣1i∈A∑j∈B∑dij,dsingle=mindij,dcomplete=maxdij(1) 三个资产的手算相关系数
0.5 的距离是
0.25=0.5,
0.8 的距离是
0.1=0.316。取三个资产,距离为
AB=0.3,
AC=0.8,
BC=0.7。最近的一对是
A 和
B,在高度
0.3 合并。新组到
C 的距离:单连接为
min(0.8,0.7)=0.7,全连接为
max=0.8,平均连接为
(0.8+0.7)/2=0.75,所以平均连接下第二次合并发生在
0.75。在高度
0.5 处切树,剩下两组:
{A,B} 和
{C}。在真实数据上,
55 只拥有至少
90% 历史的美国大盘股中,
JPM 与
BAC 的相关系数为
0.79,距离
0.327。平均连接聚类切成
6 组,得到一个
37 只的大块、一个恰好是医疗保健股的
8 只块(JNJ、PFE、MRK、ABT、AMGN、LLY、BMY、MDT)、一个由防御型股票构成的
7 只块(PG、KO、PEP、T、VZ、DUK、SO),以及三只孤立的股票。
- 把相关系数变成距离:d=(1−ρ)/2 对孪生资产为 0,对相反资产为 1。
- 连接方式是一种选择:单连接、全连接和平均连接对同样的数据可能给出不同的合并高度。
- 聚类绘出分散化地图:跨组选择,因为同一组的资产共享大部分风险。
实验:评分内容
- 从相关系数到距离10 分
- 从距离到相关系数10 分
- 平均连接高度15 分
- 单连接高度10 分
- 切割后的组数10 分
- 各例程的作用15 分
- 聚类与分散化30 分