數(shù)據(jù)趨勢如何判斷-時間序列預測
無論是制定預算、優(yōu)化庫存管理,還是探索新業(yè)務的潛力,時間序列預測都扮演著關鍵角色。本文將深入探討時間序列預測的常見應用場景,介紹幾種經(jīng)典的時間序列模型(如移動平均、指數(shù)平滑、Holt-Winters、ARIMA和Prophet),并講解如何評估模型效果,希望可以幫到大家。
上一篇Deepseek生成預測報告有點小激動,還沒解釋模型,現(xiàn)在補一下
1 什么場景下會使用到趨勢預測?
業(yè)務場景還是挺多的,比如:
- 每年年末或年初,做預算規(guī)劃或目標設定時,會根據(jù)歷史基線、增長速度等給下一年定個目標值,有時會像《定個好基準》中所說參考環(huán)比同比來拍一個目標。
- 或者需要根據(jù)季節(jié)性、周期性特點,以及短期內的銷售情況,對未來庫存進行預估,更及時地進行備貨調整。
- 或者未來想開拓一個新業(yè)務,預估未來市場有多大潛力空間。
- 又或者在推薦等模型優(yōu)化時將預測值作為輸入特征。
……
2 幾個時間序列模型
在上一篇文章中實操了一下預測,但對這些模型還沒做說明,接下來統(tǒng)一解釋。
時間序列模型很重要的特點是,除時間外它只有一個變量,它所研究的是如何加工這一個變量,找到它隨時間變化的特點,再進行預測,而沒有通過其他相關數(shù)據(jù)輔助預測。舉例來說,預測未來一個季度的銷量,變量只有歷史的銷量,而不含有流量、轉化率等數(shù)據(jù)。
適用于中短期
1. 移動平均
看公式很容易理解,間隔為n的時間窗口內的平均值,該值可作為T+1的預估值,適用場景通常為趨勢穩(wěn)定的數(shù)據(jù),如果數(shù)據(jù)有周期性,會出現(xiàn)預測峰谷值同實際錯位的情況。
2. 簡單指數(shù)平滑
y^為預測值,y為實際值,α為平滑系數(shù),范圍(0,1),α越大近期更敏,感適合波動較大的數(shù)據(jù),反之越平滑適合穩(wěn)定趨勢。T+1的預測值,為t天實際值和預測值的加權所得。3. Holt-Winters
包含水平平滑、趨勢平滑、季節(jié)性平滑。
水平平滑
趨勢平滑
季節(jié)性平滑
幾個參數(shù):
- St:當前季節(jié)分
- m:季節(jié)周期(如m=12為以月為周期,12個月為一個循環(huán))
- α、β、γ分別為水平、趨勢、季節(jié)性平滑參數(shù),范圍(0,1)
- h:步長,預測是跨幾個步長進行預測,一般是1
- k=[(h-1)/m]+1
有點抽象,舉個例子說明,假如如下對應每個季度的商品銷售量,現(xiàn)在想要預測2025Q1(t=9)的銷量
假設參數(shù)設定:α=0.3(水平) β=0.2(趨勢) γ=0.1(季節(jié)性),季節(jié)周期:m=4
初始化預測參數(shù):
- l4=(100+120+140+160)/4=130,即前4個季度的平均值,
- b4=平均季度增長=[(120-100)+(140-120)+(160-140)]/3=6.67
- s1=100-130=-30,s2=120-130=-10,s3=140-130=10,s4=160-130=30
預測2024Q1(t=5):y5預估=l4+b4+s5-4=130+6.67-30=106.67,實際y5=120
更新預測參數(shù),即t=5對應的預估值,
- l5=0.3(120+30)+0.7(130+6.67)=140.67
- b5=0.2(140.67-130)+0.8*6.67=7.47
- s5=0.1(120-130-6.67)+0.9(-30)=-28.67
以此類推,可得到y(tǒng)9預估值=l8+1*b8+s9-4*2=149.63
雖然手動算麻煩一點,但以上這兩種方式,確實可以通過計算看到數(shù)據(jù)和趨勢變化如何產(chǎn)生。
適用于中長期
接下來要聊的兩種方法,就不足以通過手動計算了。
4. ARIMA(p,d,q)。時間序列預測很古典和著名的方法。
模型是由三部分組成:
自回歸部分AR
p為參數(shù),核心解決的是預測未來的數(shù)據(jù),應該選歷史多少個時間點的數(shù)據(jù)更好,最遠的時間是t-p,因此p為參數(shù)。
移動平均部分MA
q為參數(shù),要解決的是y實際值和y預測值之間的差,選擇歷史上多少個時間點更好,最遠時間為t-q,因此q為參數(shù)。
差分部分,d為參數(shù),要解決的是 yt-yt-1 這樣做幾階差分更好,為的是把非平穩(wěn)的數(shù)據(jù)轉換為平穩(wěn)數(shù)據(jù)。
先通過ADF檢驗對d進行差分檢驗(與統(tǒng)計臨界值對比),在通過ACF(自相關函數(shù))和PACF(偏自相關函數(shù))分別對p和q進行檢驗,通過AIC和BIC對模型復雜性評估后可得到更為合理的p、q值。
5. Prophet。時間序列進化到Prophet,操作更友好了。
模型是由三個小模型組成,?t 為誤差項
- g(t):增長和分段線性模型(線性或者邏輯回歸函數(shù))
- s(t):周期性和季節(jié)性模型(正弦和余弦組合函數(shù))
- h(t):節(jié)假日或特殊事件模型(線性函數(shù))
該模型很好理解,且命中了趨勢預測里經(jīng)常要思考的幾個問題:如果趨勢有上升和下降幾段趨勢怎么辦?周期性的數(shù)據(jù)并非完全自然周期怎么辦?遇上突發(fā)事件出現(xiàn)某個點異常怎么辦?過往的時間序列模型很難進行擬合和描述,不過Prophet解決了這個問題。
這里對具體公式不詳細展開,感興趣可在參考資料里了解,這里主要介紹模型參數(shù)的作用,對實操會更有幫助。
- growth(增長函數(shù)類型):linear(默認):線性增長,適用于無明確上限的趨勢(如銷售額),logistic:邏輯回歸增長,適用于有增長上限的場景(如用戶數(shù));
- changepoint_prior_scale(變點靈敏度):0.001~0.5(默認 0.05),若預測結果過于平滑(欠擬合)增大該值,若預測結果波動劇烈(過擬合),減小該值;
- n_changepoints(變點數(shù)量):25(均勻分布在時間序列前80%區(qū)間),越大將趨勢變化切分越多;
- seasonality_prior_scale(季節(jié)性強度):0.01~10(默認10),值越大季節(jié)性波動越大;
- add_seasonality(傅里葉階數(shù)):name=’yearly’, period=365.25, fourier_order=12,fourier_order越大階數(shù)越高擬合越復雜,name對應的是yearly,weekly,daily或者命名一個,period寫對應周期;
- holidays_prior_scale(節(jié)假日效應強度):0.01~10(默認 10),值越大節(jié)假日波動越強。
- 節(jié)假日窗口,比如雙11大促:
holidays_df = pd.DataFrame({
‘holiday’: ‘promo’,
‘ds’: pd.to_datetime([‘2022-11-11’, ‘2023-11-11’, ‘2024-11-11’]),
‘lower_window’: -30, #雙11前30天
‘upper_window’: 2 ?#雙11后2天
})
后邊也有新的升級 Neural Prophet,如果感興趣也可以再查找了解。
3 如何評估模型效果
預測時數(shù)據(jù)會切分成兩部分,訓練集和測試集,評估模型效果簡單來講就是拿訓練集得到模型,后再去預測測試集對應的數(shù)值,把測試集的真實結果同預測結果比對,差異越小說明預測越準確,但也要兼顧魯棒性,注意不要過擬合。
幾個線性模型評價模型準確度的指標和計算公式如下,比較簡單就不做過多解釋了。
MAE 平均絕對誤差
RMSE 均方根誤差
MAPE 平均絕對百分比誤差(使用時不能有0,且去量綱可比較不同數(shù)據(jù)集)
參考資料
知乎文章《時間序列原理篇之Facebook Prophet算法》
知乎文章《時間序列模型(四):ARIMA模型》
本文由人人都是產(chǎn)品經(jīng)理作者【小王子和小企鵝】,微信公眾號:【小王子和小企鵝】,原創(chuàng)/授權 發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉載。
題圖來自Unsplash,基于 CC0 協(xié)議。
- 目前還沒評論,等你發(fā)揮!