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



我遇到了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不同?

协方差不仅仅是一个数字。这是一项措施。它的价值很难解读。只考虑到价值,就更难了。这就是为什么通常使用相关性而不是协方差(作为它的升级版本(。值01e-11不同但具有相同的含义——样本似乎没有线性关系。

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

最新更新