一文速学-时间序列分析算法之加权移动平均法详解+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的选择,同样具有一定的经验性。一般的原则是:近期数据的权数大,远期数据的权数小。至于大到什么程度和小到什么程度,则需要按照预 测者对序列的了解和分析来确定。

目录
相关文章
|
9天前
|
算法 测试技术 开发者
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗;代码审查通过检查源代码发现潜在问题,提高代码质量和团队协作效率。本文介绍了一些实用的技巧和工具,帮助开发者提升开发效率。
12 3
|
7天前
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。
|
12天前
|
并行计算 算法 IDE
【灵码助力Cuda算法分析】分析共享内存的矩阵乘法优化
本文介绍了如何利用通义灵码在Visual Studio 2022中对基于CUDA的共享内存矩阵乘法优化代码进行深入分析。文章从整体程序结构入手,逐步深入到线程调度、矩阵分块、循环展开等关键细节,最后通过带入具体值的方式进一步解析复杂循环逻辑,展示了通义灵码在辅助理解和优化CUDA编程中的强大功能。
|
21天前
|
存储 缓存 算法
如何通过优化算法和代码结构来提升易语言程序的执行效率?
如何通过优化算法和代码结构来提升易语言程序的执行效率?
|
21天前
|
搜索推荐
插入排序算法的讲解和代码
【10月更文挑战第12天】插入排序是一种基础的排序算法,理解和掌握它对于学习其他排序算法以及数据结构都具有重要意义。你可以通过实际操作和分析,进一步深入了解插入排序的特点和应用场景,以便在实际编程中更好地运用它。
|
13天前
|
缓存 分布式计算 监控
优化算法和代码需要注意什么
【10月更文挑战第20天】优化算法和代码需要注意什么
15 0
|
19天前
|
算法
PID算法原理分析
【10月更文挑战第12天】PID控制方法从提出至今已有百余年历史,其由于结构简单、易于实现、鲁棒性好、可靠性高等特点,在机电、冶金、机械、化工等行业中应用广泛。
|
30天前
|
机器学习/深度学习 算法 搜索推荐
从理论到实践,Python算法复杂度分析一站式教程,助你轻松驾驭大数据挑战!
【10月更文挑战第4天】在大数据时代,算法效率至关重要。本文从理论入手,介绍时间复杂度和空间复杂度两个核心概念,并通过冒泡排序和快速排序的Python实现详细分析其复杂度。冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1);快速排序平均时间复杂度为O(n log n),空间复杂度为O(log n)。文章还介绍了算法选择、分而治之及空间换时间等优化策略,帮助你在大数据挑战中游刃有余。
53 4
|
4月前
|
机器学习/深度学习 算法 搜索推荐
从理论到实践,Python算法复杂度分析一站式教程,助你轻松驾驭大数据挑战!
【7月更文挑战第22天】在大数据领域,Python算法效率至关重要。本文深入解析时间与空间复杂度,用大O表示法衡量执行时间和存储需求。通过冒泡排序(O(n^2)时间,O(1)空间)与快速排序(平均O(n log n)时间,O(log n)空间)实例,展示Python代码实现与复杂度分析。策略包括算法适配、分治法应用及空间换取时间优化。掌握这些,可提升大数据处理能力,持续学习实践是关键。
120 1
|
5月前
|
存储 机器学习/深度学习 算法
Python算法基础教程
Python算法基础教程
27 0