python时间序列预测不连续怎么办_手把手教你用Python处理非平稳时间序列
1. 平穩簡介
“平穩”是處理時間序列數據時遇到的最重要的概念之一:平穩序列是指其特性-均值、方差和協方差不隨時間而變化的序列。
讓我們用一個直觀的例子來理解這一點。考慮以下三個圖形:
在第一幅圖中,我們可以清楚地看到,均值隨時間而變化(增加),呈現上升的趨勢。因此,這是一個非平穩序列。平穩序列不應該呈現出隨時間變化的趨勢。
第二幅圖顯然看不到序列的趨勢,但序列的變化是一個時間的函數。正如前面提到的,平穩序列的方差必須是一個常數。
再來看第三幅圖,隨著時間的增加,序列傳播后變得更近,這意味著協方差是時間的函數。
上述三個例子均是非平穩時間序列。現在來看第四個圖:
在這張圖中,均值、方差和協方差都是常數,這就是平穩時間序列。
再想一想,上面的哪一幅圖預測未來會更容易呢?第四個圖,對吧?大多數統計模型都要求序列是平穩的,這樣才能進行有效和精確的預測。
因此,總的來說,平穩時間序列是一個不依賴時間變化 (即均值、方差和協方差不隨時間變化)的時間序列。在下一節中,我們將介紹各種檢測給定序列是否平穩的方法。
2. 加載數據
在本節和后續幾節中,將介紹檢測時間序列數據的平穩性的方法,以及如何處理非平穩序列。同時,本文還提供了相應的Python代碼。大家可以到:AirPassengers下載文中使用的數據集。
在繼續分析數據集之前,首先加載和預處理數據。
好了,看來可以繼續了!
3. 檢驗平穩的方法
下一步是確定給定的序列是否是平穩的,并對它做相應的處理。本節將介紹一些常見的方法,利用這些方法來檢測序列是否平穩。
目視檢驗
看一下我們在上一節中使用的圖形,僅需通過目測圖形,便能夠識別出序列的均值和方差是否隨時間變化。同樣,通過繪制數據圖形,便能確定該序列的屬性是否隨時間而變化。
顯然,通過作圖,可以看到序列的趨勢(變化的均值),然而,這種目視檢測方法得到的結果可能不準確。最好是用一些統計檢驗方法來驗證觀測結果。
統計檢驗
可以利用統計檢驗來代替目視檢驗:比如單位根平穩檢驗。單位根表名給定序列的統計特性(均值,方差和協方差)不是時間的常數,這是平穩時間序列的先決條件。下面是它的數學解釋:
假設我們有一個時間序列:
其中yt是t時刻的數據值,ε t 是誤差項。需要利用yt-1的值來計算yt,即:
如果利用所有的觀察值,yt 的值將是:
假設在上述方程中a的值為1(單位),則預測值將等于yt-n 和從t-n到t的所有誤差之和,這意味著方差將隨著時間的推移而增大,這就是時間序列中的單位根。眾所周知,平穩時間序列的方差不能是時間的函數。單元根檢驗通過檢查a=1的值來檢查序列中是否存在單位根。以下是兩個最常用的單位根平穩檢測方法:
ADF(增補迪基-福勒)檢驗
The Dickey Fuller test is one of the most popular statistical tests. It can be used to determine the presence of unit root in the series, and hence help us understand if the series is stationary or not. The null and alternate hypothesis of this test are:
迪基-福勒(Dickey Fuller)檢驗是最流行的統計檢驗方法之一,可以用它來確定序列中單位根的存在,從而幫助判斷序列是否是平穩。這一檢驗的原假設與備擇假設如下:
原假設:序列有一個單位根(a=1的值)
備擇假設:該序列沒有單位根。
如果不能拒絕原假設,則該序列是非平穩的,這意味著序列可以是線性的,也可以是差分平穩的(將在下一節中更多地了解差分平穩)。
Python代碼:
ADF檢驗結果:ADF檢驗的統計量為1%,p值為5%,臨界值為10%,置信區間為10%。我們對本序列的檢驗結果如下:
平穩性檢驗:如果檢驗統計量小于臨界值,我們可以拒絕原假設(也就是序列是平穩的)。當檢驗統計量大于臨界值時,不能拒絕原假設(這意味著序列不是平穩的)。
在上面的例子中,檢驗統計量>臨界值,這意味著序列不是平穩的。這證實了我們最初在目視檢測中觀察的結果。
KPSS(科瓦特科夫斯·基菲利普·斯施密特·辛)檢驗
KPSS檢驗是另一種用于檢查時間序列的平穩性 (與迪基-福勒檢驗相比稍遜一籌) 的統計檢驗方法。KPSS檢驗的原假設與備擇假設與ADF檢驗的原假設與備擇假設相反,常造成混淆。
KPSS檢驗的作者將原假設定義為趨勢平穩,并將備擇假設定義為單位根序列。我們將在下一節詳細了解趨勢平穩。現在,來看一下KPSS檢驗的實現,并查看KPSS檢驗的結果。
原假設:序列是趨勢平穩的。
備擇假設:序列有一個單位根(序列是非平穩的)。
Python代碼:
KPSS檢驗結果:KPSS檢驗-檢驗統計量、p-值和臨界值和置信區間分別為1%、2.5%、5%和10%。對于航空乘客數據集的檢驗結果如下:
平穩性檢驗:如果檢驗統計量大于臨界值,則拒絕原假設(序列不是平穩的)。如果檢驗統計量小于臨界值,則不能拒絕原假設(序列是平穩的)。對于航空乘客數據集來說,在所有置信區間,檢驗統計量的值都大于臨界值,因此可以說該序列是不平穩的。
在為時間序列數據集準備模型之前,通常會同時進行兩種檢驗。有一次,這兩種檢驗顯示出相互矛盾的結果:其中一個檢驗結果表明該序列是平穩的,而另一個則表明該序列是非平穩的!我困惑了好幾個小時,想弄清楚這是怎么回事。后來才知道,序列的平穩性有多種類型。
綜上所述,ADF檢驗有線性平穩或差分平穩的備擇假設,而KPSS檢驗則是識別序列的趨勢平穩。
4. 平穩的種類
通過了解不同類型的平穩,來解釋上述檢驗的結果。
嚴格平穩:嚴格平穩序列滿足平穩過程的數學定義。嚴格平穩序列的均值、方差和協方差均不是時間的函數。我們的目標是將一個非平穩序列轉化為一個嚴格平穩序列,然后對它進行預測。
趨勢平穩:沒有單位根但顯示出趨勢的序列被稱為趨勢平穩序列。一旦去除趨勢之后,產生的序列將是嚴格平穩的。在沒有單位根的情況下,KPSS檢測將該序列歸類為平穩。這意味著序列可以是嚴格平穩的,也可以是趨勢平穩的。
差分平穩:通過差分可以使時間序列成為嚴格平穩的時間序列。ADF檢驗也稱為差分平穩性檢驗。
應用兩種檢驗總會更優些,通過兩種檢驗之后,可以確定這個序列是否是平穩的。下面,來看一下應用兩種平穩檢驗后的可能結果:
結果1:兩種檢驗均得出結論:序列是非平穩的->序列是非平穩的
結果2:兩種檢驗均得出結論:序列是平穩的->序列是平穩的
結果3:KPSS =平穩;ADF =非平穩->趨勢平穩,去除趨勢后序列嚴格平穩
結果4:KPSS =非平穩;ADF =平穩->差分平穩,利用差分可使序列平穩。5. 時間序列的平穩化
在熟悉了平穩性的概念及其不同的類型之后,接下來可以對序列進行平穩化操作。請記住,為了建立時間序列預測模型,必須首先將任何非平穩序列轉換為平穩序列。
差分化
在該方法中,計算序列中連續項的差值。執行差分操作通常是為了消除均值的變化。從數學角度,差分可以寫成:
yt‘ = yt – y(t-1)
其中yt 是t時刻的數值。
對序列差分化后,繪制出結果:
季節性差分
在季節性差分中,不計算連續值之間的差異,而是計算觀察值與同一季節的先前觀察值之間的差異。例如,星期一的觀察值將與上星期一的觀察值相減。從數學角度,它可以寫成:
yt‘ = yt – y(t-n)
變換
變換用于對方差為非常數的序列進行平穩化。常用的變換方法包括冪變換、平方根變換和對數變換。對飛機乘客數據集進行快速對數轉換和差分:
可以看出,這個圖形比先前的圖形有了很大的改善。通過對這個序列進行平方根或冪變換,看看是否得出了更好的結果。歡迎在下面的評論里分享你的發現!
尾注
本文介紹了檢驗時間序列平穩性的不同方法。但并不止步于此,下一步是對得到的序列應用一個預測模型。可以參考以下文章來構建這樣的模型:給初學者的時間序列預測綜合指南(Beginner’s Guide to Time Series Forecast)。
如果對本文有任何問題或反饋,可以在下面的評論部分與我聯系。
還可以在Analytics Vidhya的Android應用程序上閱讀這篇文章
總結
以上是生活随笔為你收集整理的python时间序列预测不连续怎么办_手把手教你用Python处理非平稳时间序列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【电机控制入门】——电机控制书籍推荐
- 下一篇: 基于matlab 的电力系统潮流仿真