一文速学-时间序列分析算法之加权移动平均法详解+Python代码实现

简介: 一文速学-时间序列分析算法之加权移动平均法详解+Python代码实现

前言


时间序列法并不属于机器学习而是统计分析法,供预测用的历史数据资料有的变化表现出比较强的规律性,由于它过去的变动趋势将会连续到未来,这样就可以直接利用过去的变动趋势预测未来。但多数的历史数据由于受偶然性因素的影响,其变化不太规则。利用这些资料时,要消除偶然性因素的影响,把时间序列作为随机变量序列,采用算术平均、加权平均和指数平均等来减少偶然因素,提高预测的准确性。



d045785c49f34c4c9ccf7a4539a49b40.png


在上篇文章已经具体介绍了一次移动平均法和二次移动平均法详解+实例代码

一文速学-时间序列分析算法之一次移动平均法和二次移动平均法详解+实例代码

接下来也是紧接着平滑法的第三中算法,加权移动平均法。


一、加权移动平均法


   在简单移动平均公式中,每期数据在求平均时的作用是等同的。但是,每期数据所包含的信息量不一样,近期数据包含着更多关于未来情况的信心。因此,把各期数据等同看待是不尽合理的,应考虑各期数据的重要性,对近期数据给予较大的权重,这就 是加权移动平均法的基本思想。


根据我的上篇文章我们明白移动平均法基本上是在平均值的基础上进行预测。一般来说若经济变量在某一值上下波动情况以及升降缓慢预测效果比较好,反之误差比较大。


1.计算公式


设时间序列gif.gif为加权移动平均公式为:

gif.gif


公式中为gif.gift期加权移动平均数:gif.gifgif.gif的权数,它体现了相应的gif.gif在加权平均数的重要性。

利用加权移动平均数来做预测,其预测公式为:

gif.gif

即以第t期加权平均数作为t+1期的预测值

那么我们以实际案例来使用运算:


2.示例运用


以在某化学反应里,测得生成物浓度y(%)与时间t(min)的数据为例子:


b03fa4b3ed534d3087baf7b2d5e83f4f.png


我们取时间窗口为5,则权重我们设置为gif.gif按照预测公式为:gif.gif


代码:

#输入x为预测集、n为时间窗口、w为设置权重,m为预测时间
def weighting_shift(x,n,w,m):
    num=0
    sum=0
    for i in range(n):
        num=w[i]+num
        sum=w[i]*x[m-i-2]+sum
    y=sum/num
    return y

输入预测下一个值,也就是gif.gif=为:8.17。这个预测值偏低但是我们可以使用相对误差进行修正:

例如:我们要预测gif.gif

#输入x为预测集、n为时间窗口、w为设置权重,m为预测时间
def weighting_shift(x,n,w,m):
    num=0
    sum=0
    for i in range(n):
        num=w[i]+num
        sum=w[i]*x[m-i-2]+sum
    y=sum/num
    return y
w=[5,4,3,2,1]
weighting_shift(y,5,w,16)

96eac57b670c425f8b23d86f8bdd283b.png

3.误差修正

gif.gif的相对误差为gif.gif

我们将所有的误差放到一张表上面:

#输入时间窗口
def get_error(x,n,w):
    y_error=[]
    for i in range(x.size-n):
        y=weighting_shift(x,n,w,n+i+1)
        y_error.append((x[n+i]-y)/x[n-1+i])
    return y_error

489add0fe12c4a75ba1169014afaf5b9.png


那么我们再计算总的平均相对误差:


e5797683b2b14cf087d93b40c8cd0d09.png

list_y=[]
#输入x为预测集、n为时间窗口、w为设置权重,m为预测时间
def weighting_shifts(x,n,w,m):
    num=0
    sum=0
    for i in range(n):
        num=w[i]+num
        sum=w[i]*x[m-i-2]+sum
    y=sum/num
    return y
for i in range(6,16):
    list_y.append(weighting_shifts(y,5,w,i))
y=y[5:15]
def mean_shift(list_y,y):
    sum1=0
    sum2=0
    y=list(y)
    for i in range(len(list_y)):
        sum1=sum1+list_y[i]
        sum2=sum2+y[i]
    error_mean=(1-sum1/sum2)
    return error_mean
mean_shift(list_y,y)

之后将我们求得的 :


c90838c33c5a4a5581470e27b53c323d.png

gif.gif还是得按照趋势来加权,否则就像这样就算平滑相对误差也得不到相对准确的值。


在加权移动平均法中, gif.gif的选择,同样具有一定的经验性。一般的原则是:近期数据的权数大,远期数据的权数小。至于大到什么程度和小到什么程度,则需要按照预 测者对序列的了解和分析来确定。

目录
相关文章
|
1天前
|
数据可视化 算法 数据挖掘
Python时间序列分析工具Aeon使用指南
**Aeon** 是一个遵循 scikit-learn API 风格的开源 Python 库,专注于时间序列处理。它提供了分类、回归、聚类、预测建模和数据预处理等功能模块,支持多种算法和自定义距离度量。Aeon 活跃开发并持续更新至2024年,与 pandas 1.4.0 版本兼容,内置可视化工具,适合数据探索和基础分析任务。尽管在高级功能和性能优化方面有提升空间,但其简洁的 API 和完整的基础功能使其成为时间序列分析的有效工具。
51 37
Python时间序列分析工具Aeon使用指南
|
20天前
|
机器学习/深度学习 算法
基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真
本项目基于改进遗传优化的BP神经网络进行金融序列预测,使用MATLAB2022A实现。通过对比BP神经网络、遗传优化BP神经网络及改进遗传优化BP神经网络,展示了三者的误差和预测曲线差异。核心程序结合遗传算法(GA)与BP神经网络,利用GA优化BP网络的初始权重和阈值,提高预测精度。GA通过选择、交叉、变异操作迭代优化,防止局部收敛,增强模型对金融市场复杂性和不确定性的适应能力。
156 80
|
8天前
|
机器学习/深度学习 数据采集 算法
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目基于MATLAB2022a实现时间序列预测,采用CNN-GRU-SAM网络结构。卷积层提取局部特征,GRU层处理长期依赖,自注意力机制捕捉全局特征。完整代码含中文注释和操作视频,运行效果无水印展示。算法通过数据归一化、种群初始化、适应度计算、个体更新等步骤优化网络参数,最终输出预测结果。适用于金融市场、气象预报等领域。
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
|
13天前
|
Python
课程设计项目之基于Python实现围棋游戏代码
游戏进去默认为九路玩法,当然也可以选择十三路或是十九路玩法 使用pycharam打开项目,pip安装模块并引用,然后运行即可, 代码每行都有详细的注释,可以做课程设计或者毕业设计项目参考
54 33
|
13天前
|
机器学习/深度学习 算法
基于遗传优化的双BP神经网络金融序列预测算法matlab仿真
本项目基于遗传优化的双BP神经网络实现金融序列预测,使用MATLAB2022A进行仿真。算法通过两个初始学习率不同的BP神经网络(e1, e2)协同工作,结合遗传算法优化,提高预测精度。实验展示了三个算法的误差对比结果,验证了该方法的有效性。
|
14天前
|
JavaScript API C#
【Azure Developer】Python代码调用Graph API将外部用户添加到组,结果无效,也无错误信息
根据Graph API文档,在单个请求中将多个成员添加到组时,Python代码示例中的`members@odata.bind`被错误写为`members@odata_bind`,导致用户未成功添加。
37 10
|
16天前
|
机器学习/深度学习 数据采集 算法
基于PSO粒子群优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目展示了基于PSO优化的CNN-GRU-SAM网络在时间序列预测中的应用。算法通过卷积层、GRU层、自注意力机制层提取特征,结合粒子群优化提升预测准确性。完整程序运行效果无水印,提供Matlab2022a版本代码,含详细中文注释和操作视频。适用于金融市场、气象预报等领域,有效处理非线性数据,提高预测稳定性和效率。
|
1月前
|
数据可视化 算法 数据挖掘
Python量化投资实践:基于蒙特卡洛模拟的投资组合风险建模与分析
蒙特卡洛模拟是一种利用重复随机抽样解决确定性问题的计算方法,广泛应用于金融领域的不确定性建模和风险评估。本文介绍如何使用Python和EODHD API获取历史交易数据,通过模拟生成未来价格路径,分析投资风险与收益,包括VaR和CVaR计算,以辅助投资者制定合理决策。
77 15
|
1月前
|
数据可视化 Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
通过这些思维导图和分析说明表,您可以更直观地理解和选择适合的数据可视化图表类型,帮助更有效地展示和分析数据。
73 8
|
Python
Day01--移动零(Python实现)
Day01--移动零(Python实现)
Day01--移动零(Python实现)