电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

利用python實現平穩時間序列的建模方式

瀏覽:96日期:2022-07-23 10:35:33

一、平穩序列建模步驟

假如某個觀察值序列通過序列預處理可以判定為平穩非白噪聲序列,就可以利用ARMA模型對該序列進行建模。建模的基本步驟如下:

(1)求出該觀察值序列的樣本自相關系數(ACF)和樣本偏自相關系數(PACF)的值。

(2)根據樣本自相關系數和偏自相關系數的性質,選擇適當的ARMA(p,q)模型進行擬合。

(3)估計模型中位置參數的值。

(4)檢驗模型的有效性。如果模型不通過檢驗,轉向步驟(2),重新選擇模型再擬合。

(5)模型優化。如果擬合模型通過檢驗,仍然轉向不走(2),充分考慮各種情況,建立多個擬合模型,從所有通過檢驗的擬合模型中選擇最優模型。

(6)利用擬合模型,預測序列的將來走勢。

二、代碼實現

1、繪制時序圖,查看數據的大概分布

trainSeting.head()Out[36]: date2017-10-01 126.42017-10-02 82.42017-10-03 78.12017-10-04 51.12017-10-05 90.9Name: sales, dtype: float64plt.plot(trainSeting)

利用python實現平穩時間序列的建模方式

2、平穩性檢驗

’’’進行ADF檢驗adf_test的返回值Test statistic:代表檢驗統計量p-value:代表p值檢驗的概率Lags used:使用的滯后k,autolag=AIC時會自動選擇滯后Number of Observations Used:樣本數量Critical Value(5%) : 顯著性水平為5%的臨界值。(1)假設是存在單位根,即不平穩;(2)顯著性水平,1%:嚴格拒絕原假設;5%:拒絕原假設,10%類推。(3)看P值和顯著性水平a的大小,p值越小,小于顯著性水平的話,就拒絕原假設,認為序列是平穩的;大于的話,不能拒絕,認為是不平穩的(4)看檢驗統計量和臨界值,檢驗統計量小于臨界值的話,就拒絕原假設,認為序列是平穩的;大于的話,不能拒絕,認為是不平穩的’’’#滾動統計def rolling_statistics(timeseries): #Determing rolling statistics rolmean = pd.rolling_mean(timeseries, window=12) rolstd = pd.rolling_std(timeseries, window=12) #Plot rolling statistics: orig = plt.plot(timeseries, color=’blue’,label=’Original’) mean = plt.plot(rolmean, color=’red’, label=’Rolling Mean’) std = plt.plot(rolstd, color=’black’, label = ’Rolling Std’) plt.legend(loc=’best’) plt.title(’Rolling Mean & Standard Deviation’) plt.show(block=False) ##ADF檢驗from statsmodels.tsa.stattools import adfullerdef adf_test(timeseries): rolling_statistics(timeseries)#繪圖 print (’Results of Augment Dickey-Fuller Test:’) dftest = adfuller(timeseries, autolag=’AIC’) dfoutput = pd.Series(dftest[0:4], index=[’Test Statistic’,’p-value’,’#Lags Used’,’Number of Observations Used’]) for key,value in dftest[4].items(): dfoutput[’Critical Value (%s)’%key] = value #增加后面的顯著性水平的臨界值 print (dfoutput) adf_test(trainSeting) #從結果中可以看到p值為0.1097>0.1,不能拒絕H0,認為該序列不是平穩序列

返回結果如下

利用python實現平穩時間序列的建模方式

Results of Augment Dickey-Fuller Test:Test Statistic -5.718539e+00p-value 7.028398e-07#Lags Used 0.000000e+00Number of Observations Used 6.200000e+01Critical Value (1%) -3.540523e+00Critical Value (5%) -2.909427e+00Critical Value (10%) -2.592314e+00dtype: float64

通過上面可以看到,p值小于0.05,可以認為該序列為平穩時間序列。

3、白噪聲檢驗

’’’acorr_ljungbox(x, lags=None, boxpierce=False)函數檢驗無自相關lags為延遲期數,如果為整數,則是包含在內的延遲期數,如果是一個列表或數組,那么所有時滯都包含在列表中最大的時滯中boxpierce為True時表示除開返回LB統計量還會返回Box和Pierce的Q統計量返回值:lbvalue:測試的統計量pvalue:基于卡方分布的p統計量bpvalue:((optionsal), float or array) ? test statistic for Box-Pierce testbppvalue:((optional), float or array) ? p-value based for Box-Pierce test on chi-square distribution’’’from statsmodels.stats.diagnostic import acorr_ljungboxdef test_stochastic(ts,lag): p_value = acorr_ljungbox(ts, lags=lag) #lags可自定義 return p_value

test_stochastic(trainSeting,[6,12])Out[62]: (array([13.28395274, 14.89281684]), array([0.03874194, 0.24735042]))

從上面的分析結果中可以看到,延遲6階的p值為0.03<0.05,因此可以拒絕原假設,認為該序列不是白噪聲序列。

4、確定ARMA的階數

(1)利用自相關圖和偏自相關圖

####自相關圖ACF和偏相關圖PACFimport statsmodels.api as smdef acf_pacf_plot(ts_log_diff): sm.graphics.tsa.plot_acf(ts_log_diff,lags=40) #ARIMA,q sm.graphics.tsa.plot_pacf(ts_log_diff,lags=40) #ARIMA,p acf_pacf_plot(trainSeting) #查看數據的自相關圖和偏自相關圖

利用python實現平穩時間序列的建模方式

(2)借助AIC、BIC統計量自動確定

##借助AIC、BIC統計量自動確定from statsmodels.tsa.arima_model import ARMAdef proper_model(data_ts, maxLag): init_bic = float('inf') init_p = 0 init_q = 0 init_properModel = None for p in np.arange(maxLag): for q in np.arange(maxLag): model = ARMA(data_ts, order=(p, q)) try: results_ARMA = model.fit(disp=-1, method=’css’) except: continue bic = results_ARMA.bic if bic < init_bic: init_p = p init_q = q init_properModel = results_ARMA init_bic = bic return init_bic, init_p, init_q, init_properModel proper_model(trainSeting,40)

#在statsmodels包里還有更直接的函數:import statsmodels.tsa.stattools as storder = st.arma_order_select_ic(ts_log_diff2,max_ar=5,max_ma=5,ic=[’aic’, ’bic’, ’hqic’])order.bic_min_order’’’我們常用的是AIC準則,AIC鼓勵數據擬合的優良性但是盡量避免出現過度擬合(Overfitting)的情況。所以優先考慮的模型應是AIC值最小的那一個模型。為了控制計算量,我們限制AR最大階不超過5,MA最大階不超過5。 但是這樣帶來的壞處是可能為局部最優。timeseries是待輸入的時間序列,是pandas.Series類型,max_ar、max_ma是p、q值的最大備選值。order.bic_min_order返回以BIC準則確定的階數,是一個tuple類型

返回值如下:

order.bic_min_orderOut[13]: (1, 0)

5、建模

從上述結果中可以看到,可以選擇AR(1)模型

################################模型####################################### AR模型,q=0#RSS是殘差平方和# disp為-1代表不輸出收斂過程的信息,True代表輸出from statsmodels.tsa.arima_model import ARIMAmodel = ARIMA(trainSeting,order=(1,0,0)) #第二個參數代表使用了二階差分results_AR = model.fit(disp=-1)plt.plot(trainSeting)plt.plot(results_AR.fittedvalues, color=’red’) #紅色線代表預測值plt.title(’RSS:%.4f’ % sum((results_AR.fittedvalues-trainSeting)**2))#殘差平方和

利用python實現平穩時間序列的建模方式

6、預測未來走勢

############################預測未來走勢########################################### forecast方法會自動進行差分還原,當然僅限于支持的1階和2階差分forecast_n = 12 #預測未來12個天走勢forecast_AR = results_AR.forecast(forecast_n)forecast_AR = forecast_AR[0]print (forecast_AR)

print (forecast_ARIMA_log)[90.49452199 84.05407353 81.92752342 81.22536496 80.99352161 80.91697003

80.89169372 80.88334782 80.88059211 80.87968222 80.87938178 80.87928258]

##將預測的數據和原來的數據繪制在一起,為了實現這一目的,我們需要增加數據索引,使用開源庫arrow:import arrowdef get_date_range(start, limit, level=’day’,format=’YYYY-MM-DD’): start = arrow.get(start, format) result=(list(map(lambda dt: dt.format(format) , arrow.Arrow.range(level, start,limit=limit)))) dateparse2 = lambda dates:pd.datetime.strptime(dates,’%Y-%m-%d’) return map(dateparse2, result) # 預測從2017-12-03開始,也就是我們訓練數據最后一個數據的后一個日期new_index = get_date_range(’2017-12-03’, forecast_n)forecast_ARIMA_log = pd.Series(forecast_AR, copy=True, index=new_index)print (forecast_ARIMA_log.head())##繪圖如下plt.plot(trainSeting,label=’Original’,color=’blue’)plt.plot(forecast_ARIMA_log, label=’Forcast’,color=’red’)plt.legend(loc=’best’)plt.title(’forecast’)

利用python實現平穩時間序列的建模方式

以上這篇利用python實現平穩時間序列的建模方式就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 新能源汽车教学设备厂家报价[汽车教学设备运营18年]-恒信教具 | 精密模具加工制造 - 富东懿| 变频器维修公司_plc维修_伺服驱动器维修_工控机维修 - 夫唯科技 变位机,焊接变位机,焊接变位器,小型变位机,小型焊接变位机-济南上弘机电设备有限公司 | 能量回馈_制动单元_电梯节能_能耗制动_深圳市合兴加能科技有限公司 | 光伏支架成型设备-光伏钢边框设备-光伏设备厂家 | 【同风运车官网】一站式汽车托运服务平台,验车满意再付款 | 广州监控安装公司_远程监控_安防弱电工程_无线wifi覆盖_泉威安防科技 | 外贮压-柜式-悬挂式-七氟丙烷-灭火器-灭火系统-药剂-价格-厂家-IG541-混合气体-贮压-非贮压-超细干粉-自动-灭火装置-气体灭火设备-探火管灭火厂家-东莞汇建消防科技有限公司 | 无锡不干胶标签,卷筒标签,无锡瑞彩包装材料有限公司 | 成都珞石机械 - 模温机、油温机、油加热器生产厂家 | 开平机_纵剪机厂家_开平机生产厂家|诚信互赢-泰安瑞烨精工机械制造有限公司 | 污水处理设备维修_污水处理工程改造_机械格栅_过滤设备_气浮设备_刮吸泥机_污泥浓缩罐_污水处理设备_污水处理工程-北京龙泉新禹科技有限公司 | 电动车头盔厂家_赠品头盔_安全帽批发_山东摩托车头盔—临沂承福头盔 | 丁基胶边来料加工,医用活塞边角料加工,异戊二烯橡胶边来料加工-河北盛唐橡胶制品有限公司 | 成都离婚律师|成都结婚律师|成都离婚财产分割律师|成都律师-成都离婚律师网 | 吹田功率计-长创耐压测试仪-深圳市新朗普电子科技有限公司 | 交变/复合盐雾试验箱-高低温冲击试验箱_安奈设备产品供应杭州/江苏南京/安徽马鞍山合肥等全国各地 | 施工围挡-施工PVC围挡-工程围挡-深圳市旭东钢构技术开发有限公司 | 集装箱箱号识别_自重载重图像识别_铁路车号自动识别_OCR图像识别 | 拉伸膜,PE缠绕膜,打包带,封箱胶带,包装膜厂家-东莞宏展包装 | 嘉兴恒升声级计-湖南衡仪声级计-杭州爱华多功能声级计-上海邦沃仪器设备有限公司 | 光伏支架成型设备-光伏钢边框设备-光伏设备厂家 | 骨密度检测仪_骨密度分析仪_骨密度仪_动脉硬化检测仪专业生产厂家【品源医疗】 | 扬尘在线监测系统_工地噪声扬尘检测仪_扬尘监测系统_贝塔射线扬尘监测设备「风途物联网科技」 | 江西自考网-江西自学考试网| 机构创新组合设计实验台_液压实验台_气动实训台-戴育教仪厂 | 千斤顶,液压千斤顶-力良企业,专业的液压千斤顶制造商,shliliang.com | 石油/泥浆/不锈钢防腐/砂泵/抽砂泵/砂砾泵/吸砂泵/压滤机泵 - 专业石油环保专用泵厂家 | 高效节能电机_伺服主轴电机_铜转子电机_交流感应伺服电机_图片_型号_江苏智马科技有限公司 | 滤芯,过滤器,滤油机,贺德克滤芯,精密滤芯_新乡市宇清流体净化技术有限公司 | 上海律师事务所_上海刑事律师免费咨询平台-煊宏律师事务所 | 钛合金标准件-钛合金螺丝-钛管件-钛合金棒-钛合金板-钛合金锻件-宝鸡远航钛业有限公司 | 拉伸膜,PE缠绕膜,打包带,封箱胶带,包装膜厂家-东莞宏展包装 | 数码听觉统合训练系统-儿童感觉-早期言语评估与训练系统-北京鑫泰盛世科技发展有限公司 | 重庆网站建设,重庆网站设计,重庆网站制作,重庆seo,重庆做网站,重庆seo,重庆公众号运营,重庆小程序开发 | 东莞动力锂电池保护板_BMS智能软件保护板_锂电池主动均衡保护板-东莞市倡芯电子科技有限公司 | 中细软知识产权_专业知识产权解决方案提供商 | 网优资讯-为循环资源、大宗商品、工业服务提供资讯与行情分析的数据服务平台 | 无机纤维喷涂棉-喷涂棉施工工程-山东华泉建筑工程有限公司▲ | 风电变桨伺服驱动器-风电偏航变桨系统-深圳众城卓越科技有限公司 | 探鸣起名网-品牌起名-英文商标起名-公司命名-企业取名包满意 |