最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

拓端tecdat|Python面板時(shí)間序列數(shù)據(jù)預(yù)測:格蘭杰因果關(guān)系檢驗(yàn)Granger causality test

2021-10-17 11:19 作者:拓端tecdat  | 我要投稿

原文鏈接:http://tecdat.cn/?p=23940

原文出處:拓端數(shù)據(jù)部落公眾號(hào)

時(shí)間序列是以固定時(shí)間區(qū)間記錄的觀察序列。本指南帶你完成在Python中分析一個(gè)給定的時(shí)間序列的特征的過程。

內(nèi)容

  1. 什么是時(shí)間序列?

  2. 如何在 Python 中導(dǎo)入時(shí)間序列?

  3. 什么是面板數(shù)據(jù)?

  4. 時(shí)間序列的可視化

  5. 時(shí)間序列中的模式

  6. 加法和乘法的時(shí)間序列

  7. 如何將一個(gè)時(shí)間序列分解成其組成部分?

  8. 平穩(wěn)的和非平穩(wěn)的時(shí)間序列

  9. 如何使一個(gè)時(shí)間序列成為平穩(wěn)的?

  10. 如何測試平穩(wěn)性?

  11. 白噪聲和平穩(wěn)序列之間的區(qū)別是什么?

  12. 如何使一個(gè)時(shí)間序列去趨勢化?

  13. 如何使時(shí)間序列去季節(jié)化?

  14. 如何檢驗(yàn)時(shí)間序列的季節(jié)性?

  15. 如何處理時(shí)間序列中的缺失值?

  16. 什么是自相關(guān)和部分自相關(guān)函數(shù)?

  17. 如何計(jì)算部分自相關(guān)函數(shù)?

  18. 滯后圖

  19. 如何估計(jì)一個(gè)時(shí)間序列的可預(yù)測性?

  20. 為什么和如何使時(shí)間序列平滑化?

  21. 如何使用格蘭杰因果檢驗(yàn)來了解一個(gè)時(shí)間序列是否有助于預(yù)測另一個(gè)時(shí)間序列?

1. 什么是時(shí)間序列?

時(shí)間序列是以固定時(shí)間區(qū)間記錄的觀察序列。

根據(jù)觀察的頻率,一個(gè)時(shí)間序列通??赡苁敲啃r(shí)、每天、每周、每月、每季度和每年。有時(shí),你也可能有以秒為單位的時(shí)間序列,比如,每分鐘的點(diǎn)擊量和用戶訪問量等等。

為什么要分析一個(gè)時(shí)間序列?

因?yàn)檫@是你對(duì)該序列進(jìn)行預(yù)測前的準(zhǔn)備步驟。

此外,時(shí)間序列預(yù)測具有巨大的商業(yè)意義,因?yàn)閷?duì)企業(yè)來說很重要的東西,如需求和銷售,網(wǎng)站的訪問量,股票價(jià)格等基本上都是時(shí)間序列數(shù)據(jù)。

那么,分析一個(gè)時(shí)間序列涉及什么呢?

時(shí)間序列分析涉及到對(duì)序列性質(zhì)的各個(gè)方面的理解,這樣你就能更好地了解創(chuàng)造有意義和準(zhǔn)確的預(yù)測。

2. 如何在Python中導(dǎo)入時(shí)間序列?

那么,如何導(dǎo)入時(shí)間序列數(shù)據(jù)呢?

時(shí)間序列的數(shù)據(jù)通常存儲(chǔ)在.csv文件或其他電子表格格式中,包含兩列:日期和測量值。

我們使用pandas包中的read_csv()來讀取時(shí)間序列數(shù)據(jù)集(一個(gè)關(guān)于藥品銷售的csv文件)作為pandas數(shù)據(jù)框。添加parse_dates=['date']參數(shù)將使日期列被解析為一個(gè)日期字段。


  1. import pandas as pd


  2. # 導(dǎo)入數(shù)據(jù)

  3. df = pd.read_csv('10.csv

  4. ', parse_dates=['date'])

  5. df.head()

數(shù)據(jù)框架時(shí)間序列

另外,你也可以把它導(dǎo)入為一個(gè)以日期為索引的pandas序列。你只需要在pd.read_csv()中指定index_col參數(shù)就可以了。

pd.read_csv('10.csv', parse_dates=['date'], index_col='date')

3. 什么是面板數(shù)據(jù)?

面板數(shù)據(jù)也是一種基于時(shí)間的數(shù)據(jù)集。

不同的是,除了時(shí)間序列之外,它還包含一個(gè)或多個(gè)在相同時(shí)間段內(nèi)測量的相關(guān)變量。

通常情況下,面板數(shù)據(jù)中存在的列包含了有助于預(yù)測Y的解釋變量,前提是這些列在未來的預(yù)測期是可用的。

下面是一個(gè)面板數(shù)據(jù)的例子。

df.head()

面板序列

4. 時(shí)間序列的可視化

讓我們用matplotlib來可視化這個(gè)序列。


  1. # 時(shí)間序列數(shù)據(jù)源:R中的fpp pacakge。

  2. import matplotlib.pyplot as plt


  3. # 繪制圖表

  4. def plot_df(df, x, y, title="", xlabel='日期', dpi=100):


  5. plt.show()






時(shí)間序列的可視化

由于所有的值都是正數(shù),你可以在Y軸的兩邊顯示,以強(qiáng)調(diào)增長。


  1. # 導(dǎo)入數(shù)據(jù)

  2. x = df['date'].values


  3. # 繪圖

  4. fig, ax = plt.subplots(1, 1, figsize=(16,5), dpi= 120)

  5. plt.fill(x, y1=y1, y2=-y1, alpha=0.5)


航空乘客數(shù)據(jù)--兩面序列

由于它是一個(gè)月度的時(shí)間序列,并且每年都遵循一定的重復(fù)模式,你可以在同一張圖中把每年的情況作為一個(gè)單獨(dú)的線條來繪制。這讓你可以并排比較每年的模式。

時(shí)間序列的季節(jié)圖


  1. # 導(dǎo)入數(shù)據(jù)


  2. df.reset_index(inplace=True)


  3. # 準(zhǔn)備好數(shù)據(jù)


  4. years = df['year'].unique()


  5. # 預(yù)備顏色


  6. np.random.choice(list(mpl.color), len(year),


  7. # 繪制圖表


  8. plt.text(df.loc[df.year==y, :].shape[0]-.9]



  9. plt.gca().set(xlim=(-0.3, 11)


  10. plt.title("藥品銷售時(shí)間序列的季節(jié)圖", fontsize=20)



藥品銷售的季節(jié)性圖譜

每年2月,藥品銷售量急劇下降,3月再次上升,4月再次下降,如此反復(fù)。顯然,這種模式每年都會(huì)在某一年內(nèi)重復(fù)出現(xiàn)。

然而,隨著時(shí)間的推移,藥品銷售量總體上有所增加。你可以用一個(gè)漂亮的年度圖表很好地展示這一趨勢以及它每年的變化情況。同樣地,你也可以做一個(gè)按月排列的boxplot來顯示每月的分布情況。

逐月(季節(jié)性)和逐年(趨勢)分布的箱線圖

你可以按季節(jié)性對(duì)數(shù)據(jù)進(jìn)行分組,看看數(shù)值在某年或某月是如何分布的,以及它在不同時(shí)期的對(duì)比情況。


  1. # 導(dǎo)入數(shù)據(jù)


  2. df.reset_index(inplace=True)


  3. # 準(zhǔn)備好數(shù)據(jù)

  4. df['年'] = [d.year for d in df.date]

  5. df['月'] = [d.strftime('%b') for d in df.date]



  6. # 繪制圖表

  7. sns.boxplot(x='年', y='值', data=df, ax=axes[0])

  8. sns.boxplot(x='月', y='值', data=df.loc[~df.year.isin([1991, 2008]), :] )






按年和按月排列的箱線圖

箱線圖使年度和月份的分布變得明顯。另外,在按月排列的圖表中,12月和1月的藥品銷售量明顯較高,這可歸因于假日折扣季節(jié)。

到目前為止,我們已經(jīng)看到了識(shí)別模式的相似性?,F(xiàn)在,如何找出與通常模式的任何偏差?

5. 時(shí)間序列中的模式

任何時(shí)間序列都可以被分成以下幾個(gè)部分。?基礎(chǔ)水平+趨勢+季節(jié)性+誤差

當(dāng)在時(shí)間序列中觀察到有一個(gè)增加或減少的斜率時(shí),就可以觀察到趨勢。而季節(jié)性是指由于季節(jié)性因素,在定期區(qū)間之間觀察到明顯的重復(fù)模式。這可能是由于一年中的哪個(gè)月,哪個(gè)月的哪一天,工作日或甚至一天中的哪個(gè)時(shí)間。

然而,并非所有時(shí)間序列都必須有趨勢和/或季節(jié)性。一個(gè)時(shí)間序列可能沒有一個(gè)明顯的趨勢,但有一個(gè)季節(jié)性。反之,也可以是真實(shí)的。

因此,一個(gè)時(shí)間序列可以被想象為趨勢、季節(jié)性和誤差項(xiàng)的組合。


  1. fig, axes = plt.subplots(1,3, figsize=(20,4), dpi=100)



  2. pd.read_csv.plot( legend=False, ax=axes[2])



時(shí)間序列中的模式

另一個(gè)需要考慮的方面是周期性行為。當(dāng)序列中的上升和下降模式不發(fā)生在固定的基于日歷的時(shí)間區(qū)間內(nèi)時(shí),就會(huì)發(fā)生這種情況。應(yīng)注意不要將 "周期性 "效應(yīng)與 "季節(jié)性 "效應(yīng)混淆。

那么,如何區(qū)分 "周期性 "和 "季節(jié)性 "模式?

如果這些模式不是基于固定的日歷頻率,那么它就是周期性的。因?yàn)?,與季節(jié)性不同,周期性效應(yīng)通常受到商業(yè)和其他社會(huì)經(jīng)濟(jì)因素的影響。

6. 加法和乘法的時(shí)間序列

根據(jù)趨勢和季節(jié)性的性質(zhì),一個(gè)時(shí)間序列可以被建模為加法或乘法,其中,序列中的每個(gè)觀測值可以表示為各組成部分的和或積。

加法時(shí)間序列:值=基礎(chǔ)+趨勢+季節(jié)性+誤差
?

乘法時(shí)間序列:值=基礎(chǔ)x趨勢x季節(jié)性x誤差

7. 如何將一個(gè)時(shí)間序列分解成其組成部分?

你可以對(duì)一個(gè)時(shí)間序列進(jìn)行經(jīng)典的分解,將該序列視為基數(shù)、趨勢、季節(jié)性指數(shù)和殘差的加法或乘法組合。

statsmodels中的 seasonal_decompose 可以方便地實(shí)現(xiàn)這一點(diǎn)。




  1. # 乘法分解

  2. decompose(df['value'], model='multiplicative')


  3. # 加法分解

  4. decompose(df['value'], model='additive')


  5. # 繪圖

  6. result_mul.plot().suptitle( fontsize=22)


加法和乘法分解

設(shè)置extrapolate_trend='freq'可以看到序列開始時(shí)趨勢和殘差中的任何缺失值。

如果你仔細(xì)看一下加法分解的殘差,它有一些模式殘留。然而,乘法分解看起來相當(dāng)隨機(jī)。因此,理想情況下,對(duì)于這個(gè)特定的序列,乘法分解應(yīng)該是首選。

趨勢、季節(jié)性和殘差成分的數(shù)字輸出存儲(chǔ)在result_mul輸出本身。讓我們把它們提取出來,放在一個(gè)數(shù)據(jù)框中。


  1. # 提取成分----

  2. # 實(shí)際值=(季節(jié)性*趨勢*殘差)的乘積


  3. constructed.columns = ['seas', 'trendance', 'resid', 'actual_values'] 。

  4. constructed.head()


如果你檢查一下,seas、trend和resid列的乘積應(yīng)該正好等于actual_values。

8. 平穩(wěn)和非平穩(wěn)的時(shí)間序列

平穩(wěn)性是時(shí)間序列的一個(gè)屬性。一個(gè)平穩(wěn)的序列是指該序列的值不是時(shí)間的函數(shù)。

也就是說,序列的統(tǒng)計(jì)屬性,如平均數(shù)、方差和自相關(guān),隨著時(shí)間的推移是不變的。序列的自相關(guān)只不過是序列與它以前的值的相關(guān)性,更多的是關(guān)于這一點(diǎn)。

一個(gè)平穩(wěn)的時(shí)間序列也沒有季節(jié)性影響。

那么,如何識(shí)別一個(gè)序列是否是平穩(wěn)的?讓我們繪制一些例子來說明。

平穩(wěn)和非平穩(wěn)的時(shí)間序列

那么,為什么平穩(wěn)的序列很重要呢?

我稍后會(huì)說到這個(gè)問題,但要知道,通過應(yīng)用適當(dāng)?shù)霓D(zhuǎn)換,幾乎可以使任何時(shí)間序列成為平穩(wěn)的。大多數(shù)統(tǒng)計(jì)預(yù)測方法都被設(shè)計(jì)為在平穩(wěn)的時(shí)間序列上工作。預(yù)測過程的第一步通常是做一些轉(zhuǎn)換,把非平穩(wěn)序列轉(zhuǎn)換成平穩(wěn)的。

9. 如何使一個(gè)時(shí)間序列平穩(wěn)?

你可以通過以下方式使序列平穩(wěn)

  1. 對(duì)序列進(jìn)行差分(一次或多次

  2. 取序列的對(duì)數(shù)

  3. 取序列的第n次根

  4. 上述方法的組合

使序列平穩(wěn)的最常見和最方便的方法是對(duì)數(shù)列至少進(jìn)行一次差分,直到它成為近似平穩(wěn)的。

那么,什么是差分?

如果Y_t是時(shí)間't'的值,那么Y的第一個(gè)差值=Yt-Yt-1。更簡單地說,序列只不過是用當(dāng)前值減去下一個(gè)值。

如果第一次差分不能使一個(gè)序列平穩(wěn),你可以進(jìn)行第二次差分。以此類推。

例如,考慮以下序列。[1, 5, 2, 12, 20]

第一次差分可以得到。[5-1, 2-5, 12-2, 20-12] = [4, -3, 10, 8]

二次差分得出。[-3-4, -10-3, 8-10] = [-7, -13, -2]

9. 為什么在預(yù)測前要使非穩(wěn)態(tài)序列成為穩(wěn)態(tài)?

預(yù)測一個(gè)平穩(wěn)的序列是相對(duì)容易的,而且預(yù)測結(jié)果也更可靠。

一個(gè)重要的原因是,自回歸預(yù)測模型本質(zhì)上是線性回歸模型,利用序列本身的滯后期作為預(yù)測因子。

我們知道,如果預(yù)測因子(X變量)不相互關(guān)聯(lián),線性回歸效果最好。因此,序列的平穩(wěn)化解決了這個(gè)問題,因?yàn)樗巳魏纬掷m(xù)的自相關(guān),從而使預(yù)測模型中的預(yù)測因子(序列的滯后)幾乎是獨(dú)立的。

現(xiàn)在我們已經(jīng)確定了序列平穩(wěn)化的重要性,那么你如何檢查一個(gè)給定的序列是否是平穩(wěn)的?

10. 如何檢驗(yàn)平穩(wěn)性?

一個(gè)序列的平穩(wěn)性可以通過觀察序列的圖表來確定,就像我們之前做的那樣。

另一種方法是將序列分成2個(gè)或更多的連續(xù)部分,并計(jì)算平均數(shù)、方差和自相關(guān)等匯總統(tǒng)計(jì)數(shù)據(jù)。如果統(tǒng)計(jì)數(shù)字有很大差異,那么這個(gè)序列就不可能是平穩(wěn)的。

然而,你需要一種方法來定量地確定一個(gè)給定的序列是否是平穩(wěn)的。這可以通過稱為 "單位根測試 "的統(tǒng)計(jì)測試來完成。這方面有多種變化,測試檢查一個(gè)時(shí)間序列是否是非穩(wěn)態(tài)的并擁有單位根。

單位根測試有多種實(shí)現(xiàn)方式,例如。

  1. Augmented Dickey Fuller 檢驗(yàn)(ADH Test)

  2. Kwiatkowski-Phillips-Schmidt-Shin – KPSS 檢驗(yàn)(趨勢平穩(wěn))

  3. Philips Perron 檢驗(yàn)(PP 檢驗(yàn))

最常用的是ADF檢驗(yàn),無效假設(shè)是時(shí)間序列擁有單位根,并且是非平穩(wěn)的。所以,如果ADH檢驗(yàn)中的P值小于顯著性水平(0.05),你就拒絕無效假設(shè)。

另一方面,KPSS檢驗(yàn)是用來檢驗(yàn)趨勢平穩(wěn)性的??占僭O(shè)和P值的解釋與ADH檢驗(yàn)正好相反。下面的代碼使用python中的statsmodels包來實(shí)現(xiàn)這兩個(gè)檢驗(yàn)。



  1. # ADF測試

  2. result = adfuller(df.value.values, autolag='AIC')


  3. # KPSS測試

  4. result = kpss(df.value.values, regression='c')

  5. print('\nKPSS Statistic: %f' % result[0])

?

11. 白噪聲和平穩(wěn)數(shù)列之間有什么區(qū)別?

與平穩(wěn)序列一樣,白噪聲也不是時(shí)間的函數(shù),即它的平均值和方差不隨時(shí)間變化。但不同的是,白噪聲是完全隨機(jī)的,平均值為0。

在白噪聲中,沒有任何模式。如果你把調(diào)頻收音機(jī)中的聲音信號(hào)看作是一個(gè)時(shí)間序列,你在各頻道之間聽到的空白聲音就是白噪聲。

在數(shù)學(xué)上,一個(gè)平均數(shù)為0的完全隨機(jī)的數(shù)字序列就是白噪聲。

np.random.randn(1000)

隨機(jī)白噪聲

12. 如何對(duì)時(shí)間序列進(jìn)行去趨勢處理?

去時(shí)間序列的趨勢是指從一個(gè)時(shí)間序列中去除趨勢成分。但如何提取趨勢呢?有多種方法。

  1. 從時(shí)間序列中去除最佳擬合線。最佳擬合線可以從以時(shí)間步驟為預(yù)測因素的線性回歸模型中獲得。對(duì)于更復(fù)雜的趨勢,你可能想在模型中使用二次項(xiàng)(x^2)。

  2. 去除我們前面看到的從時(shí)間序列分解中得到的趨勢成分。

  3. 去除平均數(shù)

  4. 應(yīng)用像Baxter-King濾波器或Hodrick-Prescott濾波器這樣的濾波器來去除移動(dòng)平均趨勢線或周期成分。

讓我們來實(shí)現(xiàn)前兩種方法。


  1. # 使用scipy。減去最佳擬合線

  2. signal.detrend(df.value.values)

  3. plt.plot(detrended)

通過減去最小二乘法來解讀時(shí)間序列的趨勢


  1. # 使用statmodels。減去趨勢成分。

  2. decompose(df['value'], model='multiplicative',

  3. detrended = df.value.value - trend

  4. plt.plot(detrended)


通過減去趨勢成分進(jìn)行去勢

13. 如何對(duì)一個(gè)時(shí)間序列進(jìn)行去季節(jié)化?

有多種方法可以使時(shí)間序列去季候性化。下面是幾個(gè)例子。


  1. - 1.取一個(gè)以季節(jié)性窗口為長度的移動(dòng)平均線。這將在這個(gè)過程中使序列變得平滑。


  2. - 2.序列的季節(jié)性差異(用當(dāng)前值減去前一季的值)。


  3. - 3.用從STL分解得到的季節(jié)性指數(shù)除以該序列。


如果除以季節(jié)性指數(shù)效果不好,可以嘗試取序列的對(duì)數(shù),然后進(jìn)行去季節(jié)性處理。之后你可以通過取指數(shù)來恢復(fù)到原來的規(guī)模。


  1. # 時(shí)間序列分解

  2. seasonal_decompose(df['value'], model='multiplicative'')

  3. # 去季節(jié)化

  4. df. value.values / result_mul.seasonal

  5. # 繪圖

  6. plt.plot(deseason)

對(duì)時(shí)間序列進(jìn)行反季節(jié)處理

14. 如何測試一個(gè)時(shí)間序列的季節(jié)性?

常見的方法是繪制序列圖,檢查平穩(wěn)時(shí)間區(qū)間內(nèi)的可重復(fù)模式。所以,季節(jié)性的類型是由時(shí)鐘或日歷決定的。

  1. 一天中的小時(shí)

  2. 月的一天

  3. 每周

  4. 月度

然而,如果你想對(duì)季節(jié)性有一個(gè)更明確的檢查,可以使用自相關(guān)函數(shù)(ACF)圖。更多關(guān)于ACF的內(nèi)容將在接下來的章節(jié)中介紹。但是,當(dāng)有強(qiáng)烈的季節(jié)性模式時(shí),ACF圖通常會(huì)顯示出在季節(jié)性窗口的倍數(shù)上有明確的重復(fù)峰值。

例如,藥品銷售時(shí)間序列是一個(gè)月度序列,每年都有重復(fù)的模式。因此,你可以看到在第12、24、36......行的尖峰。

在真實(shí)的數(shù)據(jù)集中,這種強(qiáng)烈的模式很難被注意到,并可能被任何噪音所扭曲,所以你需要仔細(xì)觀察。


  1. # 畫圖

  2. correlation_plot(df.value.tolist())



自相關(guān)圖

另外,如果你想進(jìn)行統(tǒng)計(jì)測試,CHTest可以確定是否需要進(jìn)行季節(jié)性差分以使序列平穩(wěn)化。

15. 如何處理時(shí)間序列中的缺失值?

有時(shí),你的時(shí)間序列會(huì)有缺失的日期/時(shí)間。這意味著,這些時(shí)期的數(shù)據(jù)沒有被捕獲或無法獲得。在這種情況下,你可以用零來填補(bǔ)這些時(shí)期。

其次,當(dāng)涉及到時(shí)間序列時(shí),你通常不應(yīng)該用序列的平均值來替換缺失值,特別是在序列不是平穩(wěn)的情況下。你可以做的是是向前填充前一個(gè)值。

然而,根據(jù)序列的性質(zhì),你要在得出結(jié)論之前嘗試多種方法。一些有效的替代歸因法的方法是。

  • 后向填充

  • 線性插值

  • 二次插值

  • 最近鄰平均

  • 季節(jié)性差值平均

為了衡量歸因性能,我手動(dòng)引入時(shí)間序列的缺失值,用上述方法進(jìn)行歸因,然后衡量歸因與實(shí)際值的平均平方誤差。

  1. # 生成數(shù)據(jù)集


  2. prcPupdate({'xtick.bottom' : False})


  3. ## 1. Actual -------------------------------

  4. df_or.plot(style=".-")



  5. ## 2. 正向填充--------------------------

  6. df_ffill = df.ffill()



  7. ## 3. 后向填充-------------------------

  8. df_bfill = df.bfill()


  9. ## 4. 線性插值 ------------------

  10. df['rownum'] = np.arange(df.shape[0])


  11. ## 5. 立體插值--------------------

  12. f2 = interp1d(df_um'], df_nona['v kind='cubic')


  13. # 內(nèi)插法參考。



  14. ## 6. n "過去最近的鄰居的平均值 ------


  15. knnmean(df.value.values, 8)

  16. np.round(meansquarerr('), 2)

  17. ## 7. 季節(jié)性平均值 ----------------------------

  18. """

  19. 計(jì)算相應(yīng)季節(jié)性時(shí)期的平均值

  20. ts: 時(shí)間序列的一維數(shù)組式

  21. n: 時(shí)間序列的季節(jié)性窗口長度

  22. """

  23. out = np.cpy(ts)

  24. for i, val in merate(ts):

  25. if np.isnan(val):

  26. ts_seas = ts[i-1::-n] # 只有以前的季節(jié)

  27. 如果np.isan(np.naean(ts_seas))。

  28. ts_seas = np.concenate([ts[i-1::-n], ts[i::n]]) # 以前和以后的

  29. out[i] = np.nanan(ts_seas) * lr


  30. seasonal_mean(df.value, n=12, lr=1.25)

缺失值處理方法

你也可以考慮以下方法,這取決于你希望推斷的準(zhǔn)確程度。

  1. 如果你有解釋變量,使用預(yù)測模型,如隨機(jī)森林或k-Nearest Neighbors來預(yù)測。

  2. 如果你有足夠的過去觀測值,就預(yù)測缺失的值。

  3. 如果你有足夠的未來觀測值,就對(duì)缺失值進(jìn)行反向預(yù)測

  4. 預(yù)測以前周期的對(duì)應(yīng)值。

16. 什么是自相關(guān)和偏自相關(guān)函數(shù)?

自相關(guān)只是一個(gè)序列與它自己的滯后期的相關(guān)關(guān)系。如果一個(gè)序列是顯著的自相關(guān),那就意味著,該序列以前的值(滯后)可能有助于預(yù)測當(dāng)前的值。

偏自相關(guān)也傳達(dá)了類似的信息,但它傳達(dá)的是一個(gè)序列與其滯后期的純相關(guān),排除了中間滯后期的相關(guān)貢獻(xiàn)。



  1. # 計(jì)算ACF和PACF直到50個(gè)滯后期

  2. acf_50 = acf(value, nlags=50)

  3. pacf_50 = pacf(value, nlags=50)


  4. # 繪制圖表

  5. fig, axes = plt.subplots(1,2,figsize=(16,3))

ACF和PACF

17. 如何計(jì)算偏自相關(guān)函數(shù)?

那么,如何計(jì)算偏自相關(guān)?

一個(gè)序列的滯后期(k)的偏自相關(guān)是該滯后期在Y的自回歸方程中的系數(shù)。Y的自回歸方程只不過是以其自身的滯后期為預(yù)測因素的Y的線性回歸。

例如,如果Y_t是當(dāng)前序列,Y_t-1是Y的滯后1,那么滯后3的偏自相關(guān)(Y_t-3)是Y_t-3的系數(shù)$alpha_3$,在以下方程中。

自回歸方程

18. 滯后圖

滯后圖是一個(gè)時(shí)間序列與自身滯后的散點(diǎn)圖。它通常是用來檢查自相關(guān)的。如果在序列中存在任何像你下面看到的模式,該序列是自相關(guān)的。如果沒有這樣的模式,該序列可能是隨機(jī)白噪聲。

在下面關(guān)于太陽黑子區(qū)域時(shí)間序列的例子中,隨著n_lag的增加,圖變得越來越分散。


  1. # #導(dǎo)入


  2. a10 = pd.read_csv('10.csv')


  3. # 繪圖

  4. for i, ax in enumerate(axes.flatten()[:4]):



  5. fig.suptitle('藥物銷售的滯后圖', y=1.05)

藥物銷售滯后曲線圖

滯后圖 太陽黑子

19. 如何估計(jì)一個(gè)時(shí)間序列的可預(yù)測性?

一個(gè)時(shí)間序列的規(guī)律性和可重復(fù)性越強(qiáng),就越容易進(jìn)行預(yù)測。近似熵 "可以用來量化一個(gè)時(shí)間序列中波動(dòng)的規(guī)律性和不可預(yù)測性。

近似熵越高,預(yù)測就越困難。

另一個(gè)更好的替代方法是 "樣本熵"。

樣本熵與近似熵相似,但在估計(jì)復(fù)雜性方面更加一致,即使是較小的時(shí)間序列。例如,一個(gè)數(shù)據(jù)點(diǎn)較少的隨機(jī)時(shí)間序列的 "近似熵 "可能比一個(gè)較 "規(guī)則 "的時(shí)間序列低,而一個(gè)較長的隨機(jī)時(shí)間序列的 "近似熵 "會(huì)更高。

樣本熵很好地處理了這個(gè)問題。請(qǐng)看下面的演示。



  1. def AEn(U, m, r):

  2. ""計(jì)算Aproximate entropy""

  3. def _maxdit(x_i, x_j):

  4. returnmax([abs(u- va) for ua, va in zp(x_i, x_j)])


  5. def _phi(m):

  6. x = [[U[j]for in range(i, i ] for i in range(N - m + 1)]

  7. C = [len([1 for x_jn x if _maist(x_i, x_j) <= r]) / (N - m + 1.0) for xi in x] 。

  8. 返回 (N - m +.0)**(-1) * sump.log(C))


  9. N = len(U)

  1. def Samp:

  2. ""計(jì)算樣本熵"""

  3. maxstx_i, x_j):

  4. retur max([abs(ua - va) fo ua, vain zip(_i x_j)])

  5. phi(m)

  6. x = [[j]or j i ane(i, i ?m - 1 + 1] for iin age(N - m + 1)]

  7. C= [len([1 for j in rane(len(x)) if i != j and _mist(x[i, xj]) <= r]) for i in rane(ln(x)) ]

  8. = en()

20. 為什么和如何對(duì)時(shí)間序列進(jìn)行平滑處理?

對(duì)一個(gè)時(shí)間序列進(jìn)行平滑處理可能在以下方面有用。

  • 減少信號(hào)中噪聲的影響,得到一個(gè)經(jīng)過噪聲過濾的序列的近似值。

  • 平滑化后的序列可以作為解釋原始序列本身的一個(gè)特征。

  • 更好地觀察基本趨勢

那么,如何對(duì)一個(gè)序列進(jìn)行平滑處理?讓我們討論一下以下方法。

  1. 取一個(gè)移動(dòng)平均線

  2. 做一個(gè) LOESS 平滑(局部回歸)。

  3. 做一個(gè)LOWESS平滑(局部加權(quán)回歸)。

移動(dòng)平均數(shù)只不過是定義寬度的滾動(dòng)窗口的平均值。但你必須合理地選擇窗口寬度,因?yàn)榇蟮拇翱诔叽鐣?huì)使序列過度平滑。例如,窗口尺寸等于季節(jié)性持續(xù)時(shí)間(例如:12個(gè)月的序列),將有效地消除季節(jié)性效應(yīng)。

LOESS是 "LOcalized regrESSion "的簡稱,它在每個(gè)點(diǎn)的局部附近進(jìn)行多次回歸。它是在statsmodels軟件包中實(shí)現(xiàn)的,你可以用frac參數(shù)來控制平滑的程度,該參數(shù)指定了附近的數(shù)據(jù)點(diǎn)的百分比,應(yīng)該被視為適合回歸模型。


  1. # 導(dǎo)入

  2. pd.read_csv('ele.csv', parse_dates=['date'], index_col='date')


  3. # 1. 移動(dòng)平均數(shù)

  4. dma = df_rg.vale.r.man()


  5. # 2. 平滑(5%和15%)

  6. pd.DtaFame(lowess(dfoig.alu, np.ane(len(d_origale)), fac=0.05)


  7. # 繪圖

  8. fig, axes = plt.ubplos(4,1, figsiz=(7, 7, sharex=rue, dp=120)

  9. df_ori['aue'].pot(ax=axes0], color='k')



平滑化時(shí)間序列

如何使用格蘭杰因果測試來了解一個(gè)時(shí)間序列是否有助于預(yù)測另一個(gè)時(shí)間序列?

格蘭杰因果檢驗(yàn)是用來確定一個(gè)時(shí)間序列是否有助于預(yù)測另一個(gè)時(shí)間序列的。

格蘭杰因果關(guān)系測試是如何工作的?

它是基于這樣的想法:如果X導(dǎo)致Y,那么基于Y的前值和X的前值對(duì)Y的預(yù)測應(yīng)該優(yōu)于僅基于Y的前值的預(yù)測。

因此,理解格蘭杰因果關(guān)系不應(yīng)該被用來測試Y的滯后期是否導(dǎo)致Y。

無效假設(shè)是:第二列中的序列不會(huì)導(dǎo)致第一列中的序列的格蘭杰。如果P值小于顯著性水平(0.05),那么你就拒絕無效假設(shè),并得出結(jié)論:上述X的滯后期確實(shí)是有用的。

第二個(gè)參數(shù)maxlag說的是在測試中應(yīng)該包括多少個(gè)Y的滯后期。

  1. df = pd.rea_csv('a10.csv', parse_dates=['date'])

  2. df['moth'] = df.date.dt.nth

  3. gragecaslitess(df[['alue', 'moh']], maxag2)

在上述情況下,所有檢驗(yàn)的P值都是零。因此,"月 "數(shù)據(jù)確實(shí)可以用來預(yù)測航空乘客。

最受歡迎的見解

1.在python中使用lstm和pytorch進(jìn)行時(shí)間序列預(yù)測

2.python中利用長短期記憶模型lstm進(jìn)行時(shí)間序列預(yù)測分析

3.使用r語言進(jìn)行時(shí)間序列(arima,指數(shù)平滑)分析

4.r語言多元copula-garch-模型時(shí)間序列預(yù)測

5.r語言copulas和金融時(shí)間序列案例

6.使用r語言隨機(jī)波動(dòng)模型sv處理時(shí)間序列中的隨機(jī)波動(dòng)

7.r語言時(shí)間序列tar閾值自回歸模型

8.r語言k-shape時(shí)間序列聚類方法對(duì)股票價(jià)格時(shí)間序列聚類

9.python3用arima模型進(jìn)行時(shí)間序列預(yù)測


拓端tecdat|Python面板時(shí)間序列數(shù)據(jù)預(yù)測:格蘭杰因果關(guān)系檢驗(yàn)Granger causality test的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
林口县| 启东市| 壶关县| 太白县| 厦门市| 讷河市| 昌宁县| 涿州市| 兴化市| 宝兴县| 巴楚县| 竹溪县| 读书| 昌宁县| 鹤岗市| 永昌县| 怀远县| 塘沽区| 秭归县| 静海县| 上犹县| 潼关县| 临桂县| 福海县| 辽宁省| 平和县| 江北区| 临泽县| 南通市| 佛学| 响水县| 镇赉县| 西充县| 裕民县| 加查县| 安溪县| 库伦旗| 南安市| 祁东县| 高淳县| 博野县|