首页 > 解决方案 > pandas.cusum() 与统计 CUSUM 测试相同吗?

问题描述

我正在 edX 上观看有关数据分析的课程。CUSUM 背后执行“变更检测”的想法使我的兴趣达到了顶峰。我被告知的公式是: S sub t = max {0, S sub (t-1) + (x sub t - mu - C) 如果: S sub t >= threshold T,我们检测到增加(类似的减少)。瞧,我看到 pandas 有一个 cusum 函数。但是,我似乎不明白这是如何工作的。我的数据头是:

    Year            GDP Growth Rate
1   1930           -0.085
2   1931           -0.064
3   1932           -0.129
4   1933           -0.012
5   1934            0.108

我的输出是:

      Year   GDP Growth Rate
1   1930.0         1929.915
2   1931.0         1930.936
3   1932.0         1931.871
4   1933.0         1932.988
5   1934.0         1934.108

所以看起来它只是添加列。我显然在我的理解中遗漏了一些东西。cusum() 是我想要的方法吗?我想看看提供的“变化检测”想法是否能检测到衰退、萧条或繁荣何时开始,只是为了好玩。我会在任何人说之前添加:不,这不是家庭作业。

解决方案:我正在寻找 Cusum(似乎在这里找到了一个示例): https ://github.com/demotu/BMC/blob/master/functions/detect_cusum.py AS 用户指出,cumsum 和 CUSUM 以及两个不同的东西. 我的错。谢谢。另外:参见https://stats.stackexchange.com/questions/59895/python-module-for-change-point-analysis

标签: pythonpandas

解决方案


假设我们有一个df:

df = pd.DataFrame({'Year': [1930,1931,1932,1933,1934],
                  'GDP Growth Rate': [-0.085,-0.064,-0.129,-0.012,0.108]})      
df

    Year    GDP Growth Rate
0   1930    -0.085
1   1931    -0.064
2   1932    -0.129
3   1933    -0.012
4   1934     0.108

我们可以取 GDP 增长率列的 cumsum 来看看它是如何变化的,并创建一个名为 Cumsum 的新列:

df['Cumsum'] = df['GDP Growth Rate'].cumsum()
df


    Year  GDP Growth Rate   Cumsum
0   1930    -0.085          -0.085
1   1931    -0.064          -0.149
2   1932    -0.129          -0.278
3   1933    -0.012          -0.290
4   1934     0.108          -0.182

我们还可以调查变化是朝正面还是负面的方向发展:

df['Change'] = np.where(df['Cumsum'] > df['Cumsum'].shift(), '+', '-')
df

    Year    GDP Growth Rate Cumsum  Change
0   1930       -0.085      -0.085     -
1   1931       -0.064      -0.149     -
2   1932       -0.129      -0.278     -
3   1933       -0.012      -0.290     -
4   1934        0.108      -0.182     +

我们还可以设置任意阈值并查看 cumsum 何时高于或低于它:

df['Threshold'] = np.where(df['Cumsum'] < -0.2, 'Past Threshold', '-')
df

    Year  GDP Growth Rate   Cumsum  Change    Threshold
0   1930    -0.085          -0.085    -           -
1   1931    -0.064          -0.149    -           -
2   1932    -0.129          -0.278    -     Past Threshold
3   1933    -0.012          -0.290    -     Past Threshold
4   1934     0.108          -0.182    +           -

推荐阅读