prophet基本原理

Prophet是一个基于加法模型的时间序列数据预测程序,其中非线性趋势用于预测年度、每周和每日的季节性以及假日效应。它非常适用于具有强烈季节性影响或历史数据有周期的时间序列。Prophet对数据缺失和趋势变化非常敏感,通常能够很好地处理异常值。 pip install fbprophet prophet模型的结构如下: y(t)=g(t)+s(t)+h(t)+ϵ 其中,g(t)是趋势(trend)函数,用来分析时间序列中非周期性的变化。 s(t)代表周期性的变化,例如一周或一年的周期性。 h(t)代表节假日等偶然一天或几天造成的影响。 ϵ是误差项,代表本模型没有考虑到的误差的影响。

  1. Facebook中模型的增长类似于生态系统中种族数量的增长,在经历非线性增长后到达饱和值,这种类型的增长常采用logistic增长模型,基本形式如下:
![hBCeMH](<https://raw.githubusercontent.com/errolyan/tuchuang/master/uPic/hBCeMH.png>)

1. 其中,C是饱和值(承载能力),k是增长率,m是偏置参数。
  1. Seasonality:商业活动经常具有多个不同时长的周期性,例如5天的工作日会在每周的数据产生影响,学校的假期也会对每年的数据产生影响。为了拟合并预测这种作用,我们必须制定出季节性模型。本研究主要依靠傅里叶级数来构造灵活的周期性模型,可以设置P为我们想要的时间序列的规则周期长度(例如,当以天为单位的时间序列,可以对年度数据设置P=365.25,周数据设置P=7)。这样,就得到了任意平滑周期效应的估算值:
![t86CsR](<https://raw.githubusercontent.com/errolyan/tuchuang/master/uPic/t86CsR.png>)
  1. Holidays and Events:节假日和重要事件会对很多商业事件序列产生重要影响,这些的作用通常是可以预测的,但是由于它们的周期性不固定,使得它们不能通过周期性模型来实现。
    1. h(t)=Z(t)κ

代码


import pandas as pd
from prophet import Prophet

# Python
df = pd.read_csv('test.csv')
print(df.head())

m = Prophet()
m.fit(df)

future = m.make_future_dataframe(periods=365)
print(future.tail())

forecast = m.predict(future)
print(forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail())

fig1 = m.plot(forecast)
fig2 = m.plot_components(forecast)

from prophet.plot import plot_plotly, plot_components_plotly
plot_plotly(m, forecast)
plot_components_plotly(m, forecast)