成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

時間序列結構變化分析:Python實現時間序列變化點檢測

開發 前端
平穩性是時間序列分析與預測的核心概念。在平穩條件下,時間序列的統計特性(如均值)在時間維度上保持不變,僅存在隨機波動。

平穩性是時間序列分析與預測的核心概念。在平穩條件下,時間序列的統計特性(如均值)在時間維度上保持不變,僅存在隨機波動。

但是實際數據集中很少觀察到完全的平穩性。時間序列通常會經歷結構性斷裂或變化。這些變化會引入非平穩性,從而改變時間序列的整體分布,這些標志著變化開始的時間點被稱為變化點。

在時間序列分析和預測中,準確檢測結構變化至關重要。新出現的分布模式往往會導致歷史數據失去代表性,進而影響基于這些數據訓練的模型的有效性。因此需要采用最新數據更新模型或采取其他適當策略。對于歷史數據中的變化點,可以通過特征工程方法(如干預分析)進行處理。

但需要注意的是,結構變化與異常值是兩個不同的概念。異常值是指與時間序列的基本結構或分布所定義的正常行為顯著偏離的觀測值。而變化點則是指時間序列的整體結構發生轉變,導致分布特性的改變。

接下來,我們首先詳細探討不同類型的結構變化。

結構變化的類型

結構變化可以分為多種類型。深入理解這些變化的性質對于選擇適當的處理策略至關重要。

水平變化

水平變化主要體現在序列的均值或方差上。均值的變化表現為平均水平的移動,可以是永久性的,也可以是暫時性的。

永久性水平移動是指序列的平均值永久性地轉移到一個新的水平。例如當一家零售企業開設新店時,銷售時間序列可能會轉移到一個更高的水平,反映出擴大的客戶基礎。

暫時性水平移動是指平均值在一段時間后恢復到原有水平。例如制造工廠的一臺機器因維修而臨時停機,生產時間序列在維修期間會出現暫時性的低值。一旦機器恢復運行,生產水平預計會回到正常狀態。

方差變化

方差的變化會導致時間序列離散程度的增加或減少,具有非恒定方差的時間序列通常被稱為異方差序列。方差的變化同樣可以是永久性的或暫時性的。

方差的周期性變化是波動聚類現象的典型特征。波動聚類指的是時間序列呈現出低方差期和高方差期交替出現的模式。換言之,大(小)幅度變化往往會連續出現。

以下是表示每小時風速變化的時間序列示例,展示了波動聚類現象:

具有波動聚類特征的時間序列示例。

波動聚類在氣象學(如風速分析)和金融學(如資產價格研究)等領域中較為常見。

基于Python的變化點檢測代碼實現

變化點檢測算法旨在精確識別時間序列分布發生顯著變化的時間點。本節將詳細探討多種變化點檢測方法的實際應用。

我們從 datasetsforecast 庫中加載一個示例時間序列數據:

from datasetsforecast.m4 import M4  
 
 dataset, *_ = M4.load('./data', 'Monthly')  
 
 series = dataset.query(f'unique_id=="M1430"').reset_index(drop=True)  
 series['time'] = pd.date_range(end='2023-12-01', periods=series.shape[0], freq='M')

此數據集是非常有名的銷量預測比賽M4

利用kats進行變化點檢測

kats是Meta開發的一個功能強大的時間序列分析庫。它提供了多種變化檢測方法,包括CUSUM(累積和)和貝葉斯在線變化點檢測等。

kats要求使用特定的數據結構,可以按以下方式進行設置:

from kats.consts import TimeSeriesData  
 
 ts = TimeSeriesData(df=series[['time', 'y']])

CUSUM(累積和)是一種廣泛應用于檢測時間序列均值變化的方法。其原理是計算相對于預期值的偏差累積和。如果序列的均值保持穩定,累積和將呈現圍繞零的隨機波動。累積和的持續正向(或負向)變化則表明均值發生了上升(或下降)移動。

以下代碼展示了如何使用kats中的CUSUM方法:

from kats.tests.detectors.test_cusum_detection import CUSUMDetector  
 
 model = CUSUMDetector(ts)  
 change_points = model.detector(direction=['decrease', 'increase'])  
 model.plot(change_points)

detector方法的 direction 參數用于指定需要監測的變化方向。在本例中我們同時監測序列的上升和下降變化。

CUSUM方法實現了對變化點的準確檢測:

另一種與CUSUM相似的方法是在移動平均的基礎上計算z分數。kats中的 RobustStatDetector 就采用了這種方法:

from kats.tests.detectors.test_robust_stat_detection import RobustStatDetector  
 
 model = RobustStatDetector(ts)  
 change_points = model.detector(p_value_cutoff=0.001, comparison_window=12)  
 model.plot(change_points)

在這個方法中,我們將p值閾值設置為0.001,窗口大小設置為12(對應于一年的數據,因為該序列是按月收集的)。

使用kats中的RobustStatDetector檢測變化點。RobustStatDetector在這個例子中檢測到了幾個相互靠近的變化點。

利用ruptures進行變化點檢測

ruptures庫同樣提供了多種變化點檢測算法的實現,包括PELT(修剪精確線性時間)、基于核的算法和動態規劃算法等。

以下是使用PELT算法檢測均值變化的示例:

import ruptures as rpt  
 
 # 將時間序列轉換為numpy數組  
 signal = series['y'].values  
 
 # 擬合PELT模型  
 model = rpt.Pelt(model="rbf").fit(signal)  
 
 # 獲取變化點  
 result = model.predict(pen=10)

PELT算法的核心思想是將時間序列分割成具有不同統計特性(如均值)的多個片段。它通過最小化一個用戶定義的成本函數來實現這一目標,該函數的具體形式取決于需要檢測的變化類型。在這個例子中我們使用了基于徑向基函數的模型(model="rbf")。

以下是PELT模型的檢測結果:

圖片

變化點的處理策略

在識別出變化點后,下一步就是采取適當的處理措施。以下是幾種常用的處理方法:

差分法

對時間序列進行差分是處理均值變化的一種有效方法。這種技術通過計算連續觀測值之間的差值來穩定序列的平均水平。

以下是示例序列的一階差分結果:

差分法能夠有效消除許多類型的非平穩性,使得后續的分析和建模工作更加可靠。

虛擬變量法

另一種處理變化點的方法是引入虛擬變量。這種方法在變化點之前賦值為0,之后賦值為1,從而在模型中顯式地表示結構變化。

圖片

虛擬變量法允許模型捕捉變化前后的不同行為,提高了模型的靈活性和準確性。

區制轉換模型

對于暫時性變化,區制轉換模型(regime-switching)是一種較為復雜但有效的建模方法。這類模型能夠根據當前的狀態或區制采用不同的參數設置。

閾值自回歸(TAR)模型是區制轉換模型的一個典型例子。TAR模型對不同范圍的時間序列值采用不同的參數,從而能夠捕捉復雜的非線性動態。

總結結論

通過本文的分析,我們可以得出以下幾點重要結論:

  1. 時間序列常常受到結構變化的影響,這些變化會顯著改變序列的統計分布特性。
  2. 結構變化可能發生在均值或方差上,并且可能是永久性的或暫時性的。準確識別變化的性質對于選擇適當的處理方法至關重要。
  3. 現代統計和機器學習提供了多種變化點檢測方法,如CUSUM和PELT算法。這些方法在kats和ruptures等Python庫中都有實現,為實踐應用提供了便利。
  4. 對于檢測到的變化點,可以采用多種處理策略。差分法和引入虛擬變量是處理均值變化的常用方法,而對于更復雜的情況,可以考慮使用區制轉換模型。
  5. 數據預處理在處理結構變化中扮演著關鍵角色。合適的預處理不僅可以穩定序列的方差,還能為后續的建模工作奠定基礎。

通過深入理解時間序列的結構變化,并靈活運用各種檢測和處理方法,分析人員可以顯著提高時間序列模型的準確性和可靠性,為決策提供更有力的支持。

責任編輯:華軒 來源: DeepHub IMBA
相關推薦

2021-03-31 11:20:57

PythonADTK異常檢測

2024-05-30 12:50:54

2022-11-14 14:36:59

數據集Python自相關

2021-08-05 13:49:39

Python工具開發

2025-01-13 07:23:14

PythonAeon開發

2020-02-18 16:07:17

物聯網表存儲數據庫

2019-08-06 10:35:25

Python時間序列可視化

2025-01-14 14:04:45

2023-10-30 15:37:48

Python庫時間序列分析數據集

2024-06-03 11:05:11

2021-07-01 21:46:30

PythonHot-Winters數據

2025-03-28 10:10:30

機器學習PythonMSET

2022-05-12 11:12:46

MongoDB索引元數據

2022-11-03 15:18:20

Python組件算法

2021-07-02 10:05:45

PythonHot-winters指數平滑

2023-09-13 18:28:00

Nginx日志JSON

2017-03-15 15:45:33

MySQL存儲引擎設計與實現

2020-10-27 10:13:06

Python時間序列代碼

2022-09-30 10:31:06

Python時間序列數據

2023-01-05 16:36:55

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久综合伊人 | 午夜码电影 | 日韩精品免费视频 | aaa级片 | 求毛片 | 亚洲日本视频 | 午夜精品久久久久久不卡欧美一级 | 欧美一级二级视频 | 亚洲毛片在线观看 | 99久久久久久99国产精品免 | 欧美综合一区二区 | 99视频精品| 日韩欧美亚洲 | 日韩一区三区 | 欧美激情综合五月色丁香小说 | 欧美一区二区三区在线视频 | www.788.com色淫免费 | 毛片一级片| 盗摄精品av一区二区三区 | 一区二区三区四区免费在线观看 | 在线免费观看成人 | 精品久久香蕉国产线看观看亚洲 | 在线观看亚洲 | a毛片| 韩日有码 | 国产精品久久精品 | 日韩福利一区 | 久视频在线观看 | 欧美激情黄色 | 欧美一级淫片免费视频黄 | 欧美日韩国产一区二区三区不卡 | 日韩久久网 | 少妇一级淫片免费放播放 | 中文区中文字幕免费看 | jizz亚洲人 | 人人澡人人射 | 视频羞羞 | 中文字幕免费中文 | 亚洲国产欧美一区 | 欧美jizzhd精品欧美巨大免费 | 免费a级毛片在线播放 |