时序分析 36 - 时序预测 从ARIMA到SARIMAX(五)模型预测

Step 6. 模型预测(样本内)

下面比较ARIMA和SARIMA模型的预测效果,可以看出SARIMA模型要更好一些。
我们将使用训练集最后90天的数据作为验证数据。
我们将使用 MAE (Mean Absolute Error) 和 MAPE (Mean Absolute Percentage Error)作为评价指标。

我们实现了三个模型:arima_results,sarima_01_results,sarima_02_results。这三个模型的残差都没有发现相关性,ARIMA模型拒绝了Jarque-Bera原假设,说明残差并不是正态分布。

# Create ARIMA mean forecast
arima_pred = arima_results.get_prediction(start=-90, dynamic=True)
arima_mean = arima_pred.predicted_mean

# Create SARIMA mean forecast
sarima_01_pred = sarima_01_results.get_prediction(start=-90, dynamic=True)
sarima_01_mean = sarima_01_pred.predicted_mean

# Create SARIMA mean forecast
sarima_02_pred = sarima_02_results.get_prediction(start=-90, dynamic=True)
sarima_02_mean = sarima_02_pred.predicted_mean
from sklearn.metrics import mean_absolute_error, mean_absolute_percentage_error

metrics_arima = [round(mean_absolute_error(df_store_2_item_28_time[-90:],arima_mean),3), 
                 round(mean_absolute_percentage_error(df_store_2_item_28_time[-90:],arima_mean),3)]

metrics_sarima_01 = [round(mean_absolute_error(df_store_2_item_28_time[-90:],sarima_01_mean),3), 
                       round(mean_absolute_percentage_error(df_store_2_item_28_time[-90:],sarima_01_mean),3)]

metrics_sarima_02 = [round(mean_absolute_error(df_store_2_item_28_time[-90:],sarima_02_mean),3),
                       round(mean_absolute_percentage_error(df_store_2_item_28_time[-90:],sarima_02_mean),3)]

df_arima_results = pd.DataFrame({'metrics':['MAE','MAPE'],
              'ARIMA(4,1,5)':metrics_arima, 
              'SARIMA(0,1,6)(0,1,1)7':metrics_sarima_01,
              'SARIMA(6,1,1)(6,1,0)7':metrics_sarima_02,
             })

df_arima_results

在这里插入图片描述
从上表开出,第二个SARIMA模型,也就是自动选择出的模型的评价指标最好。
下面我们从图像上观察一下,

dates = df_store_2_item_28_time.index
# Plot mean ARIMA and SARIMA predictions and observed
plt.figure(figsize=(15,10))
plt.title('Comparing forecasting in sample of all models', size = 16)
plt.plot(arima_mean.index, arima_mean, label='ARIMA(4,1,5)')
plt.plot(sarima_01_mean.index, sarima_01_mean, label='SARIMA(0,1,6)(0,1,1)7')
plt.plot(sarima_02_mean.index, sarima_02_mean, label='SARIMAX(6,1,1)(6,1,0)7')
plt.plot(df_store_2_item_28_time[-90:], label='observed')
plt.legend()
plt.show()

在这里插入图片描述
可仔细观察和比较三种模型与观测值的差异。

plt.figure(figsize=(15,5))
plt.title('Forecasting in sample - Observed values vs ARIMA(4,1,5)', size = 16)
plt.plot(df_store_2_item_28_time[-90:], label='observed', color='red')
plt.plot(arima_mean.index, arima_mean, label='ARIMA(4,1,5)', color='blue')

在这里插入图片描述

plt.figure(figsize=(15,5))
plt.title('Forecasting in sample - Observed values vs SARIMA(0,1,6)(0,1,1)7', size = 16)
plt.plot(df_store_2_item_28_time[-90:], label='observed', color='red')
plt.plot(sarima_01_mean.index, sarima_01_mean, label='SARIMA(0,1,6)(0,1,1)7', color='orange')

在这里插入图片描述

plt.figure(figsize=(15,5))
plt.title('Forecasting in sample - Observed values vs SARIMA(6,1,1)(6,1,0)7 (obtained by using automated selection)', size = 16)
plt.plot(df_store_2_item_28_time[-90:], label='observed', color='red')
plt.plot(sarima_02_mean.index, sarima_02_mean, label='SARIMA(6,1,1)(6,1,0)7', color='green')

在这里插入图片描述
可以看到,绿色的线也就是自动选择出的模型更接近于实际观测值。

Step 7. 样本外预测

这次我们向前预测90天,只比较ARIMA模型和SARIMA2。

# Create ARIMA mean forecast
arima_pred = arima_results.get_forecast(steps=90)
arima_mean = arima_pred.predicted_mean

# Create SARIMA mean forecast
sarima_02_pred = sarima_02_results.get_forecast(steps=90)
sarima_02_mean = sarima_02_pred.predicted_mean
dates = df_store_2_item_28_time.index
# Plot mean ARIMA and SARIMA predictions and observed
plt.title("Comparing Forecasting 90 days ahead - ARIMA vs SARIMA", size =16)
plt.plot(df_store_2_item_28_time['2017':], label='observed')
plt.plot(arima_mean.index, arima_mean, label='ARIMA(4,1,5)')
plt.plot(sarima_02_mean.index, sarima_02_mean, label='SARIMA(6,1,1)(6,1,0)7')
plt.legend()
plt.show()

在这里插入图片描述
从图中可明显看出,SARIMA模型的预测效果更接近于时序的季节趋势,这当然要归功于SARIMA模型融入了季节性因素。

未完待续…

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Auto-ARIMAARIMA之间的区别在于模型参数的选择和拟合过程。ARIMA是一种时间序列模型,用于预测未来的值。它的参数包括p、d和q,分别代表自回归阶数、差分阶数和移动平均阶数。这些参数需要手动选择,并且需要对数据进行多次拟合来找到最佳的参数组合。 而Auto-ARIMA是一种自动选择ARIMA模型参数的方法。它通过进行差分测试来确定差分d的顺序,并在定义的参数范围内拟合模型。如果启用了季节选项,Auto-ARIMA还会进行Canova-Hansen测试来确定季节差分的最优顺序D,并寻找最优的P和Q超参数。为了找到最好的模型,Auto-ARIMA使用信息准则(如AIC、BIC等)进行优化,并返回具有最小信息准则值的ARIMA模型。 因此,Auto-ARIMA相比于ARIMA具有更高的自动化程度,可以自动选择最佳的模型参数,减少了手动调参的工作量。同时,Auto-ARIMA还可以处理非平稳数据,并提供了更准确的预测结果。 #### 引用[.reference_title] - *1* [时序算法—AR、MA、ARMA和ARIMA模型以及Auto ARIMA](https://blog.csdn.net/weixin_46649052/article/details/115406977)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Python数据分析案例-分别使用时间序列ARIMA、SARIMAX模型与Auto ARIMA预测国内汽车月销量](https://blog.csdn.net/maiyida123/article/details/117967762)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值