如何在Python中使用Prophet进行销售预测

678 阅读5分钟

在Python中使用Prophet进行销售预测

Prophet是一个由Facebook开发的库,是进行时间序列预测的理想选择。它被用来预测任何有时间序列趋势的事物,如天气和销售。

本教程将利用这个库来准确估计销售趋势。我们将使用Python编程语言进行构建。

前提条件

要跟上进度,你需要熟悉以下内容。

  • [时间序列]
  • [时间序列建模]
  • [Google Colab]

安装和导入所需的依赖项

让我们从安装模型开始。

!pip install prophet

安装后,我们需要将其导入我们的笔记本。

import pandas as pd
from prophet import Prophet
  • pandas 允许我们引入表格数据。
  • prophet 允许我们将Prophet库导入我们的Google Colab中。

让我们把我们的数据带入笔记本。我们将使用Kaggle的商店销售交易数据

该数据集包括日期、商店和产品信息,以及销售数字。它包含了位于厄瓜多尔的Favorita商店四年来的销售数据。你需要下载这些数据并将其上传到你的Colab中。

将数据加载到我们的笔记本中

我们将使用pandas 库来读入我们的csv 文件。

dataframe = pd.read_csv('transactions.csv')

我们加载我们的数据,并将其保存在一个名为dataframe 的变量中。我们可以使用pandas的head() 方法检查前五行的数据。

你可以使用tail() 方法来检查最后五行。

dataframe.head()

输出。

 	date 	 store_nbr 	transactions
0 	2013-01-01 	25 	770
1 	2013-01-02 	1 	2111
2 	2013-01-02 	2 	2358
3 	2013-01-02 	3 	3487
4 	2013-01-02 	4 	1922

让我们看一下这些列的数据类型。

dataframe.dtypes

输出结果。

date            object
store_nbr        int64
transactions     int64

从这些结果中,我们可以看到,日期列是一个字符串。模型不能接受它的原样。它需要被转换为日期-时间格式,以便与模型一起工作。

让我们进行一些预处理。

当你处理时间序列数据时,有一个日期或时间戳列是很重要的。这是Prophet模型预测趋势的一个要求。

数据预处理

使用Pandasto_datetime() 函数,我们将把日期列从字符串转换为日期-时间格式。

dataframe ['date'] = pd.to_datetime(dataframe ['date'])
dataframe.dtypes

输出。

date            datetime64[ns]
store_nbr                int64
transactions             int64

我们已经将日期列转换为日期-时间格式。

我们需要删除store_nbr 列。此外,为了使这些数据能够与Prophet模型一起工作,我们只需要两列,即dsy 列。我们需要将日期列重命名为ds ,交易列重命名为y

dataframe.drop('store_nbr', axis=1, inplace=True)

我们只删除了store_nbr 列。axis=1 参数告诉Pandas库放弃列而不是行。

输出。

 	date 	transactions
0 	2013-01-01 	770
1 	2013-01-02 	2111
2 	2013-01-02 	2358
3 	2013-01-02 	3487
4 	2013-01-02 	1922

现在我们只有两列了。如上所述,我们需要将数据列重命名为ds ,交易列重命名为y

dataframe.columns = ['ds', 'y']
dataframe.head()

输出。

        ds  	y
0 	2013-01-01 	770
1 	2013-01-02 	2111
2 	2013-01-02 	2358
3 	2013-01-02 	3487
4 	2013-01-02 	1922

使用上面的命令,我们已经成功地重命名了我们的列。这就是最后一个预处理步骤了。我们现在可以继续创建时间序列模型了。

训练时间序列模型

我们首先创建一个先知类的实例p

p = Prophet(interval_width=0.92, daily_seasonality=True)

我们使用interval_width 参数来估计所用样本数量的不确定性区间。我们将我们的设置为0.92

参数daily_seasonality=True 将为一个次日的时间序列拟合每日的季节性。如果你不设置这个参数,它将默认为周和年的季节性。

你可以玩玩这些值,看看它对训练后得到的结果有什么影响。

我们现在可以训练我们的模型了。

model = p.fit(dataframe)

运行上述命令后,模型将在数据上得到训练。

进行预测和评估性能

让我们继续进行预测。

future = p.make_future_dataframe(periods=200, freq='D')
future.tail()

输出。

 	ds
1877 	2018-02-27
1878 	2018-02-28
1879 	2018-03-01
1880 	2018-03-02
1881 	2018-03-03

从结果中,我们可以看到,该模型已经做出了未来的预测,200 ,距离最后一个数据值使用的频率为每天。如果你想训练更长的时间,你可以改变periods=200 参数中的数值。

为了预测,我们使用predict() 方法并传入未来的数据框架,如图所示。

forecast_prediction = p.predict(future)
forecast_prediction.tail()

从产生的结果来看,除了预测的dsyhat 列之外,模型还产生了很多销售信息。最重要的一列是yhat ,因为它是代表你的销售预测。

我们可以将这些预测结果可视化。

plot1 = p.plot(forecast_prediction)

Forecast

如果你仔细看一下这个图,你会发现,预测的销售趋势模仿了实际数据的趋势。我们可以将这种绘图方式更进一步,将构成上述绘图的各个组成部分绘制出来。

plot2 = p.plot_components(forecast_prediction)

Plot components

这个图可以给你提供更多关于销售数据的信息。例如,更多的销售是在星期五和星期一之间进行的。此外,他们似乎在11月和2月之间进行了大量的销售。在一年的其他时间里,销售情况一般。

你可以在这里找到本教程的完整代码。

总结

这就是使用Prophet模型进行销售预测的简要情况。

本教程向你介绍了使用Prophet进行时间序列预测。它只向你介绍了如何在项目中使用该模型,而绝非用于生产目的。

要将该模型用于生产,你需要对它进行更多的研究。