一个市场、几个主题和一条长尾
把收益率的每一列标准化(均值 0、标准差 1),结果记为 Z,有 n 天、p 个资产。相关矩阵为 C=ZᵀZ/n。主成分是 C 的特征向量 vⱼ:标准化收益率在资产空间中变化最大的方向,其次是在与第一个方向垂直的方向中变化最大的方向,依此类推。其特征值 λⱼ 是沿该方向的方差,特征值之和为 p(p 个标准化列的总方差),而 λⱼ/p 就是方差解释比例。得分 Z vⱼ 是该成分的时间序列。numpy.linalg.eigh 按升序返回特征值,需要改为降序;特征向量的符号是任意的,所以在与任何东西比较之前要先定一个约定(例如绝对值最大的分量取正)。
只保留前 k 个成分时,数据被重构为 Ẑ=Z VₖVₖᵀ。重构的均方误差是被舍弃的方差除以 p:1/pΣ_(j>k)λⱼ。在 61 只股票和 ETF 最近 2,500 个交易日上,第一主成分承载 37.4% 的方差,随后四个分别为 7.3%、6.2%、3.3%、2.8%。第一个得分与等权平均收益的相关系数为 0.998:它就是市场,没有人告诉它就被找了出来。后面的成分是行业和风格主题。然而尾部很重:3 个成分给出一半的方差,但达到 80% 需要 22 个、达到 90% 需要 34 个,重构误差在 1 个成分时为 0.626、5 个时为 0.430、20 个时为 0.213。PCA 压缩的是市场的共同部分,不会让 61 个资产看起来像三个。
- 先标准化再做特征分解:特征值之和等于资产数。
- 符号是任意的:定一个约定,并用余弦的绝对值比较向量。
- 股票收益的第一主成分就是市场;小成分的长尾仍然重要。
实验:评分内容
- 标准化10 分
- 特征分解20 分
- 方差解释比例10 分
- 与 scikit-learn 核对15 分
- 需要几个成分10 分
- 重构误差15 分
- 研究20 分