數(shù)據(jù)趨勢如何判斷-時間序列預測

0 評論 279 瀏覽 0 收藏 12 分鐘

無論是制定預算、優(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 為誤差項

  1. g(t):增長和分段線性模型(線性或者邏輯回歸函數(shù))
  2. s(t):周期性和季節(jié)性模型(正弦和余弦組合函數(shù))
  3. 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é)議。

更多精彩內容,請關注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. 目前還沒評論,等你發(fā)揮!