本文目錄一覽:
arima模型python 怎麼看平穩性
時間序列分析(一) 如何判斷序列是否平穩
序列平穩不平穩,一般採用兩種方法:
第一種:看圖法
圖是指時序圖,例如(eviews畫滴):
分析:什麼樣的圖不平穩,先說下什麼是平穩,平穩就是圍繞著一個常數上下波動。
看看上面這個圖,很明顯的增長趨勢,不平穩。
第二種:自相關係數和偏相關係數
還以上面的序列為例:用eviews得到自相關和偏相關圖,Q統計量和伴隨概率。
分析:判斷平穩與否的話,用自相關圖和偏相關圖就可以了。
平穩的序列的自相關圖和偏相關圖不是拖尾就是截尾。截尾就是在某階之後,係數都為 0 ,怎麼理解呢,看上面偏相關的圖,當階數為 1 的時候,係數值還是很大, 0.914. 二階長的時候突然就變成了 0.050. 後面的值都很小,認為是趨於 0 ,這種狀況就是截尾。再就是拖尾,拖尾就是有一個衰減的趨勢,但是不都為 0 。
自相關圖既不是拖尾也不是截尾。以上的圖的自相關是一個三角對稱的形式,這種趨勢是單調趨勢的典型圖形。
下面是通過自相關的其他功能
如果自相關是拖尾,偏相關截尾,則用 AR 演算法
如果自相關截尾,偏相關拖尾,則用 MA 演算法
如果自相關和偏相關都是拖尾,則用 ARMA 演算法, ARIMA 是 ARMA 演算法的擴展版,用法類似 。
不平穩,怎麼辦?
答案是差分
還是上面那個序列,兩種方法都證明他是不靠譜的,不平穩的。確定不平穩後,依次進行1階、2階、3階…差分,直到平穩位置。先來個一階差分,上圖。
從圖上看,一階差分的效果不錯,看著是平穩的。
ARIMA模型用Python分析需要安裝什麼庫
需要安裝requests庫
1.requests庫
用一句話總結就是:每個Python程序員都應該有它,爬取數據必備!
2.scrapy
提取結構化數據而創建的一個爬蟲框架,是目前python社區最流行的爬蟲框架之一
3.wxPython
Python的一個GUI(圖形用戶界面)工具
4.BeautifulSoup
xml和html的解析庫對於新手非常有用
5.Pygame
哪個程序員不喜歡玩遊戲和寫遊戲?這個庫會讓你在開發2D遊戲的時候如虎添翼
6.Pyglet
3D動畫和遊戲開發引擎
7.NumPy
為Python提供了很多高級的數學方法
8.pandas
在數據操作和數據分析方面,Pandas絕無敵手。
9.Matplotlib
Matplotlib主要的作用,是用來生成繪圖,直方圖,功率譜,條形圖,錯誤圖,散點圖等,而Matplotlib是一個Python的2D繪圖庫,它以各種硬拷貝格式和跨平台的互動式環境生成出版質量級別的圖形。
用Python預測「周期性時間序列」的正確姿勢
公司平台上有不同的api,供內部或外部調用,這些api承擔著不同的功能,如查詢賬號、發版、搶紅包等等。日誌會記錄下每分鐘某api被訪問了多少次,即一個api每天會有1440條記錄(1440分鐘),將每天的數據連起來觀察,有點類似於股票走勢的意思。我想通過前N天的歷史數據預測出第N+1天的流量訪問情況,預測值即作為合理參考,供新一天與真實值做實時對比。當真實流量跟預測值有較大出入,則認為有異常訪問,觸發報警。
我放了一份樣例數據在data文件夾下,
看一下數據大小和結構
畫圖看一下序列的走勢:(一些畫圖等探索類的方法放在了test_stationarity.py 文件中,包含時間序列圖,移動平均圖,有興趣的可以自己嘗試下)。
看這糟心的圖,那些驟降為0的點這就是我遇到的第一個坑,我當初一拿到這份數據就開始做了。後來折騰了好久才發現,那些驟降為0的點是由於數據缺失,ETL的同學自動補零造成的,溝通晚了(TДT)。
把坑填上,用前後值的均值把缺失值補上,再看一眼:
發現這份數據有這樣幾個特點,在模型設計和數據預處理的時候要考慮到:
前六天的數據做訓練,第七天做測試集。
消除數據的毛刺,可以用移動平均法,我這裡沒有採用,因為我試過發現對於我的數據來說,移動平均處理完後並不能使數據平滑,我這裡採用的方法很簡單,但效果還不錯:把每個點與上一點的變化值作為一個新的序列,對這裡邊的異常值,也就是變化比較離譜的值剃掉,用前後數據的均值填充,注意可能會連續出現變化較大的點:
平滑後的訓練數據:
採用statsmodels工具包:
對分解出來的趨勢部分單獨用arima模型做訓練:
預測出趨勢數據後,加上周期數據即作為最終的預測結果,但更重要的是,我們要得到的不是具體的值,而是一個合理區間,當真實數據超過了這個區間,則觸發報警,誤差高低區間的設定來自剛剛分解出來的殘差residual數據:
預測並完成最後的加法處理,得到第七天的預測值即高低置信區間:
對第七天作出預測,評估的指標為均方根誤差rmse,畫圖對比和真實值的差距:
可以看到,均方根誤差462.8,相對於原始數據幾千的量級,還是可以的。測試數據中的兩個突變的點,也超過了置信區間,能準確報出來。
前文提到不同的api形態差異巨大,本文只展示了一個,我在該項目中還接觸了其他形態的序列,有的有明顯的上升或下降趨勢;有的開始比較平緩,後面開始增長… … ,但是都屬於典型的周期性時間序列,它的核心思想很簡單:做好分解,做好預測結果的還原,和置信區間的設置,具體操作可根據具體業務邏輯做調整,祝大家建模愉快:-D。
原創文章,作者:KYB9G,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/129604.html