机器学习——时间序列模型
文章目錄
- 1. 基本概念
- 1.1 自相關函數ACF(autocorrelation function)
- 1.2 偏自相關函數PACF(partial autocorrelation function)
- 2. 常見模型
- 2.1 自回歸模型(AR)
- 2.2 移動平均模型(MA)
- 2.3 自回歸移動平均模型(ARMA)
- 2.4 差分自回歸移動平均模型(ARIMA)
- 4. 建模步驟
- 4.1 平穩性檢驗
- 4.1.1 時序圖、自相關圖、偏自相關圖
- 4.1.2 自相關、偏自相關圖
- 4.1.3 單位根檢驗
- 4.1.4 差分運算
- 4.2 白噪聲檢驗
- 4.3 模型選擇(p,q,d)
- 4.3.1 AIC與BIC
- 4.3.2 模型穩定性檢驗
- 4.4 模型預測
| 平滑法 | 削弱短期隨機波動對序列的影響,序列插值分布均勻 |
| 趨勢擬合法 | 把時間作為自變量,相應序列觀察值作為因變量,簡歷回歸模型 |
| 組合模型法 | 受長期趨勢(T)、季節變動(S)、周期變動(C)和不規則變動(ε)四個因素影響 |
| 組合模型 | (1)加法模型:T+S+C+?T+S+C+\epsilonT+S+C+? (2)乘法模型:TSC?T SC\epsilonTSC? |
常見時間序列模型
| AR模型 | 考慮歷史數據的影響,以過往數據為自變量,XtX_tXt?為因變量建立線性回歸模型。Xt=?0+?1xt?1+?+?pxt?pX_t=\phi_0+\phi_1 x_{t-1}+\cdots+\phi_p x_{t-p}Xt?=?0?+?1?xt?1?+?+?p?xt?p? |
| MA模型 | 忽略歷史數據影響,建立于前q期隨機擾動?t?1,?,?t?q\epsilon_{t-1},\cdots,\epsilon_{t-q}?t?1?,?,?t?q?的線性回歸模型 Xt=μ+?t?θ1?t?1???θq?t?qX_t=\mu+\epsilon_t-\theta_1 \epsilon_{t-1}-\cdots-\theta_q \epsilon_{t-q}Xt?=μ+?t??θ1??t?1????θq??t?q? |
| ARMA模型 | 結合考慮AR、MA模型,綜合考慮它們的影響 |
| ARIMA模型 | 針對非平穩序列。將非平穩轉化為平穩后擬合操作 |
1. 基本概念
白噪聲序列: 數據隨機分布,沒有規律。
平穩非白噪聲序列
非平穩序列: 可以利用差分法轉換為平穩非白噪聲序列
截尾: 拖尾指序列以指數率單調遞減或震蕩衰減
拖尾: 截尾指序列從某個時點變得非常小
1.1 自相關函數ACF(autocorrelation function)
- 自相關函數反映了同一序列在不同時序的取值之間的相關性。
- 公式:
ACF(k)=ρk=Cov(yt,yt?k)Var(yt)ACF(k) = \rho_k=\frac{Cov(y_t,y_{t-k})}{Var(y_t)} ACF(k)=ρk?=Var(yt?)Cov(yt?,yt?k?)?
其中,ρk∈[?1,1]\rho_k \in[-1,1]ρk?∈[?1,1]
1.2 偏自相關函數PACF(partial autocorrelation function)
- 剔除了中間k-1個隨機變量x(t?1),x(t?2),?,x(t?k+1)x(t-1),x(t-2),\cdots,x(t-k+1)x(t?1),x(t?2),?,x(t?k+1)的干擾后x(t?k)x(t-k)x(t?k)對x(t)x(t)x(t)影響的相關程度
- PACF是嚴格兩個變量之間的相關性。
2. 常見模型
2.1 自回歸模型(AR)
定義:
-
描述當前值與歷史值之間的關系。利用歷史數據對自身進行預測
-
P階自回歸過程,即當前值與t?p,t?p+1,?,t?1t-p,t-p+1,\cdots,t-1t?p,t?p+1,?,t?1相關(P)。
yt=μ+∑i=1pγiyt?i+?ty_t=\mu+\sum_{i=1}^{p} \gamma_i y_{t-i} + \epsilon_t yt?=μ+i=1∑p?γi?yt?i?+?t?
其中,yty_tyt?是當前值,μ\muμ是常數項,P是階數,γi\gamma_iγi?是自相關系數,?\epsilon?是誤差。 -
參數:P(自回歸階數)
注意
- 必須具有平穩性
- 必須具有自相關性,自相關系數需要大于等于0.5.
模型識別
2.2 移動平均模型(MA)
定義
-
移動平均模型是自回歸模型中誤差項的累加
-
q階移動模型公式(Q):
yt=μ+?t+∑i=1qθi?t?iy_t = \mu + \epsilon_t + \sum_{i=1}^{q} \theta_i \epsilon_{t-i} yt?=μ+?t?+i=1∑q?θi??t?i? -
移動平均法能有效地消除預測中的隨機波動
-
參數:Q(移動平均階數)
模型識別
2.3 自回歸移動平均模型(ARMA)
定義
-
自回歸與移動平均的結合
-
公式定義為(P,Q):
yt=μ+∑i=1pγiyt?i+?t+∑i=1qθi?t?iy_t = \mu + \sum_{i=1}^{p} \gamma_i y_{t-i} + \epsilon_t + \sum_{i=1}^{q} \theta_i \epsilon_{t-i} yt?=μ+i=1∑p?γi?yt?i?+?t?+i=1∑q?θi??t?i? -
參數:P(自回歸階數),Q(移動平均階數)
模型識別
2.4 差分自回歸移動平均模型(ARIMA)
對于ARIMA模型,我們需要指定三個參數(P, D, Q),分別表示P階自回歸模型,D階差分和Q階移動平均模型。
定義:
- 參數:(P, D, Q),分別表示P階自回歸模型,D階差分和Q階移動平均模型。
- 原理:將非平穩時間序列轉換為平穩時間序列,然后將因變量對其滯后值和其隨機誤差的滯后值進行回歸建模。
4. 建模步驟
4.1 平穩性檢驗
4.1.1 時序圖、自相關圖、偏自相關圖
def tsplot(y,lags=None,figsize=(12,7),style='bmh'):'''Plot time series, its ACF and PACF, calculate Dickey-Fuller testy:timeserieslags:how many lags to include in ACF,PACF calculation''' # if not isinstance(y, pd.Series): # y = pd.Series(y)with plt.style.context(style):fig = plt.figure(figsize=figsize)layout=(2,2)ts_ax = plt.subplot2grid(layout, (0,0), colspan=2)acf_ax = plt.subplot2grid(layout, (1,0))pacf_ax = plt.subplot2grid(layout, (1,1))y.plot(ax=ts_ax)p_value = sm.tsa.stattools.adfuller(y)[1]ts_ax.set_title('Time Series Analysis Plots\n Dickey-Fuller: p={0:.5f}'.format(p_value))smt.graphics.plot_acf(y,lags=lags, ax=acf_ax)smt.graphics.plot_pacf(y,lags=lags, ax=pacf_ax)plt.tight_layout() tsplot(data)4.1.2 自相關、偏自相關圖
根據自相關圖,判斷“拖尾”、“截尾”。
from statsmodels.graphics.tsaplots import plot_acf plot_acf(data).show() from statsmodels.graphics.tsaplots import plot_pacf plot_pacf(data).show()4.1.3 單位根檢驗
采用單位根法檢驗,當單位根大于等于0.05時,表示數據為非平穩序列。
from statsmodels.tsa.stattools import adfuller as ADF print('原始序列數據的ADF檢測結果為:') print(ADF(data['銷量'])) # 返回值依次為: adf, pvalue(單位根,>=0.05就是非平穩序列)原始序列數據的ADF檢測結果為:
(1.813771015094526, 0.9983759421514264, 10, 26, {‘1%’: -3.7112123008648155, ‘5%’: -2.981246804733728, ‘10%’: -2.6300945562130176}, 299.4698986602418)
4.1.4 差分運算
若序列為非平穩序列,則需要轉換為平穩序列計算
(1)差分運算
- P階差分
相距一期的兩個序列之間的減法運算稱為1階差分運算
將1階差分運算的結果再做一次差分運算則稱為2階差分運算 - K步差分
相距k期的兩個序列值之間的減法運算稱為k步差分運算
1. 差分運算
D_data = data.diff().dropna() # 一階一步差分,并去除NA D_data.columns = ['sale diff']2. 差分結果檢驗
對差分結果進行相同的平穩性檢驗,當單位根值小于等于0.05時,表示已經轉換為平穩序列。
原始序列數據進行一次一步差分的ADF檢測結果為:
(-3.1560562366723537, 0.022673435440048798, 0, 35, {‘1%’: -3.6327426647230316, ‘5%’: -2.9485102040816327, ‘10%’: -2.6130173469387756}, 287.5909090780334)
4.2 白噪聲檢驗
from statsmodels.stats.diagnostic import acorr_ljungbox print('差分序列的白噪聲檢驗結果:') print(acorr_ljungbox(D_data,lags=1)) # 返回統計量與p值,當p <= 0.05 時,不是白噪音差分序列的白噪聲檢驗結果:
(array([11.30402222]), array([0.00077339]))
4.3 模型選擇(p,q,d)
AR, MA模型
通過ACF, PACF截尾開始階數確定p, q參數值。
- AR§:PACF上截尾,ACF趨近于0
- MA(Q):ACF上截尾,PACF趨近于0
采用BIC矩陣,找到最小值對應的p, q值。并以此為參數選擇下述三個模型:
4.3.1 AIC與BIC
AIC:赤池信息準則(Akaike information Criterion)
AIC=2k?2ln?(L)AIC = 2k-2\ln(L) AIC=2k?2ln(L)
BIC:貝葉斯信息準則(Bayesian information Criterion)
BIC=kln?(n)?2ln?(L)BIC = k\ln(n)-2\ln(L) BIC=kln(n)?2ln(L)
其中,k為模型參數個數,n為樣本數量,L為似然函數。
- AIC, BIC值越低越好
- 希望通過AIC, BIC選擇更簡單的模型,P, Q越大,所需參數項數目越多。
最小BIC對應的p,q值:0, 1
{‘aic’: 0 1 2 3 4
0 NaN 668.212060 627.212365 590.498371 565.724666
1 472.121781 442.706792 444.414985 441.613728 442.640421
2 449.878586 443.006993 445.873538 443.364868 445.454087
3 452.992514 441.894814 443.613869 449.670033 442.185777
4 454.442210 443.477934 445.326246 445.745273 445.296295,
‘bic’: 0 1 2 3 4
0 NaN 671.433896 632.045119 596.942043 573.779256
1 475.343616 447.539546 450.858657 449.668317 452.305928
2 454.711339 449.450664 453.928128 453.030375 456.730513
3 459.436186 449.949403 453.279376 460.946459 455.073120
4 462.496800 453.143442 456.602672 458.632617 459.794557,
‘aic_min_order’: (1, 3),
‘bic_min_order’: (1, 1)}
由此可以選擇MA模型,或者p =0, q =1的ARMA模型??梢詫⒆鐾瓴罘值臄祿肫椒€模型或者將原數據帶入非平穩模型,并設置階數。
4.3.2 模型穩定性檢驗
模型殘差檢驗
- ARIMA的殘差是否是平均值為0且方差為常數的正太分布
- QQ圖:線性即正太分布
4.4 模型預測
model = ARIMA(data, (p,1,q)).fit() print('模型報告為:\n', model.summary2()) print('未來5天的預測結果、準確誤差及置信區間:\n',model.forecast(5))總結
以上是生活随笔為你收集整理的机器学习——时间序列模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言程序设计 北京理工,C语言程序设计
- 下一篇: 构建自动车牌识别系统