python时间序列预测不连续怎么办_用Python处理非平稳时间序列攻略
簡介
諸如:預測一個家庭未來三個月的用電量,估計特定時期道路上的交通流量,以及預測一個股票在紐約證券交易所交易的價格等等,這些應用都有什么共同點?
它們都歸屬于時間序列數據的概念!如果沒有“時間”成分,就無法準確地預測這些結果。隨著我們周圍的世界產生的數據越來越多,時間序列預測已成為數據科學家必須掌握的一項越來越關鍵的技術。
然而,時間序列卻是一個復雜的話題,它同時具有多面性。
首先,要想使預測模型正常工作,就必須使時間序列保持平穩。為什么?因為絕大部分的原始數據都會有非平穩的趨勢。如果尖峰是不穩定的,又怎么能確保模型正常工作呢?
本文的重點是時間序列數據的平穩性檢驗方法。在此假設讀者已熟悉時間序列、ARIMA和平穩性的概念,以下是一些包含基礎內容的參考資料:關于時間序列建模的完整教程-
初學者創建時間序列預測綜合指南
目錄
1. 平穩簡介
2. 加載數據
3. 檢驗平穩的方法
ADF檢驗
KPSS檢驗
4. 平穩的種類
嚴格平穩
趨勢平穩
差分平穩
5. 時間序列平穩化
差分
季節性差分
對數變換
1. 平穩簡介
“平穩”是處理時間序列數據時遇到的最重要的概念之一:平穩序列是指其特性-均值、方差和協方差不隨時間而變化的序列。
讓我們用一個直觀的例子來理解這一點??紤]以下三個圖形:在第一幅圖中,我們可以清楚地看到,均值隨時間而變化(增加),呈現上升的趨勢。因此,這是一個非平穩序列。對于一個平穩的時間序列,它不應該呈現出隨時間變化趨勢。
在第二幅圖中,我們肯定看不到序列的趨勢,但是序列的變化是一個時間的函數。正如前面提到的,平穩序列的方差必須是一個常數。
再來看第三幅圖,隨著時間的增加,序列傳播后變得更近,這意味著協方差是時間的函數。
上述三個例子均表示非平穩時間序列。現在來看第四個圖:
在這張圖中,均值、方差和協方差都是常數,這就是平穩時間序列。
再想一想,用上面的哪一幅圖來預測未來的值會更容易呢?第四個圖,對吧?大多數統計模型要求序列是平穩的,才能進行有效和精確的預測。
因此,總的來說,平穩時間序列是一個不依賴時間變化 (即均值、方差和協方差不隨時間變化)的時間序列。在下一節中,我們將介紹各種檢測給定序列是否平穩的方法。
2. 加載數據
在本節和后續幾節中,將介紹檢測時間序列數據的平穩性的方法,以及處理非平穩序列所需的技術。同時,本文還提供了應用每種技術的python代碼。大家可以到:AirPassengers這個鏈接上下載文中使用到的數據集。
在繼續分析數據集之前,首先加載和預處理數據。
好了,看來可以繼續了!
3. 檢驗平穩的方法
下一步是確定給定的序列是否是平穩的,并對它做相應的處理。本節將介紹一些常見的方法,利用這些方法來檢測序列是否平穩。
目視檢驗
看一下我們在上一節中使用的圖形,僅需通過目測圖形,便能夠識別出序列的均值和方差是否隨時間變化。同樣,通過繪制數據圖形,便能確定該序列的屬性是否隨時間而變化。
顯然,通過作圖,可以看到序列的趨勢(變化的均值),然而,這種目視檢測方法得到的結果可能并不準確。最好是用一些統計檢測方法來驗證觀測結果。
統計檢驗
可以利用統計檢驗來代替目視檢驗:比如單位根平穩測試。單位根指明給定序列的統計特性(均值,方差和協方差)不是時間的常數,這是平穩時間序列的先決條件。下面是它的數學解釋:
假設我們有一個時間序列:
yt = a*yt-1 + ε t
其中yt是t時刻的數據值,ε t 是誤差項。需要利用yt-1的值來計算yt,即:
yt-1 = a*yt-2 + ε t-1
如果利用所有的觀察值,yt 的值將是:
yt = an*yt-n + Σεt-i*ai
假設在上述方程中a的值為1(單位),則預測值將等于yt-n 和從t-n到t的所有誤差之和,這意味著方差將隨著時間的推移而增大,這就是時間序列中的單位根。眾所周知,平穩時間序列的方差不能是時間的函數。單元根檢測通過檢查a=1的值來檢查序列中是否存在單位根。以下是兩個最常用的單位根平穩檢測方法:
ADF(增補迪基-福勒) 檢驗
迪基-福勒(Dickey Fuller)檢驗是最流行的統計檢測方法之一,可以用它來確定序列中單位根的存在,從而幫助判斷序列是否是平穩。這一檢驗的原假設與備擇假設如下:
ref="">原假設:序列有一個單位根(a=1的值)
ef="">備擇假設:該序列沒有單位根。
如果否決原假設失敗,則該序列是非平穩的,這意味著序列可以是線性的,也可以是差分平穩的(將在下一節中更多地了解差分平穩)。
Python代碼:
ADF檢驗結果:ADF檢驗的統計量為1%,p值為5%,臨界值為10%,置信區間為10%。我們對本序列的測試結果如下:
f="">平穩性檢驗:如果檢驗統計量小于臨界值,我們可以否決原假設(也就是序列是平穩的)。當檢驗統計量大于臨界值時,否決原假設失敗(這意味著序列不是平穩的)。
在上面的例子中,測試統計量>臨界值,這意味著序列不是平穩的。這證實了我們最初在目視檢測中看到的觀察結果。
KPSS(科瓦特科夫斯·基菲利普·斯施密特·辛) 檢驗
KPSS檢驗是另一種用于檢查時間序列的平穩性 (與迪基-福勒檢驗相比稍遜一籌) 的統計檢測方法。KPSS檢驗的原假設與備擇假設與ADF檢驗的原假設與備擇假設相反,常造成混淆。
KPSS檢驗的作者將原假設定義為趨勢平穩的過程,并將備擇假設定義為單位根序列。我們將在下一節詳細了解趨勢平穩?,F在,來看一下KPSS檢驗的實現,并查看KPSS檢驗的結果。
ref="">原假設:這一過程是趨勢平穩的。
ef="">備擇假設:序列有一個單位根(序列是非平穩的)。
Python代碼:
KPSS檢驗結果:KPSS檢驗-檢驗統計量、p-值和臨界值和置信區間分別為1%、2.5%、5%和10%。對于航空乘客數據集的檢驗結果如下:
f="">平穩性檢驗:如果檢驗統計量大于臨界值,則否決原假設(序列不是平穩的)。如果檢驗統計量小于臨界值,則不能否決原假設(序列是平穩的)。對于航空乘客數據集來說,在所有置信區間,檢驗統計量的值都大于臨界值,因此可以說該序列是不平穩的。
在為時間序列數據集準備模型之前,通常會同時進行兩種統計檢測。有一次,這兩種檢測顯示出相互矛盾的結果:其中一個檢測結果表明該序列是平穩的,而另一個則表明該序列是非平穩的!我困惑了好幾個小時,想弄清楚這是怎么回事。后來才知道,序列的平穩性有多種類型。
綜上所述,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)。
如果對本文有任何問題或反饋,可以在下面的評論部分與我聯系。
總結
以上是生活随笔為你收集整理的python时间序列预测不连续怎么办_用Python处理非平稳时间序列攻略的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: qt安装与配置
- 下一篇: 【UE4从零开始 082】全局光照