1. 程式人生 > 其它 >時間序列預測演算法——Prophet

時間序列預測演算法——Prophet

Prophet 是 Facebook 開源的一款時序預測的工具。 Prophet 遵循 sklearn 庫建模的應用程式介面。 氣象資料具有多季節週期性、不斷變化的增長率和可以擬合特定日期的情況(例如春節、國慶)等 Prophet 適用的性質。 一個不錯的講解 Prophet 的 blog: https://zr9558.com/2018/11/30/timeseriespredictionfbprophet/ Prophet 結合預測與插值來填充缺失值。

下面是操作步驟。

參考了:

Windows下安裝Python版本的prophet:

https://blog.csdn.net/anshuai_aw1/article/details/83377735

時間序列模型Prophet使用詳細講解:

https://blog.csdn.net/anshuai_aw1/article/details/83412058

以上引用CSDN博主「anshuai_aw1」的原創文章,遵循CC 4.0 BY-SA版權協議。

軟體版本:

PyCharm Community Edition 2021.2.3

Python 3.8.12

工程建立:

在Windows下安裝Python

版本的prophet

ProphetFacebook開源的一款時序預測的工具。

https://facebook.github.io/prophet/

切換環境

conda activate py38_1028

安裝pystan

pip install pystan

安裝fbprophet

pip install fbprophet -i https://pypi.tuna.tsinghua.edu.cn/simple

報錯,根據錯誤提示安裝了一些庫

pip install lunarcalendar

pip install holidays

新的錯誤:

error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools":

https://visualstudio.microsoft.com/visual-cpp-build-tools/

根據網上blog,安裝了一些工具。

再次嘗試彈出了一片錯誤,改變安裝方法。

嘗試使用conda來解決

conda install -c conda-forge fbprophet

好像成功了

切換環境Jupyter

安裝ipykernel

conda install ipykernel

python -m ipykernel install --user --name py38_1028--display-name "Python (py38_1028)"

安裝好環境開始除錯程式碼

Prophet遵循sklearn庫建模的應用程式介面

我們建立了一個Prophet類的例項,其中使用了擬合模型”fit預測”predict方法。

Prophet的輸入量往往是一個包含兩列的資料框:dsy。ds列必須包含日期(YYYY-MM-DD)或者是具體的時間點(YYYY-MM-DD HH:MM:SS)。y列必須是數值變數,表示我們希望去預測的量。

例項中使用的是佩頓·曼寧的維基百科主頁https://en.wikipedia.org/wiki/Peyton_Manning每日訪問量的時間序列資料(2007/12/10 - 2016/01/20)。

資料檔案:examples/example_wp_log_peyton_manning.csv

來源:https://www.kaggle.com/martinfox1987/example-wp-log-peyton-manningcsv

這個資料集具有多季節週期性、不斷變化的增長率和可以擬合特定日期(例如佩頓 · 曼寧的決賽和超級碗)的情況等Prophet適用的性質,因此可以作為一個不錯的例子。(注:佩頓 · 曼寧為前美式橄欖球四分衛

# Python
import pandas as pd
from fbprophet import Prophet
import matplotlib.pyplot as plt
# 讀入資料集
df = pd.read_csv('example_wp_log_peyton_manning.csv')
# print(df.head())

通過對一個Prophet物件進行例項化來擬合模型,任何影響預測過程的設定都將在構造模型時被指定。接下來,就可以使用fit方法代入歷史資料集來擬合模型,擬合過程應當花費1 - 5秒。

# INFO:fbprophet:Disabling daily seasonality. Run prophet with daily_seasonality=True to override this.
m = Prophet(daily_seasonality=True)
m.fit(df)

預測過程則需要建立在包含日期ds列的資料框基礎上。通過使用輔助的方法Prophet.make_future_dataframe來將未來的日期擴充套件指定的天數,得到一個合規的資料框。預設情況下,這樣做會自動包含歷史資料的日期,因此我們也可以用來檢視模型對於歷史資料的擬合效果。

# 構建待預測日期資料框,periods = 365 代表除歷史資料的日期外再往後推 365 天
future = m.make_future_dataframe(periods=365)

predict 方法將會對每一行未來 future 日期得到一個預測值(稱為 yhat )。如果你傳入了歷史資料的日期,它將會提供樣本的模型擬合值。預測 forecast 建立的物件應當是一個新的資料框,其中包含一列預測值 yhat ,以及成分的分析和置信區間。

# 預測資料集
forecast = m.predict(future)

# 展示預測結果
m.plot(forecast).show()
# 預測的成分分析繪圖,展示預測中的趨勢、周效應和年度效應
m.plot_components(forecast).show()
plt.show()

通過 Prophet.plot 方法傳入預測得到的資料框,可以對預測的效果進行繪圖。

檢視預測的成分分析,可以使用Prophet.plot_components方法。預設情況下,將展示趨勢、時間序列的年度季節性和周季節性。如果之前包含了節假日,也會展示出來。

理解Prophet演算法

https://zr9558.com/2018/11/30/timeseriespredictionfbprophet/