考虑先前的变化/改善率

时间:2015-06-24 17:33:44

标签: statistics tableau statsmodels

我在下面有一些值显示一段时间内的每周结果。在第19周,实施了一个新流程,可能会进一步降低结果。

然而,很明显,第19周之前的结果已经有一周/周的减少。量化“新进程”对第19周之前的改进率的影响的最佳方法是什么?我不想“重复计算”新流程的效果。

    Week #  Result  Status
Week 1  849.27  NA
Week 2  807.59  NA
Week 3  803.59  NA
Week 4  849.7   NA
Week 5  852.19  NA
Week 6  845.06  NA
Week 7  833.77  NA
Week 8  788.46  NA
Week 9  800.32  NA
Week 10 814.66  NA
Week 11 829.21  NA
Week 12 799.49  NA
Week 13 812.24  NA
Week 14 772.62  NA
Week 15 782.13  NA
Week 16 779.66  NA
Week 17 752.86  NA
Week 18 758.39  NA
Week 19 738.47  New Process
Week 20 721.11  New Process
Week 21 642.04  New Process
Week 22 718.72  New Process
Week 23 743.47  New Process
Week 24 709.57  New Process
Week 25 704.48  New Process
Week 26 673.51  New Process

2 个答案:

答案 0 :(得分:1)

如果变化正在加速,计算变化率(即每周/每月的价值变化)可能会给出一个好主意。

另一个简单的方法是查看移动平均线"。计算每周最后X周的平均值。平均值对短期持续变化和“噪音”不太敏感。 你可能需要尝试一些X(2,3,4)的值来看看哪个更好。 绘制数据图表(以及移动平均线)可能会给您更清晰的图像。 如果你可以加载一些可以下载或复制粘贴到excel的数据,我可以演示上面的内容。

答案 1 :(得分:1)

尝试这个例子,看起来改善率约为6%,但是具有较宽的置信区间。 趋势中断并不显着。

下面的第一个模型是使用OLS估算的,并且常数会发生变化。在第一种情况下也是趋势的转变。

我在最后一个模型中使用泊松,因为因变量的值是正的,它估计一个指数模型。如果我们使用稳健的协方差矩阵,标准误差是正确的。 (我们使用Poisson来估计指数模型,我们不假设基础分布是Poisson)。

注意:这是一个纯粹的numpy版本,我没有使用pandas或patsy公式。如果某些解释变量太大,泊松会出现优化问题。

import numpy as np
import statsmodels.api as sm

data = np.array(
      [ 849.27,  807.59,  803.59,  849.7 ,  852.19,  845.06,  833.77,
        788.46,  800.32,  814.66,  829.21,  799.49,  812.24,  772.62,
        782.13,  779.66,  752.86,  758.39,  738.47,  721.11,  642.04,
        718.72,  743.47,  709.57,  704.48,  673.51])

nobs = len(data)
trend = np.arange(nobs)
proc = (trend >= 18).astype(int)
x = np.column_stack((np.ones(nobs), trend, proc, (trend - 18)*proc))      
res = sm.OLS(data, x).fit()
res.model.exog_names[:] = ['const', 'trend', 'const_diff', 'trend_new']
print(res.summary())

res2 = sm.OLS(data, x).fit()
res2.model.exog_names[:] = ['const', 'trend', 'const_diff']
print(res2.summary())

res4 = sm.OLS(np.log(data), x).fit()
res4.model.exog_names[:] = ['const', 'trend', 'const_diff']
print(res4.summary())

res3 = sm.Poisson(data, x).fit(cov_type='HC0', method='nm', maxiter=5000)
res3 = sm.Poisson(data, x).fit(start_params=res3.params, cov_type='HC0', method='bfgs')
res3.model.exog_names[:] = ['const', 'trend', 'const_diff']
print(res3.summary())
print(np.exp(res3.params))