【數學建模學習筆記】時間序列分析:ARIMA

零基礎看懂 ARIMA 模型:從原理到實戰

如果你完全沒接觸過 “時間序列預測”,也不懂復雜公式,這篇會用 “說人話” 的方式幫你搞懂 ARIMA 模型,以及文中代碼到底在做什么。

一、先搞懂:ARIMA 是用來干嘛的?

簡單說,ARIMA 是一種 “用過去猜未來” 的工具—— 比如用 1985-2021 年的年度銷量數據,預測 2022-2026 年的銷量,這就是它的核心用途。

生活中很多數據都是 “按時間排的”(比如每月工資、每天氣溫、每年銷量),這些 “按時間順序排列的數據” 就叫時間序列數據。ARIMA 的作用,就是從這些歷史數據里找到規律(比如銷量每年都漲一點),再用這個規律推未來。

二、ARIMA 模型的 3 個核心字母是什么意思?

模型名字里的 AR、I、MA,對應 3 個關鍵步驟,缺一不可:

  • AR(自回歸):“自己和自己相關”。比如今年的銷量,和去年、前年的銷量有關系(去年賣得多,今年大概率也多),AR 就是用過去的銷量數據來預測現在。
  • I(差分):“讓數據變平穩”。什么是 “平穩”?簡單說就是數據沒有 “一直漲” 或 “一直跌” 的大趨勢(比如房價年年漲,就是不平穩;每天的氣溫忽高忽低但整體沒大趨勢,就是平穩)。ARIMA 要求數據必須 “平穩” 才能找規律,所以如果數據不平穩(比如文中的銷量一直漲),就用 “差分” 處理(比如用今年銷量減去年銷量,得到 “每年銷量增長額”,這個增長額可能就平穩了)。
  • MA(移動平均):“修正誤差”。用 AR 預測時難免有誤差(比如實際銷量比預測多了 50),MA 就是用過去的誤差來修正現在的預測,讓結果更準。

所以 ARIMA 的本質是:先把數據變平穩(I),再用過去數據(AR)+ 過去誤差(MA)一起預測未來。

三、代碼怎么寫?(分步驟拆解)

文中的代碼是用 Python 實現 ARIMA 預測的完整流程,我們一步一步看,每個步驟都對應 “怎么用 ARIMA 解決問題”:

第一步:準備工作(導入工具 + 數據)

就像做飯前要先準備鍋碗瓢盆和食材,這里先 “導入工具”(處理數據、畫圖、建模型的庫)和 “導入數據”(1985-2021 年的銷量數據)。

# 導入工具庫(不用記,用的時候復制就行)
import numpy as np  # 處理數字
import pandas as pd  # 處理表格數據
import matplotlib.pyplot as plt  # 畫圖
from statsmodels.tsa.arima.model import ARIMA  # ARIMA模型
from statsmodels.tsa.stattools import adfuller, pacf, acf  # 平穩性檢驗、相關性分析工具# 導入數據(從網上獲取銷量表格)
df = pd.read_excel('網上的銷量數據文件地址')
df.head()  # 查看前5行數據

運行后看到的前 5 行數據是這樣的:

年份年度銷量
1985100.0
1986101.6
1987103.3
1988111.5
1989116.5

接著做了兩個小操作:

  1. 中文列名轉英文:因為 Python 對中文支持沒那么好,把 “年份” 改成 “Year”,“年度銷量” 改成 “Annual_Sales”,方便后續操作。
  2. 把 “年份” 設為時間索引:告訴 Python “這是按時間排的數據”,比如 1985 年對應 100.0 的銷量,讓數據有 “時間屬性”。

第二步:平穩性檢驗(判斷數據能不能直接用)

前面說過,ARIMA 要求數據必須 “平穩” 才能找規律。那怎么判斷數據平不平穩?文中用了ADF 檢驗(一種常用的平穩性檢測方法),核心看兩個結果:

  • ADF Statistic(ADF 統計量):數值越小越好。
  • p-value(p 值):這是關鍵!如果 p 值<0.05,說明數據 “平穩”;如果 p 值≥0.05,說明數據 “不平穩”,需要處理。

文中運行結果是:

ADF Statistic: 1.8137710150945194
p-value: 0.9983759421514264

p 值接近 1(遠大于 0.05),所以原始銷量數據不平穩。這時候就需要用 “差分” 處理(文中建模型時用了 1 階差分,對應 ARIMA 參數里的 “1”,后面會說)。

第三步:確定模型階數(選 “最合適的 ARIMA 版本”)

ARIMA 有 3 個關鍵參數:(p, d, q),要先確定這 3 個數字,才能建模型:

  • p:AR 的階數(用過去幾期數據來預測)。
  • d:差分的階數(需要做幾次差分讓數據平穩,文中用了 1 次,所以 d=1)。
  • q:MA 的階數(用過去幾期誤差來修正)。

ACF 圖和 PACF 圖來確定 p 和 q(這兩個圖是判斷階數的常用工具):

  • ACF 圖(自相關圖):看數據和過去幾期的 “直接相關性”。文中 ACF 圖隨著滯后步數增加慢慢下降,說明數據有持續的相關性。
  • PACF 圖(偏自相關圖):看數據和過去幾期的 “間接相關性”(去除中間期的影響后)。文中 PACF 圖在 “滯后 1 步” 后突然降到接近 0,說明用 “過去 1 期數據” 就夠了(p=1)。

結合之前的 “d=1”,再通過其他準則(比如 AIC,越小模型越好),最終確定模型參數是(p=1,d=1,q=1)。

第四步:建模型 + 檢驗(看模型好不好用)

確定參數后,就可以建 ARIMA 模型了,代碼很簡單:

# 建ARIMA(1,1,1)模型,用銷量數據訓練
model = ARIMA(df['Annual_Sales'], order=(1, 1, 1))
model_fit = model.fit()  # 訓練模型
print(model_fit.summary())  # 查看模型詳細結果

運行后會輸出一大段結果,重點看兩個部分:

  1. 參數顯著性(P>|z|):看 ar.L1(AR 的參數)和 ma.L1(MA 的參數)的 p 值:
    • ar.L1 的 p 值 = 0.002(<0.05),說明 AR 部分有效。
    • ma.L1 的 p 值 = 0.669(>0.05),說明 MA 部分效果不明顯,但整體模型還是可用的。
  2. 殘差檢驗(Ljung-Box Q 檢驗):殘差就是 “預測值和實際值的差”。如果殘差是 “白噪聲”(沒有規律的隨機波動),說明模型已經把數據里的規律都捕捉到了,模型是好的。文中 Q 檢驗的 p 值 = 0.69(>0.05),說明殘差是白噪聲,模型合格

第五步:預測未來(用合格的模型猜未來)

模型合格后,就可以預測未來的銷量了。文中預測了未來 5 年(2022-2026)的銷量:

# 預測未來5步(5年)的銷量
forecast = model_fit.forecast(steps=5)
print('預測值:', forecast)

運行結果是:

時間預測銷量
2022-01-01282.80
2023-01-01284.74
2024-01-01285.85
2025-01-01286.49
2026-01-01286.85

然后用畫圖把 “歷史數據” 和 “預測數據” 放一起:

  • 藍色線:1985-2021 年的實際銷量(一直在漲,但漲得越來越慢)。
  • 紅色線:2022-2026 年的預測銷量(繼續漲,但漲幅更小,符合歷史規律)。

從圖上看,預測趨勢和歷史趨勢一致,說明預測結果靠譜。

四、總結:ARIMA 預測的完整流程(小白也能記)

用 ARIMA 做時間序列預測,其實就 4 步,不管是銷量、氣溫還是工資數據,都可以按這個流程來:

  1. 準備數據:把數據整理成 “時間 + 指標” 的格式,告訴 Python 這是時間序列數據。
  2. 平穩性檢驗:用 ADF 檢驗看數據平不平穩,不平穩就用差分處理(確定 d 值)。
  3. 選模型階數:用 ACF/PACF 圖確定 p 和 q 值,得到 ARIMA (p,d,q) 的具體參數。
  4. 建模型 + 預測:用數據訓練模型,檢驗模型是否合格(殘差是不是白噪聲),合格了就預測未來。

最后:給小白的小提醒

  1. 不用死記公式:文中開頭的復雜公式是 ARIMA 的數學原理,小白先會用工具(Python 代碼)、能看懂結果就行,原理可以慢慢補。
  2. 關鍵看結果:判斷模型好不好,重點看 p 值(平穩性、參數顯著性)和殘差檢驗,這些是 “硬指標”。
  3. 多練才會熟:第一次看可能覺得繞,但跟著代碼跑一遍(比如用自己的數據改改),很快就能上手。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/920978.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/920978.shtml
英文地址,請注明出處:http://en.pswp.cn/news/920978.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【macOS】垃圾箱中文件無法清理的“含特殊字符文件名”的方法

【macOS】垃圾箱中文件無法清理的“含特殊字符文件名”的方法文件名包含特殊字符(如空格、中文符號等)導致終端無法正確識別文件路徑。 可以嘗試以下解決方法:使用文件路徑自動補全輸入 rm (注意 rm 后有空格)&#xf…

???????Blender 重拓撲修改器實戰指南:從基礎操作到細節優化?

在 Blender 建模中,重拓撲是解決 “高模難編輯、低模細節差” 的關鍵。傳統手動重拓撲效率低,重拓撲修改器能自動生成規整拓撲,保留模型外形,適合游戲資產、動畫角色等場景。 一、核心作用與適用場景? 重拓撲修改器并非 “一鍵完…

C/C++哆啦A夢

寫在前面 用代碼繪制童年記憶中的那個藍胖子——哆啦A夢,是我對經典角色的一次深情致敬。這段程序不僅是一幅靜態圖像的生成,更是一次對童年幻想世界的數字重建。通過精確的幾何控制與色彩搭配,我將那個圓潤可愛、溫暖可靠的機器人重新帶回眼…

CSS入門指南:30字掌握核心技巧

1. CSS初體驗 1.1. CSS定義 層疊樣式表 (Cascading Style Sheets,縮寫為 CSS) 用來描述 HTML 文檔的呈現(美化內容) 1.2. CSS引入方式 內部樣式表:學習使用 CSS 代碼寫在head里面的 style標簽 里面 外部樣式表&…

從實操到原理:一文搞懂 Docker、Tomcat 與 k8s 的關系(附踩坑指南 + 段子解疑)

目錄 一、先分清:Docker、Tomcat、k8s 到底是 “干啥的”? 二、它們的 “合作關系”:從 Java 項目到集群部署的全流程 三、實際應用場景:什么時候該用誰? 1. 單獨使用場景 2. 組合使用場景(最常見&…

測試覆蓋率不夠高?這些技巧讓你的FastAPI測試無懈可擊!

url: /posts/0577d0e24f48b3153b510e74d3d1a822/ title: 測試覆蓋率不夠高?這些技巧讓你的FastAPI測試無懈可擊! date: 2025-09-02T01:49:10+08:00 lastmod: 2025-09-02T01:49:10+08:00 author: cmdragon summary: FastAPI通過TestClient工具支持單元測試,模擬HTTP請求直接…

Qwen3-Reranker-0.6B 模型結構

模型加載 import torch from modelscope import AutoModel, AutoTokenizer, AutoModelForCausalLMtokenizer AutoTokenizer.from_pretrained("Qwen/Qwen3-Reranker-0.6B", padding_sideleft) model AutoModelForCausalLM.from_pretrained("Qwen/Qwen3-Reranke…

無參 MOS 算法的評估方式

一、無參 MOS 算法 在音頻處理和質量評估領域,MOS(Mean Opinion Score)是一種常用的主觀評價指標,用于衡量音頻質量。然而,獲取主觀 MOS 評分通常需要大量的人力和時間。因此,無參 MOS 算法應運而生&#…

Flowable——配置使用Flowable-UI

文章目錄 前言 框架選型與版本 flowable-ui 搭建 依賴引入 springboot 主要版本 flowable 相關 log4j 日志配置項 配置文件 log4j配置文件 application.yml 增加啟動類并啟動程序 項目整體結構 前言 最近對工作流的flowable比較感興趣,匯總記錄一下相關的研究學習知識點。 框…

2025大學生必考互聯網行業證書排名?

在互聯網行業蓬勃發展的當下,大學生若想畢業后順利投身其中,提前考取相關高含金量證書不失為明智之舉。這些證書不僅能證明專業能力,還能在求職時為你增添競爭優勢。接下來,為大家詳細介紹 2025 年大學生必考的互聯網行業證書排名…

【并發系列-01】高并發系統架構設計原理

【并發系列-01】高并發系統架構設計原理 1. 業務場景:當雙11遇上技術挑戰 1.1 問題場景描述 想象一下這樣的場景:某電商平臺在雙11期間,短短30分鐘內涌入了500萬用戶,同時發起了超過2000萬次商品查詢請求和100萬次下單操作。而平時…

【Vue2 ?】Vue2 入門之旅(八):過渡與動畫

前幾篇我們學習了事件處理。本篇將介紹 過渡與動畫&#xff0c;讓 Vue 頁面更加生動。 目錄 transition 組件進入與離開過渡過渡類名結合 CSS 動畫JavaScript 鉤子小結 transition 組件 Vue 提供了內置組件 <transition>&#xff0c;可以為元素或組件的進入和離開添加動…

【LeetCode】力扣刷題攻略路線推薦!適合新手小白入門~(含各類題目序號)

力扣上有許多數據結構及算法的練習&#xff0c;但是如果由第一題【兩數之和】開始刷&#xff0c;會讓50%的人倒在起點。所以我們刷題要講究路線攻略以及技巧~大體路線方向由簡入難數學數組鏈表字符串哈希表雙指針遞歸棧隊列樹圖與回溯算法貪心動態規劃刷題技巧 建議刷題的時候分…

Windows 電腦發現老是自動訪問外網的域名排障步驟

Windows 電腦發現老是自動訪問外網的域名,如何排障 一、基礎信息獲取與進程定位 1.1、確認進程關鍵信息 1.2、進程合法性初步驗證 二、網絡連接深度分析 2.1、目的IP/域名溯源 2.2、端口與協議檢查 三、進程行為與系統異常排查 3.1、進程啟動與依賴分析 3.2、系統異常行為掃描…

curl、python-requests、postman和jmeter的對應關系

一、初識curlcurl 是一個功能強大的命令行工具&#xff0c;用于傳輸數據&#xff0c;支持多種協議&#xff08;如 HTTP、HTTPS、FTP 等&#xff09;。分析以下curl&#xff1a;curl "https://$HOST/mon/adm/au/opera" --header "Authorization: $AUTH" -X …

【MySQL】初識數據庫基礎

【MySQL】初識數據庫基礎 &#x1f525;個人主頁&#xff1a;大白的編程日記 &#x1f525;專欄&#xff1a;MySQL筆記 文章目錄【MySQL】初識數據庫基礎前言一. 數據庫基礎&#xff08;重點&#xff09;1.1 什么是數據庫1.2 主流數據庫1.3 基本使用1.3.1 MySQL安裝1.3.2 連接…

微服務Docker-compose之若依部署

目錄 1.創建一個文件夾 2.上傳壓縮包 3.解壓 4.執行ry1文件 5.執行ry2文件 6.進入nginx的html目錄解壓dist文件 7.執行ry3文件 8.訪問nacos 9.訪問若依 1.創建一個文件夾 2.上傳壓縮包 3.解壓 4.執行ry1文件 5.執行ry2文件 6.進入nginx的html目錄解壓dist文件 7.執行ry…

《中國棒球》健將級運動員什么水平·棒球1號位

棒球國家健將級の神級科普&#xff5c;國內TOP1%??國際能打嗎&#xff1f;1. 什么是"國家健將級"&#xff1f;&#xff5c;What is "Master Sportsman"&#xff1f;中國運動員等級天花板&#xff1a;僅次"國際健將"的最高國家級榮譽&#xff0…

NAT與內網穿透

目錄 一、為什么需要NAT&#xff1f; 二、NAT的核心&#xff1a;從“一對一”到“多對一” &#xff08;1&#xff09;靜態NAT &#xff08;2&#xff09;動態NAT &#xff08;3&#xff09;NAPT 三、NAPT的雙刃劍&#xff1a;安全與局 四、內網穿透 &#xff08;1&…

力扣222 代碼隨想錄Day15 第四題

完全二叉樹結點的數量class Solution { public:int countNodes(TreeNode* root) {if(rootNULL) return 0;TreeNode* leroot->left;TreeNode* riroot->right;int ld0;int rd0;while(le){lele->left;ld;}while(ri){riri->right;rd;}if(ldrd) return(2<<ld)-1;i…