獨家|利用Auto ARIMA構建高性能時間序列模型(附Python代碼)

獨家|利用Auto ARIMA構建高性能時間序列模型(附Python代碼)


作者:AISHWARYA SINGH

翻譯:陳之炎

校對:丁楠雅

本文共3400字,建議閱讀10+分鐘。

本文介紹了ARIMA的概念,並帶你用Python和R訓練一個數據集實現它。


簡介


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

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

Auto ARIMA,它是最為有效的方法之一。


獨家|利用Auto ARIMA構建高性能時間序列模型(附Python代碼)


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

目錄


一、什麼是時間序列?

二、時間序列預測的方法

三、ARIMA簡介

四、ARIMA實現步驟

五、為什麼需要Auto ARIMA?

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

七、Auto ARIMA如何選擇參數?

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

一、什麼是時間序列?


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

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

  • 例1:

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

獨家|利用Auto ARIMA構建高性能時間序列模型(附Python代碼)


  • 例2:

再舉一個例子。假設你有一個數據集,其中包含每天空氣中的二氧化碳水平(下面是截圖)。那麼可以通過過去幾天的數值來預測第二天的二氧化碳水平嗎?當然可以。如果你觀察到的數據是每天記錄下來的,那麼,時間間隔便是恆定的(24小時)。

獨家|利用Auto ARIMA構建高性能時間序列模型(附Python代碼)


現在你已經有了直覺,第一個例子是簡單的迴歸問題,而第二個例子是時間序列問題。雖然這裡的時間序列問題也可以用線性迴歸來解決,但這並不是最好的方法,因為它忽略了這些值與所有相對過去值之間的關係。下面,我們來了解一下解決時間序列問題的一些常用方法。

二、時間序列預測的方法

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

七種時間序列預測方法(附Python代碼):https://www.analyticsvidhya.com/blog/2018/02/time-series-forecasting-methods/


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


獨家|利用Auto ARIMA構建高性能時間序列模型(附Python代碼)



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


獨家|利用Auto ARIMA構建高性能時間序列模型(附Python代碼)



3. 移動平均法:這是對前兩個方法的改進。不取前面所有點的平均值,而是將n個先前的點的平均值作為預測值。


獨家|利用Auto ARIMA構建高性能時間序列模型(附Python代碼)



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


獨家|利用Auto ARIMA構建高性能時間序列模型(附Python代碼)



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


獨家|利用Auto ARIMA構建高性能時間序列模型(附Python代碼)



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


獨家|利用Auto ARIMA構建高性能時間序列模型(附Python代碼)


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


獨家|利用Auto ARIMA構建高性能時間序列模型(附Python代碼)



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

三、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值。


四、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值。

五、為什麼我們需要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。

六、Python和R的實現

我們將使用國際航空旅客數據集,此數據集包含每月乘客總數(以千為單位),它有兩欄-月份和乘客數。你可以從以下鏈接獲取數據集:

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


獨家|利用Auto ARIMA構建高性能時間序列模型(附Python代碼)


獨家|利用Auto ARIMA構建高性能時間序列模型(附Python代碼)


獨家|利用Auto ARIMA構建高性能時間序列模型(附Python代碼)



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


獨家|利用Auto ARIMA構建高性能時間序列模型(附Python代碼)


七、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/


八、尾註和進一步閱讀

我發現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/


建議大家做一下這個課程中的練習題:“時間序列實戰”。你也可以參加我們的培訓課程,參與到實戰中來,“時間序列預測”課程為你提供一個領先的開端。

祝你好運,請在下面的評論部分提供你的反饋並提出問題。

原文標題:

Build High Performance Time Series Models using Auto ARIMA in Python and R

原文鏈接:

https://www.analyticsvidhya.com/blog/2018/08/auto-arima-time-series-modeling-python-r/

譯者簡介

獨家|利用Auto ARIMA構建高性能時間序列模型(附Python代碼)


陳之炎,北京交通大學通信與控制工程專業畢業,獲得工學碩士學位,歷任長城計算機軟件與系統公司工程師,大唐微電子公司工程師,現任北京吾譯超群科技有限公司技術支持。目前從事智能化翻譯教學系統的運營和維護,在人工智能深度學習和自然語言處理(NLP)方面積累有一定的經驗。業餘時間喜愛翻譯創作,翻譯作品主要有:IEC-ISO 7816、伊拉克石油工程項目、新財稅主義宣言等等,其中中譯英作品“新財稅主義宣言”在GLOBAL TIMES正式發表。能夠利用業餘時間加入到THU 數據派平臺的翻譯志願者小組,希望能和大家一起交流分享,共同進步

— 完 —

關注清華-青島數據科學研究院官方微信公眾平臺“THU數據派”及姊妹號“數據派THU”獲取更多講座福利及優質內容。


分享到:


相關文章: