時間序列 被定義為一系列按時間順序索引的資料點。時間順序可以是每天,每月或每年。
以下是一個時間序列示例,該示例說明了從1949年到1960年每月航空公司的乘客數量。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAnYldHL0FWby9mZvwFN4ETMfdHLkVGepZ2XtxSZ6l2clJ3LcV2Zh1Wa9M3clN2byBXLzN3btgHL9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsQTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5iM4UDNzIWMjVGO2ADM4cjNzYzX2AjNzcTM2AzLcFTMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
時間序列預測
時間序列預測是使用統計模型根據過去的結果預測時間序列的未來值的過程。
一些示例
- 預測未來的客戶數量。
- 解釋銷售中的季節性模式。
- 檢測異常事件并估計其影響的程度。
- 估計新推出的産品對已售出産品數量的影響。
時間序列的組成部分:
代碼:航空公司乘客的ETS分解資料集:
1. # 導入所需的庫
2.
3. import numpy as np
4.
5.
6.
7.
8. # 讀取AirPassengers資料集
9.
10. airline = pd.read_csv('data.csv',
11.
12. index_col ='Month',
13.
14. parse_dates = True)
15.
16.
17.
18. # 輸出資料集的前五行
19.
20. airline.head()
21.
22.
23.
24. # ETS分解
25.
26.
27. # ETS圖
28.
29. result.plot()
輸出:
ARIMA時間序列預測模型
ARIMA代表自回歸移動平均模型,由三個階數參數 (p,d,q)指定。
ARIMA模型的類型
自動ARIMA
“ auto_arima” 函數 可幫助我們确定ARIMA模型的最佳參數,并傳回拟合的ARIMA模型。
代碼:ARIMA模型的參數分析
1.
2. # 忽略警告
3.
4. import warnings
5.
6. warnings.filterwarnings("ignore")
7.
8.
9.
10. # 将自動arima函數拟合到AirPassengers資料集
11.
12. autoarima(airline['# Passengers'], start_p = 1, start_q = 1,
13.
14. max_p = 3, max_q = 3, m = 12,
15.
16.
17.
18. stepwise = True # 設定為逐漸
19.
20.
21.
22. # 輸出摘要
23.
24. stepwise_fit.summary()
輸出:
代碼:将ARIMA模型拟合到AirPassengers資料集
1. # 将資料拆分為訓練/測試集
2.
3.
4. test = iloc[len(airline)-12:] # 設定一年(12個月)進行測試
5.
6.
7.
8. # 在訓練集上拟合一個SARIMAX(0,1,1)x(2,1,1,12)
9.
10.
11.
12. SARIMAX(Passengers,
13.
14. order = (0, 1, 1),
15.
16. seasonal_order =(2, 1, 1, 12
17.
18.
19.
20. result.summary()
輸出:
代碼:ARIMA模型對測試集的預測
1.
2.
3. # 針對測試集的一年預測
4.
5. predict(start, end,
6.
7.
8.
9.
10. #繪圖預測和實際值
11.
12. predictions.plot
13.
輸出:
代碼:使用MSE和RMSE評估模型
1. # 加載特定的評估工具
2. # 計算均方根誤差
3.
4. rmse(test["# Passengers"], predictions)
5.
6.
7.
8. # 計算均方誤差
9.
10. mean_squared_error(test["# Passengers"], predictions)
輸出:
代碼:使用ARIMA模型進行預測
1.
2. # 在完整資料集上訓練模型
3.
4.
5. result = model.fit()
6.
7.
8.
9. # 未來3年預測
10. result.predict(start = len(airline),
11.
12. end = (len(airline)-1) + 3 * 12,
13.
14.
15.
16.
17. # 繪制預測值
18. forecast.plot(legend = True)
輸出:
- 趨勢:趨勢顯示了長時間序列資料的總體方向。趨勢可以是增加(向上),減少(向下)或水準(平穩)。
- 季節性:季節性成分在時間,方向和幅度方面表現出重複的趨勢。一些例子包括由于炎熱的天氣導緻夏季用水量增加,或每年假期期間航空公司乘客人數增加。
- 周期性成分: 這些是在特定時間段内沒有穩定重複的趨勢。周期是指時間序列的起伏,通常在商業周期中觀察到。這些周期沒有季節性變化,但通常會在3到12年的時間範圍内發生,具體取決于時間序列的性質。
- 不規則變化: 這些是時間序列資料中的波動,當趨勢和周期性變化被删除時,這些波動變得明顯。這些變化是不可預測的,不穩定的,并且可能是随機的,也可能不是随機的。
-
ETS分解
ETS分解用于分解時間序列的不同部分。ETS一詞代表誤差、趨勢和季節性。
- AR(p)自回歸 –一種回歸模型,利用目前觀測值與上一個期間的觀測值之間的依存關系。自回歸(AR(p))分量是指在時間序列的回歸方程中使用過去的值。
- I(d) –使用觀測值的差分(從上一時間步長的觀測值中減去觀測值)使時間序列穩定。差分涉及将序列的目前值與其先前的值相減d次。
- MA(q)移動平均值 –一種模型,該模型使用觀測值與應用于滞後觀測值的移動平均值模型中的殘留誤差之間的相關性。移動平均成分将模型的誤差描述為先前誤差項的組合。 q 表示要包含在模型中的項數。
- ARIMA:非季節性自回歸移動平均模型
- SARIMA:季節性ARIMA
- SARIMAX:具有外生變量的季節性ARIMA