时间序列预测算法——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
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": 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的输入量往往是一个包含两列的数据框: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/

浙公网安备 33010602011771号