Pandas 中的 EWM 用于时间序列转换
Posted
技术标签:
【中文标题】Pandas 中的 EWM 用于时间序列转换【英文标题】:EWM in pandas for timeseries transformation 【发布时间】:2021-02-10 23:10:21 【问题描述】:我正在尝试使用 ARIMA 进行时间序列预测。 所以,作为第一步,我正在做一些系列转换
#Taking log transform
dflog=np.log(df)
#Taking exponential weighted mean`enter code here`
df_expwighted_mean = dflog.ewm(span=12).mean()
#Taking moving average
df_expwighted_mean_diff = dflog - df_expwighted_mean
#Differencing
df_diff = df_expwighted_mean_diff - df_expwighted_mean_diff.shift()
#filling zero for NaN
df_diff = df_diff.fillna(0)
在使用下面的代码之后,我非常能够回到原来的系列
# Take cumulative some to remove the differencing
bdf_expwighted_mean_diff = df_diff.cumsum()
# Add rolling mean as we originally reduced it
bdf_log=bdf_expwighted_mean_diff + df_expwighted_mean
#Take exponentiation as we originally did log transform
bdf=np.exp(bdf_log)
但是当我对预测的系列执行此操作时,问题就来了。 它失败了,因为我没有预测系列的 EWM。(pdf_expwighted_mean) 所以基本上,我想要一些方法来反转指数加权平均值。
df_expwighted_mean = dflog.ewm(span=12).mean()
有什么想法吗?
【问题讨论】:
【参考方案1】:在时间序列预测中反转指数加权平均值是没有意义的。指数加权平均值用于平滑时间序列,基本上您是在尝试从序列中去除噪声,否则会使序列难以预测。
例如:让红色系列是您的实际数据,蓝色是 EWMA 系列,绿色是下图中基于 EWMA 系列的预测系列
一旦您使用平滑序列进行预测,反转 EWMA 将意味着您向其添加噪声。您可以在源数据上使用它,因为您存储了原始数据中的噪声数据。通常,您只需按原样使用 EWMA 上的预测,即。无需反转 EWMA。
在您的情况下,只需执行 cumsum
和 exp
(反向差分和记录)。
【讨论】:
这正是我遇到的问题。我想在使用 EWM 进行预测后返回原始值。如果我只使用对数变换或 box cox 变换或任何数学单值变换,我可以返回。但是这个EWMA,我做不到。即使是 WMA,我也找到了一些方法。 @JohnsonFrancis ,我是说你不能也不应该反向变换。 EWMA 去除噪音,反转它意味着添加噪音。在没有 EWMA 反向的情况下,预测仍然可用。您应该将 EWMA 视为清洁而不是转换。以上是关于Pandas 中的 EWM 用于时间序列转换的主要内容,如果未能解决你的问题,请参考以下文章
NumPy 版本的“指数加权移动平均线”,相当于 pandas.ewm().mean()
pandas使用ewm函数计算dataframe指定数据列的的特定周期指数移动(滚动)平均(Exponential Moving Average)