我遇到了一个奇怪的熊猫滚动关联行为。在下面的代码段中,我假设v1 == v2
是正确的,但事实并非如此。这会导致滚动相关信息出现inf(c1与c2,其中c2很好,但我认为c1是“错误”):
import pandas as pd
a = pd.Series([1e5, 0, 0, 0, 0])
b = pd.Series([9.45] * 5)
c1 = a.rolling(5).corr(b).iloc[4]
c2 = a.corr(b)
v1 = a.rolling(5).cov(b).iloc[4]
v2 = a.cov(b)
我在多台计算机上对其进行了测试,并且abs(v1)
是O(1e-11),v2
是0,而c
是inf。这是一个已知问题吗?为什么滚动cov与香草cov不同?
答案 0 :(得分:1)
协方差不仅仅是一个数字。这是一个措施。它的价值很难解释。仅给出价值,就更难了。这就是为什么通常使用关联而不是协方差(它的升级版本)的原因。值0
和1e-11
不同,但含义相同-样本似乎没有线性关系。
对于计算pandas.Series.cov(pandas.Series)
和pandas.Series.rolling(..., ddof=...).cov(pandas.Series)
使用(略微?)不同的算法:分别是numpy cov和rolling cov(实际上是ewmcov)。