DAY 58 经典时序预测模型2

知识点回顾:

  1. 时序建模的流程
  2. 时序任务经典单变量数据集
  3. ARIMA(p,d,q)模型实战
  4. SARIMA摘要图的理解
  5. 处理不平稳的2种差分
    1. n阶差分---处理趋势
    2. 季节性差分---处理季节性

建立一个ARIMA模型,通常遵循以下步骤:

1. 数据可视化:观察原始时间序列图,判断是否存在趋势或季节性。

2. 平稳性检验:

    - 对原始序列进行ADF检验。

    - 如果p值 > 0.05,说明序列非平稳,需要进行差分。

3. 确定差分次数 d:

    - 进行一阶差分,然后再次进行ADF检验。

    - 如果平稳了,则 d=1。否则,继续差分,直到平稳。

4. 确定 p 和 q:

    - 对差分后的平稳序列绘制ACF和PACF图。

    - 根据昨天学习的规则(PACF定p,ACF定q)来选择p和q的值。

5. 建立并训练ARIMA(p, d, q)模型。

  1. 模型评估与诊断:查看模型的摘要信息,检查残差是否为白噪声。
    1. AIC用来对比不同模型选择,越小越好
    2. 关注系数是否显著,通过p值或者置信区间均可
    3. 残差的白噪声检验+正态分布检验

7. 进行预测(需要还原回差分前的结构)

作业:对太阳黑子数量数据集用arima完成流程

1.加载太阳黑子数据集,并绘制原始数据图像

import matplotlib.pyplot as plt
from statsmodels.datasets import sunspots
from statsmodels.tsa.stattools import adfuller
import pandas as pd
from statsmodels.tsa.arima.model import ARIMA
# 设置中文显示
plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei", "Heiti TC"]
plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题# 加载太阳黑子数据集
df = sunspots.load_pandas().data
df.columns = ['YEAR', 'SUNACTIVITY']  # 设置列名
df['YEAR'] = pd.date_range(start='1700', end='2009', freq='A')  # 修正结束年份为2008
df.set_index('YEAR', inplace=True)  # 设置年份为索引# 创建画布和子图
plt.figure(figsize=(12, 6))# 绘制太阳黑子活动随时间变化的折线图
plt.plot(df.index, df['SUNACTIVITY'], 'b-', linewidth=1.5)# 添加标题和标签
plt.title('太阳黑子活动随时间变化趋势图 (1700-2008)', fontsize=16)
plt.xlabel('年份', fontsize=14)
plt.ylabel('太阳黑子数量', fontsize=14)# 美化图表
plt.tight_layout()  # 自动调整布局
plt.show()

无明显趋势,但有强周期性:大约每11年一个周期 

2.检验平稳性

# 进行ADF检验
result = adfuller(df['SUNACTIVITY'])
print('ADF检验结果:')
print(f'ADF统计量: {result[0]}')
print(f'p值: {result[1]}')
print('临界值:')
for key, value in result[4].items():print(f'\t{key}: {value}')if result[1] <= 0.05:print("强烈拒绝原假设,时间序列是平稳的")
else:print("接受原假设,时间序列存在单位根,是非平稳的")

3.一阶差分 

# 进行一阶差分
df['SUNACTIVITY_DIFF'] = df['SUNACTIVITY'].diff()
# 删除差分后产生的NaN值
df_diff = df.dropna()
# 绘制一阶差分后的时间序列图
plt.plot(df_diff.index, df_diff['SUNACTIVITY_DIFF'], 'r-', linewidth=1.5)
plt.title('一阶差分后的太阳黑子活动时间序列', fontsize=16)
plt.xlabel('年份', fontsize=14)
plt.ylabel('差分后的值', fontsize=14)# 美化图表
plt.tight_layout()  # 自动调整布局
plt.show()

4.一阶差分后验证平稳性 

result_diff = adfuller(df_diff['SUNACTIVITY_DIFF'])
print('一阶差分后数据ADF检验结果:')
print(f'ADF统计量: {result_diff[0]}')
print(f'p值: {result_diff[1]}')
print('临界值:')
for key, value in result_diff[4].items():print(f'\t{key}: {value}')if result_diff[1] <= 0.05:print("强烈拒绝原假设,一阶差分后的时间序列是平稳的")
else:print("接受原假设,一阶差分后的时间序列存在单位根,是非平稳的")

5.绘制ACF和PACF图

from statsmodels.graphics.tsaplots import plot_acf, plot_pacf# 一阶差分后的数据是平稳的,直接绘制ACF和PACF
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(12, 8))plot_acf(df_diff['SUNACTIVITY_DIFF'], ax=ax1, lags=40)
ax1.set_title('自相关函数 (ACF)')plot_pacf(df_diff['SUNACTIVITY_DIFF'], ax=ax2, lags=40)
ax2.set_title('偏自相关函数 (PACF)')plt.tight_layout()
plt.show()

 所以p=2或3,d=1,q=2或3

import warnings
warnings.filterwarnings("ignore")
# 建立ARIMA(2, 0, 0)模型
model_sun_1 = ARIMA(df['SUNACTIVITY'], order=(2, 1, 3))
arima_result_sun_1 = model_sun_1.fit()# 打印模型摘要
print(arima_result_sun_1.summary())

6.预测 

# 预测部分代码
# 样本内预测(历史数据的拟合)
start_date = '1950-12-31'  # 从1950年开始显示预测结果
end_date = '2008-12-31'    # 预测到数据的最后# 获取样本内预测值和置信区间
pred = arima_result_sun_1.get_prediction(start=pd.to_datetime(start_date), end=pd.to_datetime(end_date), dynamic=False)
pred_ci = pred.conf_int()  # 置信区间# 未来预测(预测未来20年的数据)
forecast_steps = 20  # 预测未来20年
pred_uc = arima_result_sun_1.get_forecast(steps=forecast_steps)
pred_uc_ci = pred_uc.conf_int()  # 预测的置信区间# 为未来预测创建日期索引
last_date = df.index[-1]
future_dates = pd.date_range(start=last_date + pd.DateOffset(years=1), periods=forecast_steps, freq='A')# 创建预测结果的DataFrame
forecast_df = pd.DataFrame({'forecast': pred_uc.predicted_mean.values,'lower_ci': pred_uc_ci.iloc[:, 0].values,'upper_ci': pred_uc_ci.iloc[:, 1].values
}, index=future_dates)# 绘制预测结果
plt.figure(figsize=(14, 7))# 绘制原始数据
plt.plot(df.index, df['SUNACTIVITY'], 'b-', label='历史数据', linewidth=1.5)# 绘制样本内预测
plt.plot(pred.predicted_mean.index, pred.predicted_mean, 'r--', label='样本内预测', linewidth=1.5)
plt.fill_between(pred_ci.index,pred_ci.iloc[:, 0],pred_ci.iloc[:, 1], color='r', alpha=0.1)# 绘制未来预测
plt.plot(forecast_df.index, forecast_df['forecast'], 'g--', label='未来预测', linewidth=1.5)
plt.fill_between(forecast_df.index,forecast_df['lower_ci'],forecast_df['upper_ci'], color='g', alpha=0.1)# 添加标题和标签
plt.title('太阳黑子活动的预测结果', fontsize=16)
plt.xlabel('年份', fontsize=14)
plt.ylabel('太阳黑子数量', fontsize=14)
plt.legend(loc='upper left', fontsize=12)
plt.grid(True, linestyle='--', alpha=0.7)plt.tight_layout()
plt.show()# 打印未来20年的预测结果
print("未来20年太阳黑子活动的预测结果:")
print(forecast_df[['forecast', 'lower_ci', 'upper_ci']])

@浙大疏锦行

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分布式锁的实现方式:使用 Redisson 实现分布式锁( Spring Boot )

Redisson提供了分布式和可扩展的Java数据结构&#xff0c;包括分布式锁的实现。 1. 添加依赖 在pom.xml中添加Redisson依赖&#xff1a; <dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId>…

Web基础关键_004_CSS(二)

目 录 一、样式 1.行内样式 2.内部样式 3.外部样式 二、选择器优先级 1.非关系选择器 2.关系选择器 三、属性 四、盒子模型 五、元素 1.块级元素 2.行内元素 3.行内块级元素 4.元素类型转换 六、浮动 七、定位 1.静态定位 2.相对定位 3.绝对定位 4.固定定位 …

数据使用权与所有权分离:能否诞生“数据租赁”市场

——首席数据官高鹏律师数字经济团队创作&#xff0c;AI辅助 数据如矿藏&#xff0c;开采需“契约” 想象一座蕴藏着无尽资源的数字矿山&#xff1a;企业或个人拥有数据的“所有权”&#xff0c;如同手握矿脉的产权&#xff0c;但若无法高效挖掘其价值&#xff0c;矿石终将沉…

【esp32s3】2 - 第一个组件

下面的内容编写时间跨度有点大&#xff0c;乱了得一团&#xff0c;也没ai整理。食之无味&#xff0c;弃之可惜。 推荐笔记&#xff1a;ESP32 之 ESP-IDF 教学&#xff08;十八&#xff09;—— 组件配置&#xff08;KConfig&#xff09; 推荐笔记&#xff1a;Kconfig 拓展 乐鑫…

【Java_EE】单例模式、阻塞队列、线程池、定时器

目录 单例模式 饿汉模式<代码> 懒汉模式<代码> 阻塞队列 阻塞队列概念 阻塞队列解决的问题 阻塞队列工作原理 阻塞队列的优/缺点 优点 缺点 模拟实现阻塞队列<代码> 线程池 线程池概念 线程池解决的问题 线程池参数 四种拒绝策略 线程池工作…

Redis初识第七期---ZSet的命令和应用场景

ZSet相较于Set来说&#xff0c;它又是有序的&#xff0c;这个有序指的就是我们通常意义上的有序了&#xff0c;ZSet内部中是按照升序来排序的。 排序规则&#xff1a;ZSet相较于Set来说&#xff0c;它内部引入了一个新的属性&#xff1a;分数&#xff08;Score&#xff09;&am…

Wps开放平台v5升级v7上传实体文件踩坑(Java使用restTemplate)

背景&#xff1a; 最近接到一个老项目需求&#xff0c;之前开发的WPS开放平台文件&#xff08;商密集成&#xff09;预览功能因为升级需要重新对接api&#xff0c;新的上传文件接口踩坑特意记录一下。 这里出问题的是第二步&#xff0c;请求文件上传信息 踩坑代码 调用后403 p…

啥时候上RAG?啥时候上微调?丨实战笔记

哈喽&#xff0c;大家好&#x1f44f; 我是阿星&#xff01; 现在很多AI科普文章都会提到微调&#xff0c;RAG。 但是没有实战的过的同学可能会问&#x1f914;—— 啥时候用RAG&#xff1f;啥时候用微调呢&#xff1f;有啥区别&#xff1f;不都是让模型增加知识面的吗&…

RabbitMQ-基础篇

前言&#xff1a; 今天开始学RabbitMQ,还是跟着黑马的课程。 今日所学&#xff1a; RabbitMQ介绍RabbitMQ入门Java客户端中的MQ 1.RabbitMQ介绍 1.1 什么是RabbitMQ RabbitMQ 是一个开源的消息代理软件&#xff08;消息队列中间件&#xff09;&#xff0c;实现了高级消息…

docker-compose配置redis哨兵详细步骤和配置文件

docker-compose配置redis哨兵详细步骤和配置文件 目录结构调整 redis-cluster/ ├── config/ │ ├── master.conf # 主节点配置 │ ├── slave1.conf # 从节点1配置 │ ├── slave2.conf # 从节点2配置 │ ├── sentinel1.…

多模态大语言模型arxiv论文略读(146)

Exploring Response Uncertainty in MLLMs: An Empirical Evaluation under Misleading Scenarios ➡️ 论文标题&#xff1a;Exploring Response Uncertainty in MLLMs: An Empirical Evaluation under Misleading Scenarios ➡️ 论文作者&#xff1a;Yunkai Dang, Mengxi G…

【教程】Linux中限制用户可以使用的GPU数量 | 附脚本

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 目录 背景说明 设置方法 管理脚本 进阶限制 恢复默认组 注意事项 背景说明 比较简单的方式是使用group来管理权限&#xff0c;这种方式能限制哪些…

90.xilinx复位低电平(一般使用低电平复位)

Xilinx FPGA 中的寄存器&#xff08;Flip-Flop&#xff09;**确实支持异步复位**&#xff0c;但具体实现方式取决于你使用的设计方法&#xff08;HDL 代码风格或原语实例化&#xff09;。以下是详细说明&#xff1a; --- ### 1. **Xilinx 寄存器的复位特性** - **同步复位…

NVMe高速传输之摆脱XDMA设计10: DMA 控制单元设计

DMA 控制单元负责控制 DMA 传输事务&#xff0c; 该单元承担了 DMA 事务到 NVMe 事务的转换任务&#xff0c; 使用户对数据传输事务的控制更加简单快捷。 DMA 控制功能由 DMA寄存器组实现。 DMA 寄存器组包含 DMA 操作寄存器、 DMA 长度寄存器、 DMA 源目的地址寄存器和 DMA 状…

如何设置电脑定时休眠?操作指南详解

长时间运行电脑会导致硬件过热&#xff0c;缩短其使用寿命。定时关机有助于让硬件得到休息&#xff0c;降低因长时间高负荷工作导致损坏的风险。 它的界面简洁直观&#xff0c;功能却十分实用&#xff0c;涵盖了定时关机、重启、注销、休眠、待机以及锁定等多种操作。 以设置“…

LeetCode[617]合并二叉树

思路&#xff1a; 我们合并左右子树&#xff0c;在递归左右子树的时候&#xff0c;一定要保证左右子树不为空&#xff0c;如果左子树为空&#xff0c;那么直接返回右子树就行了&#xff0c;即使右子树为空。如果右子树为空那么直接返回左子树就行了&#xff0c;这样判断完就正常…

Redis 常用五大数据类型

1、Redis 关键字&#xff08;Key&#xff09; keys * 查看当前库所有keyexists [key] 判断某个key是否存在type [key] 查看当前key的数据类型del [key] 删除指定的key数据unlink [key] 根据value选择非阻塞删除&#xff0c;仅将keys从keyspace元数据中删除&#xff0c;真正的删…

大语言模型(LLM)专业术语汇总

1. 训练与部署 1.1 预训练 专业&#xff1a;在海量无标注文本&#xff08;如Common Crawl、Wikipedia&#xff09;上通过自监督学习训练基础语言模型&#xff0c;学习通用语言表征&#xff08;如GPT-3训练数据达45TB&#xff09;。通俗&#xff1a;AI的“通识教育阶段”&…

【Java Swing 图形界面编程】JList 列表组件 ① ( JList 组件简介 | 核心作用 | 关键特性 | 基础用法示例 )

文章目录 一、JList 组件简介1、JList 概念简介2、JList 核心作用3、JList 关键特性 二、JList 组件基础用法示例1、使用 String 数组构建列表项2、使用 Vector 集合构建列表项3、使用 DefaultListModel 构建列表项 一、JList 组件简介 1、JList 概念简介 基本概念 : JList 组件…

【小技巧】Python+PyCharm IDE 配置解释器出错,环境配置不完整或不兼容。(小智AI、MCP、聚合数据、实时新闻查询、NBA赛事查询)

报错信息如下&#xff1a; [unsupported] Python 3.1 (mcp-calculator-main) (3) C:\Users(xsshu\AppData\Local\Programs\Python\Python313\python.exe [unsupported] Python 3.1 C:\Users\xsshu\AppData\Local\Programs\Python\Python311\python.exe 这条输出显示了两个 Pyth…