1、Prophet是Facebook釋出的基于可分解(趨勢+季節+節假日)模型的開源庫。它可以用簡單直覺的參數進行高精神的時間序列預測。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL9EFRNVTQq1UNrRVTpZkMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL3EzN1QjNxgTM0EzNwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
1.1 拟合過程
教程中使用的資料集可在 Prophet 的 github 首頁 中的 examples 檔案夾 内下載下傳得到。
from fbprophet import Prophet
# 1. 建立 Prophet 對象
m=Prophet()
"""
data是訓練資料,預測過程需要建立在包含日期ds列的資料框基礎上
"""
# 2. 拟合模型
m.fit(data)
"""
Prophet.make_future_dataframe 來将未來的日期擴充指定的天數,得到一個合規的資料框。
預設情況下,這樣做會自動包含曆史資料的日期,是以我們也可以用來檢視模型對于曆史資料的拟合效果。
"""
# 3. 建構帶預測日期資料框,periods=365代表除曆史資料的日期外再往後推365天
future=m.make_future_dataframe(periods=365)
"""
将會對每一行未來future 日期得到一個預測值(稱為 yhat)。
如果你傳入了曆史資料的日期,它将會提供樣本的模型拟合值。
預測 forecast 建立的對象應當是一個新的資料框,其中包含一列預測值 yhat ,以及成分的分析和置信區間。
"""
# 4. 預測資料集
forecast=m.predict(future)
forecast[['ds','yhat','yhat_lower','yhat_upper']].tail()
# 5. 展示結果
m.plot(forecast)
# 6. 預測的成分分析繪圖,展示預測中的趨勢,周效應和年度效應
m.plot_components(forecast)
1.2 結果顯示
1.2.1 原始資料描述
1.2.2 建構待預測日期資料框
1.2.3 預測資料集
1.2.4 展示預測結果
1.2.5 預測成分分析圖
通過對資料的分析,我們就可以知道:
①圖1是根據trend畫出來的,圖2是根據weekly畫出來的,圖3是根據yearly畫出來的。
②因為是加法模型,有:forecast['additive_terms'] = forecast['weekly'] + forecast['yearly'];有:forecast['yhat'] = forecast['trend'] + forecast['additive_terms'] 。是以:forecast['yhat'] = forecast['trend'] +forecast['weekly'] + forecast['yearly']。
如果有節假日因素,那麼就會有forecast['yhat'] = forecast['trend'] +forecast['weekly'] + forecast['yearly'] + forecast['holidays']。
在第四部分,我們會講到節假日因素,對于那些是節假日的天數,forecast['holidays']才會有值,不是節假日的天數,forecast['holidays']為0。
③因為是加法模型,'multiplicative_terms', 'multiplicative_terms_lower', 'multiplicative_terms_upper'這3列為空。
是以,基于上面的分析,weekly中的Monday為0.3的意思就是,在trend的基礎上,加0.3;Saturday為-0.3的意思就是,在trend的基礎上,減0.3。是以,這條線的高低也在一定程度上反應了“銷量的趨勢“。
1.3 參考連結
github連結:https://github.com/facebook/prophet/tree/master/python
部落格連結:https://blog.csdn.net/anshuai_aw1/article/details/83412058