天天看點

【時序預測】3 統計學算法介紹

作者:輪回路上打碟的小年輕

1 概述

統計學時間序列預測是利用曆史時間序列資料進行預測的方法。與機器學習不同,統計學方法更加注重資料的穩定性、趨勢性和季節性等因素,并通常假設資料之間存在一定的自相關性和正态分布性。

在應用統計學方法進行時間序列預測時,需要根據資料的特點選擇合适的模型,并進行資料預處理、模型選擇和參數調整等工作來提高預測的準确性。

2 算法介紹

2.1 ETS

ETS(Error, Trend, Seasonality)是一種基于時間序列的預測方法,可以用來預測具有趨勢和季節性的時間序列資料。ETS算法基于時間序列資料的誤差、趨勢和季節性進行模組化,可以根據曆史資料來預測未來資料的趨勢和季節性。ETS算法的核心思想是将時間序列分解成誤差、趨勢和季節性三個部分,并通過模組化和拟合這三個部分來預測未來資料。具體而言,ETS算法首先對時間序列資料進行平滑處理,然後通過時間序列分解來拆分出誤差、趨勢和季節性三個部分,并對這三個部分分别進行模組化和預測。

  • ETS算法的優點在于:
  • 簡單易懂:ETS算法基于時間序列分解和模型拟合,易于了解和實作。
  • 适用範圍廣:ETS算法适用于具有趨勢和季節性的時間序列資料,并可以處理各種不同的趨勢和季節性模式。
  • 精度高:ETS算法在某些情況下可以比ARIMA等其他預測方法更準确地預測時間序列資料。

ETS算法雖然具有簡單易懂和精度高等優點,但其仍然有一些限制和局限性。例如,ETS算法對于長期趨勢和極端值等情況的處理不夠準确,需要根據具體應用場景進行合理選擇和調整。

2.1.1 SES

簡單指數平滑模型(SES),是一種常見的時間序列預測方法。它适用于一些沒有明顯趨勢和季節性的時間序列資料。模型假設未來的值與過去的值呈指數衰減的關系,即未來的值受到過去值的影響,而這種影響的權重會随着時間的推移而不斷減小。SES模型通過指數平滑的方法對過去時間點的資料進行平滑處理,然後将平滑後的值作為未來值的預測值。SES模型的基本思想是,對于一個長度為T的時間序列Y,其第t個時間點的預測值Yt可以表示為:

其中,Yt表示第t個時間點的實際值,Yt−1表示第t-1個時間點的預測值,α是平滑參數,用于控制過去值的影響程度。平滑參數α的取值範圍為0到1,當α越接近1時,過去值對未來值的影響越大,當α越接近0時,過去值對未來值的影響越小。

SES模型的優點在于簡單易懂,易于實作和解釋。但它的局限性也比較明顯,它隻适用于一些沒有明顯趨勢和季節性的時間序列資料。對于存在明顯趨勢和季節性的資料,SES模型的預測效果會比較差,需要使用其他更加複雜的模型進行預測。

model = ExponentialSmoothing(trend=None, seasonal=None)

for feature in ['CPU使用率', '記憶體使用率', 'License使用率']:
    model.fit(train[f'{feature}'])
    backtest = model.historical_forecasts(
        series=ts[f'{feature}'],
        start=0.75,
        forecast_horizon=10,
        verbose=True)
    ts[f'{feature}'].plot(label="actual")
    backtest.plot(label="backtest (D=10)")
plt.title(label='SES')
plt.legend()
plt.show()           
【時序預測】3 統計學算法介紹

2.1.2 Holt-Winters

Holt-Winters是一種經典的時間序列預測方法,也稱為三重指數平滑模型(Triple Exponential Smoothing)。與簡單指數平滑模型(SES)隻考慮了時間序列的平穩性不同,Holt-Winters模型還考慮了序列的趨勢和季節性變化。基本思想是在SES模型的基礎上再增加一個趨勢平滑參數β和一個季節性平滑參數γ,通過對曆史資料進行三重指數平滑,得到未來值的預測。

Holt-Winters模型可以分為三種類型:1)簡單Holt-Winters模型,僅考慮序列的趨勢變化,不考慮季節性變化;2)季節性Holt-Winters模型,僅考慮序列的季節性變化,不考慮趨勢變化;3)帶趨勢和季節性的Holt-Winters模型,同時考慮序列的趨勢和季節性變化。

Holt-Winters模型的預測基于以下三個方程:

  • Level方程(水準方程):用于計算序列的目前水準值(Level)。該方程表達式為:

其中,Lt表示第t個時間點的水準值,α為水準平滑參數,Yt表示第t個時間點的實際值,St−m表示第t個時間點的季節性值(即距離t最近的m個季節的平均值),Lt−1

表示第t-1個時間點的水準值,Tt−1表示第t-1個時間點的趨勢值。

  • Trend方程(趨勢方程):用于計算序列的目前趨勢值(Trend)。該方程表達式為:

其中,Tt表示第t個時間點的趨勢值,β為趨勢平滑參數。

  • Seasonality方程(季節性方程):用于計算序列的目前季節性值(Seasonality)。該方程表達式為:

其中,St表示第t個時間點的季節性值,γ為季節性平滑參數。

最終,預測值為:

其中,h為預測的時間跨度,mod表示取餘數操作。

Holt-Winters模型的參數較多,需要進行參數調整和模型選擇,常用的方法是采用交叉驗證等技術來選擇最優的模型參數。Holt-Winters模型的預測精度較高,在許多實際應用中得到了廣泛的應用。

model = ExponentialSmoothing(trend=ModelMode.ADDITIVE, seasonal=SeasonalityMode.ADDITIVE, seasonal_periods=4)
for feature in ['CPU使用率', '記憶體使用率', 'License使用率']:
    model.fit(train[f'{feature}'])
    backtest = model.historical_forecasts(
        series=ts[f'{feature}'],
        start=0.75,
        forecast_horizon=10,
        verbose=True)
    ts[f'{feature}'].plot(label="actual")
    backtest.plot(label="backtest (D=10)")
plt.title(label='Holt-Winters')
plt.legend()
plt.show()           
【時序預測】3 統計學算法介紹

2.2 AR&MA

2.2.1 AR

自回歸模型(AR)是最簡單的線性自回歸時序預測算法之一,可以用來描述時間序列資料的自相關關系,它基于一個假設,即未來的值取決于過去的值,該算法使用曆史資料來預測未來的資料點。AR模型的階數代表了它考慮曆史資料的時間跨度,AR模型的參數由資料自身決定,可以通過最小化殘差平方和來估計模型參數。AR模型可以表示為AR(p),其中p為自回歸階數,一般通過自相關函數(ACF)和偏自相關函數(PACF)來确定。

2.2.2 MA

移動平均模型(MA)是另一個基于時間序列的線性預測算法,可以用來描述時間序列資料的平均移動值的變化。與AR模型類似,MA模型也基于曆史資料進行預測。不同的是,MA模型将誤差項作為輸入變量。該模型假設目前時刻的資料值僅由前幾個時刻的噪聲項決定,即存在一種線性關系。MA模型的參數由資料自身決定,可以通過最小化殘差平方和來估計模型參數。MA模型可以表示為MA(q),其中q為滑動平均階數,MA模型的階數也可以通過ACF和PACF來确定。

# 模型建構
model = MovingAverage(30)

for feature in ['CPU使用率', '記憶體使用率', 'License使用率']:
    backtest = model.filter(ts[f'{feature}'])

    ts[f'{feature}'].plot(label="actual")
    backtest.plot(label="backtest (D=10)")

# 可視化
plt.title(label='MA')
plt.legend()
plt.show()           
【時序預測】3 統計學算法介紹

2.2.3 ARMA

自回歸移動平均模型(ARMA)是AR模型和MA模型的結合體,可以用來描述時間序列資料的自相關關系和平均移動值的變化,AR模型用于預測未來值與過去值的線性組合,而MA模型用于預測未來值與過去誤差的線性組合。ARMA模型基于曆史資料,同時考慮曆史值和誤差項,以預測未來資料點。該模型假設目前時刻的資料值與前幾個時刻的資料值和噪聲項均存在一定的線性關系。ARMA模型的參數由資料自身決定,可以通過最小化殘差平方和來估計模型參數。ARMA模型可以表示為ARMA(p,q),其中p為自回歸階數,q為滑動平均階數,ARMA模型的階數可以通過ACF和PACF來确定。

2.2.4 ARIMA

差分自回歸移動平均模型(ARIMA)是ARMA模型的擴充版,它加入了時間序列的差分,可以處理非平穩時間序列,描述時間序列資料的趨勢和季節性變化。該模型假設目前時刻的資料值與前幾個時刻的資料值、噪聲項和差分項存在一定的線性關系,首先對原始時間序列進行差分,以使其成為平穩序列,然後在平穩序列上應用ARMA模型。ARIMA模型的參數由資料自身決定,可以通過最小化殘差平方和來估計模型參數。ARIMA模型可以表示為ARIMA(p,d,q),其中p為自回歸階數,d為差分階數,q為滑動平均階數,ARIMA模型的階數也可以通過ACF和PACF來确定。

# 模型建構
model = ARIMA(p=1, d=1, q=1)
# model = AutoARIMA()
# model = StatsForecastAutoARIMA()

for feature in ['CPU使用率', '記憶體使用率', 'License使用率']:
    # 模型訓練
    model.fit(train[f'{feature}'])
    # 模型推理
    backtest = model.historical_forecasts(
        series=ts[f'{feature}'],
        start=0.75,
        forecast_horizon=10,
        retrain=False,
        verbose=True,
    )

    ts[f'{feature}'].plot(label="actual")
    backtest.plot(label="backtest (D=10)")

# 可視化
plt.title(label='ARIMA')
plt.legend()
plt.show()           
【時序預測】3 統計學算法介紹
【時序預測】3 統計學算法介紹
【時序預測】3 統計學算法介紹

2.2.5 SARMA

季節性自回歸移動平均模型(SARMA)是ARMA模型在季節性時間序列上的推廣,其基本思想是在ARIMA模型中加入季節性因素,并進行季節性差分,可以有效地捕捉季節性時間序列的特征。SARMA模型中有兩個重要的參數:季節周期和季節差分,SARMA模型的階數也可以通過ACF和PACF來确定。

2.2.6 SARIMA

季節性差分自回歸移動平均模型(SARIMA)是ARIMA模型的季節性擴充版,它考慮了時間序列的季節性,能夠更準确地預測季節性趨勢。SARMA模型中有兩個重要的參數:季節周期和季節差分,首先對原始資料進行季節性差分,然後在平穩序列上應用ARMA模型。SARIMA模型中有六個重要的參數:季節周期、季節差分階數、自回歸階數、差分階數、移動平均階數和季節性自回歸階數,SARIMA模型的階數也可以通過ACF和PACF來确定。

2.2.7 VAR

向量自回歸模型(VAR)模型是一種多變量時間序列模型,它建立了多個時間序列之間的關系,并利用向量自回歸的方法進行預測。VAR模型可以同時對多個變量進行模組化和預測,是以在多變量時間序列分析中應用廣泛。

2.2.8 VARIMA

VARIMA是VAR模型和ARIMA模型的結合,既考慮了多個變量之間的關系,也考慮了時間序列的趨勢和季節性。在VARIMA模型中,多個變量之間可以互相影響,而每個變量的趨勢和季節性可以通過ARIMA模型進行模組化。

VARIMA模型可以描述多個變量之間的線性關系,假設有p個變量和q階滞後,VARIMA(p,d,q)模型的表示形式為:

在VARIMA模型中,可以通過ADF檢驗檢驗每個變量是否平穩,如果某些變量不平穩,可以對其進行差分處理。同時,還可以根據ACF和PACF來确定模型的階數,以及季節性的影響。VARIMA模型可以通過最大似然估計來估計模型參數,并通過預測誤差的方差來評估模型的預測性能。

# 模型建構
model = VARIMA(p=1, d=1, q=1)
# 模型訓練
model.fit(train)
# 模型推理
backtest = model.historical_forecasts(
    series=ts,
    start=0.75,
    forecast_horizon=10,
    retrain=False,
    verbose=True,
)

# 可視化
ts.plot(label="actual")
backtest.plot(label="backtest (D=10)")
plt.title(label='ARIMA')
plt.legend()
plt.show()           
【時序預測】3 統計學算法介紹

2.2.9 GARCH

廣義自回歸條件異方差模型(GARCH)是一種能夠描述時間序列波動性的模型,它可以對序列的方差進行模組化,常用于金融市場的波動性預測和風險管理。

2.2.10 RW

随機遊走模型(RW)是利用過去時間序列資料的随機變化對未來進行預測的方法。它的基本思想是假設未來時間點的值與目前值相同,并根據過去資料的随機變化對未來進行預測。

繼續閱讀