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
英文地址,請注明出處:http://en.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 獨…