用Prophet在Python中進行時間序列預測

原文連接:http://tecdat.cn/?p=7692

預測一般被認爲是報告的天然發展。報告能夠幫助咱們回答,_發生了什麼事?_預測有助於回答下一個邏輯問題,_將會發生什麼?_數組

Prophet的目的是「使專家和非專家能夠更輕鬆地進行符合需求的高質量預測。 函數

 您將學習如何使用Prophet(在Python中)解決一個常見問題:預測下一年公司的每日訂單。 學習

數據準備與探索

Prophet最適合每日按期數據以及至少一年的歷史數據。 咱們將使用SQL處理天天要預測的數據:spa

**select**date,**value****from**modeanalytics.daily_orders**order****by**date3d

如今,咱們天天都有數據,咱們能夠將SQL查詢結果集經過管道傳遞到Python筆記本中的pandas dataframe對象中。首先,將您的SQL查詢重命名爲Daily Orders。而後,在Python筆記本中,咱們可使用如下語句將查詢結果集經過管道傳遞到數據框dfcode

df = datasets["Daily Orders"]component

爲了快速瞭解您的數據框包含多少個觀測值,能夠運行如下語句,該語句將返回一個元組,分別包含數據框中的行數和列數:orm

**df**.shape對象

先知老是指望輸入DataFrame中有兩列:dsy。該ds列表示SQL查詢中的日期 。 要檢查DataFrame中列的類型,能夠在Python筆記本中運行如下語句:blog

**df**.dtypes

一旦確認數據框中的列是正確的數據類型,就能夠ds在數據框中建立一個新列,該date列是該列的徹底相同的副本,也能夠建立一個新列,該列是該列y的徹底相同的副本value

df['ds'] = df['date'] df['y'] = df['value']

而後,您能夠從新調整該date列的用途,以用做數據框的索引:

df.set_index('date')

這會將您的數據框的索引轉換爲DatetimeIndex,這使熊貓可以將此數據集解釋爲_Time Series_。

如今您已經準備好要與Prophet一塊兒使用的數據,在將數據輸入到Prophet中以前,將其做圖並檢查數據的外觀是個好習慣。 

 

Box-Cox變換

一般在預測中,您會明確選擇一種特定類型的冪變換,以將其應用於數據以消除噪聲,而後再將數據輸入到預測模型中(例如,對數變換或平方根變換等)。可是,有時可能難以肯定哪一種功率變換適合您的數據。

Box-Cox變換是一種數據變換,用於評估一組Lambda係數(λ)並選擇可實現最佳正態性近似值的值。

**from**scipy.stats**import**boxcox

boxcox方法須要一個輸入:要轉換的一維正數據數組。您也能夠選擇指定要用於轉換的λ值(例如,對數轉換的λ= 0)。不然,該boxcox方法將找到使對數似然函數最大化的λ並將其做爲第二個輸出參數返回。

對於咱們的示例,咱們將讓該boxcox方法肯定用於變換的最佳λ,並將該值返回給名爲lam的變量:

# Apply Box-Cox Transform to value column and assign to new column ydf['y'], lam = boxcox(df['value'])

若是咱們將新轉換的數據與未轉換的數據一塊兒繪製,則能夠看到Box-Cox轉換可以消除隨着時間變化而觀察到的許多增長的方差:

預測

使用Prophet建立預測的第一步是將fbprophet庫導入到咱們的Python筆記本中:

**import**fbprophet

將Prophet庫導入筆記本後,咱們能夠從 Prophet對象(建立實例)開始:

m = fbprophet.Prophet()

實例化Prophet對象後,就能夠將模型擬合到歷史數據中了。您能夠經過fit在Prophet對象上調用方法並傳入數據框來實現此目的:

使用Prophet經過Box-Cox轉換的數據集擬合模型後,如今就能夠開始對將來日期進行預測。 

如今,咱們可使用該predict方法對將來數據幀中的每一行進行預測。

此時,Prophet將建立一個分配給`變量的新數據框,其中包含該列下將來日期的預測值
`yhat以及不肯定性間隔和預測的組成部分。咱們可使用Prophet的內置plot幫助器功能將預測可視化:在咱們的示例中,咱們的預測以下所示:

若是要可視化各個預測組件,則可使用Prophet的內置plot_components方法:plot_components在咱們的示例數據上運行將返回如下一組組件可視化:

預測和組件可視化顯示,Prophet可以準確地建模數據中的潛在趨勢,同時還能夠精確地建模每週和每一年的季節性(例如,週末和節假日的訂單量較低)。

逆Box-Cox變換

因爲先知用於Box-Cox轉換後的數據,所以您須要將預測值轉換回其原始單位。要將新的預測值轉換回其原始單位,您將須要執行Box-Cox逆轉換。

 該inv_boxcox方法有兩個必需的輸入。要轉換的數據數組和轉換的λ值。咱們將對預測數據幀中的特定列進行逆變換,並提供先前從存儲在lam變量中的第一個Box-Cox變換中得到的λ值:

如今,您已將預測值轉換回其原始單位,如今能夠將預測值與歷史值一塊兒可視化:

相關文章
相關標籤/搜索