python学习打卡day57

DAY 57 经典时序模型1

知识点回顾

  1. 序列数据的处理:
    1. 处理非平稳性:n阶差分
    2. 处理季节性:季节性差分
    3. 自回归性无需处理
  2. 模型的选择
    1. AR(p) 自回归模型:当前值受到过去p个值的影响
    2. MA(q) 移动平均模型:当前值收到短期冲击的影响,且冲击影响随时间衰减
    3. ARMA(p,q) 自回归滑动平均模型:同时存在自回归和冲击影响

作业:检索下经典的时序单变量数据集有哪些,选择一个尝试观察其性质。

数据集选择的是经典的国际航空公司乘客数据集

数据集地址:国际航空公司乘客 --- International airline passengers

1.原数组展示

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from datetime import datetime
from statsmodels.tsa.stattools import adfuller
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
from statsmodels.tsa.arima.model import ARIMA
from statsmodels.tsa.statespace.sarimax import SARIMAX
# 读取数据
data = pd.read_csv('international-airline-passengers.csv')# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False# 设置图片清晰度
plt.rcParams['figure.dpi'] = 300def parse_date(s):month_part, year_part = s.split('-')# 判断年份简写,这里假设49代表1949,60代表1960等(根据数据集实际情况,若有20xx 可再细化逻辑)if int(year_part) <= 99:  year = 1900 + int(year_part)else:year = int(year_part)return f'{year}-{month_part}'# 转换日期列
data['Month'] = pd.to_datetime(data['Month'].apply(parse_date))# 创建图表
plt.figure(figsize=(12, 6))
plt.plot(data['Month'], data['passengers'], marker='o', linestyle='-', color='#00A1FF')# 添加标题和轴标签
plt.title('国际航空乘客数量趋势图', fontsize=14, fontweight='bold')
plt.xlabel('日期', fontsize=12)
plt.ylabel('乘客数量(千)', fontsize=12)# 设置X轴为日期格式,并自定义刻度间隔(每6个月显示一次标签)
ax = plt.gca()
ax.xaxis.set_major_locator(mdates.MonthLocator(interval=6))  # 每6个月一个刻度
ax.xaxis.set_major_formatter(mdates.DateFormatter('%b-%y'))  # 格式化为"月-年"# 旋转x轴标签并右对齐,提升可读性
plt.xticks(rotation=45, ha='right')# 移除左、右、上三边的边框,使图表更简洁
plt.gca().spines['left'].set_visible(False)
plt.gca().spines['right'].set_visible(False)
plt.gca().spines['top'].set_visible(False)# 添加网格横线,增强数据可读性
plt.grid(axis='y', linestyle='--', alpha=0.7)# 调整布局,防止标签被截断
plt.tight_layout()# 显示图形
plt.show()

                                                             有着显著的季节性和趋势 

ADF检验一下

# ADF检验
adf_result_original = adfuller(data['passengers'].values)
print(f'原始数据的ADF检验结果:')
print(f'  ADF Statistic: {adf_result_original[0]}')
print(f'  p-value: {adf_result_original[1]}') # p-value会非常大,说明是非平稳的

原始数据的ADF检验结果:

ADF Statistic: 0.8153688792060463

p-value: 0.991880243437641

P值这么高,显然数据不稳定

2.季节性差分

# ======================== 季节性差分(周期 S=12) ========================
data.set_index('Month', inplace=True)
# 对原始数据做季节性差分(周期12,即一年的季节周期)
data_seasonal_diff = data['passengers'].diff(periods=12).dropna()  # 可视化季节性差分结果
plt.figure(figsize=(12, 4))
plt.plot(data_seasonal_diff, color='#4CAF50', label='季节性差分(S=12)')
plt.title('季节性差分后的数据(周期 S=12)', fontsize=14)
plt.xlabel('日期', fontsize=12)
plt.ylabel('乘客数量差分', fontsize=12)
plt.xticks(rotation=45, ha='right')
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.legend()
plt.tight_layout()
plt.show()# ======================== ADF 检验(验证平稳性) ========================
adf_result_seasonal = adfuller(data_seasonal_diff)
print(f'季节性差分后数据的 ADF 检验结果:')
print(f'  ADF Statistic: {adf_result_seasonal[0]}')
print(f'  p-value: {adf_result_seasonal[1]}')

 季节性差分后数据的 ADF 检验结果:
  ADF Statistic: -3.383020726492481
  p-value: 0.011551493085514954

3.再对季节性差分结果做一阶差分(处理趋势)

# ======================== 2. 一阶差分(在季节性差分基础上) ========================
# 再对季节性差分结果做一阶差分(处理趋势性)
data_seasonal_first_diff = data_seasonal_diff.diff().dropna()# 可视化最终差分结果
plt.figure(figsize=(12, 4))
plt.plot(data_seasonal_first_diff, color='#FF5722', label='季节性差分 + 一阶差分')
plt.title('先季节性差分(S=12)、再一阶差分后的数据', fontsize=14)
plt.xlabel('日期', fontsize=12)
plt.ylabel('最终差分结果', fontsize=12)
plt.xticks(rotation=45, ha='right')
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.legend()
plt.tight_layout()
plt.show()

ADF检验

# ======================== 3. ADF 检验(验证最终差分后的数据是否平稳) ========================
adf_result = adfuller(data_seasonal_first_diff)
print(f'最终差分后数据的 ADF 检验结果:')
print(f'  ADF Statistic: {adf_result[0]}')
print(f'  p-value: {adf_result[1]}')
print(f'  Critical Values:')
for key, value in adf_result[4].items():print(f'    {key}: {value:.2f}')

 最终差分后数据的 ADF 检验结果:

ADF Statistic: -15.595618083746338

p-value: 1.856511600123444e-28

Critical Values: 1%: -3.48 5%: -2.88 10%: -2.58

4.绘制ACF、PACF图查看数据适合什么模型

plt.figure(figsize=(12, 8))# 3.1 绘制差分后数据的时间序列图
plt.subplot(311)
plt.plot(data_seasonal_first_diff)
plt.title('差分后国际航空乘客数量')
plt.xlabel('日期')
plt.ylabel('乘客数量差分')# 3.2 绘制自相关函数(ACF)图
plt.subplot(312)
plot_acf(data_seasonal_first_diff, lags=40, ax=plt.gca())
plt.title('自相关函数(ACF)')# 3.3 绘制偏自相关函数(PACF)图
plt.subplot(313)
plot_pacf(data_seasonal_first_diff, lags=40, ax=plt.gca())
plt.title('偏自相关函数(PACF)')plt.tight_layout()
plt.show()

 根据AI分析选择AR模型

从图中可以观察到:

  • PACF(偏自相关函数):在滞后 1 阶后快速截断(值落入置信区间,趋近于 0),但后续滞后阶数(如滞后 2 阶、3 阶等)仍有小幅度波动(不过整体趋势是快速衰减 )。
  • ACF(自相关函数):呈现拖尾特征(缓慢衰减,没有明显的截断点 )。

模型推荐

根据上述特征:

  • PACF 呈现 “1 阶左右截断 + 拖尾”,但更接近 AR 模型 的特征(PACF 截断,ACF 拖尾 )。
  • 由于 PACF 并非 “严格在 1 阶后完全截断”(可能受数据噪声或季节性影响 ),但整体趋势符合 AR 模型 的判断逻辑。

5 .AR模型

# 1.3 根据ACF/PACF图的诊断,建立ARIMA(1,0,0)模型
model_ar = ARIMA(data_seasonal_first_diff, order=(1, 0, 0)).fit()
print("\nAR(2)模型诊断报告:")
print(model_ar.summary())

效果也就一般般

@浙大疏锦行 

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

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

相关文章

python小记(十七):Python 使用“继承”来管理yaml文件

Python 使用“继承”来管理yaml文件 引言 引言 在 Python 中有时候我们会把参数都储存在yaml文件中然后进行调用。当我们在进行一个很大的项目的时候&#xff0c;我们可能先需要一个base.yaml文件&#xff0c;然后再使用一个task1.yaml文件进行参数导入&#xff0c;并且task1.…

Windows搭建opencv cuda开发环境并验证是否成功

编译opencv cuda源码 电脑安装cuda 12.0或者11.8&#xff0c;根据你的电脑配置自行选择 下载opencv 源码 git clone https://github.com/opencv/opencv.git git clone https://github.com/opencv/opencv_contrib.git 在opencv目录里新建 build 文件夹 cd build后 cmake…

【go】初学者入门环境配置,GOPATH,GOROOT,GOCACHE,以及GoLand使用配置注意

一、环境变量配置步骤 1. 打开环境变量设置 Win R 后输入 sysdm.cpl → 点击 确定在弹出窗口中点击 高级 → 环境变量 2. 配置 GOROOT&#xff08;Go语言安装根目录&#xff09; 作用&#xff1a;告诉系统Go语言的安装位置&#xff08;编译器、标准库等核心文件所在路径&a…

gantt-task-react的改造使用

gantt-task-react的镜像地址 例子 改造1&#xff1a;切断父子关联关系&#xff0c;父为project组件&#xff0c;子为task组件&#xff0c; 原来的功能是task组件拖动会影响到父组件&#xff0c;现在切断两者关联关系&#xff0c;数据都用task组件&#xff0c; 给task组件重…

kotlin 协程(Coroutine)

Coroutine&#xff08;协程&#xff09;的转换原理&#xff1a; 在 kotlin 中&#xff0c;Coroution 是一种轻量级的线程管理方式&#xff0c;其转换原理涉及 状态机生成、挂起函数转换和调度器机制。 一、协程的本质&#xff1a;状态机 kotlin 协程通过 编译器生成状态机 实…

线性变换之维数公式(秩-零化度定理)

秩数-零化度定理(rank-nullity theorem) 目录 1. (映射)零空间(线性映射或变换的核)(null-space或nullspace) 2. 跨度(或开度)(span) 3. (线性映射的)零化度(nullity) 4. 线性变换的维数公式(秩数-零化度定理)(rank-nullity theorem) 5. 函数的上域(codomain) 1…

Spring Cloud Gateway 实战:网关配置与 Sentinel 限流详解

Spring Cloud Gateway 实战&#xff1a;网关配置与 Sentinel 限流详解 在微服务架构中&#xff0c;网关扮演着统一入口、负载均衡、安全认证、限流等多种角色。Spring Cloud Gateway 是 Spring Cloud 官方推出的新一代网关组件&#xff0c;相比于第一代 Netflix Zuul&#xff…

JAVA-常用API(二)

目录 1.Arrays 1.1认识Arrays 1.2Arrays的排序 2.JDK8的新特性&#xff1a;Lambda表达式 2.1认识Lambda表达式 2.2用Lambda表达式简化代码、省略规则 3.JDK8的新特性&#xff1a;方法引用&#xff08;进一步简化Lambda表达式&#xff09; 3.1 静态方法引用 3.2 实例方法引…

深入理解PHP的命名空间

命名空间是PHP 5.3引入的一个特性&#xff0c;它的主要目的是解决在大型应用程序中可能出现的名称冲突问题。在没有命名空间的情况下&#xff0c;如果两个不同的库或模块定义了相同名称的函数或类&#xff0c;那么在使用这些库或模块的时候就会引发冲突。为了解决这个问题&…

SwiftUI学习笔记day5:Lecture 5 Stanford CS193p 2023

SwiftUI学习笔记day5:Lecture 5 Stanford CS193p 2023 课程链接&#xff1a;Lecture 5 Stanford CS193p 2023代码仓库&#xff1a;iOS课程大纲&#xff1a; Enum 定义&#xff1a;enum MyType { … }关联值&#xff1a;case drink(name: String, oz: Int)匹配&#xff1a;switc…

idea 报错:java: 非法字符: ‘\ufeff‘

idea 报错&#xff1a;java: 非法字符: ‘\ufeff‘ 解决方案&#xff1a;

数据结构与算法之美:图

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;《编程之路》、《数据结构与算法之美》、《题海拾贝》、《C修炼之路》 欢迎点赞&#xff0c;关注&am…

SpringBoot -- 热部署

9.SpringBoot 热部署&#xff08;自动重启&#xff09; 在实际开发过程中&#xff0c;每次修改代码就得将项目重启&#xff0c;重新部署&#xff0c;对于一些大型应用来说&#xff0c;重启时间需要花费大量的时间成本。对于一个后端开发者来说&#xff0c;重启过程确实很难受啊…

HarmonyOS 5浏览器引擎对WebGL 2.0的支持如何?

以下是HarmonyOS 5浏览器引擎对‌WebGL 2.0‌支持的详细技术分析&#xff1a; 一、核心支持能力 ‌系统能力声明 HarmonyOS 5 浏览器引擎通过 SystemCapability.Graphic.Graphic2D.WebGL2 提供对 WebGL 2.0 的底层支持 支持的关键特性包括&#xff1a; OpenGL ES 3.0 特性…

Class1线性回归

Class1线性回归 买房预测 要根据历史数据来预测一套房子的价格。你发现影响房价的因素有很多&#xff0c;于是你决定使用线性回归模型来预测房价。 影响房价的因素如下&#xff1a; 房屋面积&#xff08;平方米&#xff09; 房龄&#xff08;年&#xff09; 离地铁站的距离&a…

Vue.js 3:重新定义前端开发的进化之路

Vue.js 3&#xff1a;重新定义前端开发的进化之路 引言&#xff1a;一场酝酿已久的革新 2020年9月18日&#xff0c;Vue.js团队以代号"One Piece"正式发布3.0版本&#xff0c;这不仅是框架发展史上的重要里程碑&#xff0c;更是前端工程化领域的一次革命性突破。历经…

Unity性能优化-渲染模块(1)-CPU侧(1)-优化方向

Unity 中渲染方面的优化大致可以划分为以下几块核心内容&#xff1a; CPU 优化 (减少 Draw Calls 和 CPU 瓶颈) GPU 优化 (减少像素着色和 GPU 瓶颈) 内存和显存优化 (Resource Management) 光照优化 (Lighting & Global Illumination) 这四个方面是相互关联的。一个方…

AI矢量图与视频无痕修复:用Illustrator与After Effects解锁创作新维度

最近因一个项目&#xff0c;有机会深度体验了奥地利Blueskyy艺术学院授权的Adobe教育版全家桶&#xff0c;过程中发现了不少令人惊喜的“黑科技”&#xff0c;很想和大家分享这份发掘宝藏的喜悦。一句话总结这次体验&#xff1a;慷慨且稳定。比如&#xff0c;它每周提供高达150…

Maven Javadoc 插件使用详解

Maven Javadoc 插件使用详解 maven-javadoc-plugin 是 Maven 项目中用于生成 Java API 文档的标准插件&#xff0c;它封装了 JDK 的 javadoc 工具&#xff0c;提供了更便捷的配置和集成方式。 一、基本使用 1. 快速生成 Javadoc 在项目根目录执行以下命令&#xff1a; bas…

Apache Kafka 面试应答指南

Apache Kafka 核心知识详解与面试应答指南 一、Apache Kafka 概述 Apache Kafka 作为一款分布式流处理框架,在实时构建流处理应用领域发挥着关键作用。其最广为人知的核心功能,便是作为企业级消息引擎被众多企业采用。 二、消费者组 (一)定义与原理 消费者组是 Kafka 独…