Prophet在R語言編程代寫中進行時間序列數據預測


 

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

 

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

 

數據准備與探索

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

`select
``  date,
  value
from modeanalytics.daily_orders
order by date`

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

df <- datasets[["Daily Orders"]]

為了快速了解您的數據框包含多少個觀測值,可以運行以下語句:

# Retreive dimension of object
dim(df)

Prophet總是希望輸入DataFrame中有兩列:ds,分別y,包含日期和數值。 

# Inspect variables
str(df)

在此示例中,您將需要進行一些手動的類轉換:

# Parse date column
df <- mutate (
df,
date = ymd_hms(date) # parse date column using lubridate ymd_hms function
)

一旦確認數據框中的列是正確的類,就可以ds在數據框中創建一個新列,該列是date列的精確副本,一個新列y是value列的精確副本:

df <- mutate (
df,
ds = date,  # Create new ds column from date using mutate
y = value   # Create new y column from value using mutate
)

然后,您可以重新調整該date列的用途,以用作數據框 :

現在您已經准備好要與Prophet一起使用的數據,在將數據輸入到Prophet中之前,將其作圖並檢查數據的外觀是個好習慣。 

 

 

  1. 2017年5月左右,趨勢軌跡發生了明顯變化。默認情況下,Prophet自動檢測到此類“ 趨勢變化點 ”,並允許趨勢進行適當調整。先知還允許對這些趨勢變化點的識別進行更細粒度的控制。
  2. 每周和每年都有明顯的季節性。如果時間序列長於兩個周期以上,則先知將自動適應每周和每年的季節性。
  3. 我們的觀察結果的均值和方差隨時間增加。 

Box-Cox變換

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

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

 

如果我們將新轉換的數據與未轉換的數據一起繪制,則可以看到Box-Cox轉換能夠消除隨着時間變化而觀察到的許多增加的方差:

 

預測

使用Prophet通過Box-Cox轉換的數據集擬合模型后,現在就可以開始對未來日期進行預測。 
現在,我們可以使用該predict()函數對未來數據幀中的每一行進行預測。

forecast <- predict(m, future)

此時,Prophet將創建一個分配給預測變量的新數據框,其中包含名為的列下的未來日期的預測值yhat以及不確定性間隔和預測的組成部分。 :

plot(m, forecast)

在我們的示例中,我們的預測如下所示:

 

如果要可視化各個預測組件,則可以使用Prophet的內置plot_components功能:
plot_components在我們的示例數據上運行將返回以下一組組件可視化:

 

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

逆Box-Cox變換

由於先知用於Box-Cox轉換后的數據,因此您需要將預測值轉換回其原始單位。要將新的預測值轉換回其原始單位,您將需要執行Box-Cox逆轉換。

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

 

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


免責聲明!

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



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