前言
在許多重要的領域,需要基於時間序列進行預測,例如:預測銷售量,呼叫中心的通話量,太陽能活動,海潮,股市行為等等。
假設酒店經理想預測明年會有多少遊客,來以此調整酒店的庫存,合理地猜測酒店的收入。根據過去某年/月/日的數據,他可以使用時間序列預測,得到訪問者的大致值。遊客的預測值將有助於酒店管理資源,並據此規劃計劃。
在本文中,我們將學習多種預測技術,並通過在數據集上對它們進行比較。我們將通過不同的技巧,看看如何使用這些方法來提高預測分數。
問題陳述和數據集
場景:一家位於山上的酒店,酒店的訪問量隨著時間總體是持續增長的,它在夏季期間有很高的訪問量,而一年內餘下時間的遊客相對較少,每逢週末的訪問量也會比工作日多。
數據集樣本
(完整的數據請後臺留言小編獲取,謝謝。)
頭部
id dt Count
0 0 2012-01-01 00:00 1.0000
1 1 2012-01-01 01:00 1.0001
2 2 2012-01-01 02:00 1.0004
3 3 2012-01-01 03:00 1.0009
4 4 2012-01-01 04:00 1.0016
數據樣本尾部
id dt Count
11851 11851 2013-05-08 19:00 2790.127098
11852 11852 2013-05-08 20:00 3298.490395
11853 11853 2013-05-08 21:00 1600.653698
11854 11854 2013-05-08 22:00 1864.217009
11855 11855 2013-05-08 23:00 2416.380327
數據樣本圖例
藍色:代表歷史數據。
黃色:代表測試數據,用來和預測結果做對比。
武器一:樸素法
“ 一個人只要懂得利用自己的長處,根本不必用武功也一樣能夠將人擊倒。 ” ——《長生劍》
naive RMSE= 778.6931725867004
從上圖和 RMSE 值可以看到,樸素法不適合高變異數據集,它最適合穩定的數據集。我們可以通過採用不同的技術來提高分數,現在我們來看看另一種技術,努力提高我們的得分。
武器二: 簡單平均法
“ 真正的勝利,並不是你用武器爭取的,那一定要用你的信心。無論多可怕的武器,也比不上人的信心。 ” ——《孔雀翎》
simple_avg RMSE= 2127.4877858798422
我們可以看出這個模型沒有提高我們的成績(事實上誤差更大了)。
因此,我們可以從得分推斷,這種方法在每次平均保持不變時效果最好。雖然樸素法的得分優於均值法,但這並不意味著樸素方法在所有數據集上都優於平均法。我們應該一步一步地嘗試每個模型,並確認它是否改進了我們的模型。
武器三: 移動平均法
“ 要在茫茫的人海中,找到她這麼樣一個人,豈非也正如想從湖水中撈起那柄碧玉刀一樣 ?” ——《碧玉刀》
moving_avg RMSE= 1034.080985549067
我們可以看到,在這個數據集上,樸素法優於平均法和移動平均法。
下面我們來看一下簡單指數平滑法,看看它是如何執行的。
武器四:簡單指數平滑法
“ 離別是為了相聚,只要能相聚,無論多痛苦的離別都可以忍受。 ” ——《離別鉤》
ses RMSE= 595.6207801874045
可以看到,截至目前為止,簡單指數平滑法取得了最佳得分,簡單指數平滑法關鍵在於調參,合適的參數可以獲得更理想的結果。
至於怎麼確定最優參數,目前看就是針對測試數據集反覆嘗試,數據不一樣,參數隨之而變。
武器五:霍爾特線性趨勢法
“ 現在我才知道,無論多高深的武功,也比不上真正的友情。 ” ——《拳頭》
holt_linear RMSE= 419.109233039215
從所得圖表可以看出,該數據集呈增長趨勢。因此,我們可以用 Holt 的線性趨勢來預測未來的數值。
Holt 擴展了簡單指數平滑,允許有趨勢的數據預測。它只適用於兩個 Level(級數中的平均值)和趨勢的指數平滑。
我們在上述算法中預測的值稱為 Level。在上面的三個等式中,你可以注意到我們增加了 Level 和趨勢來生成預測方程。
體會:霍爾特線性趨勢法對於參數的調整影響更敏感,不同的參數組合可能會輸出截然相反的趨勢預測,這個方法已經可以用於對精度要求不是那麼高的預測了。
武器六:霍爾特-溫特斯法
“ 一個人只要有勇氣去冒險,天下就絕沒有不能解決的事。 ” ——《霸王槍》
我們在這個算法引入一個新術語 Holt-Winters。
從數據得出,酒店的利潤在夏季比其他季節都要好得多,這種模式每年都會重演,即季節性,數據集在一段時間固定的間隔內顯示出相似的模式。
上述模型沒有考慮到數據集的季節性,因此,我們需要一種既考慮趨勢又考慮季節性的方法來預測。
Holt-Winters 季節性方法包括預測方程和三個平滑方程:一個水平 ℓT,一個趨勢 BT 和一個季節 ST,平滑參數 α,β 和 γ。
其中 S 是季節性週期的長度,0≤α≤1, 0≤β≤1 和 0≤γ≤1。
水平方程在季節性調整後的觀測值與非季節性的時間 t 之間有一個加權平均值,趨勢方程與 Holt 線性方法相同。
季節性方程顯示了當前季節性指數和去年同一季節的季節指數之間的加權平均值(即 S 時間段)。
在該方法中,我們還可以同時使用加法和乘法。當季節變化大致為常數時,加法是首選的,而當季節變化與級數水平成比例時,乘法是首選的。
holt_winters RMSE= 361.4077596555284
從圖表可以看出:Holt-Winters 法很好的預測了週期性變化的影響,同時也在趨勢上與測試數據保持了一致。
武器七:ARIMA(綜合自迴歸移動平均法)
“ 自東方照射過來的第一線陽光,也就在這一瞬間,剛好照在這件武器上,使得它忽然閃起一種又玄妙又邪惡的光采。 ” ——《英雄無淚》
另一個在數據科學家中非常流行的時間序列模型是 ARIMA。
指數平滑模型是基於對趨勢和季節性數據的描述,ARIMA 模型的目的是描述數據之間的相關性。
ARIMA 的改進模型是季節性 ARIMA,它考慮了數據集的季節性,就像 Holt-Winters 方法一樣。
arima RMSE= 290.28251785239894
可以看出:ARIMA 法和 Holt-Winters 法預測的結果相近,在這個數據集上的得分甚至更好。
結論
希望這篇文章可以幫你解決類似的時間序列問題,試試這些武器(模型),打造一件合身的套裝,找出最適合於你的時間序列數據模型。
從以上步驟中可以學到的一點:每個模型在特定的數據集上才會優於其他模型。
閱讀更多 DataHunter 的文章