時間序列預測演算法——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是Facebook開源的一款時序預測的工具。
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":
根據網上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的輸入量往往是一個包含兩列的資料框:ds和y。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/