時間序列是由隨時間變化的值構成,如產品銷量、氣溫數據等等。通過對時間序列展開分析,能夠回答如下問題:
- (1)被研究對象的活動特征是否有周期性(也稱季節性)
- (2)被研究對象的活動特征是否有趨勢性(上升或下降)
時間序列分析有多種方法,常用方法為STL(Seasonal and Trend decomposition using Loess)算法。該方法是一種把時間序列分解為趨勢項(trend component)、季節項(seasonal component)和殘差項(remainder/residual component/random)的過濾過程。如下圖:
STL算法在1990年由密歇根大學的R. B. Cleveland教授以及AT&T Bell實驗室的W. S. Cleveland等人研發。其特點是:
- 穩健的估計趨勢項和季節項,而不會被數據中的異常行為扭曲
- 可以指定季節項的周期為采樣時間間隔任意大于一的整數倍
- 可以分解有缺失值的時間序列
?以下用紐約1946年1月到1959年12月的每月新生兒數作為時間序列分析人口增長的規律。代碼如下:
#讀入時間序列數據
import pandas as pd
X=pd.read_csv("https://robjhyndman.com/tsdldata/data/nybirths.dat",header=None,names=["birth"])
#繪制折線圖
X.plot()
?
#進行時間序列分析
import statsmodels.api as sm
import matplotlib.pyplot as plt
res = sm.tsa.seasonal_decompose(X,period=12)
res.plot()
plt.xlabel("Month")
plt.show()
結果如下
可以看人口出生在第38個月左右后出生有明顯上升趨勢,而且從每年3月-6期間,出生人口開始進入高峰期,從8月份左右開始出生人口急速下降。