python學習打卡day58

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…