用Python实现时间序列模型实战——Day 10: ARIMA 与 SARIMA 模型的综合练习

一、学习内容
1. ARIMA 与 SARIMA 模型的对比分析

ARIMA 模型

  • ARIMA 模型适用于没有明显季节性趋势的时间序列数据。它通过自回归 (AR)、差分 (I) 和移动平均 (MA) 成分来建模时间序列数据的趋势和噪声。

SARIMA 模型

  • SARIMA 模型是 ARIMA 模型的扩展版本,专门用于具有季节性成分的时间序列数据。除了 ARIMA 的成分外,SARIMA 还包含季节性自回归 (SAR)、季节性差分 (SD) 和季节性移动平均 (SMA) 成分。
2. 不同模型在不同类型数据集上的表现对比

非季节性数据

  • 对于没有明显季节性趋势的数据,ARIMA 模型通常更合适。它可以有效捕捉数据中的趋势和短期波动,而不需要考虑季节性成分。

季节性数据

  • 对于具有明显季节性周期的数据,SARIMA 模型更为适合。它能够处理数据中的季节性模式,并在建模过程中包含这些周期性的变化。
二、实战案例

在本案例中,我们将对比 ARIMA 和 SARIMA 模型在同一数据集(航空乘客数据)上的表现,分析两种模型的适用性和优劣。

1. 数据加载与原始数据可视化
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.arima.model import ARIMA
from statsmodels.tsa.statespace.sarimax import SARIMAX# 加载时间序列数据集
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/airline-passengers.csv"
data = pd.read_csv(url, parse_dates=['Month'], index_col='Month')# 绘制原始数据的时间序列图
plt.figure(figsize=(12, 6))
plt.plot(data['Passengers'], label='Original')
plt.title('Original Time Series')
plt.xlabel('Date')
plt.ylabel('Number of Passengers')
plt.legend()
plt.grid(True)
plt.show()

程序解释: 

  • 载入航空乘客数据集,并绘制原始时间序列图,展示乘客数量随时间的变化趋势和季节性波动。

结果输出:

2. ARIMA 模型拟合

# ARIMA 模型拟合 (p, d, q) = (2, 1, 2)
model_arima = ARIMA(data['Passengers'], order=(2, 1, 2))
results_arima = model_arima.fit()# 输出 ARIMA 模型摘要
print("ARIMA(2, 1, 2) Model Summary:")
print(results_arima.summary())

程序解释:  

  • 使用 ARIMA 函数拟合 ARIMA(2, 1, 2) 模型,并输出模型的摘要信息。ARIMA 模型适用于处理无明显季节性特征的数据。

结果输出:

ARIMA(2, 1, 2) Model Summary:SARIMAX Results                                
==============================================================================
Dep. Variable:             Passengers   No. Observations:                  144
Model:                 ARIMA(2, 1, 2)   Log Likelihood                -671.673
Date:                Mon, 02 Sep 2024   AIC                           1353.347
Time:                        20:51:05   BIC                           1368.161
Sample:                    01-01-1949   HQIC                          1359.366- 12-01-1960                                         
Covariance Type:                  opg                                         
==============================================================================coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
ar.L1          1.6850      0.020     83.060      0.000       1.645       1.725
ar.L2         -0.9548      0.017    -55.420      0.000      -0.989      -0.921
ma.L1         -1.8432      0.124    -14.809      0.000      -2.087      -1.599
ma.L2          0.9953      0.135      7.380      0.000       0.731       1.260
sigma2       665.9584    114.053      5.839      0.000     442.419     889.498
===================================================================================
Ljung-Box (L1) (Q):                   0.30   Jarque-Bera (JB):                 1.84
Prob(Q):                              0.59   Prob(JB):                         0.40
Heteroskedasticity (H):               7.38   Skew:                             0.27
Prob(H) (two-sided):                  0.00   Kurtosis:                         3.14
===================================================================================

ARIMA 模型的摘要:ARIMA(2, 1, 2) 模型的摘要信息包括模型参数的估计值、标准误差、t 统计量等。AIC 和 BIC 值用于评估模型的优劣。  

3. SARIMA 模型拟合
# SARIMA 模型拟合 (p, d, q) x (P, D, Q, m) = (1, 1, 1) x (1, 1, 1, 12)
model_sarima = SARIMAX(data['Passengers'], order=(1, 1, 1), seasonal_order=(1, 1, 1, 12))
results_sarima = model_sarima.fit()# 输出 SARIMA 模型摘要
print("\nSARIMA(1, 1, 1)(1, 1, 1, 12) Model Summary:")
print(results_sarima.summary())

程序解释:  

  • 使用 SARIMAX 函数拟合 SARIMA(1, 1, 1)(1, 1, 1, 12) 模型,并输出模型的摘要信息。SARIMA 模型适用于具有季节性成分的数据。

结果输出:

SARIMA(1, 1, 1)(1, 1, 1, 12) Model Summary:SARIMAX Results                                      
==========================================================================================
Dep. Variable:                         Passengers   No. Observations:                  144
Model:             SARIMAX(1, 1, 1)x(1, 1, 1, 12)   Log Likelihood                -506.149
Date:                            Mon, 02 Sep 2024   AIC                           1022.299
Time:                                    20:51:09   BIC                           1036.675
Sample:                                01-01-1949   HQIC                          1028.140- 12-01-1960                                         
Covariance Type:                              opg                                         
==============================================================================coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
ar.L1         -0.1272      0.356     -0.357      0.721      -0.825       0.570
ma.L1         -0.2149      0.325     -0.660      0.509      -0.853       0.423
ar.S.L12      -0.9272      0.214     -4.341      0.000      -1.346      -0.509
ma.S.L12       0.8395      0.309      2.717      0.007       0.234       1.445
sigma2       130.7819     15.420      8.481      0.000     100.559     161.005
===================================================================================
Ljung-Box (L1) (Q):                   0.00   Jarque-Bera (JB):                 7.05
Prob(Q):                              0.99   Prob(JB):                         0.03
Heteroskedasticity (H):               2.65   Skew:                             0.13
Prob(H) (two-sided):                  0.00   Kurtosis:                         4.11
===================================================================================

SARIMA 模型的摘要:SARIMA(1, 1, 1)(1, 1, 1, 12) 模型的摘要信息同样包括模型参数的估计值、AIC、BIC 等。SARIMA 模型能够处理数据中的季节性成分。 

4. 模型预测与对比
# 对比两个模型的预测结果
pred_arima = results_arima.get_forecast(steps=24)
pred_arima_ci = pred_arima.conf_int()pred_sarima = results_sarima.get_forecast(steps=24)
pred_sarima_ci = pred_sarima.conf_int()# 绘制模型预测结果的对比图
plt.figure(figsize=(14, 8))
plt.plot(data.index, data['Passengers'], label='Observed', color='blue')
plt.plot(pred_arima.predicted_mean.index, pred_arima.predicted_mean, color='red', label='ARIMA Forecast')
plt.fill_between(pred_arima_ci.index, pred_arima_ci.iloc[:, 0], pred_arima_ci.iloc[:, 1], color='red', alpha=0.3)
plt.plot(pred_sarima.predicted_mean.index, pred_sarima.predicted_mean, color='green', label='SARIMA Forecast')
plt.fill_between(pred_sarima_ci.index, pred_sarima_ci.iloc[:, 0], pred_sarima_ci.iloc[:, 1], color='green', alpha=0.3)
plt.title('ARIMA vs SARIMA Model Forecast')
plt.xlabel('Date')
plt.ylabel('Number of Passengers')
plt.legend()
plt.grid(True)
plt.show()

程序解释:  

  • 通过拟合的 ARIMA 和 SARIMA 模型分别对未来 24 个月的乘客数量进行预测,并绘制预测结果对比图。
  • 观察两种模型的预测效果,并比较其预测区间的宽度。

结果输出:

预测结果对比:通过对比 ARIMA 和 SARIMA 模型的预测结果,可以观察到 SARIMA 模型在处理季节性数据时往往具有更好的表现,预测区间更窄,说明预测的可信度更高。 

5. AIC 和 BIC 值的比较
# 比较两个模型的 AIC 和 BIC 值
print(f"ARIMA(2, 1, 2) AIC: {results_arima.aic}, BIC: {results_arima.bic}")
print(f"SARIMA(1, 1, 1)(1, 1, 1, 12) AIC: {results_sarima.aic}, BIC: {results_sarima.bic}")

程序解释:  

  • 输出两种模型的 AIC 和 BIC 值,用于评估模型的拟合效果。AIC 和 BIC 值越小,模型的拟合效果越好。

结果输出:

ARIMA(2, 1, 2) AIC: 1353.346641008392, BIC: 1368.1608641596915
SARIMA(1, 1, 1)(1, 1, 1, 12) AIC: 1022.298793640585, BIC: 1036.6747802565908

AIC 和 BIC 值的比较:SARIMA 模型的 AIC 和 BIC 值如果明显低于 ARIMA 模型,则说明 SARIMA 模型更适合于该数据集。否则,ARIMA 模型可能表现更好。 

三、结果分析
1. 模型选择的依据
  • 对于具有显著季节性模式的数据集,SARIMA 模型通常表现更佳,因为它能够捕捉季节性成分并进行相应调整。对于无明显季节性模式的数据集,ARIMA 模型可能已经足够有效。
2. 预测结果的对比
  • 通过比较两个模型的预测结果,可以直观地看到 SARIMA 模型在季节性数据上的优势。SARIMA 模型的预测区间往往比 ARIMA 模型更窄,表明其预测的不确定性较小。
3. AIC 和 BIC 值的评估
  • AIC 和 BIC 是选择最优模型的重要标准,值越低的模型通常具有更好的拟合效果。在本案例中,如果 SARIMA 模型的 AIC/BIC 值低于 ARIMA 模型,则表明 SARIMA 模型更适合该数据集。

通过本次练习,您学会了如何在相同数据集上应用 ARIMA 和 SARIMA 模型,并通过比较两种模型的预测效果和统计指标,选择最适合的模型。未来的实际应用中,可以根据数据的特性选择最合适的时间序列模型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1523298.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

基于TensorFlow框架的手写数字识别系统(代码+论文+开题报告等)

手写数字识别 需安装Python3.X 64bit相关版本、Tensorflow 1.x相关版本 IDE建议使用Pycharm 打开main.py,运行即可 1.4 研究方法 实验研究表明,若手写体数字没有限制,几乎可以肯定没有一劳永逸的方法能同时达到90%以上的识别率和较快的识别…

网银U盾:财务眼中钉,会计肉中刺!

随着网银U盾的广泛应用,虽然使得财务安全有了大幅提升,但企业财务管理效率却越来越低了。 近期,我们发现,高达85%的企业在采购我们的USB Server时,都是出于网银U盾反复插拔的繁琐、效率低下、管理困难等原因。 想象一…

使用COAP和MQTT协议的多协议方法开发的用于机器人手术的自动医疗物联网系统

这篇论文的标题是《Development of automatic medical internet of things system (MIoT) for robotic surgery with multi-protocol approach using COAP and MQTT protocols》,作者是 Sujit N. Deshpande 和 Rashmi M. Jogdand,发表在《International …

浏览器百科:网页存储篇-Local storage介绍(四)

1.引言 在前面的章节中,我们详细介绍了 Cookie 的概念和应用实例。随着网页应用的不断发展,数据存储需求越来越多样化,浏览器提供了多种存储机制来满足这些需求。其中,localStorage 作为一种重要的网页存储方式,可以在…

前端bug:v-show嵌套组件外层,页面扩大后,组件被遮挡

在外层套上v-show 页面扩大到125%后,页码栏被压缩到窗口底部,被遮挡了 把v-show放到每个内部组件上 解决了被遮挡的问题 虽然问题解决了,但是不清楚原理是什么,麻烦路过的大佬指点一下,感谢!&#x…

Mac+Pycharm配置PyQt6教程

安装包 pip install PyQt6 PyQt6-tools #查看Qt版本 pip show PyQt6 pip show pyqt6-tools 配置扩展工具 QTD(界面设计) Program:/Users/wan/PycharmProjects/NewDemo/venv/lib/python3.11/site-packages/qt6_applications/Qt/bin/Designer.app Working directo…

JavaScript Web API入门day5

目录 1.Window对象 1.1 BOM(浏览器对象模型) 1.2 定时器-延时函数 1.3 JS执行机制 1.3.1 问题 1.3.2 解决问题 1.4 location对象 1.5 navigator对象 1.6 histroy对象 2.本地存储 2.1 本地存储介绍 2.2 本地存储分类 2.2.1 本地存储分类 - localStorage 2.2.2 本地…

【生日视频制作】白色卡车行万里路车身改字2版AE模板修改文字软件生成器教程特效素材【AE模板】

生日视频制作教程白色卡车行万里路车身改字2版AE模板修改文字特效广软件告生成神器素材祝福玩法AE模板工程 怎么如何做的【生日视频制作】白色卡车行万里路车身改字2版AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤: 安装AE软件 下载AE模板 把…

Nature Communications 单细胞算法 scDist,教你怎么找到重要的细胞亚群与基因!

生信碱移 scDist: 寻找关键细胞亚群与基因的方法 单细胞RNA测序(scRNA-seq)使我们能够研究受药物治疗、感染以及癌症等疾病中关键的细胞亚群。为了找到可能影响疾病的细胞亚群乃至基因,我们常常去比较两个或多个组之间显著差异的细胞类型。…

docker安装prometheus、grafana监控SpringBoot

1. 概述 最新有一个需求, 需要安装一个监控软件,对SpringBoot程序进行监控, 包括机器上cpu, 内存,jvm以及一些日志的统计。 这里需要介绍两款软件: prometheus 和 grafana prometheus: 中文名称, 普罗米…

10分钟了解OPPO中间件容器化实践

背景 OPPO是一家全球化的科技公司,随着公司的快速发展,业务方向越来越多,对中间件的依赖也越来越紧密,中间件的集群的数量成倍数增长,在中间件的部署,使用,以及运维出现各种问题。 1.中间件与业…

遥控器显示分别对应的无人机状态详解!!

1. 电量显示 遥控器电量:遥控器上通常会显示自身的电池电量,以提醒用户及时充电。 无人机电量:部分高端遥控器还会显示无人机的电池电量,以进度条或百分比的形式表示,帮助用户了解无人机的续航能力。 2. 飞行模式与…

【C语言从不挂科到高绩点】09-作业练习-循环结构02

Hello!彦祖们,俺又回来了!!!,继续给大家分享 《C语言从不挂科到高绩点》课程,前面课程中给大家讲解了一些常规的知识点,那么本次课,我们一起来练习挑战一下!! 本套课程将会从0基础讲解C语言核心技术,适合人群: 大学中开设了C语言课程的同学想要专升本或者考研的同…

【C++题解】1002 - 编程求解1+2+3+...+n

问题一:1002 - 编程求解123…n 类型:简单循环 题目描述: 编程求解下列式子的值: S123⋯n。 输入: 输入一行,只有一个整数 n(1≤n≤1000) 。 输出: 输出只有一行(这意味着末尾有…

R语言 | 文件读取

一、文件读取 -scan()函数 scan(file “”, what double(), nmax -1, n -1, sep “ ”),file" " 的双引号里写文件地址,what写读入的数据类型,如果文件有好几种类型,可以啥也不写(what" "&…

如何解决Vue中给data中的对象属性添加一个新的属性时响应式不生效的问题?

vue2的响应式原理使用的是对象代理去实现的,对象代理中有一个get和set方法,当我们访问对象的时候就会触发get方法,当我们对对象中的值进行修改时会触发set方法。但是当我们给对象添加一个新的属性时对象代理是检测不到的,所以就会…

通用文字识别如何通过C#进行调用?(三)

一、什么是通用文字识别? 通用文字识别是一种技术,它能够将图像中的文字转换为可编辑的文本格式。 二、通用文字识别适用哪些场景? 例如:商业场景 1.广告数据分析:可以识别户外广告、宣传海报上的文字内容&#xf…

archery 1.9.1 二开-本地环境搭建

archery git 地址: 1、https://github.com/hhyo/Archery 2、pyton 版本使用3.9 3、创建虚环境 使用python3.9安装ldap依赖对应python版本 下载文件地址https://github.com/cgohlke/python-ldap-build/releasespip install python_ldap-3.4.4-cp39-cp39-win_amd64.whl 安装…

多个Node.js版本之间切换

使用nvm 查看已安装的版本 nvm list 切换版本 nvm use 版本号 安装指定版本 1.nvm install 2.nvm use [version] 原文参考

儿童耳勺电子版的好用吗?六大弊病坏处要规避

很多家长在后台私信问儿童耳勺电子版的好不好用,作为个护师,也测过市面上大大小小的儿童耳勺产品,要说出比较好用的是哪一款,还应当是电子版的可视耳勺,因为它有着其他耳勺没有的可视化功能,能将儿童耳道内…