精华内容
下载资源
问答
  • 信息分析与预测的实验,Python写的代码,萌新代码,勿喷,仅仅只是方便没时间写实验的朋友,直接用python打开就能运行
  • 行业资料-电子功用-布谷鸟搜索优化二次移动平均法的月度用电量预测方法.pdf
  • b)二次移动平均,计算参数a,b,进行预测; 代码: # -*- coding=utf-8 -*- # name: nan chen # date: 2021/4/8 14:28 import csv import matplotlib.pyplot as plt # 读取数据文件 with open(r"D:\Downloads\train...

    1.实现移动平均

    a)一次移动平均,取多个n值,计算标准差;
    b)二次移动平均,计算参数a,b,进行预测;

    代码

    # -*- coding=utf-8 -*-
    # name: nan chen
    # date: 2021/4/8 14:28
    
    import csv
    import matplotlib.pyplot as plt
    
    # 读取数据文件
    with open(r"D:\Downloads\train.csv", encoding="utf-8") as f:
        reader = csv.reader(f)
        header_row = next(reader)
        counts = []
        ids = []
        for row in reader:
            ids.append(int(row[0]))
            counts.append(int(row[2]))
    plt.plot(ids, counts, color="blue", linewidth=1, linestyle=':', marker=',')
    
    length = len(counts)
    singemovings = []
    pos = 0
    min = 1000000
    # 一次移动平均
    for n in range(2, 201):
        singemoving = []
        mse_sum = 0
        for i in range(n - 1, length):
            sum = 0
            for j in range(0, n):
                sum = sum + (counts[i - j])
            singemoving.append(int(sum / n))
        singemovings.append(singemoving)
        # 求解MSE
        for x, y in zip(range(len(counts) - 1, n - 1, -1), range(len(singemoving) - 2, -1, -1)):
            mse_sum = mse_sum + ((counts[x] - singemoving[y]) ** 2)
        mse = mse_sum / (len(counts) - n)
        sq_mse = mse** 0.5
        if mse < min:
            min = mse
            pos = n
        print("n=%s 标准差=%s mse=%s" % (n, sq_mse, mse))
        # 打印结果
        print("n=%s 一次移动平均法的预测值为:%s" % (n, singemoving[len(singemoving) - 1]))
    # plt.plot(ids[n - 1:], singemoving, color="red", linewidth=1, linestyle=':', marker=',', label='一次移动平均法')
    
    # 二次移动平均
    # 选取mse最小的值计算二次移动平均
    n = pos
    singemoving = singemovings[n - 2]
    twicemoving = []
    for i in range(n - 1, len(singemoving)):
        sum = 0
        for j in range(0, n):
            sum = sum + singemoving[i - j]
        twicemoving.append(int(sum / n))
    
    # 二次移动平均预测值
    a = singemoving[len(singemoving) - 1] * 2 - twicemoving[len(twicemoving) - 1]
    b = (2 / (n - 1)) * (singemoving[len(singemoving) - 1] - twicemoving[len(twicemoving) - 1])
    x = a + b
    print("n=%s 二次移动平均法的预测值为:%s" % (n, x))
    
    

    2.实现指数平滑

    a)一次指数平滑,取多个a值;
    b)二次指数平滑(可选);

    代码:

    # -*- coding=utf-8 -*-
    # name: nan chen
    # date: 2021/4/9 10:56
    
    import csv
    import matplotlib.pyplot as plt
    
    # 读取数据文件
    with open(r"D:\Downloads\train.csv", encoding="utf-8") as f:
        reader = csv.reader(f)
        header_row = next(reader)
        counts = []
        ids = []
        for row in reader:
            ids.append(int(row[0]))
            counts.append(int(row[2]))
    
    # 一次指数平滑法
    s = []
    list_a = [2 / (len(counts) + 1), 0.1, 0.2, 0.3, 0.4, 0.5, 0.8, 0.9]
    # colors = ["brown", "green", "red", "gray", "yellow"]
    # 取初始值为x0
    for a in list_a:
        s1 = [counts[0]]
        for i in range(0, len(counts)):
            tmp = a * counts[i] + (1 - a) * s1[i]
            s1.append(tmp)
        s.append(s1)
    for i in range(0, len(list_a)):
        s_i = s[i]
        print("a=%s 一次指数平滑法的预测值为:%s" % (list_a[i], s_i[len(s_i) - 1]))
        # plt.plot(ids, s_i[1:], label='a = %s' % a, color=colors[i], linewidth=1, linestyle=':', marker=',')
    
    # plt.show()
    
    # 二次指数平滑法
    twice_s = []
    j = 0
    for a in list_a:
        s2 = [counts[0]]
        single_s = s[j]
        for i in range(1, len(counts)):
            tmp = a * single_s[i] + (1 - a) * s2[i - 1]
            s2.append(tmp)
        twice_s.append(s2)
        j = j + 1
    
    for i in range(0, len(list_a)):
        single = s[i]
        twice = twice_s[i]
        at = 2 * single[len(single) - 1] - twice[len(twice) - 1]
        bt = (list_a[i] / 1 - list_a[i]) / (single[len(single) - 1] - twice[len(twice) - 1])
        x = at + bt
        print("a=%s 二次指数平滑法的预测值为%s" % (list_a[i], x))
    
    

    3.数据集的检查

    代码:

    # -*- coding=utf-8 -*-
    # name: nan chen
    # date: 2021/4/10 9:52
    import pandas as pd
    import matplotlib.pyplot as plt
    
    # 检查数据集是否存在空缺
    data = pd.read_csv(r"D:\Downloads\train.csv")
    total = data.isnull().sum().sort_values(ascending=False)
    print(total)
    
    # 绘制散点图观察是否存在偏离值
    var = 'ID'
    data1 = pd.concat([data['Count'], data[var]], axis=1)
    data1.plot.scatter(x=var, y='Count', ylim=(0, 4000), s=1)
    plt.show()
    
    # 统计某一列中各个元素值出现的次数
    c = data['Count'].value_counts()
    print(c)
    
    # 列出数据的偏斜度
    ske = data['Count'].skew()
    print("Count列的偏斜度%s " % ske)
    
    # 计算count和id的相关系数
    cor = data['Count'].corr(data['ID'])
    print("Count列与ID列的相关系数为%s " % cor)
    
    

    结果

    移动平均

    在这里插入图片描述
    在这里插入图片描述

    指数平滑

    在这里插入图片描述

    展开全文
  • 移动平均法是用组最近的实际数据值来预测未来期或几期内公司产品的需求量、公司产能等的种常用方法。移动平均法适用于即期预测。当产品需求既不快速增长也不快速下降,且不存在季节性因素

    ____tz_zs

    注:本博客中关于概念的解释部分均来自 MBA智库百科


    一、移动平均法(Moving average,MA)

    移动平均法又称滑动平均法、滑动平均模型法

    移动平均法是用一组最近的实际数据值来预测未来一期或几期内公司产品的需求量、公司产能等的一种常用方法。移动平均法适用于即期预测。当产品需求既不快速增长也不快速下降,且不存在季节性因素时,移动平均法能有效地消除预测中的随机波动,是非常有用的。移动平均法根据预测时使用的各元素的权重不同,可以分为:简单移动平均和加权移动平均。

    移动平均法是一种简单平滑预测技术,它的基本思想是:根据时间序列资料、逐项推移,依次计算包含一定项数的序时平均值,以反映长期趋势的方法。因此,当时间序列的数值由于受周期变动和随机波动的影响,起伏较大,不易显示出事件的发展趋势时,使用移动平均法可以消除这些因素的影响,显示出事件的发展方向与趋势(即趋势线),然后依趋势线分析预测序列的长期趋势。


    (一)简单移动平均法

    简单移动平均的各元素的权重都相等。简单的移动平均的计算公式如下: 

    Ft=(At-1+At-2+At-3+…+At-n)/n

    式中,

    Ft--对下一期的预测值;

    n--移动平均的时期个数;

    At-1--前期实际值;

    At-2,At-3和At-n分别表示前两期、前三期直至前n期的实际值。

    小Demo

    .

    import matplotlib.pyplot as plt
    
    # 简单移动平均法
    def ma(list2):
        n = len(list2)
        sum = 0
        for i in list2:
            sum += i
        result = sum / n
        return result
    
    def answer1(list1, n):
        # 简单移动平均法
        listMA = []  # 简单移动平均值的列表
        for i in range(n - 1, len(list1)):
            # print(i)
            list2 = (list1[i - (n - 1):i + 1])
            listMA.append(ma(list2))
        print("简单移动平均值的列表:{}".format(listMA))
        # 最后的移动平均值可做为下一个数的预测
        x = listMA[-1]
        print("下一个数的预测:{}".format(x))
        # 画图
        plt.scatter(list(range(len(listMA))), listMA)
        plt.show()
    
    if __name__ == '__main__':
        list1 = [1, 2, 4, 5, 6, 8, 10, 12, 14, 16, 19, 24, 29]  # 13个
        n = 3  # 移动平均期数
    
        answer1(list1, n)  # 简单移动平均法
    

    .

    运行结果:

    .

    简单移动平均值的列表:[2.3333333333333335, 3.6666666666666665, 5.0, 6.333333333333333, 8.0, 10.0, 12.0, 14.0, 16.333333333333332, 19.666666666666668, 24.0]
    下一个数的预测:24.0

    .

    简单移动平均值散点图:



    (二)加权移动平均法

    加权移动平均给固定跨越期限内的每个变量值以不同的权重。其原理是:历史各期产品需求的数据信息对预测未来期内的需求量的作用是不一样的。除了以n为周期的周期性变化外,远离目标期的变量值的影响力相对较低,故应给予较低的权重。 加权移动平均法的计算公式如下:

    Ft=w1At-1+w2At-2+w3At-3+…+wnAt-n

    式中,

    w1--第t-1期实际销售额的权重;

    w2--第t-2期实际销售额的权重;

    wn--第t-n期实际销售额的权重;

    n--预测的时期数;w1+ w2+…+ wn=1

    在运用加权平均法时,权重的选择是一个应该注意的问题。经验法和试算法是选择权重的最简单的方法。一般而言,最近期的数据最能预示未来的情况,因而权重应大些。例如,根据前一个月的利润和生产能力比起根据前几个月能更好的估测下个月的利润和生产能力。但是,如果数据是季节性的,则权重也应是季节性的。

    小Demo

    .

    import matplotlib.pyplot as plt
    
    
    # 加权移动平均法
    def wma(list2, w):
        n = len(list2)
        sum = 0
        for i in n:
            sum += list2[i] * w[i]
        return sum
    
    def answer2(list1, n):
        # 加权移动平均法
        w = [0.2, 0.3, 0.5]  # 各期的权重
        listWMA = []  # 加权移动平均值的列表
        for i in range(n - 1, len(list1)):
            # print(i)
            list2 = (list1[i - (n - 1):i + 1])
            listWMA.append(ma(list2))
        print("加权移动平均值的列表:{}".format(listWMA))
        # 最后的移动平均值可做为下一个数的预测
        x = listWMA[-1]
        print("下一个数的预测:{}".format(x))
        # 画图
        plt.scatter(list(range(len(listWMA))), listWMA)
        plt.show()
    
    if __name__ == '__main__':
        list1 = [1, 2, 4, 5, 6, 8, 10, 12, 14, 16, 19, 24, 29]  # 13个
        n = 3  # 移动平均期数
    
        answer2(list1, n)  # 加权移动平均法

    运行结果:

    .

    加权移动平均值的列表:[2.3333333333333335, 3.6666666666666665, 5.0, 6.333333333333333, 8.0, 10.0, 12.0, 14.0, 16.333333333333332, 19.666666666666668, 24.0]
    下一个数的预测:24.0

    .

    加权移动平均值散点图:

    .


    (三)移动平均法的优缺点

    使用移动平均法进行预测能平滑掉需求的突然波动对预测结果的影响。但移动平均法运用时也存在着如下问题:

    1、 加大移动平均法的期数(即加大n值)会使平滑波动效果更好,但会使预测值对数据实际变动更不敏感;

    2、 移动平均值并不能总是很好地反映出趋势。由于是平均值,预测值总是停留在过去的水平上而无法预计会导致将来更高或更低的波动;

    3、 移动平均法要由大量的过去数据的记录。


    二、指数平滑法(Exponential Smoothing,ES)

    指数平滑法是布朗(Robert G..Brown)所提出,布朗(Robert G..Brown)认为时间序列的态势具有稳定性或规则性,所以时间序列可被合理地顺势推延;他认为最近的过去态势,在某种程度上会持续到最近的未来,所以将较大的权数放在最近的资料。

    指数平滑法是生产预测中常用的一种方法。也用于中短期经济发展趋势预测,所有预测方法中,指数平滑是用得最多的一种。简单的全期平均法是对时间数列的过去数据一个不漏地全部加以同等利用;移动平均法则不考虑较远期的数据,并在加权移动平均法中给予近期资料更大的权重;而指数平滑法则兼容了全期平均和移动平均所长,不舍弃过去的数据,但是仅给予逐渐减弱的影响程度,即随着数据的远离,赋予逐渐收敛为零的权数。

    也就是说指数平滑法是在移动平均法基础上发展起来的一种时间序列分析预测法,它是通过计算指数平滑值,配合一定的时间序列预测模型对现象的未来进行预测。其原理是任一期的指数平滑值都是本期实际观察值与前一期指数平滑值的加权平均。


    (一)指数平滑法的基本公式

    S_t=a\cdot y_t+(1-a)S_{t-1} 

    式中,

    St--时间t的平滑值;

    yt--时间t的实际值;

    St − 1--时间t-1的平滑值;

    a--平滑常数,其取值范围为[0,1];

    由该公式可知:

    1.St是yt和 St − 1的加权算数平均数,随着a取值的大小变化,决定yt和 St − 1对St的影响程度,当a取1时,St = yt;当a取0时,St = St − 1。

    2.St具有逐期追溯性质,可探源至St − t + 1为止,包括全部数据。其过程中,平滑常数以指数形式递减,故称之为指数平滑法。指数平滑常数取值至关重要。平滑常数决定了平滑水平以及对预测值与实际结果之间差异的响应速度。平滑常数a越接近于1,远期实际值对本期平滑值影响程度的下降越迅速;平滑常数a越接近于 0,远期实际值对本期平滑值影响程度的下降越缓慢。由此,当时间数列相对平稳时,可取较大的a;当时间数列波动较大时,应取较小的a,以不忽略远期实际值的影响。生产预测中,平滑常数的值取决于产品本身和管理者对良好响应率内涵的理解。

    3.尽管St包含有全期数据的影响,但实际计算时,仅需要两个数值,即yt和 St − 1,再加上一个常数a,这就使指数滑动平均具逐期递推性质,从而给预测带来了极大的方便。

    4.根据公式S_1=a\cdot y_1+(1-a)S_0,当欲用指数平滑法时才开始收集数据,则不存在y0。无从产生S0,自然无法据指数平滑公式求出S1,指数平滑法定义S1为初始值。初始值的确定也是指数平滑过程的一个重要条件。

    如果能够找到y1以前的历史资料,那么,初始值S1的确定是不成问题的。数据较少时可用全期平均、移动平均法;数据较多时,可用最小二乘法。但不能使用指数平滑法本身确定初始值,因为数据必会枯竭。

    如果仅有从y1开始的数据,那么确定初始值的方法有:

    1)取S1等于y1;

    2)待积累若干数据后,取S1等于前面若干数据的简单算术平均数,如:S1=(y1+ y2+y3)/3等等。


    (二)指数平滑的预测公式

    据平滑次数不同,指数平滑法分为:一次指数平滑法、二次指数平滑法和三次指数平滑法等。

    (1) 一次指数平滑预测

    当时间数列无明显的趋势变化,可用一次指数平滑预测。其预测公式为:

    yt+1'=ayt+(1-a)yt' 

    式中,

    yt+1'--t+1期的预测值,即本期(t期)的平滑值St ;

    yt--t期的实际值;

    yt'--t期的预测值,即上期的平滑值St-1 。

    该公式又可以写作:yt+1'=yt'+a(yt- yt')。可见,下期预测值又是本期预测值与以a为折扣的本期实际值与预测值误差之和。

    (2) 二次指数平滑预测

    二次指数平滑是对一次指数平滑的再平滑。它适用于具线性趋势的时间数列。其预测公式为:

    yt+m=(2+am/(1-a))yt'-(1+am/(1-a))yt=(2yt'-yt)+m(yt'-yt) a/(1-a)

    式中,

    yt= ayt-1'+(1-a)yt-1

    显然,二次指数平滑是一直线方程,其截距为:(2yt'-yt),斜率为:(yt'-yt) a/(1-a),自变量为预测天数。

    (3) 三次指数平滑预测

    三次指数平滑预测是二次平滑基础上的再平滑。其预测公式是:

    yt+m=(3yt'-3yt+yt)+[(6-5a)yt'-(10-8a)yt+(4-3a)yt]*am/2(1-a)2+ (yt'-2yt+yt')*a2m2/2(1-a)2

    式中,

    yt=ayt-1+(1-a)yt-1

    它们的基本思想都是:预测值是以前观测值的加权和,且对不同的数据给予不同的权,新数据给较大的权,旧数据给较小的权。

    (三)指数平滑法的趋势调整

    一段时间内收集到的数据所呈现的上升或下降趋势将导致指数预测滞后于实际需求。通过趋势调整,添加趋势修正值,可以在一定程度上改进指数平滑预测结果。

    调整后的指数平滑法的公式为:

    包含趋势预测(YITt)=新预测(Yt)+趋势校正(Tt)

    进行趋势调整的指数平滑预测有三个步骤:

    1、 利用前面介绍的方法计算第t期的简单指数平滑预测(Yt);

    2、 计算趋势。其公式为: Tt=(1-b)Tt-1+b(Yt-Yt-1)其中,

    Tt=第t期经过平滑的趋势;

    Tt-1=第t期上期经过平滑的趋势;

    b=选择的趋势平滑系数;

    Yt=对第t期简单指数平滑预测;

    Yt-1=对第t期上期简单指数平滑预测。

    3、计算趋势调整后的指数平滑预测值(YITt)。计算公式为:YITt=Yt+Tt。


    .

    import matplotlib.pyplot as plt
    
    
    # 一次指数平滑预测
    def es1(list3, t, a):
        if t == 0:
            return list3[0]  # 初始的平滑值取实际值
    
        return a * list3[t - 1] + (1 - a) * es1(list3, t - 1, a)  # 递归调用 t-1 → 12
    
    
    # 二次指数平滑预测
    def es2(list3, t, a):
        if t == 0:
            return list3[0]
    
        return (a * es2(list3, t - 1, a) + (1 - a) * list3[t - 1])
    
    
    def answer3(list2):
        # 指数平滑法
        a = 0.8  # 平滑常数
        listES = []  # 指数平滑值的列表
        for i in range(len(list2)):
            if i == 0:
                listES.append(list2[i])
                continue
            s = a * list2[i] + (1 - a) * listES[-1]
            listES.append(s)
        print("指数平滑值的列表:{}".format(listES))
    
        # 画图
        plt.scatter(list(range(len(listES))), listES)
        plt.show()
    
        # 一次指数平滑预测
        t = len(list2)  # 预测的时期 13
        x = es1(list2, t, a)
        print("下一个数的一次指数平滑预测:{}".format(x))
    
        # 二次指数平滑预测
        m = 3  # 预测的值为之后的第m个
        yt = es2(list2, t - 1, a)
        ytm = listES[t - 2]
        esm = ((2 * ytm - yt) + m * (ytm - yt) * a / (1 - a))
        print("之后的第{}个数的二次指数平滑预测:{}".format(m, esm))
    
    
    if __name__ == '__main__':
        list1 = [1, 2, 4, 5, 6, 8, 10, 12, 14, 16, 19, 24, 29]  # 13个
        n = 3  # 移动平均期数
    
        answer3(list1)  # 指数平滑法
    
    
    .

    运行结果:

    .

    指数平滑值的列表:[1, 1.8, 3.56, 4.712, 5.742400000000001, 7.5484800000000005, 9.509696, 11.5019392, 13.50038784, 15.500077568, 18.300015513600002, 22.860003102720004, 27.772000620544002]
    下一个数的一次指数平滑预测:27.772000620544002
    之后的第3个数的二次指数平滑预测:137.5839514214401

    .

    指数平滑值的散点图:


    .

    展开全文
  • 时间序列模型 ():移动平均法

    万次阅读 多人点赞 2019-04-21 22:18:52
    时间序列模型 ():移动平均法 时间序列模型 (三):指数平滑法 时间序列模型 (四):差分指数平滑法、 自适应滤波法v 时间序列模型 (五): 趋势外推预测方法 时间序列模型 (六):平稳时间序列模型 :...

    时间序列的其它博文系列:

    时间序列模型 (一):模型概述

    时间序列模型 (二):移动平均法

    时间序列模型 (三):指数平滑法

    时间序列模型 (四):差分指数平滑法、 自适应滤波法v

    时间序列模型 (五): 趋势外推预测方法

    时间序列模型 (六):平稳时间序列模型 :自回归AR 、移动平均 MA 、ARMA 模型

    时间序列模型 (七): 时间序列建模的基本步骤



    目录

    移动平均法

    简单移动平均法

    加权移动平均法

    趋势移动平均法


    移动平均法 可以作为一种数据平滑的方式 ,以每天的气温数据为例,今天的天气可能与过去的十天的气温有线性关系;或者有的人对食物有一种节俭的美德,他们做的饭菜能看出有些是上一顿的,当然也有一部分是今天的做的,再假设隔两顿的都被倒掉了,并且每天都是这样的,那么这碗饭菜可能就是一部分上一顿的再加上一部分今天现做的,这就是一个一阶的移动平均。

    移动平均法

    移动平均法是根据时间序列资料逐渐推移,依次计算包含一定项数的时序平均数, 以反映长期趋势的方法。当时间序列的数值由于受周期变动和不规则变动的影响,起伏 较大,不易显示出发展趋势时,可用移动平均法,消除这些因素的影响,分析、预测序列的长期趋势。  移动平均法有简单移动平均法,加权移动平均法,趋势移动平均法等。 

    简单移动平均法

    近N 期序列值的平均值作为未来各期的预测结果。一般 N 的取值范围: 5≤N≤ 200。当历史序列的基本趋势变化不大且序列中随机变动成分较多时,N 的 取值应较大一些。否则 N 的取值应小一些。在有确定的季节变动周期的资料中,移动平均的项数应取周期长度。选择佳 N 值的一个有效方法是,比较若干模型的预测误 差。预测标准误差小者为好。 

    简单移动平均法只适合做近期预测,而且是预测目标的发展趋势变化不大的情况。 如果目标的发展趋势存在其它的变化,采用简单移动平均法就会产生较大的预测偏差和滞后。 

    例 1  某企业 1 月~11 月份的销售收入时间序列如表 1 示。试用一次简单滑动平 均法预测第 12 月份的销售收入。 

    计算的 Matlab 程序如下: 

    clc,clear 
    y=[533.8  574.6  606.9  649.8   705.1  772.0  816.4  892.7  963.9  1015.1  1102.7]; m=length(y);   
     n=[4,5];   %n 为移动平均的项数 
    for i=1:length(n)    
     %由于 n 的取值不同,yhat 的长度不一致,下面使用了细胞数组    
        for j=1:m-n(i)+1         
            yhat{i}(j)=sum(y(j:j+n(i)-1))/n(i);     
        end    
        y12(i)=yhat{i}(end);     
        s(i)=sqrt(mean((y(n(i)+1:m)-yhat{i}(1:end-1)).^2)); 
    end 
    y12,s 
     

     

    加权移动平均法

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

    例 2  我国 1979~1988 年原煤产量如表 2 所示,试用加权移动平均法预测 1989 年 的产量

    计算的 MATLAB 程序如下: 

    y=[6.35 6.20    6.22    6.66    7.15    7.89    8.72    8.94    9.28    9.8]; 
    w=[1/6;2/6;3/6]; 
    m=length(y);n=3; 
    for i=1:m-n+1     
        yhat(i)=y(i:i+n-1)*w; 
    end 
    yhat 
    err=abs(y(n+1:m)-yhat(1:end-1))./y(n+1:m) 
    T_err=1-sum(yhat(1:end-1))/sum(y(n+1:m)) 
    y1989=yhat(end)/(1-T_err)

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

    趋势移动平均法

    简单移动平均法和加权移动平均法,在时间序列没有明显的趋势变动时,能够准确 反映实际情况。但当时间序列出现直线增加或减少的变动趋势时,用简单移动平均法和 加权移动平均法来预测就会出现滞后偏差。因此,需要进行修正,修正的方法是作二次 移动平均,利用移动平均滞后偏差的规律来建立直线趋势的预测模型。这就是趋势移动平均法。  一次移动的平均数为 

    例 3  我国 1965~1985 年的发电总量如表 3 所示,试预测 1986 年和 1987 年的发 电总量。 

    解  由散点图 1 可以看出,发电总量基本呈直线上升趋势,可用趋势移动平均法 来预测。 

    计算的 MATLAB 程序如下: 

    clc,clear 
    load y.txt   %把原始数据保存在纯文本文件 y.txt 中 
    m1=length(y);    
    n=6;   %n 为移动平均的项数 
    for i=1:m1-n+1     
        yhat1(i)=sum(y(i:i+n-1))/n; 
    end 
    yhat1 
    m2=length(yhat1); 
    for i=1:m2-n+1    
        yhat2(i)=sum(yhat1(i:i+n-1))/n; 
    end 
    yhat2   
    plot(1:21,y,'*') 
    a21=2*yhat1(end)-yhat2(end) 
    b21=2*(yhat1(end)-yhat2(end))/(n-1) 
    y1986=a21+b21 
    y1987=a21+2*b21 

    趋势移动平均法对于同时存在直线趋势与周期波动的序列,是一种既能反映趋势变 化,又可以有效地分离出来周期变动的方法。 


    时间序列的其它博文系列:

    时间序列模型 (一):模型概述

    时间序列模型 (二):移动平均法

    时间序列模型 (三):指数平滑法

    时间序列模型 (四):差分指数平滑法、 自适应滤波法v

    时间序列模型 (五): 趋势外推预测方法

    时间序列模型 (六):平稳时间序列模型 :自回归AR 、移动平均 MA 、ARMA 模型

    时间序列模型 (七): 时间序列建模的基本步骤

    展开全文
  • 移动平均法 and 指数平滑法

    千次阅读 2019-09-25 02:21:36
    移动平均法(Moving average , MA) 移动平均法又称滑动平均法、滑动平均模型。 用处:组最近的实际数据值->[预测]->未来期或几期内公司产品需求量/公司产能。 分类:简单移动平均 加权移动平均...

    感谢:https://blog.csdn.net/tz_zs/article/details/78341306

    一、移动平均法(Moving average , MA)

    移动平均法又称滑动平均法、滑动平均模型。

    用处:一组最近的实际数据值->[预测]->未来一期或几期内公司产品需求量/公司产能。

    分类:简单移动平均 和 加权移动平均

    思想:根据时间序列资料,逐项推移, 依次计算包含一定项数的序时平均值, 以反映长期趋势。

    好处:时间序列数值受周期变动和随机波动影响起伏较大, 不容易显示事件发展趋势, MA可以消除

    这些因素影响。

    (一)简单移动平均法

    各个元素的权重相等。公式如下:

    Ft=(At-1 + At-2 + At-3 + ... + At-n) / n

    [简单的滑动窗口]

    (二)加权移动平均法

    加权移动平均给固定跨越期限内的每个变量值以不同的权重。其原理是:历史各期产品需求的数据信息对预测未来期内的需求量的作用不一样。

    Ft=w1At-1 + w2At-2 + w3At-3 + ... + wnAt-n

     

    二、指数平滑法(Exponential Smoothing, ES)

    指数平滑法认为时间序列的态势具有稳定性或规则性, 所以时间序列可被合理地顺势推延; 他认为最近的过去态势, 在某种程度上会持续到最近的未来, 所以将较大的权数放在最近的资料。

    指数平滑法是生产预测中常用的一种方法, 用于中短期经济发展趋势预测, 所有预测方法中指数平滑用得最多。

    简单的全期平均法:全部平均。

    移动平均法:不考虑较远期数据,并在加权移动平均法中给予近期资料更大权重。

    指数平滑法:兼容全期平均和移动平均所长, 不舍弃过去的数据,仅给予逐渐减弱的影响程度, 即随着数据的远离, 赋予逐渐收敛为零的权数。

    指数平滑法在移动平均法基础上发展起来的一种时间序列分析预测法, 通过计算指数平滑值, 配合一定的时间序列预测模型对现象的未来进行预测。任一期的指数平滑值都是本期实际观察值与前一期指数平滑的加权平均。

    (一)指数平滑法的公式

    S_t = a \c dot y_t + (1-a)S_{t-1}

    S_t:时间t的平滑值

    y_t: 时间t的实际值

    S_t-1: 时间t-1的平滑值

    a--平滑常数, 取值范围[0, 1]

    (二)指数平滑的预测公式

    根据平滑次数不同, 指数平滑法分为: 一次指数平滑法、二次指数平滑法和三次指数平滑法等

    (1)一次指数平滑

    y_t+1(predict) = a* y_t(actual) + (1-a) * y_t(predict)

    (2)二次指数平滑预测

    yt+m=(2+am/(1-a))yt'-(1+am/(1-a))yt=(2yt'-yt)+m(yt'-yt) a/(1-a)

    其中yt= ayt-1'+(1-a)yt-1, 就是一次指数平滑的再平滑。

    (3)三次指数平滑预测

    yt+m=(3yt'-3yt+yt)+[(6-5a)yt'-(10-8a)yt+(4-3a)yt]*am/2(1-a)2+ (yt'-2yt+yt')*a2m2/2(1-a)2

     

    转载于:https://www.cnblogs.com/jianfeifeng/p/11081974.html

    展开全文
  • 移动平均法详解

    千次阅读 2018-03-10 20:05:00
    什么是移动平均法? ... 移动平均法是用组最近的实际数据值来预测未来期或几期内...移动平均法根据预测时使用的各元素的权重不同,可以分为:简单移动平均加权移动平均。  移动平均法种简单平滑...
  • 时间序列模型(1)--移动平均法

    千次阅读 2021-03-02 11:40:40
    文章目录前言、确定性时间序列分析、使用步骤1.引入库2.读入数据总结 前言 时间序列是按时间顺序排列的、随时间变化且相互关联的数据序列。分析时间序列的方法构成数据分析的个重要领域,即时间序列分析。 1...
  • 个别计价法、先进先出法、加权平均法移动加权平均法解读 摘要:、存货的概念 存货是指企业在日常活动中持有以备出售的产成品或商品;处在生产过程中的在产品;在生产过程或提供劳务过程中耗用的材料、物资等。 ...
  • 平均法 移动平均法 指数平均法
  • [Spark中移动平均法的实现]

    万次阅读 2018-06-24 21:28:19
    、 基本概念 移动平均法种简单平滑预测技术,它的基本思想是:根据时间序列资料、逐项推移,依次计算包含一定项数的序时平均值,以反映短期趋势的方法。因此,当时间序列的数值由于受周期变动随机波动的...
  • 指数加权移动平均法(EWMA)

    万次阅读 2019-03-28 11:44:52
    指数加权移动平均法(EWMA) https://www.cnblogs.com/jiangxinyang/p/9705198.html ** 本文内容来自于吴恩达深度学习公开课 1、概述  加权移动平均法,是对观察值分别给予不同的权数,按不同权数求得移动平均...
  • 移动平均算法的实现方法

    千次阅读 2019-04-12 20:55:43
    要解决移动平均问题,提供两个简单Java对象解决方案: 解决方案1:使用java.util.Queue package simpleMoving; /** * SimpleMovingAverage * 使用队列实现POJO移动平均 */ import java.util.LinkedList; ...
  • 背景 前几天在看那本比较经典的冈萨雷斯的《数字图像处理》,正看到...),只找到了matlabC++的实现,所以根据代码又翻书理解了一下,简单写一下移动平均法,做个总结,后面有python的实现。 概念介绍 移动平均...
  • 之前介绍了时间序列的基本概念性质,现在就正式介绍一些处理时间序列的模型方法,第个是移动平均法移动平均法很简单,就是用最近的数据预测未来短时间内的数据。有简单移动平均法,真的很简单,就是用最近的...
  • 1. 简单序时平均数法 也称算术平均法。即把若干历史时期的统计数值作为观察值,求出算术平均数作为下期预测值。这种方法基于下列假设:“过去这样,今后也将这样”,把近期远期数据等同化平均化,因此只能适用于...
  • Excel-移动平均分析及预测分析

    万次阅读 2018-06-08 11:34:21
    、背景说明移动平均法是用组最近的实际数据值...移动平均法根据预测时使用的各元素的权重不同,可以分为:简单移动平均加权移动平均参考百度百科:移动平均法移动平均法种简单平滑预测技术,它的基本思想...
  • 加权平均法和移动加权法的例题

    万次阅读 2015-09-25 16:39:11
     概念:加权平均法亦称全月一次加权平均法,是指以当月全部进货数量加上月初存货数量作为权数,去除当月全部进货成本加上月初存货成本,计算出存货的加权平均单位成本,以此为基础计算当月发出存货的成本期末存货...
  • 移动平均算法C#.net

    2009-12-30 21:56:33
    包括次移动平均 二次移动平均 次指数移动平均 二次指数移动平均算法
  • 移动平均法 采用逐项递进的办法, 将原时间序列中若干项数据进行平均,通过平均来消除或减弱时间序列中不规则变动其他变动 ,从而呈现出现象发展变化的长期趋势。 若平均的数据项数为 k ,就...
  •  移动平均法是用组最近的实际数据值来预测未来期或几期内公司产品的需求量、公司产能等的种常用方法。移动平均法适用于即期预测。当产品需求既不快速增长也不快速下降,且不存在季节性因素时,移动平均法能...
  • python实现移动平均和指数平滑

    千次阅读 2021-04-18 15:19:41
    b) 二次移动平均,计算参数a,b,进行预测; 实现指数平滑。 a) 次指数平滑,取多个a值; b) 二次指数平滑(可选); 二、实验平台 Python 3.7 三、实验内容与结果: 3.1题目分析 实现移动平均分析: 次移动
  • matlab实现移动平均

    千次阅读 2021-05-02 23:08:06
    matlab实现移动平均具体代码如下,其中X为序号Y为数据,在此基础上实现了次与二次移动平均 具体代码如下,其中X为序号Y为数据,在此基础上实现了次与二次移动平均 clc,clear x=[1 2 3 4 5 6 7 8 9 10]; y=[20 13...
  • 近期学到《统计学》(贾俊平、何晓群、金勇进编著)的第13章——时间序列分析预测,里面的“移动平均趋势剔除”看得我一头雾水,尤其是第步的计算移动平均值,编者在书中一笔带过,不明所以的读者也只好脸懵...
  • 移动加权平均&全月平均

    千次阅读 2015-08-03 09:55:31
    加权平均法.亦称全月一次.是指以本月全部进货数量加上月初存货数量作为权数,去除本月全部进货成本加上本月初存货成本,计算出存货的加权平均单位成本,此为基础计算本月存货的成本期末存货的成本的种方法. 计算...
  • 加权平均和移动平均

    千次阅读 2015-10-22 09:58:00
    移动平均法是用组最近的实际数据值来预测未来期或几期内的预测数种常用方法。移动平均法适用于即期预测。当产品需求既不快速增长也不快速下降,且不存在季节性因素时,移动平均法能有效地消除预测中的随机波动...
  • java二次指数平滑预测未来的值

    千次阅读 2019-01-10 18:07:36
    指数平滑法是种特殊的加权平均法,加权的特点是对离预测值较近的...次指数平滑的局限性:像一次移动平均法一样,次指数平滑法 只适用于 水平型历史数据 的 预测,而不适用 于 斜坡型线性 趋势 历史数据的...
  • 指数平滑法最早是由C.C Holt于1958年提出的,后来经统计学家深入研究...指数平滑法是种特殊的加权平均法,对本期观察值本期预测值赋予不同的权重,求得下期预测值的方法。 一次指数平滑法公式如下:  ———
  • 实验5-EXCEL时间序列分析-移动平均

    千次阅读 2019-01-18 02:56:00
    EXCEL时间序列分析-移动平均 另种预测方法是根据时间发展进行预测,简单来说就是时间序列预测。... 时间序列预测主要包括移动平均法、指数平滑法、趋势外推法、季节变动法等预测方法,其中移动平均法、指数平滑法...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 49,793
精华内容 19,917
关键字:

一次移动平均法和二次移动平均法