拓端tecdat|Python用ARIMA和SARIMA模型預測銷量時間序列數(shù)據(jù)
原文鏈接:http://tecdat.cn/?p=21573?
原文出處:拓端數(shù)據(jù)部落公眾號
介紹
ARIMA模型是時間序列預測中一種常用的統(tǒng)計方法。指數(shù)平滑和ARIMA模型是時間序列預測中應用最為廣泛的兩種方法,它們是解決這一問題的補充方法。指數(shù)平滑模型是基于對數(shù)據(jù)趨勢和季節(jié)性的描述,而ARIMA模型則是為了描述數(shù)據(jù)的自相關性。
在討論ARIMA模型之前,我們先來討論平穩(wěn)性的概念和時間序列的差分技術。
平穩(wěn)性
平穩(wěn)時間序列數(shù)據(jù)的性質(zhì)不依賴于時間,這就是為什么具有趨勢或季節(jié)性的時間序列不是平穩(wěn)的。趨勢和季節(jié)性會在不同的時間影響時間序列的值,另一方面,對于平穩(wěn)性,當你觀察它時并不重要,它在任何時間點看起來都應該是相同的。一般來說,一個平穩(wěn)的時間序列在長期內(nèi)沒有可預測的模式。
ARIMA是自回歸綜合移動平均線的縮寫。它是一類在時間序列數(shù)據(jù)中捕獲一組不同標準時間結構的模型。
在本教程中,我們將討論如何用Python開發(fā)時間序列預測的ARIMA模型。
ARIMA模型是一類用于分析和預測時間序列數(shù)據(jù)的統(tǒng)計模型。它在使用上確實簡化了,但是這個模型確實很強大。
ARIMA代表自回歸綜合移動平均。
ARIMA模型的參數(shù)定義如下:
p:模型中包含的滯后觀測數(shù),也稱為滯后階數(shù)。
d:原始觀測值的差異次數(shù),也稱為差分階數(shù)。
q:移動平均線窗口的大小,也叫移動平均階數(shù)。
建立一個包含指定數(shù)量和類型的項的線性回歸模型,并通過差分程度來準備數(shù)據(jù),使其平穩(wěn),即去除對回歸模型產(chǎn)生負面影響的趨勢和季節(jié)結構。
步驟
1可視化時間序列數(shù)據(jù)
2確定日期是否平穩(wěn)
3繪制相關圖和自相關圖
4根據(jù)數(shù)據(jù)建立ARIMA模型或季節(jié)ARIMA模型
?
在本教程中,我正在使用下面的數(shù)據(jù)集。
df.head()
#更新表頭
df.columns=["月份","銷量"]
df.head()
df.plot()

如果我們看到上面的圖表,那么我們將能夠找到一個趨勢,即有一段時間銷售很高,反之亦然。這意味著我們可以看到數(shù)據(jù)是遵循季節(jié)性的。對于ARIMA,我們首先要做的是確定數(shù)據(jù)是平穩(wěn)的還是非平穩(wěn)的。如果數(shù)據(jù)是非平穩(wěn)的,我們會盡量使它們平穩(wěn),然后我們會進一步處理。
讓我們檢查給定的數(shù)據(jù)集是否是平穩(wěn)的,為此我們使用adfuller檢驗 。
我通過運行上述代碼導入了檢驗函數(shù)。
為了確定數(shù)據(jù)的性質(zhì),我們將使用零假設。
H0:零假設:這是一個關于總體的陳述,要么被認為是正確的,要么被用來提出一個論點。
H1:備選假設:與H0相矛盾,當我們拒絕H0時,我們得出的結論。
Ho:它是非平穩(wěn)的
H1:它是平穩(wěn)的
我們將考慮數(shù)據(jù)不平穩(wěn)的零假設和數(shù)據(jù)平穩(wěn)的備擇假設。
adfuller_test(df['銷量'])
運行上述代碼后,我們將得到P值,
ADF Test Statistic : -1.833
p-value : 0.363915
#Lags Used : 11
Number of Observations : 93
這里P值是0.36,大于0.05,這意味著數(shù)據(jù)接受了零假設,這意味著數(shù)據(jù)是非平穩(wěn)的。
我們來看看一階差分和季節(jié)性差分:
df['Sales First Difference'] = df['銷量'] - df['銷量'].shift(1)

# 再次測試數(shù)據(jù)是否平穩(wěn)
adfuller_test(df['Seasonal First Difference'].dropna())
ADF Test Statistic : -7.626619157213163
p-value : 2.060579696813685e-11
#Lags Used : 0
Number of Observations : 92
這里p值是2.06,表示拒絕零假設。所以數(shù)據(jù)是平穩(wěn)的。

自相關系數(shù):
autocorrelation_plot(df['銷量'])
plt.show()

plot_acf(df['季節(jié)性一階差分'].dropna(),lags=40,ax=ax1)


建立ARIMA模型?
#對于非季節(jié)性數(shù)據(jù)
#p=1, d=1, q=0 or 1
model=ARIMA(df['銷量'],order=(1,1,1))
?


predict(start=90,end=103,dynamic=True)

SARIMA模型?
然后建立SARIMA模型?
plot(figsize=(12,8))

可以看到擬合效果要優(yōu)于ARIMA模型。
然后我們用SARIMA模型對未來進行預測。?
future_df['預測'] = results.predict(start = 104, end = 120, dynamic= True)
future_df.plot(figsize=(12, 8))

結論
時間序列預測是非常有用的,有很多其他模型可以做時間序列預測,但ARIMA是很容易理解的。

最受歡迎的見解
1.在python中使用lstm和pytorch進行時間序列預測
2.python中利用長短期記憶模型lstm進行時間序列預測分析
3.使用r語言進行時間序列(arima,指數(shù)平滑)分析
4.r語言多元copula-garch-模型時間序列預測
5.r語言copulas和金融時間序列案例
6.使用r語言隨機波動模型sv處理時間序列中的隨機波動
7.r語言時間序列tar閾值自回歸模型
8.r語言k-shape時間序列聚類方法對股票價格時間序列聚類
9.python3用arima模型進行時間序列預測