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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

arima模型 p q d 确定_基于ARIMA预测股指期货价格走势

發(fā)布時間:2025/4/5 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 arima模型 p q d 确定_基于ARIMA预测股指期货价格走势 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?常用的時間序列模型有四種:自回歸模型 AR(p)、移動平均模型 MA(q)、自回歸移動平均模型 ARMA(p,q)、自回歸差分移動平均模型 ARIMA(p,d,q), 可以說前三種都是 ARIMA(p,d,q)模型的特殊形式。本文主要圍繞著如何使用ARIMA模型實現(xiàn)對股指期貨價格走勢的預(yù)測。

01

ARIMA模型

ARIMA模型(英語:Autoregressive Integrated Moving Average model),差分整合移動平均自回歸模型,又稱整合移動平均自回歸模型(移動也可稱作滑動),是時間序列預(yù)測分析方法之一。ARIMA(p,d,q)中,AR是“自回歸”,p為自回歸項數(shù);MA為“滑動平均”,q為滑動平均項數(shù),d為使之成為平穩(wěn)序列所做的差分次數(shù)(階數(shù))。“差分”一詞雖未出現(xiàn)在ARIMA的英文名稱中,卻是關(guān)鍵步驟。

百度百科本文主要使用ARIMA模型實現(xiàn)對股指期貨價格走勢的預(yù)測,而使用ARIMA的模型主要包括以下四大步驟
  • 數(shù)據(jù)平穩(wěn)性檢驗

  • 模型定階

  • 模型參數(shù)檢驗

  • 模型預(yù)測

02

數(shù)據(jù)獲取和平穩(wěn)性檢驗

ARIMA 模型是在平穩(wěn)的時間序列基礎(chǔ)上建立起來的,因此時間序列的平穩(wěn)性是建模的重要前提。檢驗時間序列模型平穩(wěn)的方法一般采用 ADF 單位根檢驗?zāi)P腿z驗。當(dāng)然如果時間序列不穩(wěn)定,也可以通過一些方法使得時間序列穩(wěn)定

定義基礎(chǔ)函數(shù)

# 獲取數(shù)據(jù)def getData(filename): IF = pd.read_csv(filename,encoding='utf-8',index_col = 'date',parse_dates = True) IF_price = IF[['close']]????return?IF_price????# 單位根檢驗:ADF是一種常用的單位根檢驗方法# 原假設(shè)為:序列具有單位根,即非平穩(wěn),# 對于一個平穩(wěn)的時序數(shù)據(jù),就需要在給定的置信水平上顯著,拒絕原假設(shè)。# ADF只是單位根檢驗的方法之一def testStationarity(timeSeries): # 單位根檢驗方法 adf = adfuller(timeSeries) adf_result = pd.Series(adf[0:4], index=['Test Statistic','p-value','Lags Used','Number of Observations Used']) for key,value in adf[4].items(): adf_result['Critical Value (%s)'%key] = value return adf_result

獲取數(shù)據(jù)、平穩(wěn)性檢驗

#?獲取原始的數(shù)據(jù),從2010年4月16日至2017年9月13日IF = getData('data/IF-100416-170913.csv')#?將去除最后80天的數(shù)據(jù)集作為模型訓(xùn)練的數(shù)據(jù)源train = IF.iloc[:-80]#?按照線性差值的方式對訓(xùn)練數(shù)據(jù)重分布,填充非交易日部分的數(shù)據(jù),#?以滿足后續(xù)ARIMA模型訓(xùn)練的要求trainInterpolate=train.resample('D').interpolate('linear')#?對原始時間序列進(jìn)行平穩(wěn)性檢驗testStationarity(trainInterpolate)

通過對比Test Statistic值和Critical Value的值,以及p值可以確定上述時間序列是非平穩(wěn)序列。

差分

既然原始數(shù)據(jù)是非平穩(wěn)序列,則需要對數(shù)據(jù)進(jìn)行一定的處理,如差分和取對數(shù)等等,本文主要采取差分的方法,持續(xù)差分直到序列滿足平穩(wěn)性要求。

#?一階差分trainInterpolate_diff1 = trainInterpolate.diff(1).dropna()#?對一階差分序列進(jìn)行平穩(wěn)性檢驗testStationarity(trainInterpolate_diff1)

通過對比Test Statistic值和Critical Value的值,以及p值可以確定上述一階時間序列是平穩(wěn)序列。

可視化一階差分后的時間序列圖

trainInterpolate_diff1.plot()

圖1、股指期貨IF一階差分后的收盤價格走勢

03

模型定參

要使用ARIMA 模型,必須確定模型的階數(shù) p、q以及d 。d的確定是比較簡單的,完全是差分后的數(shù)據(jù)是否是平穩(wěn)序列。對于p和q,p或者q越大,則模型的參數(shù)越多,越有可能捕捉到時間序列中不同間隔K的自相關(guān)性。但是,參數(shù)太多的話容易造成過擬合。因此在選擇階數(shù)時,必須同時考慮擬合的準(zhǔn)確性和避免過擬合。

通過前面的差分過程,已經(jīng)可以確定d的值是1(因為是一階差分序列)。后面需要確定的就是p和q的值。

在確定模型p和q的階數(shù)時,常用的工具是使用信息量準(zhǔn)則,包括赤池信息量準(zhǔn)則(Akaike information criterion,簡稱 AIC,由日本統(tǒng)計學(xué)家赤池弘次創(chuàng)立)以及貝葉斯信息量準(zhǔn)則(Bayesian information criterion,簡稱 BIC)。

上述兩個信息量準(zhǔn)則的目的都是尋找可以最好地解釋數(shù)據(jù)但包含最少自由參數(shù)的模型。它們均使用模型的似然函數(shù)、參數(shù)個數(shù)以及觀測點(diǎn)個數(shù)來構(gòu)建一個標(biāo)量函數(shù),以此作為評價模型好壞的標(biāo)準(zhǔn)。它們的區(qū)別是標(biāo)量函數(shù)的表達(dá)式有所不同。

除了使用上述的信息量準(zhǔn)則以外,畫ACF(自相關(guān)圖)和PACF(偏自相關(guān)圖)圖也是一種解決定階的方法。

ACF(自相關(guān)序列)

plot_acf(trainInterpolate_diff1)

圖2、自相關(guān)圖

PACF(偏自相關(guān)序列)圖

plot_pacf(trainInterpolate_diff1)

圖3、偏自相關(guān)圖

模型定階

其實很多時候不太容易通過自相關(guān)圖和偏自相關(guān)圖看出p和q的階數(shù),所以個人更習(xí)慣用工具去選擇合適的p和q。本文主要選擇AIC指標(biāo)(赤池信息量準(zhǔn)則)。

pqselect = st.arma_order_select_ic(y=trainInterpolate,\ max_ar=4,max_ma=4,ic=['aic'])

當(dāng)我們使用 AIC 或者 BIC 確定模型的最優(yōu)p、q階數(shù)之后,便可以對時間序列建模。

# 把p、i、q分別傳入order中,設(shè)置數(shù)據(jù)的頻率為日線數(shù)據(jù)model = ARIMA(trainInterpolate,order=(3,1,2),freq="D" )

04

參數(shù)檢驗

Ljung-Box檢驗

時間序列中一個最基本的模型就是高斯白噪聲序列,對于ARIMA模型,其殘差就被假定為高斯白噪聲序列。所以當(dāng)我們用ARIMA模型去擬合數(shù)據(jù)時,擬合后我們需要對殘差的估計序列進(jìn)行是否是白噪聲的檢驗。

Ljung-Box檢驗恰是對時間序列是否存在滯后相關(guān)的一種統(tǒng)計檢驗,通過Ljung-Box檢驗判斷其是否是高斯白噪聲,如果不是,那么說明ARIMA模型可能并不是一個合適的模型。

Ljung-Box檢驗的原假設(shè),H0:原本的數(shù)據(jù)都是獨(dú)立的,即總體的相關(guān)系數(shù)為0。

#?殘差的白噪聲檢驗lj = acorr_ljungbox(result.resid,lags=10)[1]for i in range(len(lj)): print('lag = '+str(i)+', p-value='+str(round(lj[i],4)))

通過對比P值,可以發(fā)現(xiàn)在顯著性水平0.05或者0.01,無法拒絕原假設(shè)H0,所以殘差為獨(dú)立的數(shù)據(jù)。

05

模型預(yù)測

模型預(yù)測

對模型進(jìn)行訓(xùn)練,然后數(shù)據(jù)模型的匯總參數(shù)信息

# 對模型進(jìn)行訓(xùn)練result = model.fit()#?模型的匯總參數(shù)信息result.summary()

圖4、模型的參數(shù)

可視化預(yù)測結(jié)果

#?基于模型生成預(yù)測數(shù)據(jù)predict = result.predict('20170523', '20170917',dynamic=True, typ='levels')# 可視化預(yù)測結(jié)果plt.figure(figsize=(12,?6))# 將橫左邊旋轉(zhuǎn)45度plt.xticks(rotation=45)# 可視化預(yù)測結(jié)果plt.plot(predict)# 可視化原始指數(shù)點(diǎn)位plt.plot(IF)

圖5、模型預(yù)測結(jié)果可視化(紅色為原始數(shù),藍(lán)色為預(yù)測數(shù)據(jù))

通過圖5發(fā)現(xiàn) ,使用ARIMA的預(yù)測效果還是非常差的,整體的偏差性非常大,得到這樣的結(jié)果也是正常的。影響指數(shù)走勢的因素非常多,如國內(nèi)政策、國外市場情況等等,指數(shù)的歷史價格只是影響未來價格的一小部分因素。另外需要說明的是,ARIMA模型只能捕捉線性的影響因素,很多非線性的影響因素并不在模型內(nèi)。?

感興趣的讀者可以多多關(guān)注本公眾號,后續(xù)會持續(xù)分享科技、金融方面的話題,尤其是金融大數(shù)據(jù)分析領(lǐng)域。

總結(jié)

以上是生活随笔為你收集整理的arima模型 p q d 确定_基于ARIMA预测股指期货价格走势的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。