python构建指数平滑预测模型_指数平滑预测法python实现

说明:基于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

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是使用Python编写的三次指数平滑预测代码: ```python import numpy as np def triple_exponential_smoothing(series, alpha, beta, gamma, n_preds): """ 三次指数平滑预测函数 参数: series:时间序列数据 alpha:平滑系数 beta:趋势系数 gamma:季节性系数 n_preds:预测步数 返回: 预测结果 """ result = [] season_length = len(series) // 4 initial_seasonal_components = np.array([series[i] - series[i - season_length] for i in range(season_length)]) def smooth(series, alpha): smoothed = [series[0]] for i in range(1, len(series)): smoothed.append(alpha * series[i] + (1 - alpha) * smoothed[i - 1]) return smoothed def triple_smooth(series, alpha, beta, gamma, season_length, n_preds): smooth_result = smooth(series, alpha) trend = smooth(smooth_result, beta) seasonal = [initial_seasonal_components[i % season_length] for i in range(len(series))] forecast = [smooth_result[-1] + trend[-1] + seasonal[-season_length]] for _ in range(n_preds - 1): next_smooth = alpha * (series[-1] - seasonal[-1]) + (1 - alpha) * (smooth_result[-1] + trend[-1]) next_trend = beta * (next_smooth - smooth_result[-1]) + (1 - beta) * trend[-1] next_seasonal = gamma * (series[-1] - next_smooth) + (1 - gamma) * seasonal[-season_length] forecast.append(next_smooth + next_trend + next_seasonal) smooth_result.append(next_smooth) trend.append(next_trend) seasonal.append(next_seasonal) series.append(next_smooth + next_trend + next_seasonal) return forecast result = triple_smooth(series, alpha, beta, gamma, season_length, n_preds) return result # 使用示例 series = [10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32] alpha = 0.5 beta = 0.4 gamma = 0.3 n_preds = 4 predicted_values = triple_exponential_smoothing(series, alpha, beta, gamma, n_preds) print("预测结果:", predicted_values) ``` 以上代码实现了三次指数平滑预测功能。在函数`triple_exponential_smoothing`中,通过指定的平滑系数alpha、趋势系数beta和季节性系数gamma,以及预测步数n_preds,对给定的时间序列数据进行预测。代码中的例子是一个简单的序列,可以通过修改series、alpha、beta、gamma和n_preds来适应不同的场景和需求。最后,打印出预测结果predicted_values。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值