说明:基于python的指数平滑预测平滑系数确定、计算、误差分析、结果输出与可视化。
指数平滑法
指数平滑法是生产预测中常用的一种方法。也用于中短期经济发展趋势预测,所有预测方法中,指数平滑是用得最多的一种。简单的全期平均法是对时间数列的过去数据一个不漏地全部加以同等利用;移动平均法则不考虑较远期的数据,并在加权移动平均法中给予近期资料更大的权重;而指数平滑法则兼容了全期平均和移动平均所长,不舍弃过去的数据,但是仅给予逐渐减弱的影响程度,即随着数据的远离,赋予逐渐收敛为零的权数。
也就是说指数平滑法是在移动平均法基础上发展起来的一种时间序列分析预测法,它是通过计算指数平滑值,配合一定的时间序列预测模型对现象的未来进行预测。其原理是任一期的指数平滑值都是本期实际观察值与前一期指数平滑值的加权平均。
代码实现
一次指数平滑
def exponential_smoothing_1(alpha, data):
'''
一次指数平滑
:param alpha: 平滑系数
:param data: 数据序列:list
:return: 返回一次指数平滑值:list
'''
s_single=[]
s_single.append(data[0])
for i in range(1, len(data)):
s_single.append(alpha * data[i] + (1 - alpha) * s_single[i-1])
return s_single
二次指数平滑
def exponential_smoothing_2(alpha, data):
'''
二次指数平滑
:param alpha: 平滑系数
:param data: 数据序列:list
:return: 返回二次指数平滑值,参数a, b:list
'''
s_single = exponential_smoothing_1(alpha, data)
s_double = exponential_smoothing_1(alpha, s_single)
a_double = [0 for i in range(len(data))]
b_double = [0 for i in range(len(data))]
F_double = [0 for i in range(len(data))]
for i in range(len(data)):
a = 2 * s_single[i] - s_double[i]
b = (alpha / (1 - alpha)) * (s_single[i] - s_double[i])
F = a + b
a_double[i] = a
b_double[i] = b
F_double[i] = F
return a_double,b_double,F_double
三次指数平滑
def exponential_smoothing_3(alpha, data):
'''
三次指数平滑
:param alpha: 平滑系数
:param data: 数据序列:list
:return: 返回二次指数平滑值,参数a, b, c,预测值Ft+1:list
'''
s_single = exponential_smoothing_1(alpha, data)
s_double = exponential_smoothing_1(alpha, s_single)
s_triple = ex