指数平滑代码
指数平滑介绍
指数平滑是一种常用的时间序列预测方法。它通过对历史数据进行平滑处理,来预测未来的趋势。指数平滑方法主要适用于具有较弱季节性和趋势的时间序列数据。
指数平滑可以分为一次指数平滑、二次指数平滑和三次指数平滑。每种方法都有不同的平滑因子,可以根据实际情况选择最合适的平滑因子来进行预测。
一般情况下,指数平滑的步骤如下:
- 选择适合的指数平滑方法:根据时间序列数据的特点,选择一次、二次或三次指数平滑方法。
- 初始化平滑参数:为指数平滑方法选择适当的平滑因子(如 α、β、γ)。
- 进行平滑:使用选定的指数平滑方法和初始化的平滑参数,对历史数据进行平滑处理,得到平滑后的值。
- 进行预测:根据平滑后的值和趋势,预测未来的时间序列数据。
- 不断更新参数:随着时间的推移,不断更新平滑参数,以保持预测的准确性。
需要注意的是,指数平滑方法适用于较为平稳的时间序列数据,对于具有强季节性、趋势复杂或异常值较多的时间序列数据,可能需要使用其他更复杂的预测方法。
总体而言,指数平滑是一种简单但有效的时间序列预测方法,特别适用于对未来短期趋势的预测。在实际应用中,预测的准确性也会受到数据质量和选择的平滑因子等因素的影响,因此需要结合实际情况进行调整和优化。
原理介绍参考:指数平滑原理介绍
指数平滑代码
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from statsmodels.tsa.api import SimpleExpSmoothing
from statsmodels.tsa.api import Holt
from statsmodels.tsa.api import ExponentialSmoothing
from time import timedf = pd.read_excel("data/Energy_consumption2.xlsx")
data = df[["原始序列"]]
date_index = pd.date_range("20230718", periods=72, freq="H")
data["ds"] = date_index
data = data.rename(columns={"原始序列": "y"})# 原序列可视化
data.plot(x="ds", y="y", style="b-o", figsize=(14, 7))
plt.grid()
plt.title("Time series")
# plt.savefig("./output/energy_data2", dpi=300)
plt.show()np.random.seed(1234)
data = data.set_index("ds")
train_data = data["y"][:-16]
test_data = data["y"][-16:]
start_time = time()
# 建模拟合
# 一次指数平滑
model1 = SimpleExpSmoothing(train_data)
model1_fit = model1.fit(smoothing_level=0.2)
predict_data1 = model1_fit.forecast(16)
fitted_data1 = model1_fit.fittedvalues
# 二次指数平滑
model2 = Holt(train_data)
model2_fit = model2.fit(smoothing_level=0.2, smoothing_slope=0.1)
predict_data2 = model2_fit.forecast(16)
fitted_data2 = model2_fit.fittedvalues
# 三次指数平滑
model3 = ExponentialSmoothing(train_data, trend="add", seasonal="add", seasonal_periods=24)
model3_fit = model3.fit(smoothing_level=0.2, smoothing_slope=0.1, smoothing_seasonal=0.3)
predict_data3 = model3_fit.forecast(16)
fitted_data3 = model3_fit.fittedvalues
end_time = time()
execution_time = end_time - start_time
print("一共耗时:", execution_time)def show_predict_result(train_data, test_data, fitted_data, predict_data, tilte):# 可视化预测结果pd.DataFrame({"data_train": train_data,"fitted_data": pd.Series(fitted_data, index=train_data.index),"data_test": test_data,"predict_data": pd.Series(predict_data, index=test_data.index)}).plot(legend=True, figsize=(10, 6))# plt.fill_between(test_data.index, pd.Series(interval_data[:,0]), pd.Series(interval_data[:,1]), color='b', alpha=.2,# label="98%Confidence interval")plt.legend()plt.tick_params()plt.xticks()plt.yticks()plt.title(tilte)# plt.savefig("./output/arima_energy2.png")plt.show()show_predict_result(train_data, test_data, fitted_data1, predict_data1, tilte="SimpleExpSmoothing")
show_predict_result(train_data, test_data, fitted_data2, predict_data2, tilte="Holt")
show_predict_result(train_data, test_data, fitted_data3, predict_data3, tilte="ExponentialSmoothing")
导包方式
# from statsmodels.tsa.api import SimpleExpSmoothing
# from statsmodels.tsa.api import Holt
# from statsmodels.tsa.api import ExponentialSmoothingfrom statsmodels.tsa.holtwinters import SimpleExpSmoothing
from statsmodels.tsa.holtwinters import Holt
from statsmodels.tsa.holtwinters import ExponentialSmoothing
两种导入方式的区别主要在于导入的路径和代码的简洁程度,从功能上说它们是等效的,都可以用于实现三次指数平滑方法。以下两种方式是等价的:
拟合参数介绍
在 statsmodels 中,一次指数平滑、二次指数平滑和三次指数平滑的 fit 方法中的参数有所不同。这些参数用于拟合指数平滑模型,并根据给定的数据来估计平滑因子和其他参数。
一次指数平滑 - SimpleExpSmoothing:
- smoothing_level: 平滑因子(alpha),用于平滑观测值。取值范围为 0 到 1
之间,较大的值表示更快适应新数据,较小的值表示更稳定。 - optimized: 是否在拟合过程中优化平滑因子的值。默认为 True,表示使用最小二乘法估计最优平滑因子。
二次指数平滑 - Holt:
-
smoothing_level: 平滑因子(alpha),用于平滑观测值。取值范围为 0 到 1
之间,较大的值表示更快适应新数据,较小的值表示更稳定。 -
smoothing_slope: 平滑因子(beta),用于平滑趋势。取值范围为 0 到 1
之间,较大的值表示更快适应新数据,较小的值表示更稳定。 -
optimized: 是否在拟合过程中优化平滑因子的值。默认为 True,表示使用最小二乘法估计最优平滑因子。
三次指数平滑 - ExponentialSmoothing:
-
smoothing_level: 平滑因子(alpha),用于平滑观测值。取值范围为 0 到 1
之间,较大的值表示更快适应新数据,较小的值表示更稳定。 -
smoothing_slope: 平滑因子(beta),用于平滑趋势。取值范围为 0 到 1
之间,较大的值表示更快适应新数据,较小的值表示更稳定。 -
smoothing_seasonal: 平滑因子(gamma),用于平滑季节性。取值范围为 0 到 1
之间,较大的值表示更快适应新数据,较小的值表示更稳定。 -
optimized: 是否在拟合过程中优化平滑因子的值。默认为 True,表示使用最小二乘法估计最优平滑因子。
在这些方法中,fit 方法用于拟合指数平滑模型,并返回一个拟合后的模型对象。在拟合过程中,可以通过设置不同的平滑因子和其他参数来控制模型的拟合效果。默认情况下,fit 方法会使用最小二乘法估计最优平滑因子,但也可以通过设置 optimized=False 来固定平滑因子的值。
值得注意的是,在使用 fit 方法拟合模型之后,可以通过拟合后的模型对象获取平滑因子和其他参数的估计值,从而进行预测和分析。例如,在三次指数平滑中,可以使用 fitted_model.params 获取拟合后的参数估计值。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
