熊猫滚动相关性计算中的数值稳定性问题

时间:2018-11-30 07:11:02

标签: python pandas

我遇到了一个奇怪的熊猫滚动关联行为。在下面的代码段中,我假设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不同?

1 个答案:

答案 0 :(得分:1)

协方差不仅仅是一个数字。这是一个措施。它的价值很难解释。仅给出价值,就更难了。这就是为什么通常使用关联而不是协方差(它的升级版本)的原因。值01e-11不同,但含义相同-样本似乎没有线性关系。

对于计算pandas.Series.cov(pandas.Series)pandas.Series.rolling(..., ddof=...).cov(pandas.Series)使用(略微?)不同的算法:分别是numpy covrolling cov(实际上是ewmcov)。