用Prophet在Python中进行时间序列预测

原文连接:http://tecdat.cn/?p=7692

预测一般被认为是报告的天然发展。报告能够帮助咱们回答,_发生了什么事?_预测有助于回答下一个逻辑问题,_将会发生什么?_数组

Prophet的目的是“使专家和非专家能够更轻松地进行符合需求的高质量预测。 函数

 您将学习如何使用Prophet(在Python中)解决一个常见问题:预测下一年公司的每日订单。 学习

数据准备与探索

Prophet最适合每日按期数据以及至少一年的历史数据。 咱们将使用SQL处理天天要预测的数据:spa

**select**date,**value****from**modeanalytics.daily_orders**order****by**date3d

如今,咱们天天都有数据,咱们能够将SQL查询结果集经过管道传递到Python笔记本中的pandas dataframe对象中。首先,将您的SQL查询重命名为Daily Orders。而后,在Python笔记本中,咱们可使用如下语句将查询结果集经过管道传递到数据框dfcode

df = datasets["Daily Orders"]component

为了快速了解您的数据框包含多少个观测值,能够运行如下语句,该语句将返回一个元组,分别包含数据框中的行数和列数:orm

**df**.shape对象

先知老是指望输入DataFrame中有两列:dsy。该ds列表示SQL查询中的日期 。 要检查DataFrame中列的类型,能够在Python笔记本中运行如下语句:blog

**df**.dtypes

一旦确认数据框中的列是正确的数据类型,就能够ds在数据框中建立一个新列,该date列是该列的彻底相同的副本,也能够建立一个新列,该列是该列y的彻底相同的副本value

df['ds'] = df['date'] df['y'] = df['value']

而后,您能够从新调整该date列的用途,以用做数据框的索引:

df.set_index('date')

这会将您的数据框的索引转换为DatetimeIndex,这使熊猫可以将此数据集解释为_Time Series_。

如今您已经准备好要与Prophet一块儿使用的数据,在将数据输入到Prophet中以前,将其做图并检查数据的外观是个好习惯。 

 

Box-Cox变换

一般在预测中,您会明确选择一种特定类型的幂变换,以将其应用于数据以消除噪声,而后再将数据输入到预测模型中(例如,对数变换或平方根变换等)。可是,有时可能难以肯定哪一种功率变换适合您的数据。

Box-Cox变换是一种数据变换,用于评估一组Lambda系数(λ)并选择可实现最佳正态性近似值的值。

**from**scipy.stats**import**boxcox

boxcox方法须要一个输入:要转换的一维正数据数组。您也能够选择指定要用于转换的λ值(例如,对数转换的λ= 0)。不然,该boxcox方法将找到使对数似然函数最大化的λ并将其做为第二个输出参数返回。

对于咱们的示例,咱们将让该boxcox方法肯定用于变换的最佳λ,并将该值返回给名为lam的变量:

# Apply Box-Cox Transform to value column and assign to new column ydf['y'], lam = boxcox(df['value'])

若是咱们将新转换的数据与未转换的数据一块儿绘制,则能够看到Box-Cox转换可以消除随着时间变化而观察到的许多增长的方差:

预测

使用Prophet建立预测的第一步是将fbprophet库导入到咱们的Python笔记本中:

**import**fbprophet

将Prophet库导入笔记本后,咱们能够从 Prophet对象(建立实例)开始:

m = fbprophet.Prophet()

实例化Prophet对象后,就能够将模型拟合到历史数据中了。您能够经过fit在Prophet对象上调用方法并传入数据框来实现此目的:

使用Prophet经过Box-Cox转换的数据集拟合模型后,如今就能够开始对将来日期进行预测。 

如今,咱们可使用该predict方法对将来数据帧中的每一行进行预测。

此时,Prophet将建立一个分配给`变量的新数据框,其中包含该列下将来日期的预测值
`yhat以及不肯定性间隔和预测的组成部分。咱们可使用Prophet的内置plot帮助器功能将预测可视化:在咱们的示例中,咱们的预测以下所示:

若是要可视化各个预测组件,则可使用Prophet的内置plot_components方法:plot_components在咱们的示例数据上运行将返回如下一组组件可视化:

预测和组件可视化显示,Prophet可以准确地建模数据中的潜在趋势,同时还能够精确地建模每周和每一年的季节性(例如,周末和节假日的订单量较低)。

逆Box-Cox变换

因为先知用于Box-Cox转换后的数据,所以您须要将预测值转换回其原始单位。要将新的预测值转换回其原始单位,您将须要执行Box-Cox逆转换。

 该inv_boxcox方法有两个必需的输入。要转换的数据数组和转换的λ值。咱们将对预测数据帧中的特定列进行逆变换,并提供先前从存储在lam变量中的第一个Box-Cox变换中得到的λ值:

如今,您已将预测值转换回其原始单位,如今能够将预测值与历史值一块儿可视化:

相关文章
相关标签/搜索