pandas计算时序数据协方差矩阵数值超出[-1,1]范围的问题解析
协方差数值超出[-1,1]范围的原因
核心认知偏差:混淆了两类统计指标
你记忆中取值固定在[-1,1]区间的指标是皮尔逊相关系数,并非协方差:
- 协方差的本质是两个变量离均差乘积的期望,计算过程没有做归一化处理,本身没有固定的取值上下限,数值大小完全和变量本身的量纲、绝对数值尺度强绑定。比如你提供的原始数据中,s2列的单期价格就在2600量级,本身的方差就达到11349,对应的和其他变量的协方差自然会跟着变量的绝对量级放大,不存在“数值超范围”的异常。
- 只有将协方差用两个变量的标准差乘积做标准化缩放后,得到的相关系数才会被约束在[-1,1]区间,用来衡量两个变量线性相关的方向和强弱程度。
Pandas的计算逻辑不存在异常
你运行data.cov()得到的是标准的无偏协方差矩阵,计算逻辑为对任意两列X、Y,按公式sum((X - X.mean())*(Y - Y.mean()))/(n-1)计算,输出结果完全符合统计定义。
可以直接对照原始数据量级验证:s2的单期价格波动幅度就有上百的区间,它和s1的协方差达到1862,完全匹配尺度对应的计算结果。
获取[-1,1]区间结果的方法
如果需要归一化后的、取值落在[-1,1]区间的联动性矩阵,只需要将代码中的cov()替换为corr()即可:
print(data.corr())
输出结果为每个协方差除以对应两列的标准差乘积得到的相关系数,比如当前样本中s1和s2的相关系数计算值为1862.176/(sqrt(470.118)*sqrt(11349.608)) ≈ 0.807,完全落在[-1,1]区间内,和你此前的认知匹配。
场景提示:股票数据处理中两类矩阵的适用边界很明确:计算投资组合的整体收益波动、风险敞口时,通常保留原始协方差矩阵匹配实际持仓的尺度;只需要判断不同股票的价格/收益联动性强弱时,再使用相关系数矩阵即可。
内容的提问来源于stack exchange,提问作者ACarter
相关产品推荐
相关产品推荐

