📜  在 R 编程中使用 Facebook Prophet 进行时间序列分析(1)

📅  最后修改于: 2023-12-03 15:07:47.930000             🧑  作者: Mango

在 R 编程中使用 Facebook Prophet 进行时间序列分析

介绍

Facebook Prophet 是一个用于时间序列分析和预测的开源软件库。它能够高效地处理大型数据集,并根据数据的趋势、季节性和节假日等因素来生成准确的预测结果。与传统的时间序列方法相比,Prophet 具有更好的可解释性和更简单的使用方式。

本教程将介绍如何在 R 编程中使用 Facebook Prophet 进行时间序列分析。我们将使用一个示例数据集来演示如何使用 Prophet 进行数据建模和预测分析。

准备工作

在安装使用 Facebook Prophet 之前,我们需要安装一些依赖库。在 R 中,我们可以使用以下命令来安装这些依赖库:

install.packages(c("prophet", "dplyr", "ggplot2"))
数据集介绍

我们将使用一个示例数据集,该数据集包含了某电商公司在过去几年中每个月的销售额数据。 此数据集已预处理为适合使用 Facebook Prophet 进行分析的格式。

以下是示例数据集的前几行:

Month   Sales
Jan-13  14236.9
Feb-13  4519.89
Mar-13  55691.01
Apr-13  28295.35
May-13  23648.29
Jun-13  34595.13

其中,Month 列包含了每个月的日期,格式为 "MMM-YY",例如 "Jan-13" 表示 2013 年 1 月。Sales 列包含了每个月的销售额。

数据导入

我们首先需要将数据导入到 R 中。这可以通过以下命令来完成:

sales_df <- read.csv("sales_data.csv")

请确保将路径替换为实际数据文件的路径。

Prophet 模型

我们现在使用 Prophet 来创建我们的时间序列模型。以下是创建 Prophet 模型的基本步骤:

# 创建一个 Prophet 模型对象
m <- prophet()

# 添加我们的数据
m <- add_seasonality(m, name="yearly", period=365.25, fourier.order=10)
m <- add_seasonality(m, name="quarterly", period=365.25/4, fourier.order=10)
m <- add_seasonality(m, name="monthly", period=30.5, fourier.order=10)
m <- add_regressor(m, "Holiday")

# 拟合数据
m <- fit.prophet(m, sales_df)

# 预测未来一年的销售额
future <- make_future_dataframe(m, periods=12, freq="month")
forecast <- predict_prophet(m, future)

在这里,我们首先创建了一个 Prophet 模型对象,并使用 add_seasonality 和 add_regressor 等函数来添加数据中存在的季节性、节假日和特征。然后我们通过 fit.prophet 函数来拟合我们的模型,最后使用 make_future_dataframe 和 predict_prophet 函数来预测未来一年的销售额。

让我们详细解释这些步骤。

创建 Prophet 模型对象

我们首先需要创建一个 Prophet 模型对象。以下是创建 Prophet 模型对象的基本命令:

m <- prophet()
添加季节性和节假日

Prophet 能够自动发现数据的季节性,但有时我们也需要手动指定一些季节性和节假日信息。我们可以使用 add_seasonality 和 add_regressor 等函数来手动指定这些信息。

我们用 add_seasonality 函数为 Prophet 模型添加年度、季度和月度的季节性。以下是添加季节性的示例命令:

m <- add_seasonality(m, name="yearly", period=365.25, fourier.order=10)
m <- add_seasonality(m, name="quarterly", period=365.25/4, fourier.order=10)
m <- add_seasonality(m, name="monthly", period=30.5, fourier.order=10)

这些命令将分别为 Prophet 模型添加年度、季度和月度的季节性,其中周期分别为 365.25 天、365.25/4 天和 30.5 天,fourier.order 参数是对季节性的拟合程度,值越高则拟合程度越高。

我们用 add_regressor 函数为 Prophet 模型添加节假日信息。以下是添加节假日信息的示例命令:

m <- add_regressor(m, "Holiday")

这个命令将为 Prophet 模型添加一个名为 "Holiday" 的特征(如有节假日则为 1,否则为 0)。

拟合数据

我们现在可以使用 fit.prophet 函数来拟合我们的数据。以下是拟合数据的示例命令:

m <- fit.prophet(m, sales_df)

这个命令将为我们的 Prophet 模型拟合数据。

预测未来的销售额

我们现在已经拟合了我们的 Prophet 模型,可以使用 make_future_dataframe 和 predict_prophet 函数来预测未来一年的销售额。以下是预测未来销售额的示例命令:

future <- make_future_dataframe(m, periods=12, freq="month")
forecast <- predict_prophet(m, future)

这些命令将创建一个包含未来 12 个月日期的 dataframe,然后使用 Prophet 模型来预测这些未来日期的销售额。

可视化结果

最后,我们可以使用 ggplot2 库来可视化我们的结果。以下是一个简单的可视化结果的示例:

library(ggplot2)

ggplot(aes(x = ds, y = y), data = sales_df) +
  geom_line(color = "blue") +
  geom_line(aes(x = forecast$ds, y = forecast$yhat),
            color = "red") +
  labs(x = "", y = "Sales") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5),
        plot.subtitle = element_text(hjust = 0.5),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        legend.position = "none") +
  ggtitle("Sales forecast using Prophet")

这段代码将生成一个折线图,显示我们的实际销售额和预测销售额。

结论

本教程介绍了如何在 R 编程中使用 Facebook Prophet 进行时间序列分析。我们使用一个示例数据集来演示如何使用 Prophet 模型建立时间序列模型和预测未来的销售额。此外,我们还使用 ggplot2 库来可视化我们的结果。

希望这个教程有助于你学习和使用 Facebook Prophet 进行时间序列分析。