一、ACF和PACF概念
自相關函數(ACF,Autocorrelation Function)是一種時間序列分析方法,在統計學中常常用於尋找時間序列中的循環波動。自相關函數ACF的含義是同一時間序列在不同時間點上的取值之間的相關程度。
部分自相關函數(PACF,Partial Autocorrelation Function) 其實是求解遞歸的偏相關係數。此概念源於剛才提到的AR(p)模型中的「p」。這裡說的「偏」就是指消除其它所有項對第k階自相關係數的影響。[1]
import pandas as pd from statsmodels.graphics.tsaplots import plot_acf, plot_pacf from statsmodels.tsa.stattools import acf, pacf # 創建時間序列 date_rng = pd.date_range(start='1/1/2020', end='1/08/2020', freq='H') ts = pd.DataFrame(date_rng, columns=['date']) ts['data'] = pd.to_datetime(ts['date'],errors='coerce') ts['count'] = ts['date'].dt.hour # 繪製ACF和PACF圖 plot_acf(ts['count']) plot_pacf(ts['count'])
二、ACF和PACF的用法
在時間序列預測建模中,使用ACF和PACF可以幫助我們選擇正確的模型。當ACF和PACF曲線截尾後,我們可以得到一個最佳的ARMA模型。
如果ACF曲線具有截尾性,而PACF曲線具有截尾性,那麼就應該採用ARMA模型。具體的含義是,該時間序列可以用ARMA模型中的p階自回歸和q階移動平均項來擬合。[2]
from statsmodels.tsa.arima_model import ARIMA # 建立ARIMA模型 model = ARIMA(ts['count'], order=(2, 1, 2)) model_fit = model.fit(disp=0) print(model_fit.summary())
三、ACF和PACF的局限性
ACF和PACF方法並不能適用於所有類型的時間序列。例如,時間序列中存在趨勢和季節性的情況下,將出現「帶」現象,因此可能需要使用更高階的模型。此外,如果時間序列具有雜訊,則其自相關或偏自相關包含大量雜訊,沒有明顯的截尾。
在這種情況下,可以考慮使用其他預測建模方法,例如ETS模型、SARIMA模型等等。
四、總結
ACF和PACF是時間序列預測建模中非常重要的工具,可以幫助我們選擇正確的ARMA模型。使用這兩種方法需要注意時間序列的類型和數據質量,避免「帶」現象和雜訊的影響。
完整代碼參見:
import pandas as pd from statsmodels.graphics.tsaplots import plot_acf, plot_pacf from statsmodels.tsa.stattools import acf, pacf from statsmodels.tsa.arima_model import ARIMA # 創建時間序列 date_rng = pd.date_range(start='1/1/2020', end='1/08/2020', freq='H') ts = pd.DataFrame(date_rng, columns=['date']) ts['data'] = pd.to_datetime(ts['date'],errors='coerce') ts['count'] = ts['date'].dt.hour # 繪製ACF和PACF圖 plot_acf(ts['count']) plot_pacf(ts['count']) # 建立ARIMA模型 model = ARIMA(ts['count'], order=(2, 1, 2)) model_fit = model.fit(disp=0) print(model_fit.summary())
參考文獻
[1] 騰訊課堂. 決策樹. ACF與PACF相關知識. https://ke.qq.com/course/55475?tuin=305ebb5c
[2] 橘子有時. 【Python時間序列】二、ARIMA模型初步. https://www.cnblogs.com/juzihong/p/9349847.html
原創文章,作者:DCUBY,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/328982.html