序列模型全解析:從ARIMA到HMM的建模實(shí)踐與選型指南)
上周幫一個(gè)做智能硬件的老同事排查問(wèn)題他的設(shè)備上報(bào)了一串振動(dòng)信號(hào)肉眼看著忽高忽低、毫無(wú)章法但簡(jiǎn)單算均值和方差又總覺(jué)得哪里不對(duì)勁——把數(shù)據(jù)按時(shí)間順序畫(huà)出來(lái)后能明顯看出“后一段的走勢(shì)跟前一段是牽連著的”不是獨(dú)立隨機(jī)的噪聲。這個(gè)場(chǎng)景我太熟了。只要你的數(shù)據(jù)是沿著時(shí)間軸一個(gè)接一個(gè)到達(dá)的而且每個(gè)新值都跟歷史值之間存在某種依賴關(guān)系那么你手頭需要的就不是常規(guī)的統(tǒng)計(jì)匯總而是一套專(zhuān)門(mén)處理這類(lèi)問(wèn)題的工具隨機(jī)序列模型。隨機(jī)序列模型簡(jiǎn)單說(shuō)就是“為帶隨機(jī)性的按時(shí)間排列的數(shù)據(jù)建立數(shù)學(xué)描述”。它不追求把每個(gè)點(diǎn)都預(yù)測(cè)得分毫不差而是把數(shù)據(jù)生成機(jī)制里的確定性結(jié)構(gòu)和隨機(jī)波動(dòng)分開(kāi)建模從而做預(yù)測(cè)、分類(lèi)、異常檢測(cè)和風(fēng)險(xiǎn)評(píng)估。這篇文章我會(huì)從建模思路講起把主流分支的原理、選型依據(jù)、完整實(shí)操流程和踩坑經(jīng)歷一次說(shuō)透適合剛接觸時(shí)序分析的初學(xué)者也適合已經(jīng)在用統(tǒng)計(jì)模型但總感覺(jué)差點(diǎn)意思的從業(yè)者。1. 隨機(jī)序列模型到底在解決什么問(wèn)題1.1 為什么簡(jiǎn)單統(tǒng)計(jì)在時(shí)序數(shù)據(jù)上會(huì)失效假設(shè)你有100個(gè)觀測(cè)值先算平均值再算標(biāo)準(zhǔn)差然后畫(huà)個(gè)直方圖——這套流程對(duì)橫截面數(shù)據(jù)沒(méi)問(wèn)題可一旦數(shù)據(jù)本質(zhì)上是一個(gè)“序列”問(wèn)題就來(lái)了。舉個(gè)最直白的例子某零售門(mén)店一周的客流數(shù)據(jù)周一早上9點(diǎn)的客流量和周五晚上8點(diǎn)的客流量雖然它們的數(shù)值可能差好幾倍但同一個(gè)時(shí)刻在不同周的表現(xiàn)往往高度相關(guān)。如果你強(qiáng)行把每一天的每個(gè)小時(shí)都當(dāng)成獨(dú)立樣本去平均那么“你是否能預(yù)測(cè)下周二下午3點(diǎn)大概有多少人”這個(gè)問(wèn)題的答案就會(huì)變得非常粗糙。更本質(zhì)的原因是序列數(shù)據(jù)往往不滿足經(jīng)典統(tǒng)計(jì)學(xué)中“獨(dú)立同分布”的假設(shè)。相鄰兩個(gè)時(shí)間點(diǎn)的值通常存在自相關(guān)今天的溫度大概率跟昨天相近這一秒的股價(jià)大概率跟上一秒相差不大。一旦樣本之間不獨(dú)立置信區(qū)間、假設(shè)檢驗(yàn)的結(jié)果就全部失真。隨機(jī)序列模型做的事情就是把這些“不獨(dú)立”的結(jié)構(gòu)顯式地寫(xiě)進(jìn)模型里把相關(guān)性當(dāng)作信息而不是麻煩來(lái)用。我在實(shí)際項(xiàng)目里總結(jié)過(guò)一條經(jīng)驗(yàn)?zāi)玫綍r(shí)間序列數(shù)據(jù)后先別看復(fù)雜的模型先畫(huà)三張圖——時(shí)序折線圖、自相關(guān)圖ACF、偏自相關(guān)圖PACF。這三張圖能快速告訴你數(shù)據(jù)里有沒(méi)有趨勢(shì)、有沒(méi)有周期性、相關(guān)性衰減到什么程度。很多人在這一步草率跳過(guò)直接上模型后面十有八九會(huì)回來(lái)返工。1.2 隨機(jī)序列模型的四大主流分支我在不同場(chǎng)景里接觸過(guò)的隨機(jī)序列模型基本可以歸成四大類(lèi)各有各的脾氣。第一類(lèi)是自回歸滑動(dòng)平均家族代表是AR、MA、ARMA、ARIMA以及帶季節(jié)性擴(kuò)展的SARIMA。這類(lèi)模型的核心假設(shè)是“當(dāng)前值可以由過(guò)去若干時(shí)刻的值的加權(quán)組合再加上若干時(shí)刻的噪聲項(xiàng)來(lái)解釋”。它們?cè)谶B續(xù)值預(yù)測(cè)上特別順手比如流量預(yù)測(cè)、銷(xiāo)量預(yù)測(cè)、溫度預(yù)測(cè)。第二類(lèi)是狀態(tài)空間模型代表是卡爾曼濾波和隱馬爾可夫模型HMM。這類(lèi)模型的思路是你觀察到的序列只是“表面”背后還有一條看不見(jiàn)的狀態(tài)鏈在驅(qū)動(dòng)觀測(cè)值變化。HMM在語(yǔ)音識(shí)別、基因序列分析、手勢(shì)識(shí)別里都用得很多因?yàn)樗募僭O(shè)正好匹配“存在隱藏階段、只能通過(guò)觀測(cè)推斷”的場(chǎng)景。第三類(lèi)是蒙特卡洛類(lèi)方法包括隨機(jī)游走、幾何布朗運(yùn)動(dòng)以及各種擴(kuò)散過(guò)程。它們主要用于風(fēng)險(xiǎn)度量、期權(quán)定價(jià)和路徑模擬。這類(lèi)模型不直接預(yù)測(cè)“下一個(gè)值是多少”而是回答“未來(lái)一萬(wàn)條可能路徑長(zhǎng)什么樣、最差情況能差到什么程度”。第四類(lèi)是深度序列模型比如RNN、LSTM、Transformer架構(gòu)的時(shí)序變體。適合數(shù)據(jù)量夠大、特征復(fù)雜、線性模型明顯不夠用的場(chǎng)景。不過(guò)深度學(xué)習(xí)不在本文展開(kāi)后面聊的實(shí)操還是以統(tǒng)計(jì)和概率模型為主因?yàn)樗鼈兘忉屝詮?qiáng)、樣本需求少也更適合作為第一道防線。我選型時(shí)通常問(wèn)三個(gè)問(wèn)題數(shù)據(jù)量有多少你更看重解釋性還是純預(yù)測(cè)精度序列中的不確定性是不是會(huì)隨時(shí)間改變這三個(gè)問(wèn)題的答案基本能把模型范圍壓縮到一到兩個(gè)候選。2. 實(shí)操前的理論底子三大核心機(jī)制2.1 馬爾可夫鏈與狀態(tài)轉(zhuǎn)移要說(shuō)隨機(jī)序列模型里最基礎(chǔ)、也最好理解的一環(huán)肯定是馬爾可夫鏈。它的核心假設(shè)聽(tīng)起來(lái)甚至有點(diǎn)“過(guò)分簡(jiǎn)單”未來(lái)的狀態(tài)只跟當(dāng)前狀態(tài)有關(guān)跟更早的歷史無(wú)關(guān)。用公式寫(xiě)就是P(X_{t1} | X_t, X_{t-1}, ..., X_1) P(X_{t1} | X_t)這個(gè)一階馬爾可夫性雖然樸素但大量實(shí)際問(wèn)題里描述力已經(jīng)足夠。比如判斷一臺(tái)設(shè)備今天處于“正常”“退化”“故障”哪種狀態(tài)明天的狀態(tài)大概率只取決于今天的狀態(tài)而不是一周前在哪個(gè)狀態(tài)。馬爾可夫鏈里最重要的對(duì)象是轉(zhuǎn)移矩陣。假設(shè)有k個(gè)狀態(tài)矩陣的第i行第j列就表示“從狀態(tài)i轉(zhuǎn)移到狀態(tài)j”的概率。把矩陣行行相乘不斷迭代之后狀態(tài)分布會(huì)收斂到一個(gè)不隨時(shí)間變化的分布叫平穩(wěn)分布它描述了系統(tǒng)長(zhǎng)期停留在各個(gè)狀態(tài)的比例。這個(gè)性質(zhì)在排隊(duì)系統(tǒng)分析、網(wǎng)頁(yè)排序、MCMC采樣里都有應(yīng)用。我在做模擬實(shí)驗(yàn)的時(shí)候經(jīng)常先用numpy生成一個(gè)帶設(shè)定轉(zhuǎn)移矩陣的馬爾可夫鏈來(lái)驗(yàn)證算法是否正確。如果連已知轉(zhuǎn)移矩陣都恢復(fù)不出來(lái)算法肯定有問(wèn)題而不是數(shù)據(jù)的問(wèn)題。這一步很多人不理解數(shù)據(jù)建模的目的之一是反向推斷轉(zhuǎn)移規(guī)律但驗(yàn)證時(shí)最好用已知真值的模擬數(shù)據(jù)這樣才能把“模型問(wèn)題”和“數(shù)據(jù)問(wèn)題”分開(kāi)。2.2 隱狀態(tài)與觀測(cè)HMM的結(jié)構(gòu)HMM比標(biāo)準(zhǔn)馬爾可夫鏈多了一層狀態(tài)本身看不見(jiàn)你能看見(jiàn)的只是受狀態(tài)影響的觀測(cè)值。舉例來(lái)說(shuō)某用戶刷短視頻的行為路徑用戶內(nèi)心是“感興趣”還是“準(zhǔn)備劃走”不可直接觀測(cè)但停留時(shí)長(zhǎng)、點(diǎn)贊與否就是觀測(cè)信號(hào)。HMM要回答的核心問(wèn)題是從一串觀測(cè)值倒推最可能的狀態(tài)序列。HMM有三個(gè)關(guān)鍵要素初始狀態(tài)分布、狀態(tài)轉(zhuǎn)移矩陣A、觀測(cè)概率矩陣B。解決三類(lèi)問(wèn)題需要三套算法給定模型和觀測(cè)序列計(jì)算觀測(cè)序列出現(xiàn)的概率——用前向算法。給定模型和觀測(cè)序列倒推最可能的狀態(tài)序列——用維特比算法。只知道一堆觀測(cè)序列反推模型參數(shù)A和B——用Baum-Welch算法本質(zhì)是EM算法。這三件事在實(shí)操里都需要親手寫(xiě)一遍至少也要把推導(dǎo)過(guò)程過(guò)一遍不然用現(xiàn)成庫(kù)的時(shí)候很容易把“解碼”“評(píng)估”“學(xué)習(xí)”三個(gè)接口搞混。我見(jiàn)過(guò)很多同行把維特比解碼的結(jié)果當(dāng)成“模型學(xué)習(xí)的輸出”這其實(shí)只是基于當(dāng)前參數(shù)的最優(yōu)解釋參數(shù)本身還得靠Baum-Welch去估。2.3 ARIMA讓“相關(guān)”變成“可預(yù)測(cè)”ARIMA的完整寫(xiě)法是ARIMA(p,d,q)其中p是自回歸階數(shù)d是差分次數(shù)q是移動(dòng)平均階數(shù)。它背后的邏輯分三步先差分把非平穩(wěn)序列轉(zhuǎn)成平穩(wěn)序列再用AR項(xiàng)描述“當(dāng)前值跟過(guò)去值的關(guān)系”用MA項(xiàng)描述“當(dāng)前值跟過(guò)去預(yù)測(cè)誤差的關(guān)系”。公式寫(xiě)成φ(B)(1-B)^d X_t θ(B) ε_(tái)t其中B是滯后算子ε_(tái)t是白噪聲。如果你覺(jué)得這個(gè)公式有點(diǎn)遠(yuǎn)可以換個(gè)生活化的理解AR項(xiàng)是在說(shuō)“昨天的結(jié)果會(huì)影響今天”MA項(xiàng)是在說(shuō)“昨天的預(yù)測(cè)偏差會(huì)影響今天”差分則是在把“會(huì)漂移的量”變成“相對(duì)穩(wěn)定的增量”。選模型階數(shù)是最考驗(yàn)經(jīng)驗(yàn)的部分。p和q怎么定數(shù)據(jù)量不大時(shí)我會(huì)參考AIC和BIC選值最小的模型數(shù)據(jù)量大時(shí)網(wǎng)格搜索加交叉驗(yàn)證更穩(wěn)妥。但不管哪種方式有一個(gè)底線模型的殘差必須看起來(lái)像白噪聲。如果殘差里還有明顯的自相關(guān)說(shuō)明信息沒(méi)有提取干凈模型結(jié)構(gòu)是錯(cuò)的。3. 一次完整的隨機(jī)序列建模實(shí)操3.1 數(shù)據(jù)準(zhǔn)備與平穩(wěn)性檢驗(yàn)下面我用一個(gè)虛構(gòu)的模擬項(xiàng)目來(lái)帶大家走完整流程。場(chǎng)景設(shè)定為某工廠設(shè)備的溫度傳感器數(shù)據(jù)目標(biāo)是預(yù)測(cè)未來(lái)短時(shí)間內(nèi)的溫度走向提前觸發(fā)過(guò)熱預(yù)警。我們先構(gòu)造一份帶自相關(guān)的模擬序列import numpy as np import matplotlib.pyplot as plt from statsmodels.tsa.stattools import adfuller from statsmodels.graphics.tsaplots import plot_acf, plot_pacf # 生成帶AR(1)結(jié)構(gòu)的模擬數(shù)據(jù)X_t 0.75X_{t-1} eps np.random.seed(42) n 200 x np.zeros(n) for t in range(1, n): x[t] 0.75 * x[t-1] np.random.normal(0, 1) plt.figure(figsize(10, 3)) plt.plot(x) plt.title(Simulated Sensor Sequence) plt.show() # ADF平穩(wěn)性檢驗(yàn) adf_stat, p_value, _, _, _, _ adfuller(x) print(fADF Statistic: {adf_stat:.3f}, p-value: {p_value:.3f})運(yùn)行這組代碼p值會(huì)顯著小于0.05說(shuō)明序列是平穩(wěn)的。如果p值大于0.05基本可以判定序列里有單位根需要用一階差分把它變成平穩(wěn)序列x_diff np.diff(x) adf_stat2, p_value2, _, _, _, _ adfuller(x_diff) print(fAfter diff, p-value: {p_value2:.3f})這里有個(gè)細(xì)節(jié)要注意ADF檢驗(yàn)對(duì)異常值和結(jié)構(gòu)性突變很敏感。數(shù)據(jù)里如果有幾個(gè)離群點(diǎn)檢驗(yàn)結(jié)果會(huì)把平穩(wěn)序列誤判成非平穩(wěn)或者反過(guò)來(lái)。我在實(shí)際項(xiàng)目中碰到過(guò)傳感器偶發(fā)尖峰導(dǎo)致ADF誤判的情況處理方式是先做離群點(diǎn)標(biāo)記再重新檢驗(yàn)不能上來(lái)就差分。3.2 定階讀懂ACF與PACF平穩(wěn)性問(wèn)題解決后畫(huà)ACF和PACF圖來(lái)定階fig, axes plt.subplots(1, 2, figsize(12, 3)) plot_acf(x, lags20, axaxes[0]) plot_pacf(x, lags20, axaxes[1]) plt.show()判斷規(guī)則很簡(jiǎn)單ACF呈現(xiàn)出拖尾——也就是逐漸衰減而不是突然截?cái)郟ACF在一階處出現(xiàn)明顯的尖峰之后迅速落到置信區(qū)間內(nèi)這種情況說(shuō)明自回歸部分取p1。反之如果ACF截?cái)?、PACF拖尾則考慮MA部分取q1。兩者都拖尾就要同時(shí)引入AR和MA項(xiàng)。判斷規(guī)則很簡(jiǎn)單但實(shí)踐里經(jīng)??吹絻煽傻那闆r——這時(shí)候別糾結(jié)直接多試幾個(gè)(p,q)組合讓AIC和BIC來(lái)裁決。小樣本下我還是更信任BIC因?yàn)樗膽土P項(xiàng)更重不容易把模型選得過(guò)于復(fù)雜。這是吃過(guò)虧換來(lái)的教訓(xùn)有一次我為了壓低保內(nèi)誤差把ARIMA(3,1,3)的階數(shù)拉得很高訓(xùn)練集上殘差確實(shí)好看換了一批驗(yàn)證數(shù)據(jù)馬上崩盤(pán)預(yù)測(cè)誤差比簡(jiǎn)單模型還大一倍。從那以后小樣本定階我基本優(yōu)先BIC。3.3 擬合、預(yù)測(cè)與殘差診斷用 statsmodels 擬合ARIMA并做前向預(yù)測(cè)from statsmodels.tsa.arima.model import ARIMA model ARIMA(x, order(1, 0, 0)) # 我們已知真實(shí)結(jié)構(gòu)是AR(1) result model.fit() print(result.summary()) # 前10步預(yù)測(cè) pred result.forecast(steps10) print(pred)擬合之后最重要的一步是診斷殘差。你要確認(rèn)殘差序列近似白噪聲from statsmodels.stats.diagnostic import acorr_ljungbox resid result.resid lb acorr_ljungbox(resid, lags[10], return_dfTrue) print(lb)Ljung-Box檢驗(yàn)的p值如果大于0.05就說(shuō)明殘差中沒(méi)有顯著自相關(guān)模型已經(jīng)提取了所需信息。反之如果p值很小代表還有相關(guān)性漏在殘差里模型需要調(diào)整。這一步是建模流程的質(zhì)檢關(guān)我在項(xiàng)目里無(wú)條件執(zhí)行哪怕擬合結(jié)果看起來(lái)再完美殘差不過(guò)這關(guān)就要返工。3.4 擴(kuò)展對(duì)比把HMM用在狀態(tài)識(shí)別上同樣是這一條溫度序列如果換一個(gè)任務(wù)——判斷設(shè)備當(dāng)前處于“正常運(yùn)行”“性能衰減”“即將故障”三個(gè)隱藏狀態(tài)之一——ARIMA就不太合適了這時(shí)候換HMM上場(chǎng)。我用numpy手寫(xiě)一個(gè)兩狀態(tài)的HMM模擬來(lái)演示核心機(jī)制# 模擬兩個(gè)隱狀態(tài)觀測(cè)分別為正態(tài)(0,1) 和 正態(tài)(4,1) T 300 states np.zeros(T, dtypeint) obs np.zeros(T) A np.array([[0.9, 0.1], [0.2, 0.8]]) pi np.array([0.6, 0.4]) s np.random.choice([0, 1], ppi) for t in range(T): states[t] s if s 0: obs[t] np.random.normal(0, 1) else: obs[t] np.random.normal(4, 1) s np.random.choice([0, 1], pA[s])觀察分布如果兩個(gè)狀態(tài)的均值拉得足夠開(kāi)HMM就能把觀測(cè)序列重構(gòu)回狀態(tài)序列。這里推薦直接用現(xiàn)成的庫(kù)做完整訓(xùn)練和維特比解碼比自己硬寫(xiě)B(tài)aum-Welch要穩(wěn)。但在調(diào)用庫(kù)之前我建議先手動(dòng)實(shí)現(xiàn)一遍前向算法不為別的就為了搞清楚“對(duì)數(shù)似然為什么在訓(xùn)練中必須單調(diào)上升”這個(gè)關(guān)鍵問(wèn)題——如果你發(fā)現(xiàn)對(duì)數(shù)似然下降了那一定是代碼里數(shù)值下溢或轉(zhuǎn)移概率更新出錯(cuò)而不是EM算法本身的問(wèn)題。3.5 蒙特卡洛給序列加一層 what-if隨機(jī)序列模型還能回答一類(lèi)更實(shí)際的問(wèn)題未來(lái)走勢(shì)最壞能多壞不考慮確定性預(yù)測(cè)值而是模擬成千上萬(wàn)條路徑看分布尾部。# 幾何布朗運(yùn)動(dòng)路徑模擬 mu, sigma 0.01, 0.02 S0 100 T, dt 250, 1/250 N 5 # 模擬5條路徑作示意 for _ in range(N): steps np.random.normal(mu*dt, sigma*np.sqrt(dt), T) path S0 * np.exp(np.cumsum(steps)) plt.plot(path) plt.show()路徑模擬的要點(diǎn)在于隨機(jī)數(shù)種子要固定否則實(shí)驗(yàn)結(jié)果不可復(fù)現(xiàn)。后面的風(fēng)險(xiǎn)指標(biāo)比如最大回撤或尾部損失全都建立在“同樣的模擬條件可以重跑”的前提下。另外模擬次數(shù)不能太少五條路徑只是演示實(shí)際做風(fēng)險(xiǎn)分析我至少跑十萬(wàn)條路徑否則尾部估計(jì)方差大得離譜。4. 常見(jiàn)問(wèn)題與排查技巧實(shí)錄4.1 平穩(wěn)性判斷翻車(chē)平穩(wěn)性這個(gè)概念看起來(lái)簡(jiǎn)單做起來(lái)全是坑。我遇到過(guò)幾次典型翻車(chē)一次是數(shù)據(jù)里有明顯的趨勢(shì)ADF檢驗(yàn)結(jié)果卻是平穩(wěn)的后來(lái)發(fā)現(xiàn)原因是不小心把趨勢(shì)項(xiàng)和時(shí)間變量一起回歸導(dǎo)致檢驗(yàn)式設(shè)定錯(cuò)誤另一次是序列已經(jīng)平穩(wěn)了但因?yàn)樵贏DF檢驗(yàn)時(shí)選擇了帶常數(shù)項(xiàng)和趨勢(shì)項(xiàng)的回歸形式顯著性反而變差最后把趨勢(shì)項(xiàng)去掉就通過(guò)檢驗(yàn)。我的例行做法是先畫(huà)折線圖看有無(wú)明顯趨勢(shì)再看定階時(shí)要不要加常數(shù)項(xiàng)。ADF檢驗(yàn)有不同設(shè)定形式帶漂移項(xiàng)和不帶漂移項(xiàng)的結(jié)果可能完全不同不能只報(bào)一個(gè)p值。你在報(bào)告里寫(xiě)結(jié)論時(shí)最好注明用的是哪種檢驗(yàn)設(shè)定。4.2 模型過(guò)擬合與階數(shù)選擇過(guò)度追求訓(xùn)練集擬合優(yōu)度是新手最容易踩的坑。ARMA族模型的階數(shù)一旦調(diào)高訓(xùn)練數(shù)據(jù)上殘差會(huì)很好看但泛化性能直線下降。我自己的經(jīng)驗(yàn)是對(duì)樣本量低于200的短序列模型總參數(shù)盡量控制在5個(gè)以內(nèi)寧可欠擬合也不要盲目堆階數(shù)。模型對(duì)比別只盯AIC結(jié)合殘差檢驗(yàn)和滾動(dòng)預(yù)測(cè)誤差綜合判斷更可靠。4.3 收斂與初始化陷阱HMM訓(xùn)練的EM算法很容易陷入局部最優(yōu)。對(duì)策是多做幾次隨機(jī)初始化從中選擇對(duì)數(shù)似然最高的結(jié)果。另一個(gè)容易被忽略的點(diǎn)是概率值在長(zhǎng)序列上的數(shù)值下溢記得全程用對(duì)數(shù)似然而不是直接乘原始概率??柭鼮V波則需要小心初始協(xié)方差矩陣的設(shè)置設(shè)置得太大或太小濾波前期都會(huì)出現(xiàn)明顯的震蕩。4.4 常見(jiàn)問(wèn)題速查表癥狀可能原因排查方向ADF p值忽大忽小檢驗(yàn)式設(shè)定不一致固定檢驗(yàn)形式標(biāo)注是否含趨勢(shì)項(xiàng)殘差仍有自相關(guān)模型階數(shù)不足提高p或q再做Ljung-Box檢驗(yàn)不同隨機(jī)數(shù)種子結(jié)果差異大初始值敏感固定種子多初始點(diǎn)對(duì)比維特比解碼結(jié)果跳變嚴(yán)重觀測(cè)分布區(qū)分度低檢查隱狀態(tài)數(shù)是否過(guò)多或特征不足預(yù)測(cè)區(qū)間過(guò)寬模型未捕捉趨勢(shì)或波動(dòng)率變化嘗試帶漂移項(xiàng)或換GARCH類(lèi)模型最后再分享一個(gè)私藏技巧做隨機(jī)序列建模之前先把數(shù)據(jù)按時(shí)間順序洗一遍做一次殘差的自相關(guān)檢查——哪怕模型還沒(méi)建這一步也能快速暴露數(shù)據(jù)里是否有缺失值插補(bǔ)不當(dāng)、重復(fù)采樣或時(shí)間戳不對(duì)齊的隱藏問(wèn)題。我在不止一個(gè)項(xiàng)目里發(fā)現(xiàn)時(shí)間戳重復(fù)導(dǎo)致自相關(guān)虛高白白浪費(fèi)了整個(gè)下午調(diào)階數(shù)。序列數(shù)據(jù)對(duì)整理的要求遠(yuǎn)高于普通表格數(shù)據(jù)把數(shù)據(jù)流水線弄干凈模型自己會(huì)變聰明一半。