数学建模——ARIMA时间序列预测模型Python代码
生活随笔
收集整理的這篇文章主要介紹了
数学建模——ARIMA时间序列预测模型Python代码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
import pandas # 讀取數據,指定日期為索引列data = pandas.read_csv('D:\\DATA\\pycase\\number2\\9.3\\Data.csv' ,index_col='日期'
)# 繪圖過程中import matplotlib.pyplot as plt# 用來正常顯示中文標簽plt.rcParams['font.sans-serif']=['SimHei']# 用來正常顯示負號plt.rcParams['axes.unicode_minus'] = False # 查看趨勢圖
data.plot() #有增長趨勢,不平穩# 附加:查看自相關系數合片自相關系數(查分之后),可以用于平穩性的檢測,也可用于定階系數預估#自相關圖()from statsmodels.graphics.tsaplots import plot_acfplot_acf(data).show() #自相關圖既不是拖尾也不是截尾。以上的圖的自相關是一個三角對稱的形式,這種趨勢是單調趨勢的典型圖形,說明這個序列不是平穩序列# 1 平穩性檢測from statsmodels.tsa.stattools import adfuller as ADFdef tagADF(t):result = pandas.DataFrame(index=["Test Statistic Value", "p-value", "Lags Used", "Number of Observations Used", "Critical Value(1%)", "Critical Value(5%)", "Critical Value(10%)"], columns=['銷量']);result['銷量']['Test Statistic Value'] = t[0]result['銷量']['p-value'] = t[1]result['銷量']['Lags Used'] = t[2]result['銷量']['Number of Observations Used'] = t[3]result['銷量']['Critical Value(1%)'] = t[4]['1%']result['銷量']['Critical Value(5%)'] = t[4]['5%']result['銷量']['Critical Value(10%)'] = t[4]['10%']return result;print('原始序列的ADF檢驗結果為:',tagADF(ADF(data[u'銷量']))) # 添加標簽后展現# 平穩判斷:得到統計量大于三個置信度(1%,5%,10%)臨界統計值,p值顯著大于0.05,該序列為非平穩序列。
# 備注:得到的統計量顯著小于3個置信度(1%,5%,10%)的臨界統計值時,為平穩 此時p值接近于0 此處不為0,嘗試增加數據量,原數據太少# 2 進行數據差分,一般一階差分就可以D_data = data.diff(1).dropna()
D_data.columns = [u'銷量差分']#差分圖趨勢查看D_data.plot()
plt.show()# 附加:查看自相關系數合片自相關系數(查分之后),可以用于平穩性的檢測,也可用于定階系數預估#自相關圖plot_acf(D_data).show()plt.show()#偏自相關圖from statsmodels.graphics.tsaplots import plot_pacfplot_pacf(D_data).show()# 3 平穩性檢測print(u'差分序列的ADF檢驗結果為:', tagADF(ADF(D_data[u'銷量差分']))) # 解釋:Test Statistic Value值小于兩個水平值,p值顯著小于0.05,一階差分后序列為平穩序列。# 4 白噪聲檢驗
from statsmodels.stats.diagnostic import acorr_ljungbox#返回統計量和p值print(u'差分序列的白噪聲檢驗結果為:', acorr_ljungbox(D_data, lags=1)) # 分別為stat值(統計量)和P值# P值小于0.05,所以一階差分后的序列為平穩非白噪聲序列。# 5 p,q定階from statsmodels.tsa.arima_model import ARIMA#一般階數不超過length/10pmax = int(len(D_data)/10) #一般階數不超過length/10qmax = int(len(D_data)/10) #bic矩陣bic_matrix = []
for p in range(pmax+1):tmp = []for q in range(qmax+1):
#存在部分報錯,所以用try來跳過報錯。try: tmp.append(ARIMA(data, (p,1,q)).fit().bic)except:tmp.append(None)bic_matrix.append(tmp)#從中可以找出最小值bic_matrix = pandas.DataFrame(bic_matrix) #先用stack展平,然后用idxmin找出最小值位置。p,q = bic_matrix.stack().idxmin() print(u'BIC最小的p值和q值為:%s、%s' %(p,q))
# 取BIC信息量達到最小的模型階數,結果p為0,q為1,定階完成。# 6 建立模型和預測model = ARIMA(data, (p,1,q)).fit() #給出一份模型報告model.summary2() #作為期5天的預測,返回預測結果、標準誤差、置信區間。model.forecast(5)
總結
以上是生活随笔為你收集整理的数学建模——ARIMA时间序列预测模型Python代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 交通数学建模B题
- 下一篇: 数学建模——K-means聚类模型Pyt