问题描述
我想动态创建一个指数衰减的移动平均线,为最近的测量赋予更多权重。例如,如果我有 5 个请求,而这 5 个请求是过去 4 周的结果,我想使用这 4 周(第 1 行)动态创建指数平均值。尽管如此,如果这 5 个请求是 4 周的结果,但其中一些周出现不止一次,那么我想以某种方式修改指数平均值,以免将重复的周视为单独的周并分配错误的权重。我的测量是以周为单位的。示例数据帧:
id requests day_of_week hour weeks
1 5 3 21 [1,2,3,4]
2 5 3. 22 [2,4]
Expected output:
id requests day_of_week hour weeks output
1 0 3 21 [1,4] see_function
2 5 3. 22 [2,4] see_function
I am defining the weighted mean function as follows:
# lambda function to compute the weighted mean:
r = 0.5
a = 1.0
wm = lambda x: np.average(x,weights=[a * r ** i for i in range(len(x))].reverse())
df['output'] = df['weeks'].apply(wm,axis=1)
尽管如此,我做的事情是错误的,因为它每周(重复与否)都完全一样。我试图找到一个聪明的解决方案,可以区分周是否重复,从而不分配虚构的权重。
我发布的加权平均值假设一个恒定的半衰期仅取决于测量的长度,并没有考虑我想要的。假设周的字典是 {2: 2,3:1,4:1},那么我会以某种方式利用出现的频率来调整我的加权平均值,以便比现在更多地关注最近的情况