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

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

前言


最近打算研究通彻将机器学习所有有关时间序列分析算法预测模型都讲明白清楚,在一些业务数据分析或者是数学建模需要用到强时间序列的预测模型,我们不得不学习时间序列法。严格来讲


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


我们将常用的时间序列分析算法平滑法模型列出:


2da72c6901214dba889ecdc621ad63eb.png

一、平滑法理论


平滑法是对不断获得的实际数据和原预测数据给以加权平均,使预测结果更接近于实际情况的预测方法,又称光滑法或递推修正法。平滑法是趋势法或时间序列法中的一种具体方法。是为了帮助我们看清数据中的隐藏的概率形式。使具有趋势性的东西显露出来. 这里我们举个例子:


dde25f05c73a41a9a72edcd012d924d4.png

比如这张图,这是在某化学反应里,测得生成物浓度y(%)与时间t(min)的数据。我们知道浓度和时间的关系是正相关的,但是在某一时刻的数据根据点的分布我们是推测不准确的。当根据数据拟合一条时序曲线就很容易看出规律:

765f9fe559534454a55278cec92d813d.png


1.时序特性


那么基于此类时序数据我们可以发现此类数据一般用于这下面四种特性:


1.长期趋势(Trend)


2.季节变化(Season)


3.循环波动(Cyclic)


4.不规则波动(Irregular)


四种影响因素通常有两种组合方式:


一种是加法模型:Y=T+S+C+I,认为数据的发展趋势是4种影响因素相互叠加的结果


一种是乘法模型:Y=T*S*C*I,认为数据的发展趋势是4种因素相互综合的结果



2.建模流程


时序模型的建模需要我们考虑我们获取到的数据是否是时间强相关数据,而不是机器学习那种以特征为主的预测模型。通常时序模型建模步骤为:


  1. 数据清洗、预处理、样本均衡
  2. 判断是否强关联时间、确定数据是否存在周期性波动
  3. 确定使用时序算法模型
  4. 横向对比其他时序算法模型,选择最优模型
  5. 参数调优


二、平滑法算法


根据上述我们提到的平滑法算法我们来依次建模


2da72c6901214dba889ecdc621ad63eb.png


1.移动平均法


又称滑动平均法,我们以在某化学反应里,测得生成物浓度y(%)与时间t(min)的数据为例子:

580c829ecc8442c087ff76e286a3b8bf.png


假定是随时间序列gif.gif发生变化的已知数据:


根据上述情况我们可以得到N为16,则为.将其分为若干段,以4个数据作为一段,进行滑动。


第一段:gif.gif,.在此为数据平均值,所有数据应在它的上下波动。那么我们可以用于推测当t=5时的数值还按前一组数值的变化幅度波动。


那么我们就很好理解,当t=6时的数值按t=2到5时间段波动。


那么第二段为:gif.gifgif.gif以此类推....


我们总结一下:一般的:


gif.gif这个公式为一次移动平均公式。


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


python代码:


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


python代码:

x=df_metric['t']
y=df_metric['y']
def mean_shift(x,y,n):
    fx=list(y[0:n])
    sum=0
    start=0
    end=n
    for i in range(0,len(y)-n):
        sum=0
        for j in range(start,end):
            sum+=fx[j]
        start+=1
        end+=1
        fx.append(sum/n)
    return fx
fx=mean_shift(x,y,4)
fx


c55fbe121a0b43fcab3adf327220f82e.png

当时间窗口为4时我们发现移动平均法效果很差,当时序数据不进行左右浮动时而是呈现一种趋势上升时不能够很好的进行预测。这是因为末端数值已经不能很好的反应出数据走向,而作均值时又会影响最近时刻的数值点。当数据的随机因素较大时,宜选用较大的N,这样有利于较大限度地平滑由随机性所带来的严重偏差;反之当数据的随机因素较小时,宜选用较小的N,这有利于跟踪数据的变化。说到底该算法仅限于处理一段数据量不是很大且数值相对集中,变化趋势相对于平稳的数据。


2.二次移动平均法


二次移动平均是在一次平均移动的基础上再做一次移动平均。

也就是我们把时间段内是数据聚合之后,再视为成一个时间点,类似套娃。用数学语言描述就是:


gif.gif


递推公式gif.gif

gif.gif为二次移动平均数

N为分段数据个数

gif.gif为以此移动平均数

与一次移动平均数关系


一次移动平均预测对于数据变化小,近似水平变化的数据平滑作用较好。如果是线性趋势变化,形成滞后偏差gif.gif

线性变化如下:


gif.gif

有:

image.png

考虑到gif.gif

gif.gif

所以:image.png

gif.gif

image.png


gif.gif

移项:gif.gif

有公式:gif.gif

gif.gif

说明用一次移动平均值模拟:真值与一次平均值存在(N-1)b_{t}/2的滞后偏差。

在线性趋势条件下gif.gif

此式表明。若直接用gif.gif作预测值,滞后偏差将拉大为gif.gif

二次移动平均法预测公式


在线性趋势条件下,回到视为基础,用线性函数拟合假定gif.gif

其中t为目前周期数,T为从目前周期t到需要预测的周期的周期个数。

gif.gif为第t+T周期的预测值,gif.gif为斜率,gif.gif为截距

若:令Y=0,得gif.gif为初始值,由于当前数据为gif.gifgif.gif

故选取gif.gif由公式:gif.gif

代入gif.gif得:gif.gifgif.gif

由此构成二次移动平均预测公式。


注意:


1.预测公式是以t时刻为基准的,这个时刻可以随意选取,当选择靠近当前时刻,准确度较高。


2.因为


image.png

即与一次移动平均法相比较,滞后偏差(N-1)/2已补偿。

3.gif.gif对应的N应一致,且二次移动值gif.gif不是预测值。

4.二次移动平均法预测公式仅适合于线性趋势预测

5.不断的丢失信息,且N的大小一般由经验以及前期趋势确定。


python代码

def one_mean_shift(x,y,n):
    fx_one=list(y[0:n])
    sum=0
    start=0
    end=n
    for i in range(0,len(y)-n):
        sum=0
        for j in range(start,end):
            sum+=fx_one[j]
        start+=1
        end+=1
        fx_one.append(sum/n)
    return fx_one
def two_mean_shift(x,y,n):
    fx_two=list(y[0:n])
    M1=one_mean_shift(x,y,n)
    M2=one_mean_shift(x,M1,n)
    #取周期T
    T=4
    a = 2 * M1[len(M1) - 1] - M2[len(M2) - 1]
    b = (2 / (n - 1)) * (M1[len(M1) - 1] - M2[len(M2) - 1])
    print(M2)
    print("a:", a, "b:", b)
    # 计算 X (预测值)
    X = a + b * T
    return X


目录
相关文章
|
7天前
|
机器学习/深度学习 数据采集 算法
基于PSO粒子群优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目展示了基于PSO优化的CNN-GRU-SAM网络在时间序列预测中的应用。算法通过卷积层、GRU层、自注意力机制层提取特征,结合粒子群优化提升预测准确性。完整程序运行效果无水印,提供Matlab2022a版本代码,含详细中文注释和操作视频。适用于金融市场、气象预报等领域,有效处理非线性数据,提高预测稳定性和效率。
|
2天前
|
存储 算法 安全
基于哈希表的文件共享平台 C++ 算法实现与分析
在数字化时代,文件共享平台不可或缺。本文探讨哈希表在文件共享中的应用,包括原理、优势及C++实现。哈希表通过键值对快速访问文件元数据(如文件名、大小、位置等),查找时间复杂度为O(1),显著提升查找速度和用户体验。代码示例展示了文件上传和搜索功能,实际应用中需解决哈希冲突、动态扩容和线程安全等问题,以优化性能。
|
12天前
|
缓存 算法 搜索推荐
Java中的算法优化与复杂度分析
在Java开发中,理解和优化算法的时间复杂度和空间复杂度是提升程序性能的关键。通过合理选择数据结构、避免重复计算、应用分治法等策略,可以显著提高算法效率。在实际开发中,应该根据具体需求和场景,选择合适的优化方法,从而编写出高效、可靠的代码。
25 6
|
1月前
|
存储 算法 程序员
C 语言递归算法:以简洁代码驾驭复杂逻辑
C语言递归算法简介:通过简洁的代码实现复杂的逻辑处理,递归函数自我调用解决分层问题,高效而优雅。适用于树形结构遍历、数学计算等领域。
|
2月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
65 1
|
2月前
|
存储 缓存 算法
通过优化算法和代码结构来提升易语言程序的执行效率
通过优化算法和代码结构来提升易语言程序的执行效率
|
11天前
|
机器学习/深度学习 算法
基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真
本项目基于改进遗传优化的BP神经网络进行金融序列预测,使用MATLAB2022A实现。通过对比BP神经网络、遗传优化BP神经网络及改进遗传优化BP神经网络,展示了三者的误差和预测曲线差异。核心程序结合遗传算法(GA)与BP神经网络,利用GA优化BP网络的初始权重和阈值,提高预测精度。GA通过选择、交叉、变异操作迭代优化,防止局部收敛,增强模型对金融市场复杂性和不确定性的适应能力。
145 80
|
5天前
|
机器学习/深度学习 算法
基于遗传优化的双BP神经网络金融序列预测算法matlab仿真
本项目基于遗传优化的双BP神经网络实现金融序列预测,使用MATLAB2022A进行仿真。算法通过两个初始学习率不同的BP神经网络(e1, e2)协同工作,结合遗传算法优化,提高预测精度。实验展示了三个算法的误差对比结果,验证了该方法的有效性。
|
4天前
|
算法
基于梯度流的扩散映射卡尔曼滤波算法的信号预处理matlab仿真
本项目基于梯度流的扩散映射卡尔曼滤波算法(GFDMKF),用于信号预处理的MATLAB仿真。通过设置不同噪声大小,测试滤波效果。核心代码实现数据加载、含噪信号生成、扩散映射构建及DMK滤波器应用,并展示含噪与无噪信号及滤波结果的对比图。GFDMKF结合非线性流形学习与经典卡尔曼滤波,提高对非线性高维信号的滤波和跟踪性能。 **主要步骤:** 1. 加载数据并生成含噪测量值。 2. 使用扩散映射捕捉低维流形结构。 3. 应用DMK滤波器进行状态估计。 4. 绘制不同SNR下的轨迹示例。
|
8天前
|
机器学习/深度学习 算法 索引
单目标问题的烟花优化算法求解matlab仿真,对比PSO和GA
本项目使用FW烟花优化算法求解单目标问题,并在MATLAB2022A中实现仿真,对比PSO和GA的性能。核心代码展示了适应度计算、火花生成及位置约束等关键步骤。最终通过收敛曲线对比三种算法的优化效果。烟花优化算法模拟烟花爆炸过程,探索搜索空间,寻找全局最优解,适用于复杂非线性问题。PSO和GA则分别适合快速收敛和大解空间的问题。参数调整和算法特性分析显示了各自的优势与局限。

热门文章

最新文章