zoukankan      html  css  js  c++  java
  • 用Prophet在Python编程代写中进行时间序列预测

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

    预测通常被认为是报告的自然发展。报告可以帮助我们回答,发生了什么事?预测有助于回答下一个逻辑问题,将会发生什么?

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

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

    数据准备与探索

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

    select
      date,
      value
    from modeanalytics.daily_orders
    order by date
    

     

    现在,我们每天都有数据,我们可以将SQL查询结果集通过管道传递到Python笔记本中的pandas dataframe对象中。首先,将您的SQL查询重命名为Daily Orders。然后,在Python笔记本中,我们可以使用以下语句将查询结果集通过管道传递到数据框df

    df = datasets["Daily Orders"]
    

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

    df.shape
    

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

    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 y
    df['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变换中获得的λ值:

    
    现在,您已将预测值转换回其原始单位,现在可以将预测值与历史值一起可视化:

     

    如果您有任何疑问,请在下面发表评论。   

  • 相关阅读:
    笔记
    创建和使用URL访问网上资源
    File
    event_1:事件注册
    3_3:创建 元素节点
    动态创建表格
    留言删除案例
    3_2:操作节点 [ 增 删 复制 ]
    5:to do list
    仿新浪下拉菜单
  • 原文地址:https://www.cnblogs.com/tecdat/p/11692642.html
Copyright © 2011-2022 走看看