在Python中使用Facebook Prophet库进行时间序列预测
与时间相关联的任何与时间相关的事件相关的数据都可以称为时间序列数据。在此类数据中,我们可以每天,每周,每年为基础查看趋势,非平稳性和季节性。当上述任何一个参数受到阻碍时,此类数据将受到不利影响。现在,作为一名从事时间序列分析的数据科学家,他/她的职责是分析数据,然后从中进行有价值的预测,以便可以将其用作基准模型以进行未来的预测或预测。 。
目前有许多模型可用于时间序列的预测分析,例如
机器学习ARIMA(自回归综合移动平均模型),自回归模型,指数平滑,LSTM(长期短期记忆)等。这些模型需要数据受够了,并进行了一些调整和微调,它们可以帮助我们做出预测。但是,如果有一个第三方库可以执行其中的所有微调部分,而您只需要提供模型并等待魔术发生,那该怎么办?
这个问题的答案是Facebook Prophet库。这是由Facebook作为API发起的,用于执行与时间序列数据相关的预测。该库功能强大,可以处理数据中的平稳性以及与季节性相关的组件。平稳性是指,如果我们将数据按时间和季节划分为多个部分,则数据中应具有恒定的均值,方差和协方差,这意味着如果根据时间间隔进行分离,则数据遵循的趋势类型相同。
假设冰淇淋的销量在夏季较高,而在冬季则较低,并且这种趋势随时间而变化,与年份无关。然后将其称为季节性数据。
对于将用作预测分析模型的时间序列数据,应该没有季节性,并且应该在时间间隔内保持平稳性。在使用ARIMA,AR和其他相同类型的模型时,总会出现与消除任何季节性和非平稳性有关的问题,但是在先知的帮助下,这个问题已经解决。
该库提供了n个参数供您使用,并以更高的效率调整模型,例如。指定假期,每日季节性,傅立叶变换等。
因此,在不浪费大量时间的情况下,让我们通过在Python的帮助下实现该库来看看这个库。
安装
要安装该库,请确保pip安装已在您的系统中安装了Python / Anaconda。另外,您还应该具备在Anaconda中创建新环境的知识,以通过pip或conda下载库。因此,让我们看一下安装:
1.要安装Fbprophet,必须首先安装Pystan,这是一个有助于轻松运行Fbprophet的库。要安装Pystan,只需打开命令提示符或Anaconda提示符,然后键入:
pip安装pystan
等待安装完成。
2.成功下载Pystan后,下一步就是通过pip或conda安装Fbprophet。在同一命令提示符下,只需键入:
点安装fbprophet
要么,
conda安装-c conda-forge fbprophet
3.一旦安装完成且没有错误,则说明您已经成功安装了软件包并准备实施。
用Python实现
要使用Fbprophet,必须已在系统中安装了一些库,例如Pandas,Matplotlib,Numpy,Warnings(例外),Jupyter Notebook或Lab。
使用Fbprophet库进行预测分析的步骤包括:
一种。导入必要的库
b。借助Pandas库导入数据。
C。数据预处理,即仅采用两列,即日期列和目标列,而忽略其他列。另外,将date列转换为Date Time格式,然后将两个列重命名为“ ds”作为日期,将“ y”命名为目标。您还可以使用标准化或标准化等功能缩放来快速执行代码和更好地预测。
d。在先知库下拟合/训练整个模型。
e。在先知的帮助下创建新数据,然后预测此新数据的输出。
F。绘制获得的预测。
上面提到的步骤已在图形表示形式下进行了描述,以使您熟悉编码内容。
数据集-
https://raw.githubusercontent.co ... STING/main/milk.csv
导入数据:
时间序列-导入数据
检查数据类型:
时间序列
将数据绘制为折线图以查看季节性和平稳性:
在下面我们可以清楚地看到数据是不稳定的,因为数据在同一时间呈上升趋势,并且由于时间间隔的不断波动也呈季节性。因此,我们需要使其静止且非季节性。Fbprophet具有处理此类数据的能力,因此我们不必担心预处理部分。
根据先知的要求重命名列。Fbprophet库假设对时间变量进行单变量分析,因此我们无需在其中指定其他列。因此,现在让我们根据库的需要将列重命名为ds和y。
时间序列
将日期列的数据类型更改为日期时间:
导入Fbprophet以进行时间序列预测和训练模型。在下文中,我们可以看到该机制与任何机器学习算法相同,即先拟合模型,然后预测输出。唯一的区别是,我们需要在模型训练部分中提供整个数据集,而不应将其分为训练和测试。
时间序列
在先知的帮助下创建未来的数据集,以便我们对看不见的数据进行预测:
时间序列
做出预测:
在预测表下,我们仅关注ds,yhat_lower,yhat_upper和yhat,因为这些变量将为我们提供有关指定日期的预测结果。
yhat表示基于输入到模型的输入的预测输出yhat_lower,upper表示根据预测输出可以产生的上下波动,即可能发生的波动。
获取所需的列:
绘制输出:
在该图的下方,我们可以看到由先知图书馆做出的预测。虚线表示我们在训练部分中指定的实际数据点。线条代表所做的预测。此外,我们可以看到对我们仅用极右手边的线创建的看不见数据所做的预测。为了进行验证,您可以将数据框时间戳与图表进行匹配。
检查数据趋势:
在下面,我们可以看到与年份和月份相关的趋势。第一个图表代表了随着我们这些年来的发展而增长的趋势,而第二个图表则显示了每月牛奶销售量的波动趋势。几个月来它很低,而有些时候它很高。
结论
因此,这就是使用Fbprophet库轻松预测未来时间序列数据而又不浪费大量时间调整模型的方式。还提供了在Prophet库的帮助下执行交叉验证的规定,这有助于提高预测的准确性。
题库