我有一个互联网测量实验的结果,如下图所示。我正在大熊猫身上做时间序列分析。由于服务器中断,数据会出现某些下降。我正在寻找平滑数据的好方法。在
在更简单的内置平滑函数中,pd.rolling_max()
提供了一个相当好的估计。然而,它有点高估了。我还尝试编写了自己的平滑函数,当下降超过20%时,它会将值转发。这也提供了一个相当好的估计,但是阈值是任意设置的。在
def my_smooth(win, thresh = 0.80):
win = win.copy()
for i, val in enumerate(win):
if i > 1 and val < win[i-1] * thresh:
win[i] = win[i-1]
return win[-1]
ts = pd.rolling_apply(ts, 6, my_smooth)
我的问题是,对于这种类型的时间序列,有什么更好的平滑函数呢?(即事件的计数,在特定时间内,主要的测量误差在计数不足时较大)。另外,我建议的平滑功能是否可以减少即席或优化?在
我想补充一下,我最终是如何为其他感兴趣的人解决这个问题的。最重要的是,在研究了许多平滑技术之后,我最终决定不进行平滑处理,因为它会改变数据。我选择过滤掉10%的点作为异常值,这是机器学习和信号处理中的一种常见技术。在
在我们的例子中,异常值是由测量记录失败引起的低测量值。有许多技术可以检测异常值,其中最流行的是NIST的Engineering Statistics Handbook。鉴于我的数据有明显的趋势,我选择了“中值绝对偏差”的变化:将测量系列中的每个点与滚动中值进行比较,产生差异,并适当地选择一个截止点。在
相关问题 更多 >
编程相关推荐