时间序列预测算法——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/

posted @ 2021-11-09 21:32  stephen0829  阅读(2270)  评论(0)    收藏  举报