Facebook Prophet

2025年3月17日 | 阅读 7 分钟

时间序列预测是许多行业(包括银行、零售、医疗保健等)中决策的重要组成部分。准确预测未来的趋势和模式可以帮助公司优化库存管理、预测需求、有效分配资源并做出明智的战略决策。然而,传统的预测方法通常需要领域专业知识、手动参数调整和复杂的建模过程,这使得非专家难以使用。

为了解决这些问题,Facebook 推出了 Prophet,这是一个开源的预测工具,它提供了一个简单而强大的框架,供分析师、数据科学家和领域专家使用,从而实现了时间序列预测的民主化。

Facebook Prophet 旨在简化时间序列预测的过程,自动化许多传统预测方法所需的手动任务。它基于灵活性、简单性和可伸缩性的理念,让用户能够专注于分析结果,而不是处理复杂的建模方法。

现在,为了更好地理解 Facebook Prophet,我们将使用它来预测每小时的能源消耗。

代码

导入库

数据

我们将使用 PJM 的每小时电力消耗统计数据。能源消耗具有一些独特的特征。观察 Prophet 如何捕捉它们将会很有趣。

从 2002 年到 2018 年覆盖整个东部地区的 PJM East 提取数据。


输出

Facebook Prophet

EDA(探索性数据分析)

我们将创建几个时间序列特征,以检查趋势如何根据星期几、小时、一年中的时间等而变化。


输出

Facebook Prophet

绘制特征图

  • 电力需求具有很强的日和季节性特征。
  • 一周中的某一天似乎也表明了高峰期的差异。

输出

Facebook Prophet
Facebook Prophet

分割数据集

为了将其用作验证集,我们删除了 2015 年之后的数据。我们将使用先前的数据进行训练。

输出

Facebook Prophet

Facebook 的 Prophet 模型

Prophet 模型期望数据集以特定的方式命名。在将数据馈送到模型之前,我们将重命名我们的数据框列。

输出

Facebook Prophet

输出

Facebook Prophet

输出

Facebook Prophet

输出

Facebook Prophet

比较

输出

Facebook Prophet

查看预测的第一个月

输出

Facebook Prophet

一周的预测

输出

Facebook Prophet

误差指标

我们的 RMSE 误差为 43761675。

我们的 MAE 误差为 5181.78。

我们的 MAPE 不准确率为 16.5%。

与 XGBoost 模型相比,我们的误差要低得多(MAPE 为 8.9%)。

输出

Facebook Prophet

输出

Facebook Prophet

输出

Facebook Prophet

添加节假日

接下来,我们将检查添加节假日标记是否能提高模型的准确性。Prophet 有一个节假日效应参数,可以在训练模型之前传递给模型。

我们将使用内置的 pandas USFederalHolidayCalendar 来获取节假日列表。

输出

Facebook Prophet

添加节假日进行预测

绘制节假日效应图

输出

Facebook Prophet
Facebook Prophet

添加节假日后的误差指标

令人惊讶的是,添加节假日后误差反而变差了。

输出

Facebook Prophet

输出

Facebook Prophet

仅比较节假日日期的模型

让我们绘制有和没有独立日的预测模型。对于这个特定的节假日,带节假日的模型似乎更符合实际。

输出

Facebook Prophet

输出

Facebook Prophet

比较独立日的误差

这一天的误差得到了解决。

输出

Facebook Prophet

输出

Facebook Prophet

所有节假日的误差

节假日误差增加了!这令人惊讶。

输出

Facebook Prophet

输出

Facebook Prophet

按节假日识别误差

该模型展示了不同的节假日如何产生不同的响应。如果我们单独识别节假日而不是将它们全部归为“USFederalHolidays”,模型可能会表现更好。

输出

Facebook Prophet
Facebook Prophet

绘制每个预测的误差图

我们可以看到,我们的两个模型都能有效地泛化,但在高峰需求时段会遇到困难。

它似乎低估了许多天。

输出

Facebook Prophet

数据清理

数据清理是预测过程中的关键部分。如果传入的数据包含垃圾值,预测将使用它们来进行预测,这可能会导致严重问题。

我们在训练数据中注意到,有一些测量值较低的糟糕测量值。这些是导致低估的原因吗?让我们尝试删除这些错误数据。

此图以红色突出显示了糟糕的数据。

输出

Facebook Prophet

输出

Facebook Prophet

2012 年 10 月 29 日至 30 日,飓风桑迪袭击了美国东部,造成了严重的风暴和沿海洪水,导致约 800 万人断电。这场风暴以一级飓风的强度在新泽西州大西洋城附近登陆,最终导致新泽西州(270 万)、纽约(220 万)、宾夕法尼亚州(120 万)、康涅狄格州(62 万)、马萨诸塞州(40 万)、马里兰州(29 万)、西弗吉尼亚州(26.8 万)、俄亥俄州(25 万)和新罕布什尔州(21 万)的数不清的家庭和企业断电。弗吉尼亚州、缅因州、罗德岛州、佛蒙特州和哥伦比亚特区等许多其他州也记录到了停电。

输出

Facebook Prophet

清理后,与初始模型相比,分数有了小幅提高。更多的数据清理以及节假日可能会带来更好的结果。试试看!

输出

Facebook Prophet

输出

Facebook Prophet