日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

机器学习——时间序列模型

發布時間:2024/3/26 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习——时间序列模型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 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=1p?γ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=1q?θ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=1p?γi?yt?i?+?t?+i=1q?θ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時,表示已經轉換為平穩序列。

# 自相關圖 plot_acf(D_data).show() # 偏自相關圖 plot_pacf(D_data).show() # 單位根值 print('原始序列數據進行一次一步差分的ADF檢測結果為:') print(ADF(D_data['sale diff']))



原始序列數據進行一次一步差分的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越大,所需參數項數目越多。
from statsmodels.tsa.arima_model import ARIMA # 定階 # data['銷量']=data['銷量'].astype(float) pmax = int(len(D_data)/10) qmax = int(len(D_data)/10)bic_matrix = [] # BIC矩陣 for p in range(pmax+1):tmp = []for q in range(qmax+1):try: # 部分報錯,跳過tmp.append(ARIMA(data,(p,1,q)).fit().bic)except:tmp.append(None)bic_matrix.append(tmp)bic_matrix = pd.DataFrame(bic_matrix) bic_matrix.index = ['AR{}'.format(i) for i in range(pmax+1)] bic_matrix.columns = ['MA{}'.format(i) for i in range(qmax+1)] bic_matrix = bic_matrix[bic_matrix.columns].astype(float)p,q = bic_matrix.stack().idxmin() print('最小BIC對應的p,q值:%s, %s'%(p,q))


最小BIC對應的p,q值:0, 1

import seaborn as sns fig, ax = plt.subplots(figsize = (10,8)) ax = sns.heatmap(bic_matrix,mask = bic_matrix.isnull(),ax = ax,annot = True,fmt='.2f') ax.set_title('BIC')

result = smt.arma_order_select_ic(data, ic=['aic', 'bic'], trend='nc', max_ar=4, max_ma=4)

{‘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))

總結

以上是生活随笔為你收集整理的机器学习——时间序列模型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。