欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實現(xiàn)時間序列變化點檢測功能

 更新時間:2024年09月09日 09:18:43   作者:deephub  
平穩(wěn)性是時間序列分析與預(yù)測的核心概念,在平穩(wěn)條件下,時間序列的統(tǒng)計特性(如均值)在時間維度上保持不變,僅存在隨機波動,但是時間序列通常會經(jīng)歷結(jié)構(gòu)性斷裂或變化,本文給大家介紹了Python實現(xiàn)時間序列變化點檢測功能,需要的朋友可以參考下

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

但是實際數(shù)據(jù)集中很少觀察到完全的平穩(wěn)性。時間序列通常會經(jīng)歷結(jié)構(gòu)性斷裂或變化。這些變化會引入非平穩(wěn)性,從而改變時間序列的整體分布,這些標(biāo)志著變化開始的時間點被稱為變化點。

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

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

接下來,我們首先詳細(xì)探討不同類型的結(jié)構(gòu)變化。

結(jié)構(gòu)變化的類型

結(jié)構(gòu)變化可以分為多種類型。深入理解這些變化的性質(zhì)對于選擇適當(dāng)?shù)奶幚聿呗灾陵P(guān)重要。

水平變化

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

永久性水平移動是指序列的平均值永久性地轉(zhuǎn)移到一個新的水平。例如當(dāng)一家零售企業(yè)開設(shè)新店時,銷售時間序列可能會轉(zhuǎn)移到一個更高的水平,反映出擴大的客戶基礎(chǔ)。

在這里插入圖片描述

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

在這里插入圖片描述

方差變化

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

在這里插入圖片描述

方差的周期性變化是波動聚類現(xiàn)象的典型特征。波動聚類指的是時間序列呈現(xiàn)出低方差期和高方差期交替出現(xiàn)的模式。換言之,大(?。┓茸兓鶗B續(xù)出現(xiàn)。

以下是表示每小時風(fēng)速變化的時間序列示例,展示了波動聚類現(xiàn)象:

在這里插入圖片描述

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

波動聚類在氣象學(xué)(如風(fēng)速分析)和金融學(xué)(如資產(chǎn)價格研究)等領(lǐng)域中較為常見。

基于Python的變化點檢測代碼實現(xiàn)

變化點檢測算法旨在精確識別時間序列分布發(fā)生顯著變化的時間點。本節(jié)將詳細(xì)探討多種變化點檢測方法的實際應(yīng)用。

我們從 datasetsforecast 庫中加載一個示例時間序列數(shù)據(jù):

 fromdatasetsforecast.m4importM4  
 
 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')  

此數(shù)據(jù)集是非常有名的銷量預(yù)測比賽M4

利用kats進行變化點檢測

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

kats要求使用特定的數(shù)據(jù)結(jié)構(gòu),可以按以下方式進行設(shè)置:

 fromkats.constsimportTimeSeriesData  
 
 ts=TimeSeriesData(df=series[['time', 'y']])

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

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

 fromkats.tests.detectors.test_cusum_detectionimportCUSUMDetector  
 
 model=CUSUMDetector(ts)  
 change_points=model.detector(direction=['decrease', 'increase'])  
 model.plot(change_points)

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

CUSUM方法實現(xiàn)了對變化點的準(zhǔn)確檢測:

在這里插入圖片描述

另一種與CUSUM相似的方法是在移動平均的基礎(chǔ)上計算z分?jǐn)?shù)。kats中的 RobustStatDetector 就采用了這種方法:

 fromkats.tests.detectors.test_robust_stat_detectionimportRobustStatDetector  
 
 model=RobustStatDetector(ts)  
 change_points=model.detector(p_value_cutoff=0.001, comparison_window=12)  
 model.plot(change_points)

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

在這里插入圖片描述

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

利用ruptures進行變化點檢測

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

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

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

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

以下是PELT模型的檢測結(jié)果:

在這里插入圖片描述

變化點的處理策略

在識別出變化點后,下一步就是采取適當(dāng)?shù)奶幚泶胧R韵率菐追N常用的處理方法:

差分法

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

以下是示例序列的一階差分結(jié)果:

在這里插入圖片描述

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

虛擬變量法

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

在這里插入圖片描述

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

區(qū)制轉(zhuǎn)換模型

對于暫時性變化,區(qū)制轉(zhuǎn)換模型(regime-switching)是一種較為復(fù)雜但有效的建模方法。這類模型能夠根據(jù)當(dāng)前的狀態(tài)或區(qū)制采用不同的參數(shù)設(shè)置。

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

總結(jié)結(jié)論

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

時間序列常常受到結(jié)構(gòu)變化的影響,這些變化會顯著改變序列的統(tǒng)計分布特性。結(jié)構(gòu)變化可能發(fā)生在均值或方差上,并且可能是永久性的或暫時性的。準(zhǔn)確識別變化的性質(zhì)對于選擇適當(dāng)?shù)奶幚矸椒ㄖ陵P(guān)重要?,F(xiàn)代統(tǒng)計和機器學(xué)習(xí)提供了多種變化點檢測方法,如CUSUM和PELT算法。這些方法在kats和ruptures等Python庫中都有實現(xiàn),為實踐應(yīng)用提供了便利。對于檢測到的變化點,可以采用多種處理策略。差分法和引入虛擬變量是處理均值變化的常用方法,而對于更復(fù)雜的情況,可以考慮使用區(qū)制轉(zhuǎn)換模型。數(shù)據(jù)預(yù)處理在處理結(jié)構(gòu)變化中扮演著關(guān)鍵角色。合適的預(yù)處理不僅可以穩(wěn)定序列的方差,還能為后續(xù)的建模工作奠定基礎(chǔ)。

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

以上就是Python實現(xiàn)時間序列變化點檢測功能的詳細(xì)內(nèi)容,更多關(guān)于Python時間序列變化點檢測的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 一文解密Python的弱引用

    一文解密Python的弱引用

    弱引用在很多語言中都存在,最常用來解決循環(huán)引用問題,本文就來和大家一起探索一下python中的弱引用,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-09-09
  • 詳解Python 實現(xiàn) ZeroMQ 的三種基本工作模式

    詳解Python 實現(xiàn) ZeroMQ 的三種基本工作模式

    ZMQ是一個簡單好用的傳輸層,像框架一樣的一個 socket library,他使得 Socket 編程更加簡單、簡潔和性能更高。 ,這篇文章主要介紹了Python 實現(xiàn) ZeroMQ 的三種基本工作模式,需要的朋友可以參考下
    2020-03-03
  • Python中使用YAML文件進行配置文件管理

    Python中使用YAML文件進行配置文件管理

    配置文件管理已經(jīng)成為了一個不可或缺的環(huán)節(jié)。它們包含了程序運行所需的各種參數(shù),本文主要介紹了Python中使用YAML文件進行配置文件管理,感興趣的可以了解一下
    2023-12-12
  • Python Pygame中精靈和碰撞檢測詳解

    Python Pygame中精靈和碰撞檢測詳解

    對于游戲中出現(xiàn)的每一樣?xùn)|西,比如磚塊箱子水管地面,還有人物都可以看成是一個獨立的物體,所以每個物體類都繼承了pygame的精靈類pg.sprite.Sprite,這篇文章主要給大家介紹了關(guān)于Python Pygame中精靈和碰撞檢測的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • 基于Python的ModbusTCP客戶端實現(xiàn)詳解

    基于Python的ModbusTCP客戶端實現(xiàn)詳解

    這篇文章主要介紹了基于Python的ModbusTCP客戶端實現(xiàn)詳解,Modbus Poll和Modbus Slave是兩款非常流行的Modbus設(shè)備仿真軟件,支持Modbus RTU/ASCII和Modbus TCP/IP協(xié)議 ,經(jīng)常用于測試和調(diào)試Modbus設(shè)備,觀察Modbus通信過程中的各種報文,需要的朋友可以參考下
    2019-07-07
  • Pytorch Tensor基本數(shù)學(xué)運算詳解

    Pytorch Tensor基本數(shù)學(xué)運算詳解

    今天小編就為大家分享一篇Pytorch Tensor基本數(shù)學(xué)運算詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • 解決CentOS下ImportError: No module named '_sqlite3'的問題

    解決CentOS下ImportError: No module named &a

    這篇文章主要介紹了解決CentOS下ImportError: No module named '_sqlite3'的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • python爬蟲獲取淘寶天貓商品詳細(xì)參數(shù)

    python爬蟲獲取淘寶天貓商品詳細(xì)參數(shù)

    這篇文章主要為大家詳細(xì)介紹了python爬蟲獲取淘寶天貓商品詳細(xì)參數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • 淺談keras使用中val_acc和acc值不同步的思考

    淺談keras使用中val_acc和acc值不同步的思考

    這篇文章主要介紹了淺談keras使用中val_acc和acc值不同步的思考,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Python報錯:OSError:?[Errno?22]?Invalid?argument解決方案及應(yīng)用實例

    Python報錯:OSError:?[Errno?22]?Invalid?argument解決方案及應(yīng)用實例

    最近跑別人的項目遇到一個這樣的問題一開始以為是沒有用管理員的權(quán)限運行,導(dǎo)致創(chuàng)建不了日志文件后來發(fā)現(xiàn)是和windows的命名規(guī)則沖突了,這篇文章主要給大家介紹了關(guān)于Python報錯:OSError:?[Errno?22]?Invalid?argument的解決方案及應(yīng)用實例,需要的朋友可以參考下
    2024-07-07

最新評論