時間序列模型:如何對滬指走勢進行預(yù)測唤殴?

滬指一般指上海證券綜合指數(shù)簡稱“上證指數(shù)”或“上證綜指”,其樣本股是在上海證券交易所全部上市股票捐下,包括A股和B股顿天,反映了上海證券交易所上市股票價格的變動情況,自1991年7月15日起正式發(fā)布蔑担。

今天牌废,我們就要根據(jù)其歷史數(shù)據(jù)做出預(yù)測模型:

原理:

根據(jù)AR,MA,ARMA,ARIMA時間序列算法,觀察結(jié)果與時間的關(guān)系啤握,找出目標(biāo)變量Y與時間的相性規(guī)律鸟缕。

四種算法:

1、AR 全稱Auto Regresive 自回歸模型:
過去若干時刻的點通過線性組合,再加上白噪聲(隨機誤差)可以預(yù)測未來某個時刻的結(jié)果懂从,模型為AR(p)授段;
2、MA Moving Average 滑動平均模型:
通過歷史白噪聲進行線性組合番甩,來影響當(dāng)前時刻的數(shù)據(jù)侵贵,模型為AM(q);
3缘薛、ARMA 自回歸滑動平均模型:
兩者混合使用更加準(zhǔn)確窍育,ARMA(p,q)
4、ARIMA差分自回歸滑動平均模型:
比ARMA多一個差分過程宴胧,將不平穩(wěn)數(shù)據(jù)進行差分平穩(wěn)漱抓,模型為ARIMA(p,d,q)

模型介紹:
from statsmodels.tsa.arima_model import ARMA
ARMA(endog,order,exog=None)
ARMA.predict(start,end)#預(yù)測起始時間和終止時間

endog:模型內(nèi)變量data,輸入值x
order:模型參數(shù)(p,q)

模型步驟:

1、導(dǎo)入數(shù)據(jù)恕齐,改成DataFrame格式乞娄,將時間設(shè)置為index索引
2、將時間與數(shù)據(jù)定為指定的日显歧、月仪或、季或年平均數(shù)值
3、建立模型士骤,預(yù)測
4溶其、畫出走勢圖

改進方式:
1、ARMA中的p敦间,q值選擇瓶逃,引入AIC準(zhǔn)則(赤池消息準(zhǔn)則),統(tǒng)計模型擬合好壞的標(biāo)準(zhǔn)廓块,數(shù)值越小表示擬合越好;
2厢绝、嘗試按不同時間點預(yù)測,可是按日带猴、月昔汉、季或年,多種預(yù)測方式拴清。

具體代碼與詳解:
#導(dǎo)入包
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime
from statsmodels.tsa.arima_model import ARMA
import warnings
from itertools import product
warnings.filterwarnings("ignore")
#導(dǎo)入數(shù)據(jù)
data=pd.read_csv("E:/數(shù)據(jù)學(xué)習(xí)網(wǎng)站/bitcoin-master/shanghai_1990-12-19_to_2019-2-28.csv")
# print(data)
#將時間轉(zhuǎn)化為標(biāo)準(zhǔn)格式靶病,將時間設(shè)置為index索引
data.Timestamp=pd.to_datetime(data.Timestamp)
data.index=data.Timestamp
#按月,季口予,年來統(tǒng)計
df_month=data.resample("M").mean()
df_q=data.resample("Q-DEC").mean()
df_y=data.resample('A-DEC').mean()

#設(shè)置pq值的取值范圍
sp=range(0,3)
sq=range(0,3)
parameters=product(sp,sq)#二元循環(huán)
parameters_list=list(parameters)#將其轉(zhuǎn)化為列表格式

resulrs=[]
best_aic=float("inf")#取值無窮大
#按月份建立預(yù)測模型
for param in parameters_list:
    try:
        model=ARMA(df_month.Price,order=(param[0],param[1])).fit()
    except ValueError:
        print("參數(shù)錯誤",param)
        continue
    aic=model.aic
    if aic<best_aic:
        best_aic=aic
        best_model=model
        best_parame=param
    resulrs.append([param,model.aic])
resulrs_table=pd.DataFrame(resulrs)
resulrs_table.columns=(['parames',"aic"])
# print("最優(yōu)模型:",best_model.summary())
#輸出預(yù)測值
df_month2=df_month[["Price"]]
datelist=[datetime(2018,3,31),datetime(2019,4,30),datetime(2019,5,31),datetime(2019,6,30),datetime(2019,7,31),datetime(2019,8,31)]
future=pd.DataFrame(index=datelist,columns=df_month2.columns)
df_month2=pd.concat([df_month2,future])

df_month2["預(yù)測值"]=model.predict(datetime(1990,12,31),datetime(2019,12,31))
print(df_month2)#添加預(yù)測值一列

# 開始畫圖娄周,按月預(yù)測
plt.figure(figsize=(20,12))
plt.rcParams['font.sans-serif']=['SimHei']
plt.plot(df_month.Price,label="實際走向")
plt.plot(model.predict(datetime(1990,12,31),datetime(2019,12,31)),ls="--",label="預(yù)測值")
plt.legend()
plt.title("滬指預(yù)測圖")
plt.xlabel("時間")
plt.ylabel("指數(shù)")
plt.show()

#按季度建立預(yù)測模型
# for param in parameters_list:
#     try:
#         model=ARMA(df_q.Price,order=(param[0],param[1])).fit()
#     except ValueError:
#         print("參數(shù)錯誤",param)
#         continue
#     aic=model.aic
#     if aic<best_aic:
#         best_aic=aic
#         best_model=model
#         best_parame=param
#     resulrs.append([param,model.aic])
#
# resulrs_table=pd.DataFrame(resulrs)
# resulrs_table.columns=(['parames',"aic"])
# # print("最優(yōu)模型:",best_model.summary())
#
# df_q2=df_q[["Price"]]
# # print(df_q2)
#
# datelist=[datetime(2019,3,31),datetime(2019,6,30),datetime(2019,9,30),datetime(2019,12,31),datetime(2020,3,31),datetime(2020,6,30)]
# future=pd.DataFrame(index=datelist,columns=df_q2.columns)
# df_q2=pd.concat([df_q,future])
# # print(df_q2)
#
# df_q2["預(yù)測值"]=model.predict(datetime(1990,12,31),datetime(2020,6,30))
# print(df_q2)
#
# # 開始畫圖,按月計算
# plt.figure(figsize=(20,12))
# plt.rcParams['font.sans-serif']=['SimHei']
# plt.plot(df_q.Price,label="實際走向")
# plt.plot(model.predict(datetime(1990,12,31),datetime(2020,6,30)),ls="--",label="預(yù)測值")
# plt.legend()
# plt.title("滬指按季度預(yù)測圖")
# plt.xlabel("時間")
# plt.ylabel("指數(shù)")
# plt.show()

結(jié)果展示:

最優(yōu)模型:                               ARMA Model Results                              
==============================================================================
Dep. Variable:                  Price   No. Observations:                  339
Model:                     ARMA(2, 2)   Log Likelihood               -2208.110
Method:                       css-mle   S.D. of innovations            162.159
Date:                Sun, 14 Jul 2019   AIC                           4428.219
Time:                        10:55:22   BIC                           4451.175
Sample:                    12-31-1990   HQIC                          4437.367
                         - 02-28-2019                                         
===============================================================================
                  coef    std err          z      P>|z|      [0.025      0.975]
-------------------------------------------------------------------------------
const        1840.3415    489.717      3.758      0.000     880.514    2800.169
ar.L1.Price     0.5137      0.130      3.959      0.000       0.259       0.768
ar.L2.Price     0.4501      0.128      3.508      0.001       0.199       0.702
ma.L1.Price     0.8480      0.121      6.985      0.000       0.610       1.086
ma.L2.Price     0.3796      0.062      6.095      0.000       0.258       0.502
                                    Roots                                    
=============================================================================
                  Real          Imaginary           Modulus         Frequency
-----------------------------------------------------------------------------
AR.1            1.0254           +0.0000j            1.0254            0.0000
AR.2           -2.1667           +0.0000j            2.1667            0.5000
MA.1           -1.1171           -1.1776j            1.6231           -0.3708
MA.2           -1.1171           +1.1776j            1.6231            0.3708
-----------------------------------------------------------------------------
                  Price          預(yù)測值
2019-01-31  2555.663395  2562.690035
2019-02-28  2759.671400  2512.273755
2018-03-31          NaN  3245.481297
2019-04-30          NaN  2862.520492
2019-05-31          NaN  2816.232885
2019-06-30          NaN  2801.803030
2019-07-31          NaN  2773.554697
2019-08-31          NaN  2752.547171
圖片展示:
按月預(yù)測.png
附加按季度預(yù)測.png

時間序列練習(xí)可用數(shù)據(jù)全套:
鏈接:https://pan.baidu.com/s/1HAB8WCYtgwVbkxStWrRm5g
提取碼:43v8

歡迎提問與指正~~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末沪停,一起剝皮案震驚了整個濱河市煤辨,隨后出現(xiàn)的幾起案子裳涛,更是在濱河造成了極大的恐慌,老刑警劉巖众辨,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件端三,死亡現(xiàn)場離奇詭異,居然都是意外死亡鹃彻,警方通過查閱死者的電腦和手機郊闯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蛛株,“玉大人团赁,你說我怎么就攤上這事∮净樱” “怎么了然痊?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵至朗,是天一觀的道長屉符。 經(jīng)常有香客問我,道長锹引,這世上最難降的妖魔是什么矗钟? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮嫌变,結(jié)果婚禮上吨艇,老公的妹妹穿的比我還像新娘。我一直安慰自己腾啥,他們只是感情好东涡,可當(dāng)我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著倘待,像睡著了一般疮跑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上凸舵,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天祖娘,我揣著相機與錄音,去河邊找鬼啊奄。 笑死渐苏,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的菇夸。 我是一名探鬼主播琼富,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼庄新!你這毒婦竟也來了公黑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎凡蚜,沒想到半個月后人断,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡朝蜘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年恶迈,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谱醇。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡暇仲,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出副渴,到底是詐尸還是另有隱情奈附,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布煮剧,位于F島的核電站斥滤,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏勉盅。R本人自食惡果不足惜佑颇,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望草娜。 院中可真熱鬧挑胸,春花似錦、人聲如沸宰闰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽移袍。三九已至解藻,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間咐容,已是汗流浹背舆逃。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留戳粒,地道東北人路狮。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像蔚约,于是被迫代替她去往敵國和親奄妨。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容