在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模型一起工作,我们只需要两列,即ds 和y 列。我们需要将日期列重命名为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()
从产生的结果来看,除了预测的ds 和yhat 列之外,模型还产生了很多销售信息。最重要的一列是yhat ,因为它是代表你的销售预测。
我们可以将这些预测结果可视化。
plot1 = p.plot(forecast_prediction)

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

这个图可以给你提供更多关于销售数据的信息。例如,更多的销售是在星期五和星期一之间进行的。此外,他们似乎在11月和2月之间进行了大量的销售。在一年的其他时间里,销售情况一般。
你可以在这里找到本教程的完整代码。
总结
这就是使用Prophet模型进行销售预测的简要情况。
本教程向你介绍了使用Prophet进行时间序列预测。它只向你介绍了如何在项目中使用该模型,而绝非用于生产目的。
要将该模型用于生产,你需要对它进行更多的研究。