如今,市面上已经许多 Python 和 R 语言可适用的时间序列预测模型了,那么 Facehook 的 Prophet 在这一领域又有什么优势呢?
Prophet 在进行预测,其后端系统是一个概率程序语言 Stan,这代表 Prophet 能发挥出很多贝叶斯算法的优势,比如说:
在下面研究中,研究者让Prophet对两组数据进行预测,在后端使用概率程序语言,读者可以借此看到使用Stan的一些工作细节。
Prophet使用了一种通用时间序列模型,这种模型可适用于Facebook上的数据,并且具有分段走向(piecewise trends)、多周期及弹性假期(floating holiday)三种特性。
Prophet的把时间序列预测问题转变成了一个曲线拟合练习(exercise)。在这个曲线中,因变量是增长、周期和holiday的总体表现。
使用者可以调节扩散参数(spread parameter),以模拟未来会有多少历史季节性变化(historical seasonal variation)。
用户在用Prophet时,不需要了解Stan代码,仅仅使用大家熟知的Python 或 R编程语言即可。
下面,研究者让它在一个周期性极强的数据集上运行(运行过程如下图所示)。
该数据集为摩纳哥夏威夷火山上测量的大气二氧化碳含量。
设置好程序后,只用了几秒钟,模型就给出了下图所示的预测结果:
Prophet很容易就探测到该数据以年为周期,并且长期增长的趋势。在这里要提一下,Prophet自带数据驱动的置信区间,这是概率编程系统的一个重要优点。
另外,Prophet也为时间序列的组成部分(例如一周中某天、或一年中的某天)提供了简单、易解释的预测结果,如下图所示:
这里要注意的是,以周为单位的预测数据要比其他两个的数据小得多,而且噪点也更大。知道这一点非常有意义:这表明,在全球范围内,大气中化学物质的含量并不是以周为周期变化的;另外,年数据也显示出北半球植被对二氧化碳含量的影响:夏天过后含量降低,冬天过后含量升高。
下面,研究人员让Prophet对一组更具挑战性的数据集(美国年出生人数)进行预测。
该数据集用高斯过程(AI 研习社注:也叫正态随机过程)进行分析,它同时具有周期性和“假期效果”。
Prophet能够通过调整转折点平滑参数自动探测到转折点。研究者把转折点平滑参数设为0.1,而不是默认的0.05。这可使预测结果更灵活,更少平滑,但也更容易显示噪点。
Prophet用了大概1分钟来理解这些数据集下图中的黑点),然后给出了预测结果(下图中的蓝线)。
Prophet预测出,出生率会在每年的八月到十月有所提高。
从下图中能看出,新年期间出生人数较少,而情人节期间则偏高。Prophet通过定义指示变量系列(indicator variable series),把这种一年某些天数据猛然增高的现象自动看做“holidays”,这个指示变量系列能说明(或预测)该点的数据是不是(或是否将是)一个假期。
以上概率程序报告中展示了Prophet在贝叶斯算法中的实践效果,结果发现: