首頁>其它>

> Photo by Drew Beamer on Unsplash

藉助深度學習的能力改進可解釋的Prophet模型

在學習時間序列預測的同時,您遲早會遇到由Facebook開發的廣受歡迎的Prophet模型。由於它在準確性,可解釋的結果方面提供了良好的效能,並且同時為使用者自動化了許多元素(例如超引數選擇或特徵工程),因此它獲得了廣泛的歡迎。這就是為什麼對於資料科學家和技術知識較少的人來說,使用它都相對簡單。

您可以想象,當我最近偶然發現一個用於時間序列預測的新庫NeuralProphet時,我感到非常驚訝。從庫的名稱可以推斷出,這是關於類固醇的很好的老先知,在這種情況下是神經網路。鑑於我目前在時間序列上做了大量工作,所以我很想嘗試一下它,並與常規先知進行比較。

在本文中,我簡要介紹了什麼是NeuralProphet以及它與經典庫的實際區別。然後,我使用這兩個庫來檢視它們可以很好地執行相同的時間序列預測任務。一定要對時間序列預測有所瞭解,以便理解所有術語,這絕對有幫助。開始吧!

NeuralProphet

要了解什麼是NeuralProphet,我將簡要介紹一下構建基塊,並說明所有組成部分如何組合在一起。

我們應該從自迴歸模型開始,自迴歸模型是一類試圖根據變數的過去觀測值預測其未來值的模型。通常,它們是線性模型(認為是線性迴歸),對於輸入,我們使用要預測的變數的滯後值。在最簡單的情況下,您可以考慮嘗試使用今天的值來預測變數X的明天值。自然地,有很多方法可以確定我們應該考慮哪些時間步驟來建立滯後特徵,但是,這超出了本文的範圍。

AR模型的主要優點是它們非常易於解釋-透過檢查模型的係數,我們可以瞭解過去的時間步長如何影響預測。但是,這種可解釋性是要付出代價的,因為這些引數模型可能會變得過於僵化,無法考慮自相關之外的任何特徵。而且,它們不僅對具有大量觀察值而且具有潛在特徵的資料集無法很好地縮放。

> Source

我們可以將Prophet視為基本AR模型的擴充套件。該模型不僅使用目標變數的滯後值,還提供了特徵工程的另一種形式-將傅立葉級數應用於輸入變數。這使我們-分析人員-可以進一步調整模型以提高效能,並分解結果以提高可解釋性。先知具有許多其他不錯的功能,其中一些我們在下面列出:

· 先知可以利用其他外部迴歸器-因此不僅目標的滯後值

· 該模型可以說明假期的影響

· 它可以自動檢測趨勢中的變化點-例如,當上升趨勢開始下降時

最後一個難題是神經網路。與自迴歸模型相反,它們是非引數的,這在處理時間序列資料時非常重要。這是因為時間序列很少(如果有的話)在延長的時間段內遵循單一模式。通常,NN可以對映任何非線性函式以近似任何連續函式,因此它們將盡最大努力擬合和近似給定資料。這就是為什麼我們經常聽到一些使用NN的驚人例子。但是,我們應該注意一些問題:

· 由於開發用於預測序列(並且時間序列也是序列)的網路型別最初是為自然語言處理和計算機視覺設計的,因此它們需要大量資料

· 超引數調整絕對不像引數模型那樣簡單

· 神經網路通常被認為是黑盒模型,因此簡而言之,非常難以解釋(儘管有很多研究著眼於解決這個問題)

如引言中所述,使用Prophet的主要優點是效能好,可解釋性強,易於設定和使用。這就是NeuralProphet的作者對於他們的庫的考慮-保留Prophet的所有優點,同時透過引入改進的後端(用PyTorch代替Stan)並使用自動迴歸網路(AR-淨)將神經網路的可擴充套件性與AR模型的可解釋性結合起來。用一句話概括AR-Net-這是一個單層網路,經過訓練可以模仿時間序列訊號中的AR過程,但規模要比傳統模型大得多。

NeuralProphet與Prophet

簡要介紹了NeuralProphet是什麼之後,我現在將重點介紹兩個庫之間的區別。使用文件作為參考,主要區別在於:

· NeuralProphet使用PyTorch的梯度下降進行最佳化,從而使建模更快

· 時間序列自相關是使用自迴歸網路建模的

· 滯後迴歸器使用單獨的前饋神經網路建模

· 此外,該模型還具有前饋NN的可配置非線性深層

· 該模型可針對特定的預測範圍(大於1)進行調整

· 它提供自定義損失和指標

重要的是要記住,在撰寫本文時,該庫處於beta階段。這意味著很多地方仍然可以更改,並且並非原始Prophet庫中的所有功能都已實現,例如,物流增長。

建立

在撰寫本文時,安裝NeuralProphet的最佳方法是克隆儲存庫並透過執行pip install直接從那裡安裝它。在目錄中。

安裝庫後,我們將其匯入Python。

準備資料

在此示例中,我們將使用Peyton Manning(NFL明星)資料集。如果您不是美國人,則可能必須檢視Wikipedia條目才能瞭解先知文件中的笑話。回到正軌,該資料集包含其Wikipedia條目的日誌每日檢視。

該資料集最初是由Facebook團隊抓取的,以顯示先知的工作方式,並且可以在先知和NeuralProphet中使用。

我們透過執行以下行來載入資料:

對於以前從未使用過Prophet的使用者,要執行模型,我們需要兩列具有適當名稱的列:ds是日期/時間戳列,而y是我們要預測的變數。鑑於這是一個樣本資料集,因此已經準備好了。

然後,我們繪製資料以獲得一些基本的直覺。考慮到起伏,我可以猜測人氣的上升與NFL季節有關,但是如果我錯了,請糾正我。

df.plot(x='ds', y='y', title='Log daily page views');

為了使示例更實際,我們將資料集分為訓練集和測試集,使用訓練集測試兩個模型,然後對測試集進行評估以比較效能。為了使情況簡單,我們將最後365個觀測值作為測試集。因此,我們將使用大約7年的資料進行培訓,並使用1年的評估時間。這樣,我們希望見證測試集中的峰谷。

Prophet

如前所述,Prophet使終端使用者非常容易獲得預測。實際上,我們完成了4行程式碼。我們可以簡要介紹一下。首先,我們使用所有預設設定例項化模型。然後,我們使用訓練資料訓練模型。為了獲得預測,我們需要製作一個所謂的"未來資料框"。我們指定了要提前預測的天數,預設情況下,該方法還包括歷史資料。這樣,我們將獲得擬合值(使用訓練集中的資料進行預測)。最後,我們獲得預測並將其儲存在preds_df_1中。

訓練好模型後,我們繪製預測值與實際觀察值的關係圖(僅來自訓練集)。

如果不檢視測試期間的實際情況,則很難判斷效能。但是,這些預測以及置信區間看起來是合理的。

作為最後一步,我們繪製提取的成分。這與標準時間序列分解的過程類似。

prophet_model.plot_components(preds_df_1);

在該圖中,我們可以觀察到多年來的趨勢以及每週和每年的組成部分。

NeuralProphet

值得慶幸的是,NeuralProphet的API與原始Prophet幾乎相同。這樣,從上一個示例中瞭解了我們的方法,就可以非常輕鬆地將NeuralProphet應用於時間序列預測任務。

自然地,我們使用不同的類來例項化模型。其他區別是在訓練模型時明確說明資料的頻率(最初的Prophet主要用於日常資料),並提到了我們要包括在"未來資料幀"中的歷史樣本的長度。為了使示例儘可能相似,我們包括了整個歷史框架。

與以前一樣,我們使用以下程式碼來繪製模型的預測。

nprophet_model.plot(preds_df_2);

然後,我們繪製元件。在撰寫本文時,預測中沒有包括置信區間(通常,preds_df_2中的列比preds_df_1中的列少得多,但是很可能很快會改變!),但是我們可以包括訓練期間的殘差。

nprophet_model.plot_components(preds_df_2, residuals=True);

我們還可以透過執行來繪製模型的引數。

nprophet_model.plot_parameters();

我們在此處僅包括兩個圖,因為其餘兩個圖與使用plot_components(每週和每年的季節性)獲得的圖重疊。

效能比較

最後,我們比較模型的效能。為此,我們將所有預測都放入測試DataFrame中,繪製結果並計算均方誤差(MSE)。

執行程式碼將生成以下圖。

儘管很難清楚地說出哪個預測更接近實際,但計算MSE顯然可以顯示獲勝者-NeuralProphet。

使用這兩個模型的預設設定,我們表明改進的模型效能更好。但是,我確信仍有很多改進的機會,例如,透過包括外部變數,微調變更點選擇,不僅包括某些假期,而且還包括他們周圍的天數等。本文的目的是提供新庫的簡要概述,我們將在此處進行總結,併為將來的潛在文章提供更深入的內容留出一些空間。

結論

NeuralProphet是一個非常年輕的庫(仍處於beta階段),它已經具有很大的潛力。這也可以透過檢視貢獻者及其先前的經驗來推斷。作者透過進一步提高模型的準確性和可擴充套件性,同時保持易用性和最重要的是可解釋性,成功地改進了原始Prophet庫。

就我個人而言,我不建議所有人都放棄NeuralProphet的先知船,主要是因為該圖書館還很年輕並且正在不斷髮展,這對於將其投入生產環境可能不是理想的選擇。但是,我絕對建議您留意事態發展!

參考文獻:

· NeuralProphet:https://github.com/ourownstory/neural_prophet

· Facebook的Prophet:https://facebook.github.io/prophet/

· AR-Net:https://arxiv.org/pdf/1911.12436.pdf

61
  • 康明斯6bt發動機
  • 在鄧超的襠下穿過?鹿晗:感覺被侮辱