我正在edX上观看有关数据分析的课程。 CUSUM背后执行“变更检测”的想法使我的兴趣达到了顶峰。 被告知的公式是: S sub t = max {0,S sub(t-1)+(x sub t-mu-C) 而如果: S sub t> =阈值T 我们检测到增加(减少类似)。 瞧,我看到大熊猫具有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
答案 0 :(得分:0)
说我们有一个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的新列:
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 +
我们还可以设置一个任意阈值,并查看其总和在其之上或之下:
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 + -