Prophet(预言者)facebook时序预测----论文总结以及调参思路

来源:互联网 发布:ui平面设计软件 编辑:程序博客网 时间:2024/05/17 22:12
  • Prophet是比较简单易用的,对于非时序预测和机器学习领域专家的是非常容易上手的。其参数大多数都是非常直观的参数。(Prophet的python包大量使用了pandas库,所以使用python做开发的需要首先了解pandas的使用。)

  • Prophet也是一种约定优于配置的思想,写代码只需要按照约定的套路定义好pandas中的dataframe就可以轻松进行预测。

  • 下面我们来进行一个官方网站提供的Quick Start来进行学习了解。

import pandas as pdimport numpy as npfrom fbprophet import Prophetimport matplotlib.pyplot as plt# 数据文件请从github上的Prophet项目下载,并放在代码的对应目录df = pd.read_csv('examples/example_wp_peyton_manning.csv')df['y'] = np.log(df['y'])print df.tail()# 定义模型m = Prophet()# 训练模型m.fit(df)# 构建预测集future = m.make_future_dataframe(periods=365)print future.tail()# 进行预测forecast = m.predict(future)print forecast.tail(10)forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail(10)m.plot(forecast)plt.show()

结果
上图为最终的作图结果,其中蓝色线为预测结果,黑色点为原数据点。除此之外,由于Prophet使用的是加性模型,也就是把模型分为趋势模型、周期模型、节假日以及随机噪声的叠加。因为我们可以方便对各个成分进行作图观察。我们可以利用m.plot_components(forecast),对各个成分进行作图观察,如下:这里写图片描述
默认会画出趋势、年周期、星期周期成分(如果在定义模型时给出了holiday参数,还会做出holiday的成分图)

  • 下面干货,从我的学到的经验中设计如何利用Prophet构建有效的预测模型。
    1. 首先我们去除数据中的异常点(outlier),直接赋值为none就可以,因为Prophet的设计中可以通过插值处理缺失值,但是对异常值比较敏感。
    2. 选择趋势模型,默认使用分段线性的趋势,但是如果认为模型的趋势是按照log函数方式增长的,可设置growth='logistic'从而使用分段log的增长方式
    3. 设置趋势转折点(changepoint),如果我们知道时间序列的趋势会在某些位置发现转变,可以进行人工设置,比如某一天有新产品上线会影响我们的走势,我们可以将这个时刻设置为转折点。
    4. 设置周期性,模型默认是带有年和星期以及天的周期性,其他月、小时的周期性需要自己根据数据的特征进行设置,或者设置将年和星期等周期关闭。
    5. 设置节假日特征,如果我们的数据存在节假日的突增或者突降,我们可以设置holiday参数来进行调节,可以设置不同的holiday,例如五一一种,国庆一种,影响大小不一样,时间段也不一样。
    6. 此时可以简单的进行作图观察,然后可以根据经验继续调节上述模型参数,同时根据模型是否过拟合以及对什么成分过拟合,我们可以对应调节seasonality_prior_scale、holidays_prior_scale、changepoint_prior_scale参数。

相关网站:

  • Prophet官方文档:https://facebook.github.io/prophet/
  • Prophet论文:https://peerj.com/preprints/3190/
  • Prophet-github:https://github.com/facebook/prophet