销售预测是许多销售驱动型组织中最常见的任务之一。这项活动使组织能够在一定程度上自信地为未来做好规划。在本教程中,我们将使用 Prophet,这是 Facebook 开发的一个包,来展示如何实现这一点。该包在 Python 和 R 中均可使用。我们假设读者对在 Python 中处理时间序列数据有基本了解。
简介与安装
模型拟合
进行未来预测
获取预测结果
绘制预测图
绘制预测组件图
交叉验证
获取性能指标
可视化性能指标
结论
有非常多的开源预测工具,然而这些工具都无法适合解决所有预测问题。Prophet 最适合处理数个月的每小时和每周数据。使用 Prophet 时,年度数据最为首选。根据 Facebook Research:
其核心是,Prophet 过程是一个加法回归模型,包含四个主要组件:1. 分段线性或逻辑增长曲线趋势。Prophet 通过从数据中选择变点来自动检测趋势变化。2. 使用傅里叶级数建模的年度季节性组件。3. 使用虚拟变量的每周季节性组件。4. 用户提供的重要节假日列表。
Prophet 可以在 Python 中使用 pip 安装,如下所示。Prophet 依赖于一个名为 pystan 的 Python 模块。当我们安装 Prophet 时,该模块将自动安装。
我们为本教程使用的数据集可在此处获取。下载数据集后,请确保删除文件末尾的一些不必要行,因为它们可能会干扰分析。对于这种单变量分析,Prophet 期望数据集有两列,分别命名为 ds 和 y。ds 是日期列,而 y 是我们要预测的列。
让我们开始吧,导入 Pandas 用于数据操作,导入 Prophet 用于预测。接下来我们加载数据集并检查其头部。

既然我们之前已经使用过 Scikit-learn,那么使用 Prophet 对我们来说将是小菜一碟。这是因为 Prophet 和 Scikit-learn 的 API(应用程序编程接口) 实现非常相似,如下所示。我们首先创建一个 Prophet 类的实例,然后将其拟合到我们的数据集。
下一步是准备我们的模型以进行未来预测。这通过使用 Prophet.make_future_dataframe 方法并传入我们希望预测的未来天数来实现。我们使用 periods 属性来指定这一点。这还包括历史日期。我们将使用这些历史日期来将预测值与 ds 列中的实际值进行比较。

我们使用 predict 方法进行未来预测。这将生成一个包含 yhat 列的数据框,其中将包含预测值。
如果我们检查预测数据框的头部,我们会注意到它有很多列。然而,我们主要关注 ds、yhat、yhat_lower 和 yhat_upper。yhat 是我们的预测值,yhat_lower 是我们预测的下界,yhat_upper 是我们预测的上界。

让我们继续检查预测数据框的尾部和头部。

Prophet 有一个内置功能,使我们能够绘制我们刚刚生成的预测图。这通过使用 mode.plot() 并传入我们的预测结果作为参数来实现。图中的蓝线代表预测值,而黑点代表我们数据集中的数据。

plot_components 方法绘制时间序列数据的趋势、年度和每周季节性。

接下来,让我们使用历史数据来衡量预测误差。我们将通过比较预测值与实际值来实现这一点。为了执行此操作,我们在数据历史中选择切分点,并使用截至该切分点的数据拟合模型。之后,我们将实际值与预测值进行比较。cross_validation 方法允许我们在 Prophet 中执行此操作。该方法接受以下参数,解释如下:
horizon 预测范围
initial 初始训练期的大小
period 切分日期之间的间隔
cross_validation 方法的输出是一个数据框,包含真实值 y 和预测值 yhat。我们将使用此数据框来计算预测误差。

我们使用 performance_metrics 工具来计算均方误差(MSE)、均方根误差(RMSE)、平均绝对误差(MAE)、平均绝对百分比误差(MAPE)以及 yhat_lower 和 yhat_upper 估计的覆盖率。

性能指标可以使用 plot_cross_validation_metric 工具进行可视化。让我们在下面可视化 RMSE。

正如我们所见,Prophet 在时间序列预测中非常强大且有效。然而,正如我们之前提到的,还有其他一些预测工具。工具的选择取决于数据集的特性,需根据具体情况而定。人们可以随时比较这些工具,并使用能够以最少误差提供最佳预测的工具。其中一些方法包括 ARIMA、Holt-Winters 方法、Holt 线性趋势、简单指数平滑和移动平均等。您可以从官方文档或阅读 Prophet 的论文中了解更多关于 Prophet 的信息。
转载声明:本文为转载整理,原文版权归原作者及原站点所有。
原文来源:KDnuggets
原创地址:https://www.kdnuggets.com/2018/11/sales-forecasting-using-prophet.html#comment-184075
原文作者:https://www.facebook.com/kdnuggets;如有侵权,请联系管理员删除。