美文网首页
预测算法 ---------- 指数平滑

预测算法 ---------- 指数平滑

作者: 一心一意弄算法 | 来源:发表于2018-01-23 16:25 被阅读3094次

基本思路:最近的过去态势,在某种程度上会持续的未来。指数平滑法是移动平均法中的一种,其特点在于给过去的观测值不一样的权重,即较近期观测值的权数比较远期观测值的权数要大。指数平滑法分为一次指数平滑法、二次指数平滑法和三次指数平滑法等等。

一次指数平滑法:

平滑值的基本公式:St = a * yt + (1-a) * St-1 式中,
St:时间t的平滑值;
yt:时间t的实际值;
St-1:时间t-1的平滑值;

假设以下数据:



如果仅有从y1开始的数据,那么确定初始值的方法有:
  1)取S0等于y1;
  2)待积累若干数据后,取S1等于前面若干数据的简单算术平均数,如:S1=(y1+ y2+y3)/3等等。
这里取前三号的平均值,以*a *= 0.5的一次指数平滑值计算为例,有


构建的预测模型如下,


当时间数列无明显的趋势变化,可用一次指数平滑预测。其预测公式为:
yt+1'=a * yt+(1-a) * yt' 式中
那么,预测 S16 = 0.5 * 28.06 + 29 * 0.5 = 28.53

这里我我们尝试不同的权重值a ,看看平滑曲线呈现什么样的走势。


当 权重值a 越小,曲线的平滑作用越强,对数据的起伏程度越小。

二次指数平滑预测

指数平滑值序列出现一定的滞后偏差的程度随着权系数(平滑系数)的增大而减少;但当时间序列的变动出现直线趋势时,用一次指数平滑法来进行预测仍将存在着明显的滞后偏差。因此,也需要进行修正。

在一次指数平滑的基础上得二次指数平滑 的计算公式为:

St(2) = a * St(1) + (1 - a) * St-1(2)

St(2):t周期的二次指数平滑值;
St(1):t周期的一次指数平滑值;
St-1(2):t-1周期的二次指数平滑值;
a: 加权系数(也称为平滑系数)。

数学模型为


Y t+T : 预测曲线
T: 离间隔t 的数

二次平滑实验 - 平滑函数

def func(data, a):
    se = []
    for i in range(len(data)):
        pre = 0.;
        if not i  == 0:
            pre = a * data[i] + (1-a) * se[i-1]
        else: 
            pre = (1-a) * (data[0] + data[1] + data[2]) / 3 + a * data[i] 
        se.append(round(pre,2))
    return se

三次指数平滑预测

若时间序列的变动呈现出二次曲线趋势,则需要采用三次指数平滑法进行预测。
平滑公式为:
St(3) = a * St(2) + (1 - a) * St-1(3)

image.png
预测公式:

预测结果实验如下


总结:

一次指数平滑预测: 时间数列无明显的趋势变化
二次指数平滑预测:适用于具线性趋势的时间数列
三次指数平滑预测 :时间序列的变动呈现出二次曲线趋势

参考资料:
1.http://wiki.mbalib.com/wiki/%E6%8C%87%E6%95%B0%E5%B9%B3%E6%BB%91%E6%B3%95
2.https://baike.baidu.com/item/%E6%8C%87%E6%95%B0%E5%B9%B3%E6%BB%91%E6%B3%95/8726217?fr=aladdin
3.http://blog.csdn.net/nieson2012/article/details/51980943

jupyter实验过程代码:
链接: https://pan.baidu.com/s/1i6WLH6t 密码: sbnb

相关文章

网友评论

      本文标题:预测算法 ---------- 指数平滑

      本文链接:https://www.haomeiwen.com/subject/udakaxtx.html