![]()
系列簡介
這是我們一系列原創技術貼,從易到難,每天學習一點。所有內容均為疾控數據分析、科研論文相關,或者說很多和現在的熱門監測預警相關,所以我們這個系列就叫“監測預警基礎”。
今天是第44節,這算是我們一個小專題吧,大概11講,我們細化,短篇化,徹底把ARIMA模型搞懂。
今天是學透ARIMA專題第5講的內容,我們在下一節R實操之前,先搞懂完整步驟。
前面4篇我們把 ARIMA 的核心零件逐個拆解開了:平穩性與差分(參數 d)、自相關與偏自相關(定階工具)、AR (p) 和 MA (q) 基礎模型原理。
很多同行反饋:單個概念都能看懂,但拿到一份真實的傳染病監測數據,還是不知道從哪下手,步驟亂、順序錯,最后出來的模型也不知道靠不靠譜。
這一篇我們就把所有知識點串起來,給大家一套標準化的 ARIMA 5 步建模法,全程貼合疾控監測數據場景,按順序走下來,就能完成一份合格的 ARIMA 模型。
在此之前,我們再次總覽ARIMA (p,d,q) 的三個參數,先把三個參數的含義再做一次復盤,做到心里有數:
p:自回歸(AR)階數:代表用前幾期的真實觀測值預測當期
d:差分階數:代表讓數據平穩需要做幾次普通差分
q:移動平均(MA)階數:代表突發隨機沖擊的影響持續幾期
ARIMA 建模的本質,就是先通過 d 階差分把非平穩數據變平穩,再給平穩序列擬合一個 ARMA (p,q) 模型,最終組合成 ARIMA (p,d,q)。
![]()
這是所有時間序列分析的第一步,絕對不能跳過,也是新手最容易忽略的一步。
1. 要做什么
把原始監測數據整理成標準的連續時間序列,完成基礎清洗,然后畫出時序圖,肉眼觀察數據特征。
2. 疾控數據的清洗要點
第一,保證時間連續無中斷:周度數據不能缺周,月度數據不能缺月,法定傳染病報告數據要對齊報告周期;
第二,缺失值處理:少量缺失可用線性插值、同期均值填補,缺失超過 1 個周期不建議直接建模;
第三,異常值核對:數值突然暴漲暴跌,先核對是不是暴發疫情、報告遲報、檢測量突變等業務原因,不要直接刪除;
第四,周期對齊:周度數據注意 53 周的特殊年份,月度數據統一為自然月,保證周期長度一致。
3. 數據量要求
ARIMA 需要足夠的歷史數據才能擬合規律:普通 ARIMA至少 50 個以上的觀測值,比如 2 年以上的周度數據、4 年以上的月度數據。季節性數據需要至少包含 2-3 個完整周期,比如年度季節性數據,最好有 3 年以上的連續數據。
4. 看圖看什么
畫出原始數據的時序圖,先做業務層面的判斷:比如有沒有明顯的上升 / 下降長期趨勢?比如有沒有固定的年度 / 季度季節性周期?比如波動幅度是不是隨時間變化(比如流行高峰一年比一年高)?
這一步既能幫我們初步判斷平穩性,也能核對數據是否符合業務常識,避免后面建模出了低級錯誤都發現不了。![]()
數據平穩是 ARIMA 建模的前提,這一步的目標就是找到最小的差分階數 d,讓數據達到平穩。
1. 操作順序:先對原始序列做 ADF 單位根檢驗,同時看時序圖;若 P>0.05,判定為不平穩,做一階差分,再次檢驗;若一階差分后仍不平穩,再做二階差分,再次檢驗;若數據有強季節性,優先做 1 次季節差分,再做普通差分檢驗平穩性。
2. 核心判斷標準:統計標準就是ADF 檢驗 P 值≤0.05,拒絕 “序列不平穩” 的原假設,判定為平穩。業務標準是差分后的序列圍繞一個固定水平線波動,沒有明顯趨勢和周期。
3. 疾控建模必守原則:寧少勿多,d 最多取 2。絕大多數傳染病監測數據,1 階差分就能達到平穩,極少數曲線趨勢的數據用到 2 階。過度差分會丟失數據本身的有效信息,反而會大幅降低預測精度,絕對不是差分次數越多越好。![]()
數據平穩之后,就可以給平穩序列確定 AR 的階數 p 和 MA 的階數 q,有兩種方法配合使用:手動看圖初步定范圍,信息準則篩選最優值。
方法 1:ACF/PACF 圖手動定階(初步參考)
對應我們第三篇講的定階規則,看平穩序列的自相關圖(ACF)和偏自相關圖(PACF):
![]()
提醒:真實疾控監測數據很少有理論上完美的截尾,不用死摳細節,這一步只需要定出 p 和 q 的大致范圍(比如 p 可能是 1-3,q 可能是 0-2)就足夠了。
方法 2:AIC 信息準則自動定階(最終標準)
手動定階有主觀性,最終也是實際工作中,我們更多的用AIC(赤池信息準則)篩選最優模型。你不用深究 AIC 的計算公式,只需要記住:AIC 值越小,模型越好—— 它既考慮了模型的擬合精度,也兼顧了模型的簡潔度,避免階數過高導致過擬合。
實操中我們會把初步范圍內的 p、q 組合全部試一遍,計算每個模型的 AIC 值,選最小的那個作為最終階數。后面實操篇會教大家用auto.arima()函數一鍵完成這個篩選,不用手動逐個試。
![]()
定好 p、d、q 三個參數后,就可以擬合模型,大部分工作也就完成了。
但是,擬合完絕對不能直接用來預測,必須先做殘差診斷,其實我們在STL分解中就講過殘差診斷→
1. 為什么必須做殘差檢驗?
模型殘差,就是真實值和模型擬合值的差值。
我們做檢驗的核心目的是:確認殘差是白噪聲(純隨機波動),如果殘差是白噪聲,說明序列里所有有用的規律都已經被模型提取干凈了,模型是合格的;
如果殘差不是白噪聲,說明殘差里還藏著沒被提取的規律,模型擬合不充分,預測結果肯定不準。
2. 怎么檢驗,兩個方法
第一,殘差 ACF 圖:殘差的自相關系數全部落入置信區間內,沒有顯著的自相關性;第二,Ljung-Box 檢驗:檢驗的 P 值 > 0.05,不能拒絕 “殘差相互獨立” 的原假設,判定為白噪聲。
3.檢驗不通過怎么辦?
第一,調整 p 和 q 的階數,適當增加階數提取剩余信息; 第二,重新檢查數據平穩性,確認差分是否充分; 第三,若數據有強季節性,更換為 SARIMA 季節性模型(后面篇章會講)。
![]()
通過殘差檢驗的模型,就可以用來做預測了,同時我們需要量化評價模型的預測效果。
1. 預測的核心原則:ARIMA 只適合短期預測
ARIMA 的預測精度會隨著預測期數增加快速下降,這是它的固有局限。第一,周度監測數據:建議預測 1-4 周;第二,月度監測數據:建議預測 1-3 個月。不要用 ARIMA 做半年、一年以上的長期預測,結果沒有參考價值。
2. 效果評價的正確做法:劃分訓練集和測試集
很多人只看模型對歷史數據的擬合效果,這是典型誤區 —— 擬合好不代表預測準。正確做法是:
第一,把數據分成兩部分:前面大部分做訓練集(用來建模),最后面的 5-10 期做測試集(用來驗證預測效果);第二,用訓練集擬合模型,預測測試集的時間段,再把預測值和真實值對比,計算誤差。
3. 兩個常用評價指標
第一是RMSE(均方根誤差):預測值和真實值的平均偏差,數值越小越好,和數據單位一致;第二是MAPE(平均絕對百分比誤差):百分比誤差,數值越小越好,不受數據量級影響,不同模型之間可以直接對比。疾控場景一般認為,MAPE<10% 屬于預測效果優秀,10%-20% 屬于效果良好。
![]()
新手最容易踩的 3 個坑
第一,跳過第一步,直接建模:數據有缺失、時間不連續,甚至數據導入順序錯了,模型結果完全錯誤,還找不到原因;
第二,不做殘差檢驗,擬合完就用:模型根本沒把規律提取干凈,預測結果完全不可靠;
第三,過度追求高階模型:p 和 q 選到 5、6 階,擬合效果看著好,實際預測嚴重過擬合,外推完全不準。疾控場景的絕大多數數據,p 和 q 都在 0-3 之間就足夠。
理論流程我們已經全部串起來了,下一篇我們正式進入實操環節,手把手教大家用 R 語言跑通基礎 ARIMA 模型。
所有代碼逐行注釋,適配疾控常用的周度、月度監測數據格式,復制粘貼就能跑出自己的第一個 ARIMA 模型。
參考:
《時間序列分析-基于R》. [M] .王燕.中國人民大學出版社出版
傳染病預測預警技術及實踐案例分析. [M]. 楊鵬, 王小莉. 人民衛生出版社
![]()
![]()
編輯:普通疾控人 | 審核:詩酒趁年華
文章來源 | 原創
說明 | 轉載只為分享,如有侵權聯系刪除
?版權聲明 | 部分信息和圖片來自公開網絡
轉載請注明
再次轉載請注明出處
![]()
科普健康 | 宣傳疾控
本號為多位疾控機構從業者運營
重點關注國內外健康事件
致力于疾控科普
在做好科普服務大眾的同時
做好疾控機構的宣傳
讓更多的人了解疾控,擁抱健康
歡迎加「小編」微信(cdcjkr126com)
本文具體說明
本文為原創內容,文章為個人理解所學,不涉及疫情信息及內部保密數據,發表的目的為自我總結及給有需求的人士學習使用。如有不妥之處,歡迎聯系小編修改、刪除。
更多精彩視頻,盡在“CDC疾控人”視頻號
![]()
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.