1、Prophet是Facebook发布的基于可分解(趋势+季节+节假日)模型的开源库。它可以用简单直观的参数进行高精神的时间序列预测。
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