Prophet(預言者)facebook時序預測----論文總結以及調參思路

  • Prophet是比較簡單易用的,對於非時序預測和機器學習領域專家的是非常容易上手的。其參數大多數都是非常直觀的參數。(Prophet的python包大量使用了pandas庫,所以使用python做開發的需要首先了解pandas的使用。)

  • Prophet也是一種約定優於配置的思想,寫代碼只需要按照約定的套路定義好pandas中的dataframe就可以輕鬆進行預測。

  • 下面我們來進行一個官方網站提供的Quick Start來進行學習瞭解。

import pandas as pd
import numpy as np
from fbprophet import Prophet
import matplotlib.pyplot as plt

# 數據文件請從github上的Prophet項目下載,並放在代碼的對應目錄
df = pd.read_csv('examples/example_wp_peyton_manning.csv')
df['y'] = np.log(df['y'])
print df.tail()

# 定義模型
m = Prophet()

# 訓練模型
m.fit(df)

# 構建預測集
future = m.make_future_dataframe(periods=365)
print future.tail()

# 進行預測
forecast = m.predict(future)

print forecast.tail(10)
forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail(10)
m.plot(forecast)
plt.show()

結果
上圖爲最終的作圖結果,其中藍色線爲預測結果,黑色點爲原數據點。除此之外,由於Prophet使用的是加性模型,也就是把模型分爲趨勢模型、週期模型、節假日以及隨機噪聲的疊加。因爲我們可以方便對各個成分進行作圖觀察。我們可以利用m.plot_components(forecast),對各個成分進行作圖觀察,如下:這裏寫圖片描述
默認會畫出趨勢、年週期、星期週期成分(如果在定義模型時給出了holiday參數,還會做出holiday的成分圖)

  • 下面乾貨,從我的學到的經驗中設計如何利用Prophet構建有效的預測模型。
    1. 首先我們去除數據中的異常點(outlier),直接賦值爲none就可以,因爲Prophet的設計中可以通過插值處理缺失值,但是對異常值比較敏感。
    2. 選擇趨勢模型,默認使用分段線性的趨勢,但是如果認爲模型的趨勢是按照log函數方式增長的,可設置growth='logistic'從而使用分段log的增長方式
    3. 設置趨勢轉折點(changepoint),如果我們知道時間序列的趨勢會在某些位置發現轉變,可以進行人工設置,比如某一天有新產品上線會影響我們的走勢,我們可以將這個時刻設置爲轉折點。
    4. 設置週期性,模型默認是帶有年和星期以及天的週期性,其他月、小時的週期性需要自己根據數據的特徵進行設置,或者設置將年和星期等週期關閉。
    5. 設置節假日特徵,如果我們的數據存在節假日的突增或者突降,我們可以設置holiday參數來進行調節,可以設置不同的holiday,例如五一一種,國慶一種,影響大小不一樣,時間段也不一樣。
    6. 此時可以簡單的進行作圖觀察,然後可以根據經驗繼續調節上述模型參數,同時根據模型是否過擬合以及對什麼成分過擬合,我們可以對應調節seasonality_prior_scale、holidays_prior_scale、changepoint_prior_scale參數。

相關網站:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章