用Prophet在Python編程代寫中進行時間序列預測


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

 

預測通常被認為是報告的自然發展。報告可以幫助我們回答,發生了什么事?預測有助於回答下一個邏輯問題,將會發生什么?

Prophet的目的是“使專家和非專家可以更輕松地進行符合需求的高質量預測。 

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

數據准備與探索

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

select
  date,
  value
from modeanalytics.daily_orders
order by date

 

現在,我們每天都有數據,我們可以將SQL查詢結果集通過管道傳遞到Python筆記本中的pandas dataframe對象中。首先,將您的SQL查詢重命名為Daily Orders。然后,在Python筆記本中,我們可以使用以下語句將查詢結果集通過管道傳遞到數據框df

df = datasets["Daily Orders"]

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

df.shape

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

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 y
df['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變換中獲得的λ值:


現在,您已將預測值轉換回其原始單位,現在可以將預測值與歷史值一起可視化:

 

 

 

如果您有任何疑問,請在下面發表評論。   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM