ACF和PACF在時間序列中的應用

一、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-hk/n/328982.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
DCUBY的頭像DCUBY
上一篇 2025-01-14 18:54
下一篇 2025-01-14 18:54

相關推薦

  • 解決docker-compose 容器時間和服務器時間不同步問題

    docker-compose是一種工具,能夠讓您使用YAML文件來定義和運行多個容器。然而,有時候容器的時間與服務器時間不同步,導致一些不必要的錯誤和麻煩。以下是解決方法的詳細介紹…

    編程 2025-04-29
  • Python序列的常用操作

    Python序列是程序中的重要工具,在數據分析、機器學習、圖像處理等很多領域都有廣泛的應用。Python序列分為三種:列表(list)、元組(tuple)和字符串(string)。…

    編程 2025-04-28
  • 想把你和時間藏起來

    如果你覺得時間過得太快,每天都過得太匆忙,那麼你是否曾經想過想把時間藏起來,慢慢享受每一個瞬間?在這篇文章中,我們將會從多個方面,詳細地闡述如何想把你和時間藏起來。 一、一些時間管…

    編程 2025-04-28
  • 計算斐波那契數列的時間複雜度解析

    斐波那契數列是一個數列,其中每個數都是前兩個數的和,第一個數和第二個數都是1。斐波那契數列的前幾項為:1,1,2,3,5,8,13,21,34,…。計算斐波那契數列常用…

    編程 2025-04-28
  • 時間戳秒級可以用int嗎

    時間戳是指從某個固定的時間點開始計算的已經過去的時間。在計算機領域,時間戳通常使用秒級或毫秒級來表示。在實際使用中,我們經常會遇到需要將時間戳轉換為整數類型的情況。那麼,時間戳秒級…

    編程 2025-04-28
  • 如何在ACM競賽中優化開發時間

    ACM競賽旨在提高程序員的算法能力和解決問題的實力,然而在比賽中優化開發時間同樣至關重要。 一、規劃賽前準備 1、提前熟悉比賽規則和題目類型,了解常見算法、數據結構和快速編寫代碼的…

    編程 2025-04-28
  • 使用JavaScript日期函數掌握時間

    在本文中,我們將深入探討JavaScript日期函數,並且從多個視角介紹其應用方法和重要性。 一、日期的基本表示與獲取 在JavaScript中,使用Date對象來表示日期和時間,…

    編程 2025-04-28
  • Python整數序列求和

    本文主要介紹如何使用Python求解整數序列的和,給出了多種方法和示例代碼。 一、基本概念 在Python中,整數序列指的是一組整數的集合,可以使用列表(list)或元組(tupl…

    編程 2025-04-27
  • Python序列最大值的實現方法

    本篇文章主要介紹如何使用Python尋找序列中的最大值,在文章中我們將通過多個方面,詳細闡述如何實現。 一、Python內置函數max() 使用Python內置函數max()可以快…

    編程 2025-04-27
  • Java Date時間大小比較

    本文將從多個角度詳細闡述Java中Date時間大小的比較,包含了時間字符串轉換、日期相減、使用Calendar比較、使用compareTo方法比較等多個方面。相信這篇文章能夠對你解…

    編程 2025-04-27

發表回復

登錄後才能評論