天天看點

Python 資料分析執行個體——時間序列分析

作者:昌華量化
Python 資料分析執行個體——時間序列分析

在生産和科學研究中,對某一個或者一組變量進行觀察測量,将在一系列時刻所得到的離散數字組成的序列集合稱為時間序列。時間序列分析是根據系統觀察得到的時間序列資料,通過曲線拟合和參數估計來建立數學模型的理論和方法。時間序列分析常用于國民宏觀經濟控制、市場潛力預測、氣象預測、農作物害蟲災害預報等方面。

1.基本模型

自回歸移動平均模型(ARMA(p,q))是時間序列中最為重要的模型之一,主要由兩部分組成:AR代表p階自回歸過程;MA代表q階移動平均過程。其公式如下:

Python 資料分析執行個體——時間序列分析

在時間序列中,ARIMA模型在ARMA模型的基礎上多了差分的操作。

2.時間序列模組化的基本步驟

(1)擷取被觀測系統的時間序列資料。

(2)對資料繪圖,觀測是否為平穩時間序列。對于非平穩時間序列,要先進行d階差分運算,化為平穩時間序列。

(3)經過第二步處理,已經得到平穩時間序列。要對平穩時間序列分别求得其自相關系數ACF和偏自相關系數PACF,通過對自相關圖和偏自相關圖的分析得到最佳的階層p和階數q。

(4)由以上得到ARIMA模型。然後開始對得到的模型進行模型檢驗。

3.ARIMA實戰解剖

【例1】

From __future__ import print _function
import pandas as pd
import numpy as np
from scipy import  stats
import matplotlib.pyplot as plt
import statsmodels.api as sm
from statsmodels.graphics.api import qqplot           

這裡我們使用一個具有周期性的測試資料進行分析。

# 擷取資料
dta=[10930,10318,10595,10972,7706,6756,9092,10551,9722,10913,11151,8186,6422,
6337,11649,11652,10310,12043,7937,6476,9662,9570,9981,9331,9449,6773,6304,9355,
10477,10148,10395,11261,8713,7299,10424,10795,11069,11602,11427,9095,7707,10767,
12136,12812,12006,12528,10329,7818,11719,11683,12603,11495,13670,11337,10232,
13261,13230,15535,16837,19598,14823,11622,19391,18177,19994,14723,15694,13248,
9543,12872,13101,15053,12619,13749,10228,9725,14729,12518,14564,15085,14722,
11999,9390,13481,14795,15845,15271,14686,11054,10395]
dta=pd.Series(dta)
dta.index = pd.Index(sm.tsa.datetools.dates_from_range('2001','2090'))
dta.plot(figsize=(12,8))           

資料繪圖如圖1所示。

Python 資料分析執行個體——時間序列分析

圖1 資料繪圖

ARIMA模型對時間序列的要求是平穩型。是以,當得到一個非平穩的時間序列時,首先要做的是進行時間序列的差分,直到得到一個平穩時間序列。如果對時間序列進行d次差分才能得到一個平穩序列,那麼可以使用ARIMA(p,d,q)模型,其中d是差分次數。

#時間序列的差分
fig = plt.figure(figsize=(12,8))
ax1= fig.add_subplot(111)
diff1 = dta.diff(1)
diff1.plot(ax=ax1)           

時間序列一階差分圖如圖2所示。

Python 資料分析執行個體——時間序列分析

圖2 時間序列一階差分

一階差分的時間序列的均值和方差已經基本平穩,不過我們還是可以比較一下二階差分的效果。​

#二階差分
fig = plt.figure(figsize=(12,8))
ax2= fig.add_subplot(111)
diff2 = dta.diff(2)
diff2.plot(ax=ax2)           

時間序列二階差分圖如圖3所示。

Python 資料分析執行個體——時間序列分析

圖3 時間序列二階差分

可以看出二階差分後的時間序列與一階差分相差不大,并且二者随着時間的推移,時間序列的均值和方差保持不變。是以,可以将差分次數d設定為1。