如果你在尋找時間序列是什么?如何實現時間序列?那么請看這篇博客,將以通俗易懂的語言,全面的闡述時間序列及其python實現。
就餐飲企業而言,經常會碰到如下問題。
由於餐飲行業是勝場和銷售同時進行的,因此銷售預測對於餐飲企業十分必要。如何基於菜品歷史銷售數據,做好餐銷售預測,以便減少菜品脫銷現象和避免因備料不足而造成的生產延誤,從而減少菜品生產等待時間,提供給客戶更優質的服務,同事可以減少安全庫存量,做到生產准時制,降低物流成本
餐飲銷售預測可以看作是基於時間序列的短期數據預測,預測對象為具體菜品銷售量
常用按時間序列排列的一組隨機變量${X_1},{X_2}, \cdots ,{X_t}$,來表示一個隨機事件的時間序列,簡記為$\left\{ {{X_t}} \right\}$;用${x_1},{x_2}, \cdots ,{x_n}$或$\left\{ {{x_t},t = 1,2, \cdots ,n} \right\}$表示該隨機序列的n個有序觀察值,稱之為序列長度為n的觀察值序列
本博文應用時間序列分析的目的就是給定一個已被觀測了的時間序列,預測該序列的未來值。
1 時間序列算法
常用的時間序列模型見表1.
表1 常用時間序列模型
本博文將重點介紹AR模型、MA模型、ARMA模型和ARINA模型。
2 時間序列的預處理
拿到一個觀察序列后,首先對它的純隨機性和平穩性進行檢驗,這兩個重要的檢驗成為序列的預處理。根據檢驗結果可以將序列分為不同夫的類型,對不同類型的序列會采取不同的分析方法。
對於純隨機序列,又稱為白噪聲序列,序列的各項之間沒有任何相關關系,序列在進行完全無序的隨機波動,可以終止對該序列的分析。白噪聲序列是沒有信息可提取的平穩序列。
對於平穩非白噪聲序列,它的均值和方差是常數,現已有一套非常成熟的平穩序列的的建模方法。通常是建立一個線性模型來擬合該序列的發展,借此提取該序列有用信息。ARMA模型是最常用的平穩序列擬合模型。
對於非平穩序列,由於它的均值和方差不穩定,處理方法一般是將其轉變為平穩序列,這樣就可以應用有關平穩時間序列的分析方法,如建立ARMA模型來進行相應的研究。如果一個時間序列經差分運算后具有平穩性,則該序列為差分平穩序列,可以使用ARIMA模型進行分析。
2.1 平穩性檢驗
2.1.1 平穩時間序列的定義
對於隨機變量X,可以計算其均值(數學期望)$\mu $、方差${\sigma ^2}$;對於兩個隨機變量X和Y,可以計算X,Y的協方差$\operatorname{cov} (X,Y) = E\left[ {\left( {X - \mu x} \right)\left( {Y - \mu y} \right)} \right]$和相關系數$\rho (X,Y) = \frac{{\operatorname{cov} (X,Y)}}{{{\sigma _X}{\sigma _Y}}}$,他們度量了兩個不同事件之間的相互影響程度。
對於時間序列$\left\{ {{X_t},t \in T} \right\}$,任意時刻的序列值${{X_t}}$都是一個隨機變量,每一個隨機變量都會有均值和方差,記${{X_t}}$的均值為$\mu $,方差為${\sigma ^2}$;任取$t,s \in T$,定義序列${{X_t}}$的自協方差函數$\gamma (t,s) = E\left[ {\left( {{X_t} - {\mu _t}} \right)\left( {{X_s} - {\mu _s}} \right)} \right]$和自相關函數$\rho (t,s) = \frac{{\operatorname{cov} ({X_t},{X_s})}}{{{\sigma _t}{\sigma _s}}}$(特別地,$\gamma (t,t) = \gamma (0) = 1,\rho (0) = 1$),之所以稱它們為自協方差和自相關系數,是因為它們衡量的是同一個事件在兩個不同時期(時刻t和s)之間的相關程度,形象地講就是度量自己過去的行為對自己現在的影響。
如果時間序列$\left\{ {{X_t},t \in T} \right\}$在某一常數附近波動且波動范圍有限,即有常數均值和常數方差,並且延遲k期的序列變量的自協方差和自相關系數是相等的或者說延遲k期的序列變量之間的影響程度是一樣的,則稱$\left\{ {{X_t},t \in T} \right\}$為平穩序列。
2.1.2 平穩性的檢驗
對序列的平穩性的檢驗有兩種檢驗方法,一種是根據時序圖和自相關圖的特征做出判斷的圖檢驗,該方法操作簡單、應用廣泛,缺點是帶有主觀性;另一種是構造檢驗統計量進行檢驗的方法,目前最常用的方法是單位根檢驗
(1) 時序圖檢驗
根據平穩時間序列的均值和方差都為常數的性質,平穩序列的時序圖顯示該序列值始終在一個常數附近隨機波動,而且波動的范圍有界;如果有明顯的趨勢性或周期性,那它通常不是平穩序列。
(2) 自相關圖檢驗
平穩序列具有短期相關性,這個性質表明對平穩序列而言通常只有近期的序列值對現時值得影響比較明顯,間隔越遠的過去值對現時值的影響越小。隨着延遲期數k的增加,平穩序列的自相關系數${\rho _k}$(延遲k期)會比較快的衰減趨向於零,並在零附近隨機波動,而非平穩序列的自相關系數衰減的速度比較慢,這就是利用自相關圖進行平穩性檢驗的標准。
(3) 單位根檢驗
單位根檢驗是檢驗序列中是否存在單位根,如果存在單位根就是非平穩時間序列了。
2.2 純隨機性檢驗
如果一個序列是純隨機序列,那么它的序列值之間應該沒有任何關系,即滿足$\gamma (k) = 0,k \ne 0$這是一種理論上才會出現的理想狀態,實際上純隨機序列的樣本自相關系數不會絕對為零,但是很接近零,並在零附近隨機波動。
純隨機性檢驗也稱白噪音檢驗,一般是構造檢驗統計量來檢驗序列的純隨機性,常用的檢驗統計量有Q統計量、LB統計量,由樣本各延遲期數的自相關系數可以計算得到檢驗統計量,然后計算出對應的p值,如果p值顯著大於顯著性水平$\alpha $,則表示該序列不能拒絕純隨機的原假設,可以停止對該序列的分析。
3 平穩時間序列分析
ARMA模型的全稱是自回歸移動平均模型,它是目前最常用的擬合平穩序列的模型。它又可以細分為AR模型、MA模型和ARMA模型三大類。都可以看作是多元線性回歸模型。
3.1 AR模型
具有如下結構的模型稱為p階自回歸模型,簡記為$AR(p)$。
$${x_t} = \mu + \sum\limits_{i = 1}^p {{\phi _i}{x_{t - i}}} + {\varepsilon _t} = {\phi _0} + {\phi _1}{x_{t - 1}} + {\phi _2}{x_{t - 2}} + \cdots + {\phi _p}{x_{t - p}} + {\varepsilon _t}$$
即在t時刻的隨機變量${X_t}$的取值${x_t}$是前$p$期${x_{t - 1}},{x_{t - 2}}, \cdots ,{x_{t - p}}$的多元線性回歸,認為${x_t}$主要是受過去$p$期的序列值的影響。誤差項是當期的隨機干擾${\varepsilon _t}$,為零均值白噪聲序列。
平穩AR模型的性質見表2.
表2 平穩$AR$模型的性質
3.1.1 均值
對滿足平穩性條件的$AR(p)$模型的的方程,兩邊取期望,得:
$$E({x_t}) = E({\phi _0} + {\phi _1}{x_{t - 1}} + {\phi _2}{x_{t - 2}} + \cdots + {\phi _p}{x_{t - p}} + {\varepsilon _t})$$
已知$E\left( {{x_t}} \right) = \mu ,E\left( {{\varepsilon _t}} \right) = 0$,所以有$\mu = {\phi _0} + {\phi _1}\mu + {\phi _2}\mu + \cdots + {\phi _p}\mu $,解得:$$\mu = \frac{{{\phi _0}}}{{1 - {\phi _1} - {\phi _2} - \cdots - {\phi _p}}}$$
3.1.2 方差
平穩$AR(p)$模型的方差有界,等於常數。
3.2 MA模型
具有如下結構的模型稱為$q$階自回歸模型,簡記為$MR(q)$。
$${x_t} = \mu + {\varepsilon _t} + \sum\limits_{i = 1}^q {{\theta _i}{\varepsilon _{t - i}}} = \mu + {\varepsilon _t} + {\theta _1}{\varepsilon _{t - 1}} + {\theta _2}{\varepsilon _{t - 2}} + \cdots + {\theta _q}{\varepsilon _{t - q}}$$
即在t時刻的隨機變量${{X_t}}$的取值${{x_t}}$是前q期的隨機擾動${\varepsilon _{t - 1}},{\varepsilon _{t - 2}}, \cdots ,{\varepsilon _{t - q}}$的多元線性函數,誤差項是當期的隨機干擾${\varepsilon _t}$,為零均值白噪聲序列,$\mu $是序列$\left\{ {{X_t}} \right\}$的均值。認為$\left\{ {{x_t}} \right\}$主要是受過去q期的誤差項的影響。
平穩$MA(q)$模型的性質見表3.
表3 平穩$MA$模型的性質
3.3 ARMA模型
具有如下結構的模型稱為自回歸移動平均模型,簡記為$ARMA\left( {p,q} \right)$。
$${x_t} = \mu + \sum\limits_{i = 1}^p {{\phi _i}{x_{t - i}}} + {\varepsilon _t} + \sum\limits_i^q {{\theta _i}{\varepsilon _{t - i}}} $$
即在t時刻的隨機變量${X_k}$的取值${x_k}$是前$p$期${x_{t - 1}},{x_{t - 2}}, \cdots ,{x_{t - p}}$和前$q$期${\varepsilon _{t - 1}},{\varepsilon _{t - 2}}, \cdots ,{\varepsilon _{t - q}}$的多元線性函數,誤差項是當期的隨機干擾${\varepsilon _t}$,為零均值白噪聲序列。認為${x_k}$主要是受過去$p$期的序列值和過去$q$期的誤差項的共同影響。
特別的,當$q=0$時,是$AR(p)$模型;當$q=0$時,是$MA(q)$模型
平穩$ARMA\left( {p,q} \right)$的性質見表4.
表4 平穩$ARMA$模型的性質
3.4 相關評判方法介紹
3.4.1 自相關系數(ACF)
平穩$AR(p)$模型的自相關系數${\rho _k} = \rho (t,s) = \frac{{\operatorname{cov} ({X_t},{X_s})}}{{{\sigma _t}{\sigma _s}}}$呈指數的速度銳減,始終有非零取值,不會在$k$大於某個常數之后就恆等於零,這個性質就是平穩$AR(p)$模型的自相關系數${\rho _k}$具有拖尾性。
3.4.2 偏自相關系數(PACF)
對於一個平穩$AR(p)$模型,求出延遲k期自相關系數${\rho _k}$時,實際上的得到的並不是
${X_t}$與${X_{t - k}}$之間單純的相關關系,因為${X_t}$同時還會收到中間$k - 1$個隨機變量${X_{t - 1}},{X_{t - 2}}, \cdots ,{X_{t - k}}$的影響,所以自相關系數${\rho _k}$里實際上摻雜了其他變量對${X_t}$與${X_{t - k}}$的相關影響,為了單純地測度${X_{t - k}}$對${X_t}$的影響,引進偏自相關系數的概念。
可以證明平穩$AR(p)$模型的偏自相關系數具有$p$階截尾性。這個性質連同前面的自相關系數的拖尾性是$AR(p)$模型重要的識別依據。
3.4.3 截尾和拖尾
(1)p階自回歸模型$AR(p)$
AR(p)模型的偏自相關函數PACF在p階之后應為零,稱其具有截尾性;
AR(p)模型的自相關函數ACF不能在某一步之后為零(截尾),而是按指數衰減(或成正弦波形式),稱其具有拖尾性。
(2)q階移動平均模型$MA(q)$
MA(q)模型的自相關函數ACF在q階之后應為零,稱其具有截尾性;
MA(q)模型的偏自相關函數PACF不能在某一步之后為零(截尾),而是按指數衰減(或成正弦波形式),稱其具有拖尾性。
3.4.4 截尾和拖尾判斷
(1)如果樣本自相關系數(或偏自相關系數)在最初的d階明顯大於2倍標准差范圍,而后幾乎95%的樣本自相關(偏自相關)系數都落在2倍標准差范圍以內,而且由非零自相關(偏自相關)系數衰減為小值波動的過程非常突然,這時,通常視為自相關(偏自相關)系數截尾。
(2)如果有超過5%的樣本相關系數落在2倍標准差范圍以外,或者是由顯著非零的相關函數衰減為小值波動的過程比較緩慢或者非常連續,這時,通常視為相關系數不截尾。
3.4 平穩時間序列建模
某個時間序列經過預處理,被判定為平穩非白噪聲序列,就可以利用ARMA模型進行建模。計算出平穩非白噪聲序列$\left\{ {{X_t}} \right\}$的自相關系數和偏自相關系數,再由$AP\left( p \right)$模型、$MA\left( q \right)$模型和$ARMA\left( {p,q} \right)$模型的自相關系數和偏自相關系數的性質,選擇合適的模型。平穩時間序列建模步驟如圖1所示。
圖1 平穩時間序列ARMA模型建模步驟
3.4.1 計算ACF和PACF
先計算非平穩白噪聲序列的自相關系數(ACF)和偏自相關系數(PACF)。
3.4.2 ARMA(p,d,q)模型識別
也稱為模型定階,由$AP\left( p \right)$模型、$MA\left( q \right)$模型和$ARMA\left( {p,q} \right)$的自相關系數和偏自相關系數的性質,選擇合適的模型。識別的原則見表5.
表5 ARMA模型識別原則
以這個表來確定$p$和$q$,p值確定看PACF,q值確定看ACF,截尾的意義簡而言之,就是落到95%置信區間內。
其次,模型中d,主要指d階差分之后,模型能通過平穩性檢驗,此時d就是合適的參數。
4 非平穩時間序列分析
前面介紹了對平穩時間序列進行分析的方法。實際上,在自然界中絕大部分序列都是非平穩的。因而對非平穩序列的分析更普遍、更重要,創造出來的分析方法也更多。
對非平穩時間序列的分析方法可以分為確定性因素分解的時序分析和隨機時序分析兩大類。
確定性因素分解的方法把所有序列的變化都歸結為4個因素(長期趨勢、季節變動、循環變動和隨機波動)的綜合影響,其中長期趨勢和季節變動的規律性信息通常比較容易提取,而由隨機因素導致的波動則非常難確定和分析,對隨機信息浪費嚴重,會導致模型擬合精度不夠理想。
隨機時序分析法的發展就是為了彌補確定性因素分解方法的不足。根據時間序列的不同特點,隨機時序分析可以建立的模型有ARIMA模型、殘差自回歸模型、季節模型、異方差模型等。本節重點介紹使用ARIMA模型對非平穩時間序列進行建模的方法。
4.1 差分運算
4.1.1 p階差分
相距p期的兩個序列值之間的減法運算稱為p階差分運算。
4.1.2 k步差分
相距k期的兩個序列值之間的減法運算稱為k步差分運算。
4.2 ARIMA模型
差分運算具有強大的確定性信息提取能力,許多非平穩序列差分后會顯示出平穩序列的性質,這時稱這個非平穩序列為差分平穩序列。對差分平穩序列可以使用ARMA模型進行擬合。ARIMA模型的實質就是差分運算與ARMA模型的組合,掌握了ARMA模型的建模方法和步驟之后,對序列建立ARIMA模型是比較簡單的。
差分平穩時間序列建模步驟如圖2所示。
圖2 差分平穩時間序列建模步驟
4.2.1 計算ACF和PACF
4.2.2 ARIMA模型識別
也稱為模型定階,由$AP\left( p \right)$模型、$MA\left( q \right)$模型和$ARMA\left( {p,q} \right)$的自相關系數和偏自相關系數的性質,選擇合適的模型。識別的原則見表5.
表5 ARMA模型識別原則
以這個表來確定$p$和$q$,p值確定看PACF,q值確定看ACF,截尾的意義簡而言之,就是落到95%置信區間內。
其次,模型中d,主要指d階差分之后,模型能通過平穩性檢驗,此時d就是合適的參數。
4.2.3 使用AIC與BIC模型選擇:選擇更簡單的模型
(1)AIC:赤池信息准則(Akaike Information Criterion,$AIC$)
$$AIC=2k-2ln(L)$$
(2)BIC:貝葉斯信息准則(Bayesian Information Criterion,$BIC$)
$$BIC=kln(n)-2ln(L)$$
其中,$k$為模型參數個數,$n$為樣本數量,$L$為似然函數
這個准則是為了選擇更簡單的模型,當p和q有多種組合,我們不確定哪一個組合更優,我們就可以觀察模型的AIC和BIC參數,以此來找出使模型最優的p和q,這一系列過程可以在程序中實現自動化進行模型定階,將在python實現部分,進行闡述。
4.2.4 模型檢驗
我們對於某個預想為目標的模型判斷是否結果可用,就需要對模型進行診斷,如果診斷不合格,這時候需要重新選擇模型,如果模型可用,就可以進行下一步的預測操作,其中模型診斷一般包括兩個方面,一個是殘差的檢驗分析,一個是關於模型過度擬合和參數冗余的問題,總體原則是盡量選擇簡單的模型。
(1)殘差檢驗分析
對於殘差檢驗分析還有很多的方法,這里只列出常見的方法以及要檢驗的內容:
- 殘差圖肉眼簡單查看;
- ARIMA模型的殘差是否是平均值為0且方差為常數的正態分布;
- QQ圖:線性即正態分布;
- Ljung-Box檢驗:獨立性
(2)過度擬合和參數冗余
對於統計建模或者是機器學習,我們一般都需要模型過擬合的問題,同樣的,於時間序列而言,過度擬合和參數冗余也是不容忽視的問題:
- 在過度擬合時,不要同時增加AR和MA部分的階數
- 例如:如果擬合了MA(1)模型后,殘差在2階滯后處仍存在明顯的相關性,那么應該嘗試MA(2),而不是ARMA(1,1)模型。
4.2.5 模型優化
一般情況下,安裝步驟系統選擇好模型之后,模型的方法不存在太大的問題,主要是參數優化方面,我們使用AIC和BIC來確定最優模型的參數,是較為准確的,如果在使用AIC和BIC確定好了參數之后,模型還是沒有通過以上檢驗,則需要考慮模型方法是否選擇正確,模型使用是否是合適的情況。
4.2.6 模型應用:進行短期預測
當上面的步驟走完之后,就可以對數據進行預測了,也就是時間序列建模的主要目標之一,預測該序列未來的取值,此外我們要評估預測的精度。一般采用最小均方誤差標准。
5 Python實現ARIMA模型
由於寫在同一篇博客篇幅太長,不利用閱讀,這部分內容請移步我的另一篇博文:時間序列算法理論及python實現(2-python實現) - 知-青 - 博客園
6 Python主要時序模式算法
同理,由於寫在同一篇博客篇幅太長,不利用閱讀,這部分內容請移步我的另一篇博文:
7 文獻
王黎明,王連等. 應用時間序列分析
張良均,王路,譚立雲,蘇劍林. Python數據分析與挖掘實戰
Complete guide to create a Time Series Forecast (with Codes in Python)
時間序列預測如何變成有監督學習問題? - 雲+社區 - 騰訊雲
轉載說明
1、本人博客純屬技術積累和分享,歡迎大家評論和交流以求共同進步。
2、在無明確說明下,博客可以轉載以供個人學習和交流,但是要附上出處。
3、如果原創博客使用涉及商業/公司行為請郵件(1547364995@qq.com)告知,一般情況均會及時回復同意。
4、如果個人博客中涉及他人文章我會盡力注明出處,但受限於能力並不能保證所有引用之處均能夠注明出處,如有冒犯,請您及時郵件告知以便修改,並於此提前向您道歉。
5、轉載過程中如有涉及他人作品請您與作者聯系。
6、所有文章(不限於原創)僅為個人見解,個人只能盡量保證正確,如有錯誤您需要自負責任,並請您留下評論提出錯誤之處以便及時更正,惠澤他人,謝謝