gpt4 book ai didi

python - 平滑具有已知倾角的时间序列的函数

转载 作者:行者123 更新时间:2023-11-28 16:36:31 25 4
gpt4 key购买 nike

我有一个随时间变化的互联网测量实验的结果,如下图所示。我正在用 Pandas 做时间序列分析。数据中有一定的下降,这是由于服务器中断造成的。我正在寻找平滑数据的好方法。

在更简单的内置平滑函数中,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)

我的问题是,考虑到具体特征,对于这种类型的时间序列,什么是更好的平滑函数? (即,它是事件计数,并且在特定时间计数下主要测量误差很大)。另外,我建议的平滑函数可以减少临时性或优化吗?

enter image description here

最佳答案

我想补充一下我最终是如何为其他感兴趣的人解决这个问题的。最重要的是,在查看了许多平滑技术之后,我最终决定不使用平滑,因为它会改变数据。相反,我选择过滤掉 10% 的点作为异常值,这是机器学习和信号处理中的一种常用技术。

在我们的案例中,异常值是由测量记录失败导致的低测量值。有许多检测异常值的技术,其中流行的技术在 NIST 的 Engineering Statistics Handbook 中命名。 .鉴于我的数据中的明显趋势,我选择了“中值绝对偏差”的变体:将测量序列中的每个点与滚动中值进行比较,产生差异,并适本地选择一个截止点。

# 'data' are the weekly measurements, in a Pandas series
filtered = data.copy()
dm = pd.rolling_median(data, 9, center=True)
df = sorted(np.abs(data - dm).dropna(), reverse=True)
cutoff = df[len(df) // 10]
filtered[np.abs(data - dm) > cutoff] = np.nan

关于python - 平滑具有已知倾角的时间序列的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25526682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com