時間序列算法理論及python實現(1-算法理論部分)

若是你在尋找時間序列是什麼?如何實現時間序列?那麼請看這篇博客,將以通俗易懂的語言,全面的闡述時間序列及其python實現。html

 

就餐飲企業而言,常常會碰到以下問題。python

因爲餐飲行業是勝場和銷售同時進行的,所以銷售預測對於餐飲企業十分必要。如何基於菜品歷史銷售數據,作好餐銷售預測,以便減小菜品脫銷現象和避免因備料不足而形成的生產延誤,從而減小菜品生產等待時間,提供給客戶更優質的服務,同事能夠減小安全庫存量,作到生產準時制,下降物流成本git

餐飲銷售預測能夠看做是基於時間序列的短時間數據預測,預測對象爲具體菜品銷售量github

經常使用按時間序列排列的一組隨機變量${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 經常使用時間序列模型ide

本博文將重點介紹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數據分析與挖掘實戰

python時間序列分析 - 大熊貓淘沙 - 博客園

機器學習_時間序列預測分析算法 | FEI's Blog

ARIMA模型的拖尾截尾問題 - CSDN博客

時間序列初級理論篇 - CSDN博客

大數據時間序列分析、建模與預測系列 第一部分: 數據準備

Complete guide to create a Time Series Forecast (with Codes in Python)

時間序列預測如何變成有監督學習問題? - 雲+社區 - 騰訊雲

時間序列 - 用戶指南| 阿里雲

 

 


轉載說明

一、本人博客純屬技術積累和分享,歡迎你們評論和交流以求共同進步。

二、在無明確說明下,博客能夠轉載以供我的學習和交流,可是要附上出處。

三、若是原創博客使用涉及商業/公司行爲請郵件(1547364995@qq.com)告知,通常狀況均會及時回覆贊成。

四、若是我的博客中涉及他人文章我會盡力註明出處,但受限於能力並不能保證全部引用之處均可以註明出處,若有冒犯,請您及時郵件告知以便修改,並於此提早向您道歉。

五、轉載過程當中若有涉及他人做品請您與做者聯繫。

六、全部文章(不限於原創)僅爲我的看法,我的只能儘可能保證正確,若有錯誤您須要自負責任,並請您留下評論提出錯誤之處以便及時更正,惠澤他人,謝謝

相關文章
相關標籤/搜索