一文速学-时间序列分析算法之加权移动平均法详解+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爬虫速度的影响分析
|
6天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
垃圾识别分类系统。本系统采用Python作为主要编程语言,通过收集了5种常见的垃圾数据集('塑料', '玻璃', '纸张', '纸板', '金属'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对图像数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。然后使用Django搭建Web网页端可视化操作界面,实现用户在网页端上传一张垃圾图片识别其名称。
29 0
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
|
6天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
22 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
6天前
|
机器学习/深度学习 人工智能 算法
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
蔬菜识别系统,本系统使用Python作为主要编程语言,通过收集了8种常见的蔬菜图像数据集('土豆', '大白菜', '大葱', '莲藕', '菠菜', '西红柿', '韭菜', '黄瓜'),然后基于TensorFlow搭建卷积神经网络算法模型,通过多轮迭代训练最后得到一个识别精度较高的模型文件。在使用Django开发web网页端操作界面,实现用户上传一张蔬菜图片识别其名称。
26 0
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
|
10天前
|
算法 Python
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果;贪心算法在每一步选择局部最优解,追求全局最优;动态规划通过保存子问题的解,避免重复计算,确保全局最优。这三种算法各具特色,适用于不同类型的问题,合理选择能显著提升编程效率。
28 2
|
11天前
|
数据采集 存储 JSON
Python爬虫开发中的分析与方案制定
Python爬虫开发中的分析与方案制定
|
6月前
|
Python 数据可视化 索引
PYTHON用GARCH、离散随机波动率模型DSV模拟估计股票收益时间序列与蒙特卡洛可视化
PYTHON用GARCH、离散随机波动率模型DSV模拟估计股票收益时间序列与蒙特卡洛可视化
PYTHON用GARCH、离散随机波动率模型DSV模拟估计股票收益时间序列与蒙特卡洛可视化
|
6月前
|
数据可视化 数据挖掘 Python
Python用 tslearn 进行时间序列聚类可视化
Python用 tslearn 进行时间序列聚类可视化
|
自然语言处理 数据可视化 数据挖掘
如何用Python做舆情时间序列可视化?
如何批量处理评论信息情感分析,并且在时间轴上可视化呈现?舆情分析并不难,让我们用Python来实现它吧。 痛点 你是一家连锁火锅店的区域经理,很注重顾客对餐厅的评价。
1825 0
|
5天前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。