(轉)利用Auto ARIMA構建高性能時間序列模型(附Python和R代碼)

轉自: python

 

原文標題:Build High Performance Time Series Models using Auto ARIMA in Python and R算法

      做者:AISHWARYA SINGH;翻譯:陳之炎;校對:丁楠雅函數

 

原文連接: https://www.analyticsvidhya.com/blog/2018/08/auto-arima-time-series-modeling-python-r/性能

 

  

 

簡介學習

想象你如今有一個任務:根據已有的歷史數據,預測下一代iPhone的價格,可以使用的特徵包括季度銷售、月度支出以及蘋果資產負債表上的一系列內容。做爲一名數據科學家,你會把這個問題歸類爲哪一類問題?固然是時間序列建模。測試

從預測產品銷售到估算家庭用電量,時間序列預測是任何數據科學家都應該知道——哪怕不是熟練掌握——的核心技能之一。你可使用多種不一樣的方法進行時間序列預測,咱們將在本文中討論Auto ARIMA,它是最爲有效的方法之一。ui

首先,咱們來了解一下ARIMA的概念,而後再進入正題——Auto ARIMA。爲了鞏固概念,咱們將使用一個數據集,並用Python和R實現它。spa

目錄翻譯

1、什麼是時間序列?3d

2、時間序列預測的方法

3、ARIMA簡介

4、ARIMA實現步驟

5、爲何須要Auto ARIMA?

6、用Auto ARIMA實現案例(航空乘客數據集)

7、Auto ARIMA如何選擇參數?

若是你熟悉時間序列及其經常使用方法(如移動平均、指數平滑和ARIMA),則能夠直接跳到第4節。對於初學者,請從下面這一節開始,內容包括對時間序列和各類預測方法的簡要介紹。

1、什麼是時間序列?

在咱們學習如何處理時間序列數據以前,首先應理解什麼是時間序列,以及它與其餘類型的數據的區別。時間序列的正式定義以下:它是一系列在相同時間間隔內測量到的數據點

簡言之,時間序列是指以固定的時間間隔記錄下的特定的值,時間間隔能夠是小時、天天、每週、每10天等等。時間序列的特殊性是:該序列中的每一個數據點都與先前的數據點相關。咱們經過下面幾個例子來更清楚地理解這一點。

  • 例1:

假設你從某公司得到了一個貸款人員的數據集(以下表所示)。你認爲每一行都與前面的行相關嗎?固然不是!一我的的貸款金額取決於他的經濟情況和須要(可能還有其餘因素,如家庭規模等,但爲了簡單起見,咱們只考慮收入和貸款類型)。此外,這些數據不是在特定時間間隔內收集的,它僅與公司什麼時候收到貸款申請相關。

  • 例2:

再舉一個例子。假設你有一個數據集,其中包含天天空氣中的二氧化碳水平(下面是截圖)。那麼能夠經過過去幾天的數值來預測次日的二氧化碳水平嗎?固然能夠。若是你觀察到的數據是天天記錄下來的,那麼,時間間隔即是恆定的(24小時)。

如今你已經有了直覺,第一個例子是簡單的迴歸問題,而第二個例子是時間序列問題。雖然這裏的時間序列問題也能夠用線性迴歸來解決,但這並非最好的方法,由於它忽略了這些值與全部相對過去值之間的關係。下面,咱們來了解一下解決時間序列問題的一些經常使用方法。

2、時間序列預測的方法

有許多種方法能夠進行時間序列預測,咱們將在這一節中對它們作簡要地介紹。下面提到的全部方法的詳細說明和Python代碼能夠在下文中找到:

七種時間序列預測方法(附Python代碼):

https://www.analyticsvidhya.com/blog/2018/02/time-series-forecasting-methods/

1. 樸素預測法:在這種預測方法中,新數據點預測值等於前一個數據點的值。結果將會是一條平行線,由於全部預測的新值採用的都是先前的值。

2. 簡單平均值法:視下一個值爲全部先前值的平均數。這一預測法要優於「樸素預測法」,由於它的結果不會是一條平行線。可是在簡單平均值法中,過去的全部值都被考慮進去了,而這些值可能並不都是有用的。例如,當要求預測今天的溫度時,你僅須要考慮前七天的溫度,而不是一個月前的溫度。

3. 移動平均法:這是對前兩個方法的改進。不取前面全部點的平均值,而是將n個先前的點的平均值做爲預測值。

4. 加權移動平均法:加權移動平均是帶權重的移動平均,先前的n個值被賦予不一樣的權重。

5. 簡單指數平滑法:在這種方法中,更大的權重被分配給更近期的觀測結果,來自遙遠過去的觀測值則被賦予較小的權重。

6. 霍爾特(Holt)線性趨勢模型:該方法考慮了數據集的趨勢。所謂趨勢,指的是數據的遞增或遞減的性質。假設旅館的預訂數量每一年都在增長,那麼咱們能夠說預訂數量呈現出增長的趨勢。該方法的預測函數是值和趨勢的函數。

7. 霍爾特-溫特斯(Holt Winters)方法:該算法同時考慮了數據的趨勢和季節性。例如,一家酒店的預訂數量在週末很高,而在工做日則很低,而且每一年都在增長;所以存在每週的季節性和增加的趨勢。

8. ARIMA:ARIMA是一種很是流行的時間序列建模方法。它描述了數據點之間的相關性,並考慮了數值之間的差別。ARIMA的改進版是SARIMA (或季節性ARIMA)。咱們將在下一節中更詳細地討論ARIMA。

3、ARIMA簡介

在本節中,咱們將簡要介紹ARIMA,這將有助於理解Auto Arima。「時間序列完整教程」一文中對ARIMA, (p,q,d) 參數,ACF、 PACF圖和具體實現有詳細的解釋。

ARIMA是一種很是流行的時間序列預測方法,它是自迴歸綜合移動平均(Auto-Regressive Integrated Moving Averages)的首字母縮寫。ARIMA模型創建在如下假設的基礎上:

  • 數據序列是平穩的,這意味着均值和方差不該隨時間而變化。經過對數變換或差分可使序列平穩。
  • 輸入的數據必須是單變量序列,由於ARIMA利用過去的數值預測將來的數值。

ARIMA有三個份量:AR(自迴歸項)、I(差分項)和MA(移動平均項)。讓咱們對每一個份量作一下解釋:

  • AR項是指用於預測下一個值的過去值。AR項由ARIMA中的參數‘p’定義。「p」的值是由PACF圖肯定的。
  • MA項定義了預測將來值時過去預測偏差的數目。ARIMA中的參數‘q’表明MA項。ACF圖用於識別正確的‘q’值,
  • 差分順序規定了對序列執行差分操做的次數,對數據進行差分操做的目的是使之保持平穩。像ADF和KPSS這樣的測試能夠用來肯定序列是不是平穩的,並有助於識別d值。

4、ARIMA實現步驟

實現ARIMA模型的通用步驟以下:

1. 加載數據:構建模型的第一步固然是加載數據集。

2. 預處理:根據數據集定義預處理步驟。包括建立時間戳、日期/時間列轉換爲d類型、序列單變量化等。

3. 序列平穩化:爲了知足假設,應確保序列平穩。這包括檢查序列的平穩性和執行所需的轉換。

4. 肯定d值:爲了使序列平穩,執行差分操做的次數將肯定爲d值。

5. 建立ACF和PACF圖:這是ARIMA實現中最重要的一步。用ACF PACF圖來肯定ARIMA模型的輸入參數。

6. 肯定p值和q值:從上一步的ACF和PACF圖中讀取p和q的值。

7. 擬合ARIMA模型:利用咱們從前面步驟中計算出來的數據和參數值,擬合ARIMA模型。

8. 在驗證集上進行預測:預測將來的值。

9. 計算RMSE:經過檢查RMSE值來檢查模型的性能,用驗證集上的預測值和實際值檢查RMSE值。

5、爲何咱們須要Auto ARIMA?

雖然ARIMA是一個很是強大的預測時間序列數據的模型,可是數據準備和參數調整過程是很是耗時的。在實現ARIMA以前,須要使數據保持平穩,並使用前面討論的ACF和PACF圖肯定p和q的值。Auto ARIMA讓整個任務實現起來很是簡單,由於它去除了咱們在上一節中提到的步驟3至6。下面是實現AUTO ARIMA應該遵循的步驟:

1. 加載數據:此步驟與ARIMA實現步驟1相同。將數據加載到筆記本中。

2. 預處理數據:輸入應該是單變量,所以刪除其餘列。

3. 擬合Auto ARIMA:在單變量序列上擬合模型。

4. 在驗證集上進行預測:對驗證集進行預測。

5. 計算RMSE:用驗證集上的預測值和實際值檢查RMSE值。

正如你所看到的,咱們徹底繞過了選擇p和q的步驟。啊!能夠鬆口氣了!在下一節中,咱們將使用一個假想數據集實現Auto ARIMA。

6、Python和R的實現

咱們將使用國際航空旅客數據集,此數據集包含每個月乘客總數(以千爲單位),它有兩欄-月份和乘客數。你能夠從如下連接獲取數據集:

https://datamarket.com/data/set/22u3/international-airline-passengers-monthly-totals-in-thousands-jan-49-dec-60#!ds=22u3&display=line

如下是同一問題的R代碼:

7、Auto ARIMA如何選擇最佳參數

在上述代碼中,咱們僅需用.efit()命令來擬合模型,而沒必要選擇p、q、d的組合,可是模型是如何肯定這些參數的最佳組合的呢?Auto ARIMA生成AIC和BIC值(正如你在代碼中看到的那樣),以肯定參數的最佳組合。AIC(赤池信息準則)和BIC(貝葉斯信息準則)值是用於比較模型的評估器。這些值越低,模型就越好。

若是你對AIC和BIC背後的數學感興趣,請訪問如下連接:

  • AIC: http://www.statisticshowto.com/akaikes-information-criterion/
  • BIC: http://www.statisticshowto.com/bayesian-information-criterion/

8、尾註和進一步閱讀

我發現Auto ARIMA是進行時間序列預測的最簡單的方法。知道一條捷徑是件好事,但熟悉它背後的數學也一樣重要的。在這篇文章中,我略過了ARIMA如何工做的細節,但請務必閱讀本文中提供的連接的文章。爲了方便你參考,這裏再次提供一遍連接:

  • 時間序列預測初學者綜合指南(Python) https://www.analyticsvidhya.com/blog/2016/02/time-series-forecasting-codes-python/
  • 時間序列完整教程(R) https://www.analyticsvidhya.com/blog/2015/12/complete-tutorial-time-series-modeling/
  • 時間序列預測的七種方法 (附python代碼) https://www.analyticsvidhya.com/blog/2018/02/time-series-forecasting-methods/
相關文章
相關標籤/搜索