python——pandas——rolling、ewm函数(移动平均VS加权移动平均)

本文深入探讨了时间序列分析中处理数据缺失的两种关键方法:移动平均与加权移动平均。移动平均通过计算固定窗口内的平均值来平滑数据,而加权移动平均则为近期数据赋予更多权重,实现更精确的趋势捕捉。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        在时间序列分析当中,我们经常会遇到时间轴上数据缺失值的补充,常用的方法使用移动平均值。Series的方法fillna()实现了该功能。常用的移动平均值方法有以下两种:

一、移动平均值

roll_mean=reindexed['ppg'].rolling(window=30).mean()

        移动平均值的理解较为简单:

        如现在有一个Series,包含100个数(\upsilon _{1},\upsilon _{2},\upsilon _{3},......,\upsilon _{100}),现在我们要以10为窗口,计算滚动平均值,过程如下:

        对于\upsilon _{1},\upsilon _{2},\upsilon _{3},......,\upsilon _{10},得\overline{\upsilon _{10}}=\frac{\upsilon _{1}+\upsilon _{2}+......+\upsilon _{10}}{10},接着往后滚动一格。

        对于\upsilon _{2},\upsilon _{3},\upsilon _{4},......,\upsilon _{11},得\overline{\upsilon _{11}}=\frac{\upsilon _{2}+\upsilon _{3}+......+\upsilon _{11}}{10},接着往后滚动一格。

        .......

        对于\upsilon _{91},\upsilon _{92},\upsilon _{93},......,\upsilon _{100},得\overline{\upsilon _{100}}=\frac{\upsilon _{91}+\upsilon _{92}+......+\upsilon _{100}}{10}

        在以上过程中,窗口10即为rolling()函数的参数window。

特点:

  • Series前9个元素无法填充滚动平均值,
  • 算术平均值赋予每一个元素相同的权重,而指数权重移动平均整合填补了这两点

二、加权移动平均

ewma_mean=reindexed['ppg'].ewm(span=30).mean()

        加权移动平均本质上就是一种近似求平均的方法。

        我们现在直接给出公式: \overline{\upsilon _{t}}=\beta *\overline{\upsilon _{t-1}}+(1-\beta )\theta _{t}

        其中 \overline{\upsilon _{t}}为算得的第t个加权移动平均的结果,\theta _{t}为第t个元素的值,\beta代表可调节的超参数(类似ewm()函数的参数span,控制指数下降的速度)。

        同样,如现在有一个Series,包含100个数(\upsilon _{1},\upsilon _{2},\upsilon _{3},......,\upsilon _{100}),我们取\beta =0.9,可得:

\overline{\upsilon _{100}}=0.9*\overline{\upsilon _{99}}+0.1\theta _{100}

\overline{\upsilon _{99}}=0.9*\overline{\upsilon _{98}}+0.1\theta _{99}

\overline{\upsilon _{98}}=0.9*\overline{\upsilon _{97}}+0.1\theta _{98}

......

        化简开得到如下表达式:

\overline{\upsilon _{100}}=0.9*(0.9*(0.9*\overline{\upsilon _{97}}+0.1\theta _{98})+0.1\theta _{99})+0.1\theta _{100}

        以此类推,进而展开:

\overline{\upsilon _{100}}=0.1\theta _{100}+0.1*0.9*\theta _{99}+0.1*0.9^{2}*\theta _{98}+0.1*0.9^{3}*\theta _{97}+......+0.1*0.9^{99}*\theta _{1}

\overline{\upsilon _{99}}=0.1\theta _{99}+0.1*0.9*\theta _{98}+0.1*0.9^{2}*\theta _{97}+0.1*0.9^{3}*\theta _{96}+......+0.1*0.9^{98}*\theta _{1}

......

\overline{\upsilon _{2}}=0.1\theta _{2}+0.1*0.9*\theta _{1}

\overline{\upsilon _{1}}=0.1\theta _{1}

        本质就是以指数式递减加权的移动平均。各数值的加权而随时间而指数式递减,越近期的数据加权越重,但较旧的数据也给予一定的加权。

特点:

  • 我们可以看到指数加权平均的求解过程实际上是一个递推的过程,那么这样就会有一个非常大的好处,每当我要求从0到某一时刻(n)的平均值的时候,我并不需要像普通求解平均值的作为,保留所有的时刻值,类和然后除以n。
  • 而是只需要保留0-(n-1)时刻的平均值和n时刻的温度值即可。也就是每次只需要保留常数值,然后进行运算即可,这对于深度学习中的海量数据来说,是一个很好的减少内存和空间的做法。

移动平均法是一种常用的时间序列预测方法,在Python中可以使用简单移动平均(SMA)、指数移动平均(EMA)加权移动平均(WMA)等方法进行计算。可以根据需求选择不同的移动平均方法来进行预测。 在Python中实现移动平均(SMA、EMA、WMA)股票价格时间序列预测,可以参考经济数据预测相关的Python库和工具,比如pandas、numpy等。这些库和工具提供了方便的函数和方法来计算移动平均。 对于简单移动平均(SMA),可以使用pandas库中的rolling函数来进行计算。首先需要创建一个滑动窗口,并使用mean方法计算窗口内观测值的平均值。这样可以得到每个时刻的移动平均值。接下来,可以使用得到的移动平均值来进行时间序列的预测。 对于指数移动平均(EMA),可以使用pandas库中的ewm函数来进行计算。ewm函数使用指数加权平均的方法计算移动平均值,可以更好地适应时间序列的变化。通过调整指数权重和时间窗口大小,可以得到不同的预测结果。 对于加权移动平均(WMA),可以使用numpy库中的average函数来进行计算。average函数可以根据给定的权重数组,计算观测值的加权平均值。可以根据需要自定义权重数组,从而得到不同的预测结果。 总之,通过使用Python中的相关库和工具,可以方便地实现移动平均法进行时间序列预测。具体的实现方法和代码可以参考相关的文档和教程,以适应不同的预测需求和数据特点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xia ge tou lia

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值