我通读了 Prophet 的白皮书,他们提到他们的算法,
“放弃了 ARIMA 等生成模型的一些重要推理优势。” (第 7 页)
所以现在我很好奇,ARIMA 在推理方面有什么优势?
在我看来,Prophet 的 Pystan 实现的参数/后验是相对清晰的——Prophet 的算法是否有任何大胆的假设可能会导致我应该注意的推理偏差?
我通读了 Prophet 的白皮书,他们提到他们的算法,
“放弃了 ARIMA 等生成模型的一些重要推理优势。” (第 7 页)
所以现在我很好奇,ARIMA 在推理方面有什么优势?
在我看来,Prophet 的 Pystan 实现的参数/后验是相对清晰的——Prophet 的算法是否有任何大胆的假设可能会导致我应该注意的推理偏差?
ARIMA 和类似模型假设时间序列的过去值与过去错误和未来值之间存在某种因果关系:例如,今天股票的波动性是由昨天该股票的波动性驱动的两天前,一个物种今年的数量是去年同一物种数量的直接函数,等等......
Facebook Prophet 不寻找过去和未来之间的任何此类因果关系。相反,它只是尝试使用线性或逻辑曲线以及季节性分量的傅立叶系数来找到适合数据的最佳曲线。还有一个回归组件,但这是针对外部回归器的,而不是针对时间序列本身的(Prophet 模型是 GAM 的一个特例 - 广义加法模型)。
从理论上讲,Prophet 背后的假设确实过于简单和薄弱 - 只需将最佳曲线拟合到您的历史数据即可。由于在特定时间段内将曲线拟合到有限的数据集不会对曲线在历史数据集之外的行为施加任何限制,因此最佳拟合曲线完全有可能在历史时间间隔。例如,我经常注意到,即使历史数据集只有正值,Prophet 也可能在未来变为负值,因为简单化的假设意味着它将天真地永远保持下降趋势。
这就是为什么仅建议将先知仅用于时间序列,其中唯一的信息信号是(相对稳定的)趋势和季节性,而残差只是噪声。
从理论上讲,更严格的因果或结构方法更有可能捕捉到将推断到未来的信号。更重要的是,如果残差不仅仅是噪声,那么 ARIMA 模型或神经网络可能能够捕获这些关系……理论上。
在实践中,除了我上面提到的示例和其他一些示例之外,找到一个业务时间序列的机会,其中基础数据生成过程涉及类型非常苗条。想一想:为什么杂货或时尚商品的销售会受到形式的过程的驱动?
有什么因果机制表明您本周的黄油销量应该是上周黄油销量和两周前黄油销量的线性组合?或者你今天的网络流量应该是你昨天、两天前、三天前和上周的网络流量的线性组合?
因此,归根结底,ARIMA 和类似模型的假设最终变得如此强大和难以置信,以至于尽管它们在数学上的严谨性,但它们在实践中就像 Prophet 或 Holt-Winters 一样临时。
因此,Prophet 方法在实践中的简单性对于很多业务时间序列都是有意义的。此外,作者在他们的论文中承认了这一点。
我和 Prophet 玩了一会儿。他们承诺很大。据我了解,他们的主张是针对大规模预测的框架。如果您有 10,000 个序列要预测,则无法手动进行。所以,让我们自动在所有这些上运行这个东西,也许我们平均会得到一套不错的预测。
在金融领域,我们还预测大量系列,例如贷款损失预测可能涉及投资组合中的数百万贷款。在这种情况下,我们手动对投资组合进行分层,并为每个分层手动构建模型,然后对所有贷款运行相同的模型。Prophet 不需要这个,因为它会估计一个单独的模型,每个贷款可能都有自己的变量。
但是,我在另一个问题上尝试过 Prophet。我只有几个系列,并查看了预测的质量。我看到的问题是“变化点”检测。本质上,如果我正确理解它在做什么,那么 Prophet 会在它认为遇到变化点时调整斜率。这对我来说是个问题,因为我们有时会暂时偏离平均值,可能是不同的制度,然后事情又回到了旧的方式。换句话说,均值回归相当普遍。先知将无法说出什么是真正的变化点。然而,这并不是对框架的批评。通常很难自动或手动检测变化点。