在上一篇中,咱們發現knn和線性迴歸同樣,表現的不是特別好,來看看時間序列的表現html
時間序列預測法實際上是一種迴歸預測方法,屬於定量預測,其基本原理是;一方面認可事物發展的延續性,運用過去時間序列的數據進行統計分析,推測出事物的發展趨勢;另外一方面充分考慮到偶然因素影響而產生的隨機性,爲了消除隨機波動的影響,利用歷史數據進行統計分析,並對數據進行適當處理,進行趨勢預測。機器學習
ARIMA是一種很是流行的時間序列預測統計方法。ARIMA模型使用過去的值來預測將來的值。ARIMA中有三個重要參數:學習
p(用來預測下一個值的過去值)測試
q(用來預測將來值的過去預測偏差)優化
d(差分的順序)spa
ARIMA的參數優化須要大量時間。所以咱們將使用自動 ARIMA,自動選擇偏差最小的(p,q,d)最佳組合。htm
順便插一句,若是不使用自動選擇偏差的話,你能夠經過計算數據的差分,做圖而後手動選擇p d q的大小,若是你對這一個方向感興趣,能夠小窗我或者底下留言,在這裏很少作介紹。blog
#導入庫排序
from pyramid.arima import auto_arima索引
#按照索引排序
data = df.sort_index(ascending=True, axis=0)
#劃分訓練集、測試集
train = data[:987]
valid = data[987:]
# 取出兩個集合中close這列的數據,第二行不是很清楚感受沒用到,知道的大佬留言區指點迷津
training = train['Close']
validation = valid['Close']
#創建模型(自動選擇參數)
model = auto_arima(training, start_p=1, start_q=1,max_p=3, max_q=3, m=12,start_P=0, seasonal=True,d=1, D=1, trace=True,error_action='ignore',suppress_warnings=True)
model.fit(training)
#預測
forecast = model.predict(n_periods=248)
forecast = pd.DataFrame(forecast,index = valid.index,columns=['Prediction'])
#計算rms
rms=np.sqrt(np.mean(np.power((np.array(valid['Close'])-np.array(forecast['Prediction'])),2)))
#下面兩行爲結果,可不執行
rms
44.954584993246954
#plot繪圖 訓練的close,測試的close 和預測值
plt.plot(train['Close'])
plt.plot(valid['Close'])
plt.plot(forecast['Prediction'])
正如咱們前面看到的,自動ARIMA模型使用過去的數據來理解時間序列中的模式。利用這些值,該模型捕捉到該系列中的增加趨勢。
雖然使用這種技術的預測比之前實現的機器學習模型的預測要好得多,可是這些預測仍然與實際值相距甚遠。
從圖中能夠明顯看出,該模型在序列中捕捉到了一種趨勢,但忽略了季節的影響。